From ad73f920612f747a963d9aed8867aa930ebc8173 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 22 Jan 2018 21:32:50 +0100 Subject: start decompiling pokemon animation --- src/pokemon_animation.c | 1015 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1015 insertions(+) create mode 100644 src/pokemon_animation.c (limited to 'src') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c new file mode 100644 index 000000000..960b42dd1 --- /dev/null +++ b/src/pokemon_animation.c @@ -0,0 +1,1015 @@ +#include "global.h" +#include "pokemon.h" +#include "sprite.h" +#include "pokemon_animation.h" +#include "trig.h" +#include "task.h" + +struct UnkAnimStruct +{ + s16 field_0; + s16 field_2; + s16 field_4; + s16 field_6; + s16 field_8; +}; + +extern u16 gBattlePartyID[]; +extern bool32 gUnknown_03001274; +extern struct UnkAnimStruct gUnknown_03001240[]; +extern u8 gUnknown_03001270; + +// this file's functions +void pokemonanimfunc_00(struct Sprite *sprite); +void pokemonanimfunc_01(struct Sprite *sprite); +void pokemonanimfunc_02(struct Sprite *sprite); +void pokemonanimfunc_03(struct Sprite *sprite); +void pokemonanimfunc_04(struct Sprite *sprite); +void pokemonanimfunc_05(struct Sprite *sprite); +void pokemonanimfunc_06(struct Sprite *sprite); +void pokemonanimfunc_07(struct Sprite *sprite); +void pokemonanimfunc_08(struct Sprite *sprite); +void pokemonanimfunc_09(struct Sprite *sprite); +void pokemonanimfunc_0A(struct Sprite *sprite); +void pokemonanimfunc_0B(struct Sprite *sprite); +void pokemonanimfunc_0C(struct Sprite *sprite); +void pokemonanimfunc_0D(struct Sprite *sprite); +void pokemonanimfunc_0E(struct Sprite *sprite); +void pokemonanimfunc_0F(struct Sprite *sprite); +void pokemonanimfunc_10(struct Sprite *sprite); +void pokemonanimfunc_11(struct Sprite *sprite); +void pokemonanimfunc_12(struct Sprite *sprite); +void pokemonanimfunc_13(struct Sprite *sprite); +void pokemonanimfunc_14(struct Sprite *sprite); +void pokemonanimfunc_15(struct Sprite *sprite); +void pokemonanimfunc_16(struct Sprite *sprite); +void pokemonanimfunc_17(struct Sprite *sprite); +void pokemonanimfunc_18(struct Sprite *sprite); +void pokemonanimfunc_19(struct Sprite *sprite); +void pokemonanimfunc_1A(struct Sprite *sprite); +void pokemonanimfunc_1B(struct Sprite *sprite); +void pokemonanimfunc_1C(struct Sprite *sprite); +void pokemonanimfunc_1D(struct Sprite *sprite); +void pokemonanimfunc_1E(struct Sprite *sprite); +void pokemonanimfunc_1F(struct Sprite *sprite); +void pokemonanimfunc_20(struct Sprite *sprite); +void pokemonanimfunc_21(struct Sprite *sprite); +void pokemonanimfunc_22(struct Sprite *sprite); +void pokemonanimfunc_23(struct Sprite *sprite); +void pokemonanimfunc_24(struct Sprite *sprite); +void pokemonanimfunc_25(struct Sprite *sprite); +void pokemonanimfunc_26(struct Sprite *sprite); +void pokemonanimfunc_27(struct Sprite *sprite); +void pokemonanimfunc_28(struct Sprite *sprite); +void pokemonanimfunc_29(struct Sprite *sprite); +void pokemonanimfunc_2A(struct Sprite *sprite); +void pokemonanimfunc_2B(struct Sprite *sprite); +void pokemonanimfunc_2C(struct Sprite *sprite); +void pokemonanimfunc_2D(struct Sprite *sprite); +void pokemonanimfunc_2E(struct Sprite *sprite); +void pokemonanimfunc_2F(struct Sprite *sprite); +void pokemonanimfunc_30(struct Sprite *sprite); +void pokemonanimfunc_31(struct Sprite *sprite); +void pokemonanimfunc_32(struct Sprite *sprite); +void pokemonanimfunc_33(struct Sprite *sprite); +void pokemonanimfunc_34(struct Sprite *sprite); +void pokemonanimfunc_35(struct Sprite *sprite); +void pokemonanimfunc_36(struct Sprite *sprite); +void pokemonanimfunc_37(struct Sprite *sprite); +void pokemonanimfunc_38(struct Sprite *sprite); +void pokemonanimfunc_39(struct Sprite *sprite); +void pokemonanimfunc_3A(struct Sprite *sprite); +void pokemonanimfunc_3B(struct Sprite *sprite); +void pokemonanimfunc_3C(struct Sprite *sprite); +void pokemonanimfunc_3D(struct Sprite *sprite); +void pokemonanimfunc_3E(struct Sprite *sprite); +void pokemonanimfunc_3F(struct Sprite *sprite); +void pokemonanimfunc_40(struct Sprite *sprite); +void pokemonanimfunc_41(struct Sprite *sprite); +void pokemonanimfunc_42(struct Sprite *sprite); +void pokemonanimfunc_43(struct Sprite *sprite); +void pokemonanimfunc_44(struct Sprite *sprite); +void pokemonanimfunc_45(struct Sprite *sprite); +void pokemonanimfunc_46(struct Sprite *sprite); +void pokemonanimfunc_47(struct Sprite *sprite); +void pokemonanimfunc_48(struct Sprite *sprite); +void pokemonanimfunc_49(struct Sprite *sprite); +void pokemonanimfunc_4A(struct Sprite *sprite); +void pokemonanimfunc_4B(struct Sprite *sprite); +void pokemonanimfunc_4C(struct Sprite *sprite); +void pokemonanimfunc_4D(struct Sprite *sprite); +void pokemonanimfunc_4E(struct Sprite *sprite); +void pokemonanimfunc_4F(struct Sprite *sprite); +void pokemonanimfunc_50(struct Sprite *sprite); +void pokemonanimfunc_51(struct Sprite *sprite); +void pokemonanimfunc_52(struct Sprite *sprite); +void pokemonanimfunc_53(struct Sprite *sprite); +void pokemonanimfunc_54(struct Sprite *sprite); +void pokemonanimfunc_55(struct Sprite *sprite); +void pokemonanimfunc_56(struct Sprite *sprite); +void pokemonanimfunc_57(struct Sprite *sprite); +void pokemonanimfunc_58(struct Sprite *sprite); +void pokemonanimfunc_59(struct Sprite *sprite); +void pokemonanimfunc_5A(struct Sprite *sprite); +void pokemonanimfunc_5B(struct Sprite *sprite); +void pokemonanimfunc_5C(struct Sprite *sprite); +void pokemonanimfunc_5D(struct Sprite *sprite); +void pokemonanimfunc_5E(struct Sprite *sprite); +void pokemonanimfunc_5F(struct Sprite *sprite); +void pokemonanimfunc_60(struct Sprite *sprite); +void pokemonanimfunc_61(struct Sprite *sprite); +void pokemonanimfunc_62(struct Sprite *sprite); +void pokemonanimfunc_63(struct Sprite *sprite); +void pokemonanimfunc_64(struct Sprite *sprite); +void pokemonanimfunc_65(struct Sprite *sprite); +void pokemonanimfunc_66(struct Sprite *sprite); +void pokemonanimfunc_67(struct Sprite *sprite); +void pokemonanimfunc_68(struct Sprite *sprite); +void pokemonanimfunc_69(struct Sprite *sprite); +void pokemonanimfunc_6A(struct Sprite *sprite); +void pokemonanimfunc_6B(struct Sprite *sprite); +void pokemonanimfunc_6C(struct Sprite *sprite); +void pokemonanimfunc_6D(struct Sprite *sprite); +void pokemonanimfunc_6E(struct Sprite *sprite); +void pokemonanimfunc_6F(struct Sprite *sprite); +void pokemonanimfunc_70(struct Sprite *sprite); +void pokemonanimfunc_71(struct Sprite *sprite); +void pokemonanimfunc_72(struct Sprite *sprite); +void pokemonanimfunc_73(struct Sprite *sprite); +void pokemonanimfunc_74(struct Sprite *sprite); +void pokemonanimfunc_75(struct Sprite *sprite); +void pokemonanimfunc_76(struct Sprite *sprite); +void pokemonanimfunc_77(struct Sprite *sprite); +void pokemonanimfunc_78(struct Sprite *sprite); +void pokemonanimfunc_79(struct Sprite *sprite); +void pokemonanimfunc_7A(struct Sprite *sprite); +void pokemonanimfunc_7B(struct Sprite *sprite); +void pokemonanimfunc_7C(struct Sprite *sprite); +void pokemonanimfunc_7D(struct Sprite *sprite); +void pokemonanimfunc_7E(struct Sprite *sprite); +void pokemonanimfunc_7F(struct Sprite *sprite); +void pokemonanimfunc_80(struct Sprite *sprite); +void pokemonanimfunc_81(struct Sprite *sprite); +void pokemonanimfunc_82(struct Sprite *sprite); +void pokemonanimfunc_83(struct Sprite *sprite); +void pokemonanimfunc_84(struct Sprite *sprite); +void pokemonanimfunc_85(struct Sprite *sprite); +void pokemonanimfunc_86(struct Sprite *sprite); +void pokemonanimfunc_87(struct Sprite *sprite); +void pokemonanimfunc_88(struct Sprite *sprite); +void pokemonanimfunc_89(struct Sprite *sprite); +void pokemonanimfunc_8A(struct Sprite *sprite); +void pokemonanimfunc_8B(struct Sprite *sprite); +void pokemonanimfunc_8C(struct Sprite *sprite); +void pokemonanimfunc_8D(struct Sprite *sprite); +void pokemonanimfunc_8E(struct Sprite *sprite); +void pokemonanimfunc_8F(struct Sprite *sprite); +void pokemonanimfunc_90(struct Sprite *sprite); +void pokemonanimfunc_91(struct Sprite *sprite); +void pokemonanimfunc_92(struct Sprite *sprite); +void pokemonanimfunc_93(struct Sprite *sprite); +void pokemonanimfunc_94(struct Sprite *sprite); +void pokemonanimfunc_95(struct Sprite *sprite); +void pokemonanimfunc_96(struct Sprite *sprite); + +// const rom data +static const u8 sSpeciesToBackAnimId[] = +{ + 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 +}; + +const u8 gUnknown_0860AA64[] = {0x00, 0x05, 0x01, 0x01, 0x00, 0x0f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x00, 0xff}; + +const u8 gUnknown_0860AA80[] = {0x06, 0x1e, 0xfe, 0x0f, 0x06, 0x1e, 0xff, 0x00}; + +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 sSpeciesToBackAnimId 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 gSpriteAffineAnim_860AD48[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMDTYPE_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_860AD58[] = +{ + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMDTYPE_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_860AD68[] = +{ + gSpriteAffineAnim_860AD48, + gSpriteAffineAnim_860AD58 +}; + +// code +void MonAnimDummySpriteCallback(struct Sprite *sprite) +{ +} + +void sub_817F3F0(struct Sprite *sprite, s16 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 GetSpeciesBackAnimId(u16 species) +{ + if (sSpeciesToBackAnimId[species] != 0) + return sSpeciesToBackAnimId[species] - 1; + else + return 0; +} + +void sub_817F498(u8 taskId) +{ + u32 i; + struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].data[1] << 0x10) | (gTasks[taskId].data[2])); + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[4] = sprite->data[0]; + gTasks[taskId].data[5] = sprite->data[2]; + sprite->data[1] = 1; + sprite->data[0] = 0; + + for (i = 2; i < 8; i++) + sprite->data[i] = 0; + + sprite->callback = sMonAnimFunctions[gTasks[taskId].data[3]]; + gUnknown_03001274 = FALSE; + + gTasks[taskId].data[0]++; + } + if (sprite->callback == SpriteCallbackDummy) + { + sprite->data[0] = gTasks[taskId].data[4]; + sprite->data[2] = gTasks[taskId].data[5]; + sprite->data[1] = 0; + + DestroyTask(taskId); + } +} + +void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) +{ + u8 taskId = CreateTask(sub_817F498, 128); + gTasks[taskId].data[1] = (u32)(sprite) >> 0x10; + gTasks[taskId].data[2] = (u32)(sprite); + gTasks[taskId].data[3] = frontAnimId; +} + +void sub_817F578(struct Sprite *sprite, u8 frontAnimId) +{ + gUnknown_03001274 = TRUE; + sprite->callback = sMonAnimFunctions[frontAnimId]; +} + +void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimId) +{ + u8 nature, taskId, animId, bank; + + taskId = CreateTask(sub_817F498, 128); + gTasks[taskId].data[1] = (u32)(sprite) >> 0x10; + gTasks[taskId].data[2] = (u32)(sprite); + + bank = sprite->data[0]; + nature = GetNature(&gPlayerParty[gBattlePartyID[bank]]); + + animId = 3 * backAnimId + sBackAnimNatureModTable[nature]; + gTasks[taskId].data[3] = sBackAnimationIds[animId]; +} + +void sub_817F60C(struct Sprite *sprite) +{ + sprite->callback = MonAnimDummySpriteCallback; +} + +void sub_817F618(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; +} + +void sub_817F670(struct Sprite *sprite) +{ + sprite->oam.affineMode = 3; + sprite->affineAnims = gSpriteAffineAnimTable_860AD68; + + if (gUnknown_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; +} + +void sub_817F6D4(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) +{ + if (!sprite->data[1]) + { + xScale *= -1; + rotation *= -1; + } + + sub_817F618(sprite, xScale, yScale, rotation); +} + +void sub_817F70C(struct Sprite *sprite) +{ + if (!sprite->data[1]) + sprite->pos2.x *= -1; +} + +bool32 sub_817F724(u8 id) +{ + if (id >= 4) + { + return FALSE; + } + else + { + gUnknown_03001240[id].field_6 = 0; + gUnknown_03001240[id].field_0 = 0; + gUnknown_03001240[id].field_4 = 1; + gUnknown_03001240[id].field_2 = 0; + gUnknown_03001240[id].field_8 = 0; + return TRUE; + } +} + +u8 sub_817F758(void) +{ + gUnknown_03001270 = (gUnknown_03001270 + 1) % 4; + sub_817F724(gUnknown_03001270); + return gUnknown_03001270; +} + +void sub_817F77C(struct Sprite *sprite) +{ + sprite->oam.affineMode = 1; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + + if (gUnknown_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; + } +} -- cgit v1.2.3 From 4e43a251b002c91074ae066849437700b4f724e9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 24 Jan 2018 19:37:30 +0100 Subject: more pokemon anim funcs --- src/pokemon_animation.c | 827 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 821 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 960b42dd1..1cac2c473 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -4,10 +4,11 @@ #include "pokemon_animation.h" #include "trig.h" #include "task.h" +#include "blend_palette.h" struct UnkAnimStruct { - s16 field_0; + u16 field_0; s16 field_2; s16 field_4; s16 field_6; @@ -172,6 +173,8 @@ void pokemonanimfunc_94(struct Sprite *sprite); void pokemonanimfunc_95(struct Sprite *sprite); void pokemonanimfunc_96(struct Sprite *sprite); +void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite); + // const rom data static const u8 sSpeciesToBackAnimId[] = { @@ -591,7 +594,13 @@ static const u8 sSpeciesToBackAnimId[] = const u8 gUnknown_0860AA64[] = {0x00, 0x05, 0x01, 0x01, 0x00, 0x0f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x00, 0xff}; -const u8 gUnknown_0860AA80[] = {0x06, 0x1e, 0xfe, 0x0f, 0x06, 0x1e, 0xff, 0x00}; +const u8 gUnknown_0860AA80[][2] = +{ + {6, 30}, + {0xFE, 15}, + {6, 30}, + {0xFF, 0} +}; static void (* const sMonAnimFunctions[])(struct Sprite *sprite) = { @@ -825,6 +834,8 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_860AD68[] = gSpriteAffineAnim_860AD58 }; +extern const s8 gUnknown_0860AD70[][3]; + // code void MonAnimDummySpriteCallback(struct Sprite *sprite) { @@ -919,7 +930,7 @@ void sub_817F60C(struct Sprite *sprite) sprite->callback = MonAnimDummySpriteCallback; } -void sub_817F618(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) +void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) { u8 matrixNum; struct ObjAffineSrcData affineSrcData; @@ -938,7 +949,7 @@ void sub_817F618(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) gOamMatrices[matrixNum].d = dest.d; } -void sub_817F670(struct Sprite *sprite) +void HandleStartAffineAnim(struct Sprite *sprite) { sprite->oam.affineMode = 3; sprite->affineAnims = gSpriteAffineAnimTable_860AD68; @@ -955,7 +966,7 @@ void sub_817F670(struct Sprite *sprite) sprite->affineAnimPaused = 1; } -void sub_817F6D4(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) +void HandleSetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) { if (!sprite->data[1]) { @@ -963,7 +974,7 @@ void sub_817F6D4(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) rotation *= -1; } - sub_817F618(sprite, xScale, yScale, rotation); + SetAffineData(sprite, xScale, yScale, rotation); } void sub_817F70C(struct Sprite *sprite) @@ -1013,3 +1024,807 @@ void sub_817F77C(struct Sprite *sprite) sprite->oam.affineMode = 0; } } + +void pokemonanimfunc_01(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + HandleStartAffineAnim(sprite); + + if (sprite->data[2] > 40) + { + HandleSetAffineData(sprite, 0x100, 0x100, 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]++; +} + +void pokemonanimfunc_02(struct Sprite *sprite) +{ + if (sprite->data[2] > 40) + { + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + sprite->pos2.x = 0; + } + else + { + s8 var; + + if (!(sprite->data[2] & 1)) + var = 1; + else + var = -1; + + sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 6) * var; + } + + sprite->data[2]++; +} + +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); +} + +void pokemonanimfunc_03(struct Sprite *sprite) +{ + sprite->data[0] = 40; + sub_817F8FC(sprite); + sprite->callback = sub_817F8FC; +} + +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); +} + +void pokemonanimfunc_04(struct Sprite *sprite) +{ + sprite->data[0] = 40; + sub_817F978(sprite); + sprite->callback = sub_817F978; +} + +#ifdef NONMATCHING +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 +__attribute__((naked)) +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 + +void pokemonanimfunc_1E(struct Sprite *sprite) +{ + sprite->data[0] = 4; + sub_817F9F4(sprite); + sprite->callback = sub_817F9F4; +} + +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; +} + +void pokemonanimfunc_09(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + HandleStartAffineAnim(sprite); + + if (sprite->data[2] > 40) + { + HandleSetAffineData(sprite, 0x100, 0x100, 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]++; +} + +void sub_817FC20(struct Sprite *sprite) +{ + sub_817F70C(sprite); + + if (sprite->data[2] == 0) + sprite->data[3] = 0; + + if (gUnknown_0860AD70[sprite->data[3]][2] == sprite->data[2]) + { + if (gUnknown_0860AD70[sprite->data[3]][2] == 0) + { + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[3]++; + sprite->data[2] = 0; + } + } + + if (gUnknown_0860AD70[sprite->data[3]][2] == 0) + { + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->pos2.x += gUnknown_0860AD70[sprite->data[3]][0]; + sprite->pos2.y += gUnknown_0860AD70[sprite->data[3]][1]; + sprite->data[2]++; + sub_817F70C(sprite); + } +} + +void pokemonanimfunc_0A(struct Sprite *sprite) +{ + sub_817FC20(sprite); + sprite->callback = sub_817FC20; +} + +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]; +} + +void pokemonanimfunc_0F(struct Sprite *sprite) +{ + sprite->data[0] = 60; + sprite->data[7] = 3; + sub_817FCDC(sprite); + sprite->callback = sub_817FCDC; +} + +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]; +} + +void pokemonanimfunc_10(struct Sprite *sprite) +{ + sprite->data[0] = 60; + sub_817FD44(sprite); + sprite->callback = sub_817FD44; +} + +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 var; + s32 index, amplitude; + + if (!(sprite->data[2] & 1)) + var = 1; + else + var = -1; + + amplitude = Sin(sprite->data[2] / 4, 8); + index = sprite->data[2] % 256; + + sprite->pos2.y = Sin(index, amplitude) * var; + sprite->pos2.x = Cos(index, amplitude) * var; + } + + sprite->data[2] += 9; +} + +void sub_817FE30(struct Sprite *sprite) +{ + s16 id = sprite->data[0]; + + if (gUnknown_03001240[id].field_0 != 0) + { + gUnknown_03001240[id].field_0--; + } + else + { + if (sprite->data[2] == 0 && gUnknown_03001240[id].field_8 == 0) + { + HandleStartAffineAnim(sprite); + gUnknown_03001240[id].field_8++; + } + + if (sprite->data[2] > gUnknown_03001240[id].field_6) + { + HandleSetAffineData(sprite, 0x100, 0x100, 0); + + if (gUnknown_03001240[id].field_4 > 1) + { + gUnknown_03001240[id].field_4--; + gUnknown_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, 0x100, 0x100, sprite->data[6]); + } + + sprite->data[2] += 16; + } +} + +void pokemonanimfunc_12(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 512; + gUnknown_03001240[id].field_0 = 0; + sub_817FE30(sprite); + sprite->callback = sub_817FE30; +} + +void sub_817FF3C(struct Sprite *sprite) +{ + u8 id = sprite->data[0]; + + if (sprite->data[2] == 0) + HandleStartAffineAnim(sprite); + + if (sprite->data[2] > gUnknown_03001240[id].field_0) + { + HandleSetAffineData(sprite, 0x100, 0x100, 0); + sub_817F77C(sprite); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = (65536 / gUnknown_03001240[id].field_8) * sprite->data[2]; + HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6]); + } + + sprite->data[2]++; +} + +void pokemonanimfunc_1F(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_0 = 60; + gUnknown_03001240[id].field_8 = 20; + sub_817FF3C(sprite); + sprite->callback = sub_817FF3C; +} + +void sub_817FFF0(struct Sprite *sprite) +{ + u8 id = sprite->data[0]; + + sub_817F70C(sprite); + + if (sprite->data[2] > gUnknown_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, gUnknown_03001240[id].field_8 * 2)); + sprite->pos2.y = Sin(index, gUnknown_03001240[id].field_8) + gUnknown_03001240[id].field_8; + } + + sprite->data[2] += gUnknown_03001240[id].field_2; + sub_817F70C(sprite); +} + +void pokemonanimfunc_14(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 512; + gUnknown_03001240[id].field_8 = 6; + gUnknown_03001240[id].field_2 = 24; + sub_817FFF0(sprite); + sprite->callback = sub_817FFF0; +} + +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, 0); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 16); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0); + } + + sprite->data[2]++; +} + +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, 0x100, 0x100, 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]++; +} + +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, 0x100, 0x100, 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]++; +} + +void sub_818031C(struct Sprite *sprite) +{ + u8 index = sprite->data[2]; + u8 var7 = sprite->data[6]; + u8 var5 = gUnknown_0860AA80[sprite->data[5]][0]; + u8 var6 = gUnknown_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]++; + } + } +} + +void pokemonanimfunc_19(struct Sprite *sprite) +{ + sprite->data[0] = 48; + sub_818031C(sprite); + sprite->callback = sub_818031C; +} + +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, 0x100, 0x100, 0); + sub_817F77C(sprite); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + sprite->pos2.x = 0; + } + else + { + s16 index = ((counter - 10) * 128) / 20; + + if (counter < 10) + HandleSetAffineData(sprite, 0x100, 0x100, counter / 2 * 512); + else if (counter >= 10 && counter <= 29) + sprite->pos2.x = -(Sin(index, 5)); + else + HandleSetAffineData(sprite, 0x100, 0x100, (35 - counter) / 2 * 1024); + } + + sprite->data[2]++; + sub_817F70C(sprite); +} + +void pokemonanimfunc_1B(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + HandleStartAffineAnim(sprite); + + if (sprite->data[2] > 100) + { + HandleSetAffineData(sprite, 0x100, 0x100, 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, 0x100, 0x100, Sin(index, 3276)); + } + + sprite->data[2]++; +} + +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, 0x100, 0x100, 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, 0x100, 0x100, Sin(var, 3276)); + } + + sprite->data[2]++; +} + +void pokemonanimfunc_1C(struct Sprite *sprite) +{ + sprite->data[0] = 10; + sub_81804F8(sprite); + sprite->callback = sub_81804F8; +} + +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, 0x100, 0x100, 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, 0x100, 0x100, Sin(var, 3276)); + } + + sprite->data[2]++; +} + +void pokemonanimfunc_18(struct Sprite *sprite) +{ + sprite->data[0] = 5; + sub_81805B0(sprite); + sprite->callback = sub_81805B0; +} + +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, 0x100, 0x100, 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, 0x100, 0x100, Sin(var, 3276)); + } + + sprite->data[2]++; + sub_817F70C(sprite); +} -- cgit v1.2.3 From 7231aa2658e9c38f14ba3f319f45f83c9da0dea5 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Wed, 24 Jan 2018 16:45:37 -0500 Subject: got it almost matching --- src/text.c | 4117 ++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 2211 insertions(+), 1906 deletions(-) (limited to 'src') diff --git a/src/text.c b/src/text.c index 5db3ba308..6be46b7b1 100644 --- a/src/text.c +++ b/src/text.c @@ -1,6 +1,9 @@ #include "global.h" +#include "battle.h" #include "main.h" +#include "m4a.h" #include "palette.h" +#include "sound.h" #include "string_util.h" #include "window.h" #include "text.h" @@ -14,6 +17,7 @@ extern u16 Font6Func(struct TextPrinter *textPrinter); extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese); extern void PlaySE(u16 songNum); extern u8* UnkTextUtil_GetPtrI(u8 a1); +extern int sub_8197964(); EWRAM_DATA struct TextPrinter gTempTextPrinter = {0}; EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0}; @@ -24,6 +28,7 @@ static u16 gLastTextFgColor; static u16 gLastTextShadowColor; extern struct Main gMain; +extern struct MusicPlayerInfo gMPlayInfo_BGM; const struct FontInfo *gFonts; u8 gUnknown_03002F84; @@ -35,22 +40,22 @@ u8 gGlyphDimensions[0x2]; TextFlags gTextFlags; const u8 gFontHalfRowOffsets[] = { - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09, 0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12, - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, 0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B, 0x24, 0x25, 0x26, 0x24, 0x27, 0x28, 0x29, 0x27, 0x2A, 0x2B, 0x2C, 0x2A, 0x24, 0x25, 0x26, 0x24, - 0x2D, 0x2E, 0x2F, 0x2D, 0x30, 0x31, 0x32, 0x30, 0x33, 0x34, 0x35, 0x33, 0x2D, 0x2E, 0x2F, 0x2D, + 0x2D, 0x2E, 0x2F, 0x2D, 0x30, 0x31, 0x32, 0x30, 0x33, 0x34, 0x35, 0x33, 0x2D, 0x2E, 0x2F, 0x2D, 0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B, 0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36, - 0x3F, 0x40, 0x41, 0x3F, 0x42, 0x43, 0x44, 0x42, 0x45, 0x46, 0x47, 0x45, 0x3F, 0x40, 0x41, 0x3F, + 0x3F, 0x40, 0x41, 0x3F, 0x42, 0x43, 0x44, 0x42, 0x45, 0x46, 0x47, 0x45, 0x3F, 0x40, 0x41, 0x3F, 0x48, 0x49, 0x4A, 0x48, 0x4B, 0x4C, 0x4D, 0x4B, 0x4E, 0x4F, 0x50, 0x4E, 0x48, 0x49, 0x4A, 0x48, 0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36, - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09, 0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12, - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00 + 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00 }; const u8 gDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow.4bpp"); @@ -378,460 +383,460 @@ __attribute__((naked)) void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) { asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x24\n\ - lsl r0, #24\n\ - lsr r0, #24\n\ - lsl r1, #24\n\ - lsr r1, #24\n\ - lsl r2, #24\n\ - lsr r2, #24\n\ - ldr r3, =gFontHalfRowLookupTable\n\ - ldr r4, =gLastTextBgColor\n\ - strh r1, [r4]\n\ - ldr r4, =gLastTextFgColor\n\ - strh r0, [r4]\n\ - ldr r4, =gLastTextShadowColor\n\ - strh r2, [r4]\n\ - lsl r5, r1, #12\n\ - lsl r6, r0, #12\n\ - lsl r4, r2, #12\n\ - mov r8, r4\n\ - lsl r7, r1, #8\n\ - str r7, [sp]\n\ - lsl r4, r1, #4\n\ - mov r9, r4\n\ - orr r7, r4\n\ - str r7, [sp, #0x4]\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - lsl r7, r0, #8\n\ - mov r10, r7\n\ - mov r4, r10\n\ - mov r7, r9\n\ - orr r4, r7\n\ - str r4, [sp, #0x8]\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - lsl r7, r2, #8\n\ - mov r12, r7\n\ - mov r4, r12\n\ - mov r7, r9\n\ - orr r4, r7\n\ - str r4, [sp, #0xC]\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - lsl r7, r0, #4\n\ - mov r9, r7\n\ - ldr r4, [sp]\n\ - orr r4, r7\n\ - str r4, [sp, #0x10]\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - mov r7, r10\n\ - add r4, r7, #0\n\ - mov r7, r9\n\ - orr r4, r7\n\ - str r4, [sp, #0x14]\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - mov r7, r12\n\ - add r4, r7, #0\n\ - mov r7, r9\n\ - orr r4, r7\n\ - str r4, [sp, #0x18]\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - lsl r7, r2, #4\n\ - mov r9, r7\n\ - mov r4, r9\n\ - ldr r7, [sp]\n\ - orr r7, r4\n\ - str r7, [sp, #0x1C]\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - mov r7, r9\n\ - mov r4, r10\n\ - orr r4, r7\n\ - str r4, [sp, #0x20]\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r4, r5, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - add r4, r6, #0\n\ - orr r4, r7\n\ - strh r4, [r3]\n\ - add r3, #0x2\n\ - mov r4, r8\n\ - orr r7, r4\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - mov r4, r12\n\ - mov r7, r9\n\ - orr r4, r7\n\ - add r7, r4, #0\n\ - orr r7, r1\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x4]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x8]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0xC]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x10]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x14]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x18]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x1C]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - ldr r7, [sp, #0x20]\n\ - orr r7, r0\n\ - add r1, r5, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - add r1, r6, #0\n\ - orr r1, r7\n\ - strh r1, [r3]\n\ - add r3, #0x2\n\ - mov r1, r8\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r4, #0\n\ - orr r7, r0\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r0, [sp, #0x4]\n\ - orr r7, r0\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - orr r7, r1\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0x8]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0xC]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0x10]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0x14]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0x18]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0x1C]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - ldr r1, [sp, #0x20]\n\ - orr r7, r1\n\ - add r0, r5, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - add r0, r6, #0\n\ - orr r0, r7\n\ - strh r0, [r3]\n\ - add r3, #0x2\n\ - mov r0, r8\n\ - orr r7, r0\n\ - strh r7, [r3]\n\ - add r3, #0x2\n\ - add r7, r2, #0\n\ - orr r7, r4\n\ - orr r5, r7\n\ - strh r5, [r3]\n\ - add r3, #0x2\n\ - orr r6, r7\n\ - strh r6, [r3]\n\ - orr r0, r7\n\ - strh r0, [r3, #0x2]\n\ - add sp, #0x24\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, #0x24\n\ + lsl r0, #24\n\ + lsr r0, #24\n\ + lsl r1, #24\n\ + lsr r1, #24\n\ + lsl r2, #24\n\ + lsr r2, #24\n\ + ldr r3, =gFontHalfRowLookupTable\n\ + ldr r4, =gLastTextBgColor\n\ + strh r1, [r4]\n\ + ldr r4, =gLastTextFgColor\n\ + strh r0, [r4]\n\ + ldr r4, =gLastTextShadowColor\n\ + strh r2, [r4]\n\ + lsl r5, r1, #12\n\ + lsl r6, r0, #12\n\ + lsl r4, r2, #12\n\ + mov r8, r4\n\ + lsl r7, r1, #8\n\ + str r7, [sp]\n\ + lsl r4, r1, #4\n\ + mov r9, r4\n\ + orr r7, r4\n\ + str r7, [sp, #0x4]\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + lsl r7, r0, #8\n\ + mov r10, r7\n\ + mov r4, r10\n\ + mov r7, r9\n\ + orr r4, r7\n\ + str r4, [sp, #0x8]\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + lsl r7, r2, #8\n\ + mov r12, r7\n\ + mov r4, r12\n\ + mov r7, r9\n\ + orr r4, r7\n\ + str r4, [sp, #0xC]\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + lsl r7, r0, #4\n\ + mov r9, r7\n\ + ldr r4, [sp]\n\ + orr r4, r7\n\ + str r4, [sp, #0x10]\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + mov r7, r10\n\ + add r4, r7, #0\n\ + mov r7, r9\n\ + orr r4, r7\n\ + str r4, [sp, #0x14]\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + mov r7, r12\n\ + add r4, r7, #0\n\ + mov r7, r9\n\ + orr r4, r7\n\ + str r4, [sp, #0x18]\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + lsl r7, r2, #4\n\ + mov r9, r7\n\ + mov r4, r9\n\ + ldr r7, [sp]\n\ + orr r7, r4\n\ + str r7, [sp, #0x1C]\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + mov r7, r9\n\ + mov r4, r10\n\ + orr r4, r7\n\ + str r4, [sp, #0x20]\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r4, r5, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + add r4, r6, #0\n\ + orr r4, r7\n\ + strh r4, [r3]\n\ + add r3, #0x2\n\ + mov r4, r8\n\ + orr r7, r4\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + mov r4, r12\n\ + mov r7, r9\n\ + orr r4, r7\n\ + add r7, r4, #0\n\ + orr r7, r1\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x4]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x8]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0xC]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x10]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x14]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x18]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x1C]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + ldr r7, [sp, #0x20]\n\ + orr r7, r0\n\ + add r1, r5, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + add r1, r6, #0\n\ + orr r1, r7\n\ + strh r1, [r3]\n\ + add r3, #0x2\n\ + mov r1, r8\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r4, #0\n\ + orr r7, r0\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r0, [sp, #0x4]\n\ + orr r7, r0\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + orr r7, r1\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0x8]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0xC]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0x10]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0x14]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0x18]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0x1C]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + ldr r1, [sp, #0x20]\n\ + orr r7, r1\n\ + add r0, r5, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + add r0, r6, #0\n\ + orr r0, r7\n\ + strh r0, [r3]\n\ + add r3, #0x2\n\ + mov r0, r8\n\ + orr r7, r0\n\ + strh r7, [r3]\n\ + add r3, #0x2\n\ + add r7, r2, #0\n\ + orr r7, r4\n\ + orr r5, r7\n\ + strh r5, [r3]\n\ + add r3, #0x2\n\ + orr r6, r7\n\ + strh r6, [r3]\n\ + orr r0, r7\n\ + strh r0, [r3, #0x2]\n\ + add sp, #0x24\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); } #endif @@ -874,165 +879,165 @@ __attribute__((naked)) void DecompressGlyphTile(const u16 *src, u16 *dest) { asm("push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - ldrh r7, [r0]\n\ - ldr r5, =gFontHalfRowLookupTable\n\ - ldr r4, =gFontHalfRowOffsets\n\ - mov r2, #0xFF\n\ - mov r8, r2\n\ - add r2, r7, #0\n\ - mov r3, r8\n\ - and r2, r3\n\ - add r2, r4\n\ - ldrb r2, [r2]\n\ - lsl r2, #1\n\ - add r2, r5\n\ - ldrh r3, [r2]\n\ - lsl r3, #16\n\ - lsr r2, r7, #8\n\ - add r2, r4\n\ - ldrb r2, [r2]\n\ - lsl r2, #1\n\ - add r2, r5\n\ - ldrh r2, [r2]\n\ - orr r3, r2\n\ - add r6, r1, #0\n\ - stmia r6!, {r3}\n\ - ldrh r7, [r0, #0x2]\n\ - add r0, #0x4\n\ - add r2, r7, #0\n\ - mov r3, r8\n\ - and r2, r3\n\ - add r2, r4\n\ - ldrb r2, [r2]\n\ - lsl r2, #1\n\ - add r2, r5\n\ - ldrh r3, [r2]\n\ - lsl r3, #16\n\ - lsr r2, r7, #8\n\ - add r2, r4\n\ - ldrb r2, [r2]\n\ - lsl r2, #1\n\ - add r2, r5\n\ - ldrh r2, [r2]\n\ - orr r3, r2\n\ - str r3, [r1, #0x4]\n\ - add r6, #0x4\n\ - ldrh r7, [r0]\n\ - add r0, #0x2\n\ - add r1, r7, #0\n\ - mov r2, r8\n\ - and r1, r2\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r2, [r1]\n\ - lsl r2, #16\n\ - lsr r1, r7, #8\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r1, [r1]\n\ - orr r2, r1\n\ - stmia r6!, {r2}\n\ - ldrh r7, [r0]\n\ - add r0, #0x2\n\ - add r1, r7, #0\n\ - mov r3, r8\n\ - and r1, r3\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r2, [r1]\n\ - lsl r2, #16\n\ - lsr r1, r7, #8\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r1, [r1]\n\ - orr r2, r1\n\ - stmia r6!, {r2}\n\ - ldrh r7, [r0]\n\ - add r0, #0x2\n\ - add r1, r7, #0\n\ - and r1, r3\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r2, [r1]\n\ - lsl r2, #16\n\ - lsr r1, r7, #8\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r1, [r1]\n\ - orr r2, r1\n\ - stmia r6!, {r2}\n\ - ldrh r7, [r0]\n\ - add r0, #0x2\n\ - add r1, r7, #0\n\ - and r1, r3\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r2, [r1]\n\ - lsl r2, #16\n\ - lsr r1, r7, #8\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r1, [r1]\n\ - orr r2, r1\n\ - stmia r6!, {r2}\n\ - ldrh r7, [r0]\n\ - add r1, r7, #0\n\ - and r1, r3\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r2, [r1]\n\ - lsl r2, #16\n\ - lsr r1, r7, #8\n\ - add r1, r4\n\ - ldrb r1, [r1]\n\ - lsl r1, #1\n\ - add r1, r5\n\ - ldrh r1, [r1]\n\ - orr r2, r1\n\ - stmia r6!, {r2}\n\ - ldrh r7, [r0, #0x2]\n\ - add r0, r7, #0\n\ - and r0, r3\n\ - add r0, r4\n\ - ldrb r0, [r0]\n\ - lsl r0, #1\n\ - add r0, r5\n\ - ldrh r1, [r0]\n\ - lsl r1, #16\n\ - lsr r0, r7, #8\n\ - add r0, r4\n\ - ldrb r0, [r0]\n\ - lsl r0, #1\n\ - add r0, r5\n\ - ldrh r0, [r0]\n\ - orr r1, r0\n\ - str r1, [r6]\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); + mov r7, r8\n\ + push {r7}\n\ + ldrh r7, [r0]\n\ + ldr r5, =gFontHalfRowLookupTable\n\ + ldr r4, =gFontHalfRowOffsets\n\ + mov r2, #0xFF\n\ + mov r8, r2\n\ + add r2, r7, #0\n\ + mov r3, r8\n\ + and r2, r3\n\ + add r2, r4\n\ + ldrb r2, [r2]\n\ + lsl r2, #1\n\ + add r2, r5\n\ + ldrh r3, [r2]\n\ + lsl r3, #16\n\ + lsr r2, r7, #8\n\ + add r2, r4\n\ + ldrb r2, [r2]\n\ + lsl r2, #1\n\ + add r2, r5\n\ + ldrh r2, [r2]\n\ + orr r3, r2\n\ + add r6, r1, #0\n\ + stmia r6!, {r3}\n\ + ldrh r7, [r0, #0x2]\n\ + add r0, #0x4\n\ + add r2, r7, #0\n\ + mov r3, r8\n\ + and r2, r3\n\ + add r2, r4\n\ + ldrb r2, [r2]\n\ + lsl r2, #1\n\ + add r2, r5\n\ + ldrh r3, [r2]\n\ + lsl r3, #16\n\ + lsr r2, r7, #8\n\ + add r2, r4\n\ + ldrb r2, [r2]\n\ + lsl r2, #1\n\ + add r2, r5\n\ + ldrh r2, [r2]\n\ + orr r3, r2\n\ + str r3, [r1, #0x4]\n\ + add r6, #0x4\n\ + ldrh r7, [r0]\n\ + add r0, #0x2\n\ + add r1, r7, #0\n\ + mov r2, r8\n\ + and r1, r2\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r2, [r1]\n\ + lsl r2, #16\n\ + lsr r1, r7, #8\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r1, [r1]\n\ + orr r2, r1\n\ + stmia r6!, {r2}\n\ + ldrh r7, [r0]\n\ + add r0, #0x2\n\ + add r1, r7, #0\n\ + mov r3, r8\n\ + and r1, r3\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r2, [r1]\n\ + lsl r2, #16\n\ + lsr r1, r7, #8\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r1, [r1]\n\ + orr r2, r1\n\ + stmia r6!, {r2}\n\ + ldrh r7, [r0]\n\ + add r0, #0x2\n\ + add r1, r7, #0\n\ + and r1, r3\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r2, [r1]\n\ + lsl r2, #16\n\ + lsr r1, r7, #8\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r1, [r1]\n\ + orr r2, r1\n\ + stmia r6!, {r2}\n\ + ldrh r7, [r0]\n\ + add r0, #0x2\n\ + add r1, r7, #0\n\ + and r1, r3\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r2, [r1]\n\ + lsl r2, #16\n\ + lsr r1, r7, #8\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r1, [r1]\n\ + orr r2, r1\n\ + stmia r6!, {r2}\n\ + ldrh r7, [r0]\n\ + add r1, r7, #0\n\ + and r1, r3\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r2, [r1]\n\ + lsl r2, #16\n\ + lsr r1, r7, #8\n\ + add r1, r4\n\ + ldrb r1, [r1]\n\ + lsl r1, #1\n\ + add r1, r5\n\ + ldrh r1, [r1]\n\ + orr r2, r1\n\ + stmia r6!, {r2}\n\ + ldrh r7, [r0, #0x2]\n\ + add r0, r7, #0\n\ + and r0, r3\n\ + add r0, r4\n\ + ldrb r0, [r0]\n\ + lsl r0, #1\n\ + add r0, r5\n\ + ldrh r1, [r0]\n\ + lsl r1, #16\n\ + lsr r0, r7, #8\n\ + add r0, r4\n\ + ldrb r0, [r0]\n\ + lsl r0, #1\n\ + add r0, r5\n\ + ldrh r0, [r0]\n\ + orr r1, r0\n\ + str r1, [r6]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); } #endif @@ -1055,703 +1060,703 @@ __attribute__((naked)) void CopyGlyphToWindow(struct TextPrinter *x) { asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x8C\n\ - add r3, r0, #0\n\ - ldrb r1, [r3, #0x4]\n\ - lsl r0, r1, #1\n\ - add r0, r1\n\ - lsl r0, #2\n\ - ldr r1, =gWindows\n\ - add r1, r0, r1\n\ - add r2, r1, #0\n\ - ldrb r7, [r1, #0x3]\n\ - lsl r0, r7, #3\n\ - ldrb r6, [r3, #0x8]\n\ - sub r4, r0, r6\n\ - ldr r5, =gUnknown_03002F90\n\ - add r0, r5, #0\n\ - add r0, #0x80\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - ble _08004DD2\n\ - add r4, r0, #0\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, #0x8C\n\ + add r3, r0, #0\n\ + ldrb r1, [r3, #0x4]\n\ + lsl r0, r1, #1\n\ + add r0, r1\n\ + lsl r0, #2\n\ + ldr r1, =gWindows\n\ + add r1, r0, r1\n\ + add r2, r1, #0\n\ + ldrb r7, [r1, #0x3]\n\ + lsl r0, r7, #3\n\ + ldrb r6, [r3, #0x8]\n\ + sub r4, r0, r6\n\ + ldr r5, =gUnknown_03002F90\n\ + add r0, r5, #0\n\ + add r0, #0x80\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + ble _08004DD2\n\ + add r4, r0, #0\n\ _08004DD2:\n\ - ldrb r0, [r1, #0x4]\n\ - lsl r0, #3\n\ - ldrb r3, [r3, #0x9]\n\ - sub r0, r3\n\ - add r1, r5, #0\n\ - add r1, #0x81\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - ble _08004DE6\n\ - add r0, r1, #0\n\ + ldrb r0, [r1, #0x4]\n\ + lsl r0, #3\n\ + ldrb r3, [r3, #0x9]\n\ + sub r0, r3\n\ + add r1, r5, #0\n\ + add r1, #0x81\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + ble _08004DE6\n\ + add r0, r1, #0\n\ _08004DE6:\n\ - str r6, [sp]\n\ - mov r8, r3\n\ - add r3, r5, #0\n\ - ldr r2, [r2, #0x8]\n\ - mov r9, r2\n\ - lsl r1, r7, #5\n\ - str r1, [sp, #0x4]\n\ - cmp r4, #0x8\n\ - ble _08004DFA\n\ - b _08004F94\n\ + str r6, [sp]\n\ + mov r8, r3\n\ + add r3, r5, #0\n\ + ldr r2, [r2, #0x8]\n\ + mov r9, r2\n\ + lsl r1, r7, #5\n\ + str r1, [sp, #0x4]\n\ + cmp r4, #0x8\n\ + ble _08004DFA\n\ + b _08004F94\n\ _08004DFA:\n\ - cmp r0, #0x8\n\ - bgt _08004E84\n\ - mov r1, r8\n\ - str r3, [sp, #0x8]\n\ - add r2, r6, #0\n\ - add r2, r4\n\ - mov r8, r2\n\ - add r0, r1, r0\n\ - str r0, [sp, #0xC]\n\ - str r6, [sp, #0x10]\n\ - cmp r1, r0\n\ - bcc _08004E14\n\ - b _080052AA\n\ + cmp r0, #0x8\n\ + bgt _08004E84\n\ + mov r1, r8\n\ + str r3, [sp, #0x8]\n\ + add r2, r6, #0\n\ + add r2, r4\n\ + mov r8, r2\n\ + add r0, r1, r0\n\ + str r0, [sp, #0xC]\n\ + str r6, [sp, #0x10]\n\ + cmp r1, r0\n\ + bcc _08004E14\n\ + b _080052AA\n\ _08004E14:\n\ - ldr r3, [sp, #0x8]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x8]\n\ - ldr r4, [sp, #0x10]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _08004E72\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ + ldr r3, [sp, #0x8]\n\ + ldm r3!, {r5}\n\ + str r3, [sp, #0x8]\n\ + ldr r4, [sp, #0x10]\n\ + add r0, r1, #0x1\n\ + mov r10, r0\n\ + cmp r4, r8\n\ + bcs _08004E72\n\ + mov r2, #0x7\n\ + mov r12, r2\n\ + lsr r0, r1, #3\n\ + ldr r2, [sp, #0x4]\n\ + add r3, r0, #0\n\ + mul r3, r2\n\ + add r7, r3, #0\n\ + mov r3, r12\n\ + and r1, r3\n\ + lsl r6, r1, #2\n\ _08004E38:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _08004E6A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r0, #0xF\n\ + and r3, r0\n\ + cmp r3, #0\n\ + beq _08004E6A\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _08004E6A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004E38\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _08004E38\n\ _08004E72:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0xC]\n\ - cmp r1, r2\n\ - bcc _08004E14\n\ - b _080052AA\n\ - .pool\n\ + mov r1, r10\n\ + ldr r2, [sp, #0xC]\n\ + cmp r1, r2\n\ + bcc _08004E14\n\ + b _080052AA\n\ + .pool\n\ _08004E84:\n\ - mov r1, r8\n\ - str r3, [sp, #0x14]\n\ - ldr r3, [sp]\n\ - add r3, r4\n\ - mov r12, r3\n\ - add r2, r1, #0\n\ - add r2, #0x8\n\ - str r2, [sp, #0x18]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x1C]\n\ - mov r2, r12\n\ - str r2, [sp, #0x74]\n\ - ldr r3, [sp, #0x18]\n\ - str r3, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - cmp r1, r3\n\ - bcs _08004F0E\n\ + mov r1, r8\n\ + str r3, [sp, #0x14]\n\ + ldr r3, [sp]\n\ + add r3, r4\n\ + mov r12, r3\n\ + add r2, r1, #0\n\ + add r2, #0x8\n\ + str r2, [sp, #0x18]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x1C]\n\ + mov r2, r12\n\ + str r2, [sp, #0x74]\n\ + ldr r3, [sp, #0x18]\n\ + str r3, [sp, #0x88]\n\ + sub r0, #0x8\n\ + str r0, [sp, #0x80]\n\ + cmp r1, r3\n\ + bcs _08004F0E\n\ _08004EA8:\n\ - ldr r0, [sp, #0x14]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x14]\n\ - ldr r4, [sp, #0x1C]\n\ - add r2, r1, #0x1\n\ - mov r8, r2\n\ - cmp r4, r12\n\ - bcs _08004F06\n\ - mov r3, #0x7\n\ - mov r10, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r10\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ + ldr r0, [sp, #0x14]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x14]\n\ + ldr r4, [sp, #0x1C]\n\ + add r2, r1, #0x1\n\ + mov r8, r2\n\ + cmp r4, r12\n\ + bcs _08004F06\n\ + mov r3, #0x7\n\ + mov r10, r3\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r10\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ _08004ECC:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004EFE\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r10\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _08004EFE\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r10\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _08004EFE:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004ECC\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r12\n\ + bcc _08004ECC\n\ _08004F06:\n\ - mov r1, r8\n\ - ldr r2, [sp, #0x18]\n\ - cmp r1, r2\n\ - bcc _08004EA8\n\ + mov r1, r8\n\ + ldr r2, [sp, #0x18]\n\ + cmp r1, r2\n\ + bcc _08004EA8\n\ _08004F0E:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002FD0\n\ - str r3, [sp, #0x20]\n\ - ldr r0, [sp, #0x74]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x24]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x28]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ + ldr r1, [sp, #0x88]\n\ + ldr r3, =gUnknown_03002FD0\n\ + str r3, [sp, #0x20]\n\ + ldr r0, [sp, #0x74]\n\ + mov r8, r0\n\ + ldr r2, [sp, #0x80]\n\ + add r2, r1, r2\n\ + str r2, [sp, #0x24]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x28]\n\ + cmp r1, r2\n\ + bcc _08004F28\n\ + b _080052AA\n\ _08004F28:\n\ - ldr r0, [sp, #0x20]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x20]\n\ - ldr r4, [sp, #0x28]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08004F86\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ + ldr r0, [sp, #0x20]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x20]\n\ + ldr r4, [sp, #0x28]\n\ + add r2, r1, #0x1\n\ + mov r10, r2\n\ + cmp r4, r8\n\ + bcs _08004F86\n\ + mov r3, #0x7\n\ + mov r12, r3\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ _08004F4C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004F7E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _08004F7E\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _08004F7E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004F4C\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _08004F4C\n\ _08004F86:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x24]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ - .pool\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x24]\n\ + cmp r1, r2\n\ + bcc _08004F28\n\ + b _080052AA\n\ + .pool\n\ _08004F94:\n\ - cmp r0, #0x8\n\ - ble _08004F9A\n\ - b _080050A4\n\ + cmp r0, #0x8\n\ + ble _08004F9A\n\ + b _080050A4\n\ _08004F9A:\n\ - mov r1, r8\n\ - str r3, [sp, #0x2C]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - add r0, r8\n\ - str r0, [sp, #0x30]\n\ - ldr r0, [sp]\n\ - str r0, [sp, #0x34]\n\ - ldr r2, [sp, #0x30]\n\ - str r2, [sp, #0x78]\n\ - str r3, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800501C\n\ + mov r1, r8\n\ + str r3, [sp, #0x2C]\n\ + ldr r3, [sp]\n\ + add r3, #0x8\n\ + mov r12, r3\n\ + add r0, r8\n\ + str r0, [sp, #0x30]\n\ + ldr r0, [sp]\n\ + str r0, [sp, #0x34]\n\ + ldr r2, [sp, #0x30]\n\ + str r2, [sp, #0x78]\n\ + str r3, [sp, #0x84]\n\ + sub r4, #0x8\n\ + str r4, [sp, #0x7C]\n\ + cmp r8, r2\n\ + bcs _0800501C\n\ _08004FBA:\n\ - ldr r0, [sp, #0x2C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x2C]\n\ - ldr r4, [sp, #0x34]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r12\n\ - bcs _08005014\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, #0x7\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ + ldr r0, [sp, #0x2C]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x2C]\n\ + ldr r4, [sp, #0x34]\n\ + add r2, r1, #0x1\n\ + mov r10, r2\n\ + cmp r4, r12\n\ + bcs _08005014\n\ + lsr r0, r1, #3\n\ + ldr r2, [sp, #0x4]\n\ + add r3, r0, #0\n\ + mul r3, r2\n\ + add r7, r3, #0\n\ + mov r3, #0x7\n\ + and r1, r3\n\ + lsl r6, r1, #2\n\ _08004FDA:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800500C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r0, #0xF\n\ + and r3, r0\n\ + cmp r3, #0\n\ + beq _0800500C\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, #0x7\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _0800500C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004FDA\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r12\n\ + bcc _08004FDA\n\ _08005014:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x30]\n\ - cmp r1, r2\n\ - bcc _08004FBA\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x30]\n\ + cmp r1, r2\n\ + bcc _08004FBA\n\ _0800501C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002FB0\n\ - str r3, [sp, #0x38]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x78]\n\ - str r3, [sp, #0x3C]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x40]\n\ - cmp r1, r3\n\ - bcc _08005038\n\ - b _080052AA\n\ + mov r1, r8\n\ + ldr r3, =gUnknown_03002FB0\n\ + str r3, [sp, #0x38]\n\ + ldr r0, [sp, #0x84]\n\ + ldr r2, [sp, #0x7C]\n\ + add r0, r2\n\ + mov r8, r0\n\ + ldr r3, [sp, #0x78]\n\ + str r3, [sp, #0x3C]\n\ + ldr r0, [sp, #0x84]\n\ + str r0, [sp, #0x40]\n\ + cmp r1, r3\n\ + bcc _08005038\n\ + b _080052AA\n\ _08005038:\n\ - ldr r2, [sp, #0x38]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x38]\n\ - ldr r4, [sp, #0x40]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _08005096\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ + ldr r2, [sp, #0x38]\n\ + ldm r2!, {r5}\n\ + str r2, [sp, #0x38]\n\ + ldr r4, [sp, #0x40]\n\ + add r3, r1, #0x1\n\ + mov r10, r3\n\ + cmp r4, r8\n\ + bcs _08005096\n\ + mov r0, #0x7\n\ + mov r12, r0\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ _0800505C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800508E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800508E\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _0800508E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800505C\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _0800505C\n\ _08005096:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x3C]\n\ - cmp r1, r2\n\ - bcc _08005038\n\ - b _080052AA\n\ - .pool\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x3C]\n\ + cmp r1, r2\n\ + bcc _08005038\n\ + b _080052AA\n\ + .pool\n\ _080050A4:\n\ - mov r1, r8\n\ - str r5, [sp, #0x44]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - mov r2, r8\n\ - add r2, #0x8\n\ - str r2, [sp, #0x48]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x4C]\n\ - str r2, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - mov r0, r12\n\ - str r0, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800512C\n\ + mov r1, r8\n\ + str r5, [sp, #0x44]\n\ + ldr r3, [sp]\n\ + add r3, #0x8\n\ + mov r12, r3\n\ + mov r2, r8\n\ + add r2, #0x8\n\ + str r2, [sp, #0x48]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x4C]\n\ + str r2, [sp, #0x88]\n\ + sub r0, #0x8\n\ + str r0, [sp, #0x80]\n\ + mov r0, r12\n\ + str r0, [sp, #0x84]\n\ + sub r4, #0x8\n\ + str r4, [sp, #0x7C]\n\ + cmp r8, r2\n\ + bcs _0800512C\n\ _080050CA:\n\ - ldr r2, [sp, #0x44]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x44]\n\ - ldr r4, [sp, #0x4C]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r12\n\ - bcs _08005124\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, #0x7\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ + ldr r2, [sp, #0x44]\n\ + ldm r2!, {r5}\n\ + str r2, [sp, #0x44]\n\ + ldr r4, [sp, #0x4C]\n\ + add r3, r1, #0x1\n\ + mov r10, r3\n\ + cmp r4, r12\n\ + bcs _08005124\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, #0x7\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ _080050EA:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800511C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800511C\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, #0x7\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _0800511C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _080050EA\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r12\n\ + bcc _080050EA\n\ _08005124:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x48]\n\ - cmp r1, r2\n\ - bcc _080050CA\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x48]\n\ + cmp r1, r2\n\ + bcc _080050CA\n\ _0800512C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002FB0\n\ - str r3, [sp, #0x50]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x88]\n\ - str r3, [sp, #0x54]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x58]\n\ - cmp r1, r3\n\ - bcs _080051AC\n\ + mov r1, r8\n\ + ldr r3, =gUnknown_03002FB0\n\ + str r3, [sp, #0x50]\n\ + ldr r0, [sp, #0x84]\n\ + ldr r2, [sp, #0x7C]\n\ + add r0, r2\n\ + mov r8, r0\n\ + ldr r3, [sp, #0x88]\n\ + str r3, [sp, #0x54]\n\ + ldr r0, [sp, #0x84]\n\ + str r0, [sp, #0x58]\n\ + cmp r1, r3\n\ + bcs _080051AC\n\ _08005146:\n\ - ldr r2, [sp, #0x50]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x50]\n\ - ldr r4, [sp, #0x58]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _080051A4\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ + ldr r2, [sp, #0x50]\n\ + ldm r2!, {r5}\n\ + str r2, [sp, #0x50]\n\ + ldr r4, [sp, #0x58]\n\ + add r3, r1, #0x1\n\ + mov r10, r3\n\ + cmp r4, r8\n\ + bcs _080051A4\n\ + mov r0, #0x7\n\ + mov r12, r0\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ _0800516A:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800519C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800519C\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _0800519C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800516A\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _0800516A\n\ _080051A4:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x54]\n\ - cmp r1, r2\n\ - bcc _08005146\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x54]\n\ + cmp r1, r2\n\ + bcc _08005146\n\ _080051AC:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002FD0\n\ - str r3, [sp, #0x5C]\n\ - ldr r0, [sp, #0x84]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x60]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x64]\n\ - cmp r1, r2\n\ - bcs _0800522A\n\ + ldr r1, [sp, #0x88]\n\ + ldr r3, =gUnknown_03002FD0\n\ + str r3, [sp, #0x5C]\n\ + ldr r0, [sp, #0x84]\n\ + mov r8, r0\n\ + ldr r2, [sp, #0x80]\n\ + add r2, r1, r2\n\ + str r2, [sp, #0x60]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x64]\n\ + cmp r1, r2\n\ + bcs _0800522A\n\ _080051C4:\n\ - ldr r0, [sp, #0x5C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x5C]\n\ - ldr r4, [sp, #0x64]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08005222\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ + ldr r0, [sp, #0x5C]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x5C]\n\ + ldr r4, [sp, #0x64]\n\ + add r2, r1, #0x1\n\ + mov r10, r2\n\ + cmp r4, r8\n\ + bcs _08005222\n\ + mov r3, #0x7\n\ + mov r12, r3\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ _080051E8:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800521A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800521A\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _0800521A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _080051E8\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _080051E8\n\ _08005222:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x60]\n\ - cmp r1, r2\n\ - bcc _080051C4\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x60]\n\ + cmp r1, r2\n\ + bcc _080051C4\n\ _0800522A:\n\ - ldr r4, [sp, #0x84]\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002FF0\n\ - str r3, [sp, #0x68]\n\ - ldr r0, [sp, #0x7C]\n\ - add r0, r4\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x6C]\n\ - str r4, [sp, #0x70]\n\ - cmp r1, r2\n\ - bcs _080052AA\n\ + ldr r4, [sp, #0x84]\n\ + ldr r1, [sp, #0x88]\n\ + ldr r3, =gUnknown_03002FF0\n\ + str r3, [sp, #0x68]\n\ + ldr r0, [sp, #0x7C]\n\ + add r0, r4\n\ + mov r8, r0\n\ + ldr r2, [sp, #0x80]\n\ + add r2, r1, r2\n\ + str r2, [sp, #0x6C]\n\ + str r4, [sp, #0x70]\n\ + cmp r1, r2\n\ + bcs _080052AA\n\ _08005244:\n\ - ldr r3, [sp, #0x68]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x68]\n\ - ldr r4, [sp, #0x70]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _080052A2\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ + ldr r3, [sp, #0x68]\n\ + ldm r3!, {r5}\n\ + str r3, [sp, #0x68]\n\ + ldr r4, [sp, #0x70]\n\ + add r0, r1, #0x1\n\ + mov r10, r0\n\ + cmp r4, r8\n\ + bcs _080052A2\n\ + mov r2, #0x7\n\ + mov r12, r2\n\ + lsr r0, r1, #3\n\ + ldr r2, [sp, #0x4]\n\ + add r3, r0, #0\n\ + mul r3, r2\n\ + add r7, r3, #0\n\ + mov r3, r12\n\ + and r1, r3\n\ + lsl r6, r1, #2\n\ _08005268:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800529A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ + add r3, r5, #0\n\ + mov r0, #0xF\n\ + and r3, r0\n\ + cmp r3, #0\n\ + beq _0800529A\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ _0800529A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08005268\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _08005268\n\ _080052A2:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x6C]\n\ - cmp r1, r2\n\ - bcc _08005244\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x6C]\n\ + cmp r1, r2\n\ + bcc _08005244\n\ _080052AA:\n\ - add sp, #0x8C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); + add sp, #0x8C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); } void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) @@ -2046,733 +2051,1033 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c } } } - +#ifdef NONMATCHING +u16 RenderText(struct TextPrinter *textPrinter) +{ + struct TextPrinterSubStruct* r4 = &textPrinter->sub_union.sub; + int temp; + int r4two; + int jpnvar; + u8* tempTwo; + u16 songId; + int dummy; + u8 dummyTwo; + + switch (textPrinter->state) // _080057C4 + { + case 0: // _080057F0 + if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && r4->font_type_upper) + textPrinter->delayCounter = 0; + if (textPrinter->delayCounter && textPrinter->text_speed) //_0800580A + { + textPrinter->delayCounter--; + if (gTextFlags.flag_0 && (gMain.newKeys & (A_BUTTON | B_BUTTON))) + { + r4->font_type_upper = 1; + textPrinter->delayCounter = 0; + } + return 3; + } + else // _0800584C + { + if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.flag_2) + textPrinter->delayCounter = 3; + else + textPrinter->delayCounter = textPrinter->text_speed; + temp = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + switch (temp) //_0800588A + { + case 0xF8+6: //_080058B8 + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->subPrinter.currentY += (gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing); + return 2; + case 0xF8+5: //_080058DC + textPrinter->subPrinter.current_text_offset++; + return 2; + case 0xF8+4: //_080058E0 + temp = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + switch (temp) // _080058F0 + { + + case 1: // _08005960 + textPrinter->subPrinter.fontColor_h = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 2: // _08005982 + textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 3: // _080059A6 + textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 4: // _080059C0 + textPrinter->subPrinter.fontColor_h = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 5: // _08005A0E + textPrinter->subPrinter.current_text_offset++; + return 2; + case 6: //_08005A12 + r4->font_type = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 7: // _08005A0A + return 2; + case 8: // _08005A2A + textPrinter->delayCounter = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + textPrinter->state = 6; + return 2; + case 9: // _08005A3A + textPrinter->state = 1; + if (gTextFlags.flag_2) + r4->frames_visible_counter = 0; + return 3; + case 10: // _08005A58 + textPrinter->state = 5; + return 3; + case 11: // _08005A5C + songId = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + songId |= *textPrinter->subPrinter.current_text_offset << 8; + textPrinter->subPrinter.current_text_offset++; + PlayBGM(songId); + return 2; + case 16: // _08005A76 + songId = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + songId |= (*textPrinter->subPrinter.current_text_offset << 8); + textPrinter->subPrinter.current_text_offset++; + PlaySE(songId); + return 2; + case 13: // _08005A90 + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x + *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 14: // _08005A98 + textPrinter->subPrinter.currentY = textPrinter->subPrinter.y + *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 15: // _08005AA4 + FillWindowPixelBuffer(textPrinter->subPrinter.windowId, textPrinter->subPrinter.bgColor | textPrinter->subPrinter.bgColor << 4); + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->subPrinter.currentY = textPrinter->subPrinter.y; + return 2; + case 23: // _08005ABE + m4aMPlayStop(&gMPlayInfo_BGM); + return 2; + case 24: // _08005ACC + m4aMPlayContinue(&gMPlayInfo_BGM); + return 2; + case 17: // _08005AD8 + temp = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + if (temp > 0) + { + ClearTextSpan(textPrinter, temp); + textPrinter->subPrinter.currentX += temp; + return 0; + } + return 2; + case 18: // _08005AF2 + textPrinter->subPrinter.currentX = *textPrinter->subPrinter.current_text_offset + textPrinter->subPrinter.x; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 19: // _08005B02 + temp = *textPrinter->subPrinter.current_text_offset; + temp += textPrinter->subPrinter.x; + textPrinter->subPrinter.current_text_offset++; + r4two = temp - textPrinter->subPrinter.currentX; + if (temp - textPrinter->subPrinter.currentX > 0) + { + ClearTextSpan(textPrinter, r4two); + textPrinter->subPrinter.currentX += r4two; + return 0; + } + return 2; + case 20: // _08005B26 + textPrinter->minLetterSpacing = *textPrinter->subPrinter.current_text_offset++; + return 2; + case 21: // _08005B36 + textPrinter->japanese = 1; + return 2; + case 22: // _08005B3E + textPrinter->japanese = 0; + return 2; + case 12: // _08005B5A + dummyTwo = *textPrinter->subPrinter.current_text_offset; + dummy = 0x100; + temp = dummy | dummyTwo; + textPrinter->subPrinter.current_text_offset++; + break; + } + break; + case 0xF8+3: // _08005B48 + textPrinter->state = 2; + TextPrinterInitDownArrowCounters(textPrinter); + return 3; + case 0xF8+2: // _08005B4C + textPrinter->state = 3; + TextPrinterInitDownArrowCounters(textPrinter); + return 3; + case 0xF8+1: // _08005B5A + dummyTwo = *textPrinter->subPrinter.current_text_offset; + dummy = 0x100; + temp = dummy | dummyTwo; + textPrinter->subPrinter.current_text_offset++; + break; + case 0xF8+0: // _08005B6C + temp = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + gUnknown_03002F90[0x80] = DrawKeypadIcon(textPrinter->subPrinter.windowId, temp, textPrinter->subPrinter.currentX, textPrinter->subPrinter.currentY); + textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80] + textPrinter->subPrinter.letterSpacing; + return 0; + case 0xF8+7: // _08005D6C + return 1; + } + + } + switch (r4->font_type) // _08005B90 + { + case 0: // _08005BCC + jpnvar = textPrinter->japanese; + DecompressGlyphFont0(temp, jpnvar); + break; + case 1: // _08005BDA + jpnvar = textPrinter->japanese; + DecompressGlyphFont1(temp, jpnvar); + break; + case 2: + case 3: + case 4: + case 5: // _08005BE8 + jpnvar = textPrinter->japanese; + DecompressGlyphFont2(temp, jpnvar); + break; + case 7: // _08005BF6 + jpnvar = textPrinter->japanese; + DecompressGlyphFont7(temp, jpnvar); + break; + case 8: // _08005C04 + jpnvar = textPrinter->japanese; + DecompressGlyphFont8(temp, jpnvar); + break; + case 6: // _08005C10 + break; + } + CopyGlyphToWindow(textPrinter); // _08005C10 + if (textPrinter->minLetterSpacing) + { + textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80]; + r4two = textPrinter->minLetterSpacing - gUnknown_03002F90[0x80]; + if (r4two > 0) + { + ClearTextSpan(textPrinter, r4two); + textPrinter->subPrinter.currentX += r4two; + } + } + else // _08005C48 + { + if (textPrinter->japanese) + textPrinter->subPrinter.currentX += (gUnknown_03002F90[0x80] + textPrinter->subPrinter.letterSpacing); + else + textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80]; + } + return 0; + case 1: // _08005C78 + if (TextPrinterWait(textPrinter)) + textPrinter->state = 0; + return 3; + case 2: // _08005C8C + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + FillWindowPixelBuffer(textPrinter->subPrinter.windowId, (textPrinter->subPrinter.bgColor << 4) | textPrinter->subPrinter.bgColor); + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->subPrinter.currentY = textPrinter->subPrinter.y; + textPrinter->state = 0; + } + return 3; + case 3: // _08005CB8 + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + TextPrinterClearDownArrow(textPrinter); + textPrinter->scrollDistance = gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing; + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->state = 4; + } + return 3; + case 4: // _08005CF0 + if (textPrinter->scrollDistance) + { + int scrollSpeed = sub_8197964(); + int r4two = gWindowVerticalScrollSpeeds[scrollSpeed]; + if (textPrinter->scrollDistance < r4two) + { + ScrollWindow(textPrinter->subPrinter.windowId, 0, textPrinter->scrollDistance, textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor); + textPrinter->scrollDistance = 0; + } + else + { + ScrollWindow(textPrinter->subPrinter.windowId, 0, (int)r4two, textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor); + textPrinter->scrollDistance -= r4two; + } + CopyWindowToVram(textPrinter->subPrinter.windowId, 2); + } + else + textPrinter->state = 0; + return 3; + case 5: // _08005D48 + if (!IsSEPlaying()) + textPrinter->state = 0; + return 3; + case 6: // _08005D5A + if (textPrinter->delayCounter != 0) + textPrinter->delayCounter--; + else + textPrinter->state = 0; + return 3; + } + return 1; +} +#else __attribute__((naked)) -u16 RenderText(struct TextPrinter *textPrinter) // 80057B4 +u16 RenderText(struct TextPrinter *textPrinter) { asm("push {r4-r6,lr}\n\ - add r6, r0, #0\n\ - add r4, r6, #0\n\ - add r4, #0x14\n\ - ldrb r0, [r6, #0x1C]\n\ - cmp r0, #0x6\n\ - bls _080057C4\n\ - b _08005D6C\n\ + add r6, r0, #0\n\ + add r4, r6, #0\n\ + add r4, #0x14\n\ + ldrb r0, [r6, #0x1C]\n\ + cmp r0, #0x6\n\ + bls _080057C4\n\ + b _08005D6C\n\ _080057C4:\n\ - lsl r0, #2\n\ - ldr r1, =_080057D4\n\ - add r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ + lsl r0, #2\n\ + ldr r1, =_080057D4\n\ + add r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ _080057D4:\n\ - .4byte _080057F0\n\ - .4byte _08005C78\n\ - .4byte _08005C8C\n\ - .4byte _08005CB8\n\ - .4byte _08005CF0\n\ - .4byte _08005D48\n\ - .4byte _08005D5A\n\ + .4byte _080057F0\n\ + .4byte _08005C78\n\ + .4byte _08005C8C\n\ + .4byte _08005CB8\n\ + .4byte _08005CF0\n\ + .4byte _08005D48\n\ + .4byte _08005D5A\n\ _080057F0:\n\ - ldr r2, =gMain\n\ - ldrh r1, [r2, #0x2C]\n\ - mov r0, #0x3\n\ - and r0, r1\n\ - cmp r0, #0\n\ - beq _0800580A\n\ - ldrb r1, [r4]\n\ - mov r0, #0x10\n\ - and r0, r1\n\ - cmp r0, #0\n\ - beq _0800580A\n\ - mov r0, #0\n\ - strb r0, [r6, #0x1E]\n\ + ldr r2, =gMain\n\ + ldrh r1, [r2, #0x2C]\n\ + mov r0, #0x3\n\ + and r0, r1\n\ + cmp r0, #0\n\ + beq _0800580A\n\ + ldrb r1, [r4]\n\ + mov r0, #0x10\n\ + and r0, r1\n\ + cmp r0, #0\n\ + beq _0800580A\n\ + mov r0, #0\n\ + strb r0, [r6, #0x1E]\n\ _0800580A:\n\ - ldrb r1, [r6, #0x1E]\n\ - cmp r1, #0\n\ - beq _0800584C\n\ - ldrb r0, [r6, #0x1D]\n\ - cmp r0, #0\n\ - beq _0800584C\n\ - sub r0, r1, #0x1\n\ - strb r0, [r6, #0x1E]\n\ - ldr r0, =gTextFlags\n\ - ldrb r1, [r0]\n\ - mov r0, #0x1\n\ - and r0, r1\n\ - cmp r0, #0\n\ - bne _08005828\n\ - b _08005B56\n\ + ldrb r1, [r6, #0x1E]\n\ + cmp r1, #0\n\ + beq _0800584C\n\ + ldrb r0, [r6, #0x1D]\n\ + cmp r0, #0\n\ + beq _0800584C\n\ + sub r0, r1, #0x1\n\ + strb r0, [r6, #0x1E]\n\ + ldr r0, =gTextFlags\n\ + ldrb r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r1\n\ + cmp r0, #0\n\ + bne _08005828\n\ + b _08005B56\n\ _08005828:\n\ - ldrh r1, [r2, #0x2E]\n\ - mov r0, #0x3\n\ - and r0, r1\n\ - cmp r0, #0\n\ - bne _08005834\n\ - b _08005B56\n\ + ldrh r1, [r2, #0x2E]\n\ + mov r0, #0x3\n\ + and r0, r1\n\ + cmp r0, #0\n\ + bne _08005834\n\ + b _08005B56\n\ _08005834:\n\ - ldrb r0, [r4]\n\ - mov r1, #0x10\n\ - orr r0, r1\n\ - strb r0, [r4]\n\ - mov r0, #0\n\ - strb r0, [r6, #0x1E]\n\ - b _08005B56\n\ - .pool\n\ + ldrb r0, [r4]\n\ + mov r1, #0x10\n\ + orr r0, r1\n\ + strb r0, [r4]\n\ + mov r0, #0\n\ + strb r0, [r6, #0x1E]\n\ + b _08005B56\n\ + .pool\n\ _0800584C:\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - mov r1, #0x80\n\ - lsl r1, #17\n\ - and r0, r1\n\ - cmp r0, #0\n\ - bne _08005874\n\ - ldr r0, =gTextFlags\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r1\n\ - cmp r0, #0\n\ - beq _08005874\n\ - mov r0, #0x3\n\ - b _08005876\n\ - .pool\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + mov r1, #0x80\n\ + lsl r1, #17\n\ + and r0, r1\n\ + cmp r0, #0\n\ + bne _08005874\n\ + ldr r0, =gTextFlags\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r1\n\ + cmp r0, #0\n\ + beq _08005874\n\ + mov r0, #0x3\n\ + b _08005876\n\ + .pool\n\ _08005874:\n\ - ldrb r0, [r6, #0x1D]\n\ + ldrb r0, [r6, #0x1D]\n\ _08005876:\n\ - strb r0, [r6, #0x1E]\n\ - ldr r0, [r6]\n\ - ldrb r3, [r0]\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - add r0, r3, #0\n\ - sub r0, #0xF8\n\ - cmp r0, #0x7\n\ - bls _0800588A\n\ - b _08005B90\n\ + strb r0, [r6, #0x1E]\n\ + ldr r0, [r6]\n\ + ldrb r3, [r0]\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + add r0, r3, #0\n\ + sub r0, #0xF8\n\ + cmp r0, #0x7\n\ + bls _0800588A\n\ + b _08005B90\n\ _0800588A:\n\ - lsl r0, #2\n\ - ldr r1, =_08005898\n\ - add r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ + lsl r0, #2\n\ + ldr r1, =_08005898\n\ + add r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ _08005898:\n\ - .4byte _08005B6C\n\ - .4byte _08005B5A\n\ - .4byte _08005B4C\n\ - .4byte _08005B48\n\ - .4byte _080058E0\n\ - .4byte _080058DC\n\ - .4byte _080058B8\n\ - .4byte _08005D6C\n\ + .4byte _08005B6C\n\ + .4byte _08005B5A\n\ + .4byte _08005B4C\n\ + .4byte _08005B48\n\ + .4byte _080058E0\n\ + .4byte _080058DC\n\ + .4byte _080058B8\n\ + .4byte _08005D6C\n\ _080058B8:\n\ - ldrb r0, [r6, #0x6]\n\ - strb r0, [r6, #0x8]\n\ - ldrb r1, [r6, #0x5]\n\ - ldr r0, =gFonts\n\ - ldr r2, [r0]\n\ - lsl r0, r1, #1\n\ - add r0, r1\n\ - lsl r0, #2\n\ - add r0, r2\n\ - ldrb r1, [r6, #0xB]\n\ - ldrb r0, [r0, #0x5]\n\ - add r1, r0\n\ - ldrb r0, [r6, #0x9]\n\ - add r0, r1\n\ - b _08005ABA\n\ - .pool\n\ + ldrb r0, [r6, #0x6]\n\ + strb r0, [r6, #0x8]\n\ + ldrb r1, [r6, #0x5]\n\ + ldr r0, =gFonts\n\ + ldr r2, [r0]\n\ + lsl r0, r1, #1\n\ + add r0, r1\n\ + lsl r0, #2\n\ + add r0, r2\n\ + ldrb r1, [r6, #0xB]\n\ + ldrb r0, [r0, #0x5]\n\ + add r1, r0\n\ + ldrb r0, [r6, #0x9]\n\ + add r0, r1\n\ + b _08005ABA\n\ + .pool\n\ _080058DC:\n\ - ldr r0, [r6]\n\ - b _08005B30\n\ + ldr r0, [r6]\n\ + b _08005B30\n\ _080058E0:\n\ - ldr r0, [r6]\n\ - ldrb r3, [r0]\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - sub r0, r3, #0x1\n\ - cmp r0, #0x17\n\ - bls _080058F0\n\ - b _08005B90\n\ + ldr r0, [r6]\n\ + ldrb r3, [r0]\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + sub r0, r3, #0x1\n\ + cmp r0, #0x17\n\ + bls _080058F0\n\ + b _08005B90\n\ _080058F0:\n\ - lsl r0, #2\n\ - ldr r1, =_08005900\n\ - add r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ + lsl r0, #2\n\ + ldr r1, =_08005900\n\ + add r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ _08005900:\n\ - .4byte _08005960\n\ - .4byte _08005982\n\ - .4byte _080059A6\n\ - .4byte _080059C0\n\ - .4byte _08005A0E\n\ - .4byte _08005A12\n\ - .4byte _08005A0A\n\ - .4byte _08005A2A\n\ - .4byte _08005A3A\n\ - .4byte _08005A58\n\ - .4byte _08005A5C\n\ - .4byte _08005B5A\n\ - .4byte _08005A90\n\ - .4byte _08005A98\n\ - .4byte _08005AA4\n\ - .4byte _08005A76\n\ - .4byte _08005AD8\n\ - .4byte _08005AF2\n\ - .4byte _08005B02\n\ - .4byte _08005B26\n\ - .4byte _08005B36\n\ - .4byte _08005B3E\n\ - .4byte _08005ABE\n\ - .4byte _08005ACC\n\ + .4byte _08005960 @0\n\ + .4byte _08005982 @1\n\ + .4byte _080059A6 @2\n\ + .4byte _080059C0 @3\n\ + .4byte _08005A0E @4\n\ + .4byte _08005A12 @5\n\ + .4byte _08005A0A @6\n\ + .4byte _08005A2A @7\n\ + .4byte _08005A3A @8\n\ + .4byte _08005A58 @9\n\ + .4byte _08005A5C @10\n\ + .4byte _08005B5A @11\n\ + .4byte _08005A90 @12\n\ + .4byte _08005A98 @13\n\ + .4byte _08005AA4 @14\n\ + .4byte _08005A76 @15\n\ + .4byte _08005AD8 @16\n\ + .4byte _08005AF2 @17\n\ + .4byte _08005B02 @18\n\ + .4byte _08005B26 @19\n\ + .4byte _08005B36 @20\n\ + .4byte _08005B3E @21\n\ + .4byte _08005ABE @22\n\ + .4byte _08005ACC @23\n\ _08005960:\n\ - ldr r2, [r6]\n\ - ldrb r1, [r2]\n\ - lsl r1, #4\n\ - ldrb r3, [r6, #0xC]\n\ - mov r0, #0xF\n\ - and r0, r3\n\ - orr r0, r1\n\ - strb r0, [r6, #0xC]\n\ - add r2, #0x1\n\ - str r2, [r6]\n\ - lsl r0, #24\n\ - lsr r0, #28\n\ - ldrb r2, [r6, #0xD]\n\ - lsl r1, r2, #28\n\ - lsr r1, #28\n\ - lsr r2, #4\n\ - b _08005A06\n\ + ldr r2, [r6]\n\ + ldrb r1, [r2]\n\ + lsl r1, #4\n\ + ldrb r3, [r6, #0xC]\n\ + mov r0, #0xF\n\ + and r0, r3\n\ + orr r0, r1\n\ + strb r0, [r6, #0xC]\n\ + add r2, #0x1\n\ + str r2, [r6]\n\ + lsl r0, #24\n\ + lsr r0, #28\n\ + ldrb r2, [r6, #0xD]\n\ + lsl r1, r2, #28\n\ + lsr r1, #28\n\ + lsr r2, #4\n\ + b _08005A06\n\ _08005982:\n\ - ldr r1, [r6]\n\ - ldrb r2, [r1]\n\ - mov r0, #0xF\n\ - and r0, r2\n\ - ldrb r3, [r6, #0xD]\n\ - mov r2, #0x10\n\ - neg r2, r2\n\ - and r2, r3\n\ - orr r2, r0\n\ - strb r2, [r6, #0xD]\n\ - add r1, #0x1\n\ - str r1, [r6]\n\ - ldrb r0, [r6, #0xC]\n\ - lsr r0, #4\n\ - lsl r1, r2, #28\n\ - lsr r1, #28\n\ - lsr r2, #4\n\ - b _08005A06\n\ + ldr r1, [r6]\n\ + ldrb r2, [r1]\n\ + mov r0, #0xF\n\ + and r0, r2\n\ + ldrb r3, [r6, #0xD]\n\ + mov r2, #0x10\n\ + neg r2, r2\n\ + and r2, r3\n\ + orr r2, r0\n\ + strb r2, [r6, #0xD]\n\ + add r1, #0x1\n\ + str r1, [r6]\n\ + ldrb r0, [r6, #0xC]\n\ + lsr r0, #4\n\ + lsl r1, r2, #28\n\ + lsr r1, #28\n\ + lsr r2, #4\n\ + b _08005A06\n\ _080059A6:\n\ - ldr r1, [r6]\n\ - ldrb r0, [r1]\n\ - lsl r0, #4\n\ - ldrb r3, [r6, #0xD]\n\ - mov r2, #0xF\n\ - and r2, r3\n\ - orr r2, r0\n\ - strb r2, [r6, #0xD]\n\ - add r1, #0x1\n\ - str r1, [r6]\n\ - ldrb r0, [r6, #0xC]\n\ - lsr r0, #4\n\ - b _080059FE\n\ + ldr r1, [r6]\n\ + ldrb r0, [r1]\n\ + lsl r0, #4\n\ + ldrb r3, [r6, #0xD]\n\ + mov r2, #0xF\n\ + and r2, r3\n\ + orr r2, r0\n\ + strb r2, [r6, #0xD]\n\ + add r1, #0x1\n\ + str r1, [r6]\n\ + ldrb r0, [r6, #0xC]\n\ + lsr r0, #4\n\ + b _080059FE\n\ _080059C0:\n\ - ldr r3, [r6]\n\ - ldrb r1, [r3]\n\ - lsl r1, #4\n\ - ldrb r4, [r6, #0xC]\n\ - mov r2, #0xF\n\ - add r0, r2, #0\n\ - and r0, r4\n\ - orr r0, r1\n\ - strb r0, [r6, #0xC]\n\ - add r5, r3, #0x1\n\ - str r5, [r6]\n\ - ldrb r3, [r3, #0x1]\n\ - add r1, r2, #0\n\ - and r1, r3\n\ - ldrb r4, [r6, #0xD]\n\ - mov r3, #0x10\n\ - neg r3, r3\n\ - and r3, r4\n\ - orr r3, r1\n\ - strb r3, [r6, #0xD]\n\ - add r4, r5, #0x1\n\ - str r4, [r6]\n\ - ldrb r1, [r5, #0x1]\n\ - lsl r1, #4\n\ - and r2, r3\n\ - orr r2, r1\n\ - strb r2, [r6, #0xD]\n\ - add r4, #0x1\n\ - str r4, [r6]\n\ - lsl r0, #24\n\ - lsr r0, #28\n\ + ldr r3, [r6]\n\ + ldrb r1, [r3]\n\ + lsl r1, #4\n\ + ldrb r4, [r6, #0xC]\n\ + mov r2, #0xF\n\ + add r0, r2, #0\n\ + and r0, r4\n\ + orr r0, r1\n\ + strb r0, [r6, #0xC]\n\ + add r5, r3, #0x1\n\ + str r5, [r6]\n\ + ldrb r3, [r3, #0x1]\n\ + add r1, r2, #0\n\ + and r1, r3\n\ + ldrb r4, [r6, #0xD]\n\ + mov r3, #0x10\n\ + neg r3, r3\n\ + and r3, r4\n\ + orr r3, r1\n\ + strb r3, [r6, #0xD]\n\ + add r4, r5, #0x1\n\ + str r4, [r6]\n\ + ldrb r1, [r5, #0x1]\n\ + lsl r1, #4\n\ + and r2, r3\n\ + orr r2, r1\n\ + strb r2, [r6, #0xD]\n\ + add r4, #0x1\n\ + str r4, [r6]\n\ + lsl r0, #24\n\ + lsr r0, #28\n\ _080059FE:\n\ - lsl r1, r2, #28\n\ - lsr r1, #28\n\ - lsl r2, #24\n\ - lsr r2, #28\n\ + lsl r1, r2, #28\n\ + lsr r1, #28\n\ + lsl r2, #24\n\ + lsr r2, #28\n\ _08005A06:\n\ - bl GenerateFontHalfRowLookupTable\n\ + bl GenerateFontHalfRowLookupTable\n\ _08005A0A:\n\ - mov r0, #0x2\n\ - b _08005D6E\n\ + mov r0, #0x2\n\ + b _08005D6E\n\ _08005A0E:\n\ - ldr r0, [r6]\n\ - b _08005B30\n\ + ldr r0, [r6]\n\ + b _08005B30\n\ _08005A12:\n\ - ldr r0, [r6]\n\ - ldrb r0, [r0]\n\ - mov r1, #0xF\n\ - and r1, r0\n\ - ldrb r2, [r4]\n\ - mov r0, #0x10\n\ - neg r0, r0\n\ - and r0, r2\n\ - orr r0, r1\n\ - strb r0, [r4]\n\ - ldr r0, [r6]\n\ - b _08005B30\n\ + ldr r0, [r6]\n\ + ldrb r0, [r0]\n\ + mov r1, #0xF\n\ + and r1, r0\n\ + ldrb r2, [r4]\n\ + mov r0, #0x10\n\ + neg r0, r0\n\ + and r0, r2\n\ + orr r0, r1\n\ + strb r0, [r4]\n\ + ldr r0, [r6]\n\ + b _08005B30\n\ _08005A2A:\n\ - ldr r0, [r6]\n\ - ldrb r1, [r0]\n\ - strb r1, [r6, #0x1E]\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - mov r0, #0x6\n\ - strb r0, [r6, #0x1C]\n\ - b _08005A0A\n\ + ldr r0, [r6]\n\ + ldrb r1, [r0]\n\ + strb r1, [r6, #0x1E]\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + mov r0, #0x6\n\ + strb r0, [r6, #0x1C]\n\ + b _08005A0A\n\ _08005A3A:\n\ - mov r0, #0x1\n\ - strb r0, [r6, #0x1C]\n\ - ldr r0, =gTextFlags\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r1\n\ - cmp r0, #0\n\ - bne _08005A4C\n\ - b _08005B56\n\ + mov r0, #0x1\n\ + strb r0, [r6, #0x1C]\n\ + ldr r0, =gTextFlags\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r1\n\ + cmp r0, #0\n\ + bne _08005A4C\n\ + b _08005B56\n\ _08005A4C:\n\ - mov r0, #0\n\ - strb r0, [r4, #0x2]\n\ - b _08005B56\n\ - .pool\n\ + mov r0, #0\n\ + strb r0, [r4, #0x2]\n\ + b _08005B56\n\ + .pool\n\ _08005A58:\n\ - mov r0, #0x5\n\ - b _08005D56\n\ + mov r0, #0x5\n\ + b _08005D56\n\ _08005A5C:\n\ - ldr r0, [r6]\n\ - ldrb r3, [r0]\n\ - add r1, r0, #0x1\n\ - str r1, [r6]\n\ - ldrb r0, [r0, #0x1]\n\ - lsl r0, #8\n\ - orr r3, r0\n\ - add r1, #0x1\n\ - str r1, [r6]\n\ - add r0, r3, #0\n\ - bl PlayBGM\n\ - b _08005A0A\n\ + ldr r0, [r6]\n\ + ldrb r3, [r0]\n\ + add r1, r0, #0x1\n\ + str r1, [r6]\n\ + ldrb r0, [r0, #0x1]\n\ + lsl r0, #8\n\ + orr r3, r0\n\ + add r1, #0x1\n\ + str r1, [r6]\n\ + add r0, r3, #0\n\ + bl PlayBGM\n\ + b _08005A0A\n\ _08005A76:\n\ - ldr r0, [r6]\n\ - ldrb r3, [r0]\n\ - add r1, r0, #0x1\n\ - str r1, [r6]\n\ - ldrb r0, [r0, #0x1]\n\ - lsl r0, #8\n\ - orr r3, r0\n\ - add r1, #0x1\n\ - str r1, [r6]\n\ - add r0, r3, #0\n\ - bl PlaySE\n\ - b _08005A0A\n\ + ldr r0, [r6]\n\ + ldrb r3, [r0]\n\ + add r1, r0, #0x1\n\ + str r1, [r6]\n\ + ldrb r0, [r0, #0x1]\n\ + lsl r0, #8\n\ + orr r3, r0\n\ + add r1, #0x1\n\ + str r1, [r6]\n\ + add r0, r3, #0\n\ + bl PlaySE\n\ + b _08005A0A\n\ _08005A90:\n\ - ldr r1, [r6]\n\ - ldrb r0, [r1]\n\ - ldrb r3, [r6, #0x6]\n\ - b _08005AF8\n\ + ldr r1, [r6]\n\ + ldrb r0, [r1]\n\ + ldrb r3, [r6, #0x6]\n\ + b _08005AF8\n\ _08005A98:\n\ - ldr r1, [r6]\n\ - ldrb r0, [r1]\n\ - ldrb r2, [r6, #0x7]\n\ - add r0, r2\n\ - strb r0, [r6, #0x9]\n\ - b _08005AFC\n\ + ldr r1, [r6]\n\ + ldrb r0, [r1]\n\ + ldrb r2, [r6, #0x7]\n\ + add r0, r2\n\ + strb r0, [r6, #0x9]\n\ + b _08005AFC\n\ _08005AA4:\n\ - ldrb r0, [r6, #0x4]\n\ - ldrb r2, [r6, #0xD]\n\ - lsl r2, #28\n\ - lsr r1, r2, #4\n\ - orr r1, r2\n\ - lsr r1, #24\n\ - bl FillWindowPixelBuffer\n\ - ldrb r0, [r6, #0x6]\n\ - strb r0, [r6, #0x8]\n\ - ldrb r0, [r6, #0x7]\n\ + ldrb r0, [r6, #0x4]\n\ + ldrb r2, [r6, #0xD]\n\ + lsl r2, #28\n\ + lsr r1, r2, #4\n\ + orr r1, r2\n\ + lsr r1, #24\n\ + bl FillWindowPixelBuffer\n\ + ldrb r0, [r6, #0x6]\n\ + strb r0, [r6, #0x8]\n\ + ldrb r0, [r6, #0x7]\n\ _08005ABA:\n\ - strb r0, [r6, #0x9]\n\ - b _08005A0A\n\ + strb r0, [r6, #0x9]\n\ + b _08005A0A\n\ _08005ABE:\n\ - ldr r0, =gMPlayInfo_BGM\n\ - bl m4aMPlayStop\n\ - b _08005A0A\n\ - .pool\n\ + ldr r0, =gMPlayInfo_BGM\n\ + bl m4aMPlayStop\n\ + b _08005A0A\n\ + .pool\n\ _08005ACC:\n\ - ldr r0, =gMPlayInfo_BGM\n\ - bl m4aMPlayContinue\n\ - b _08005A0A\n\ - .pool\n\ + ldr r0, =gMPlayInfo_BGM\n\ + bl m4aMPlayContinue\n\ + b _08005A0A\n\ + .pool\n\ _08005AD8:\n\ - ldr r0, [r6]\n\ - ldrb r4, [r0]\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - cmp r4, #0\n\ - ble _08005A0A\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - bl ClearTextSpan\n\ - ldrb r0, [r6, #0x8]\n\ - add r0, r4\n\ - b _08005C6E\n\ + ldr r0, [r6]\n\ + ldrb r4, [r0]\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + cmp r4, #0\n\ + ble _08005A0A\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + bl ClearTextSpan\n\ + ldrb r0, [r6, #0x8]\n\ + add r0, r4\n\ + b _08005C6E\n\ _08005AF2:\n\ - ldr r1, [r6]\n\ - ldrb r0, [r6, #0x6]\n\ - ldrb r3, [r1]\n\ + ldr r1, [r6]\n\ + ldrb r0, [r6, #0x6]\n\ + ldrb r3, [r1]\n\ _08005AF8:\n\ - add r0, r3\n\ - strb r0, [r6, #0x8]\n\ + add r0, r3\n\ + strb r0, [r6, #0x8]\n\ _08005AFC:\n\ - add r1, #0x1\n\ - str r1, [r6]\n\ - b _08005A0A\n\ + add r1, #0x1\n\ + str r1, [r6]\n\ + b _08005A0A\n\ _08005B02:\n\ - ldr r0, [r6]\n\ - ldrb r2, [r0]\n\ - ldrb r1, [r6, #0x6]\n\ - add r2, r1\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - ldrb r0, [r6, #0x8]\n\ - sub r4, r2, r0\n\ - cmp r4, #0\n\ - bgt _08005B18\n\ - b _08005A0A\n\ + ldr r0, [r6]\n\ + ldrb r2, [r0]\n\ + ldrb r1, [r6, #0x6]\n\ + add r2, r1\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + ldrb r0, [r6, #0x8]\n\ + sub r4, r2, r0\n\ + cmp r4, #0\n\ + bgt _08005B18\n\ + b _08005A0A\n\ _08005B18:\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - bl ClearTextSpan\n\ - ldrb r0, [r6, #0x8]\n\ - add r0, r4\n\ - b _08005C6E\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + bl ClearTextSpan\n\ + ldrb r0, [r6, #0x8]\n\ + add r0, r4\n\ + b _08005C6E\n\ _08005B26:\n\ - ldr r0, [r6]\n\ - ldrb r2, [r0]\n\ - add r1, r6, #0\n\ - add r1, #0x20\n\ - strb r2, [r1]\n\ + ldr r0, [r6]\n\ + ldrb r2, [r0]\n\ + add r1, r6, #0\n\ + add r1, #0x20\n\ + strb r2, [r1]\n\ _08005B30:\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - b _08005A0A\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + b _08005A0A\n\ _08005B36:\n\ - add r1, r6, #0\n\ - add r1, #0x21\n\ - mov r0, #0x1\n\ - b _08005B44\n\ + add r1, r6, #0\n\ + add r1, #0x21\n\ + mov r0, #0x1\n\ + b _08005B44\n\ _08005B3E:\n\ - add r1, r6, #0\n\ - add r1, #0x21\n\ - mov r0, #0\n\ + add r1, r6, #0\n\ + add r1, #0x21\n\ + mov r0, #0\n\ _08005B44:\n\ - strb r0, [r1]\n\ - b _08005A0A\n\ + strb r0, [r1]\n\ + b _08005A0A\n\ _08005B48:\n\ - mov r0, #0x2\n\ - b _08005B4E\n\ + mov r0, #0x2\n\ + b _08005B4E\n\ _08005B4C:\n\ - mov r0, #0x3\n\ + mov r0, #0x3\n\ _08005B4E:\n\ - strb r0, [r6, #0x1C]\n\ - add r0, r6, #0\n\ - bl TextPrinterInitDownArrowCounters\n\ + strb r0, [r6, #0x1C]\n\ + add r0, r6, #0\n\ + bl TextPrinterInitDownArrowCounters\n\ _08005B56:\n\ - mov r0, #0x3\n\ - b _08005D6E\n\ + mov r0, #0x3\n\ + b _08005D6E\n\ _08005B5A:\n\ - ldr r0, [r6]\n\ - ldrb r3, [r0]\n\ - mov r2, #0x80\n\ - lsl r2, #1\n\ - add r1, r2, #0\n\ - orr r3, r1\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - b _08005B90\n\ + ldr r0, [r6]\n\ + ldrb r3, [r0]\n\ + mov r2, #0x80\n\ + lsl r2, #1\n\ + add r1, r2, #0\n\ + orr r3, r1\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + b _08005B90\n\ _08005B6C:\n\ - ldr r0, [r6]\n\ - ldrb r3, [r0]\n\ - add r0, #0x1\n\ - str r0, [r6]\n\ - ldrb r0, [r6, #0x4]\n\ - add r1, r3, #0\n\ - ldrb r2, [r6, #0x8]\n\ - ldrb r3, [r6, #0x9]\n\ - bl DrawKeypadIcon\n\ - ldr r1, =gUnknown_03002F90\n\ - add r1, #0x80\n\ - strb r0, [r1]\n\ - ldrb r3, [r6, #0xA]\n\ - add r0, r3\n\ - b _08005C6A\n\ - .pool\n\ + ldr r0, [r6]\n\ + ldrb r3, [r0]\n\ + add r0, #0x1\n\ + str r0, [r6]\n\ + ldrb r0, [r6, #0x4]\n\ + add r1, r3, #0\n\ + ldrb r2, [r6, #0x8]\n\ + ldrb r3, [r6, #0x9]\n\ + bl DrawKeypadIcon\n\ + ldr r1, =gUnknown_03002F90\n\ + add r1, #0x80\n\ + strb r0, [r1]\n\ + ldrb r3, [r6, #0xA]\n\ + add r0, r3\n\ + b _08005C6A\n\ + .pool\n\ _08005B90:\n\ - ldr r0, [r4]\n\ - lsl r0, #28\n\ - lsr r0, #28\n\ - cmp r0, #0x8\n\ - bhi _08005C10\n\ - lsl r0, #2\n\ - ldr r1, =_08005BA8\n\ - add r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ + ldr r0, [r4]\n\ + lsl r0, #28\n\ + lsr r0, #28\n\ + cmp r0, #0x8\n\ + bhi _08005C10\n\ + lsl r0, #2\n\ + ldr r1, =_08005BA8\n\ + add r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ _08005BA8:\n\ - .4byte _08005BCC\n\ - .4byte _08005BDA\n\ - .4byte _08005BE8\n\ - .4byte _08005BE8\n\ - .4byte _08005BE8\n\ - .4byte _08005BE8\n\ - .4byte _08005C10\n\ - .4byte _08005BF6\n\ - .4byte _08005C04\n\ + .4byte _08005BCC\n\ + .4byte _08005BDA\n\ + .4byte _08005BE8\n\ + .4byte _08005BE8\n\ + .4byte _08005BE8\n\ + .4byte _08005BE8\n\ + .4byte _08005C10\n\ + .4byte _08005BF6\n\ + .4byte _08005C04\n\ _08005BCC:\n\ - add r0, r6, #0\n\ - add r0, #0x21\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - bl DecompressGlyphFont0\n\ - b _08005C10\n\ + add r0, r6, #0\n\ + add r0, #0x21\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + bl DecompressGlyphFont0\n\ + b _08005C10\n\ _08005BDA:\n\ - add r0, r6, #0\n\ - add r0, #0x21\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - bl DecompressGlyphFont1\n\ - b _08005C10\n\ + add r0, r6, #0\n\ + add r0, #0x21\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + bl DecompressGlyphFont1\n\ + b _08005C10\n\ _08005BE8:\n\ - add r0, r6, #0\n\ - add r0, #0x21\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - bl DecompressGlyphFont2\n\ - b _08005C10\n\ + add r0, r6, #0\n\ + add r0, #0x21\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + bl DecompressGlyphFont2\n\ + b _08005C10\n\ _08005BF6:\n\ - add r0, r6, #0\n\ - add r0, #0x21\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - bl DecompressGlyphFont7\n\ - b _08005C10\n\ + add r0, r6, #0\n\ + add r0, #0x21\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + bl DecompressGlyphFont7\n\ + b _08005C10\n\ _08005C04:\n\ - add r0, r6, #0\n\ - add r0, #0x21\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - bl DecompressGlyphFont8\n\ + add r0, r6, #0\n\ + add r0, #0x21\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + bl DecompressGlyphFont8\n\ _08005C10:\n\ - add r0, r6, #0\n\ - bl CopyGlyphToWindow\n\ - add r2, r6, #0\n\ - add r2, #0x20\n\ - ldrb r0, [r2]\n\ - cmp r0, #0\n\ - beq _08005C48\n\ - ldr r1, =gUnknown_03002F90\n\ - add r1, #0x80\n\ - ldrb r0, [r1]\n\ - ldrb r3, [r6, #0x8]\n\ - add r0, r3\n\ - strb r0, [r6, #0x8]\n\ - ldrb r2, [r2]\n\ - ldrb r0, [r1]\n\ - sub r4, r2, r0\n\ - cmp r4, #0\n\ - ble _08005C70\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - bl ClearTextSpan\n\ - ldrb r0, [r6, #0x8]\n\ - add r0, r4\n\ - b _08005C6E\n\ - .pool\n\ + add r0, r6, #0\n\ + bl CopyGlyphToWindow\n\ + add r2, r6, #0\n\ + add r2, #0x20\n\ + ldrb r0, [r2]\n\ + cmp r0, #0\n\ + beq _08005C48\n\ + ldr r1, =gUnknown_03002F90\n\ + add r1, #0x80\n\ + ldrb r0, [r1]\n\ + ldrb r3, [r6, #0x8]\n\ + add r0, r3\n\ + strb r0, [r6, #0x8]\n\ + ldrb r2, [r2]\n\ + ldrb r0, [r1]\n\ + sub r4, r2, r0\n\ + cmp r4, #0\n\ + ble _08005C70\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + bl ClearTextSpan\n\ + ldrb r0, [r6, #0x8]\n\ + add r0, r4\n\ + b _08005C6E\n\ + .pool\n\ _08005C48:\n\ - add r0, r6, #0\n\ - add r0, #0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq _08005C64\n\ - ldr r0, =gUnknown_03002F90\n\ - add r0, #0x80\n\ - ldrb r1, [r6, #0xA]\n\ - ldrb r0, [r0]\n\ - add r1, r0\n\ - ldrb r0, [r6, #0x8]\n\ - b _08005C6C\n\ - .pool\n\ + add r0, r6, #0\n\ + add r0, #0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq _08005C64\n\ + ldr r0, =gUnknown_03002F90\n\ + add r0, #0x80\n\ + ldrb r1, [r6, #0xA]\n\ + ldrb r0, [r0]\n\ + add r1, r0\n\ + ldrb r0, [r6, #0x8]\n\ + b _08005C6C\n\ + .pool\n\ _08005C64:\n\ - ldr r0, =gUnknown_03002F90\n\ - add r0, #0x80\n\ - ldrb r0, [r0]\n\ + ldr r0, =gUnknown_03002F90\n\ + add r0, #0x80\n\ + ldrb r0, [r0]\n\ _08005C6A:\n\ - ldrb r1, [r6, #0x8]\n\ + ldrb r1, [r6, #0x8]\n\ _08005C6C:\n\ - add r0, r1\n\ + add r0, r1\n\ _08005C6E:\n\ - strb r0, [r6, #0x8]\n\ + strb r0, [r6, #0x8]\n\ _08005C70:\n\ - mov r0, #0\n\ - b _08005D6E\n\ - .pool\n\ + mov r0, #0\n\ + b _08005D6E\n\ + .pool\n\ _08005C78:\n\ - add r0, r6, #0\n\ - bl TextPrinterWait\n\ - lsl r0, #16\n\ - cmp r0, #0\n\ - bne _08005C86\n\ - b _08005B56\n\ + add r0, r6, #0\n\ + bl TextPrinterWait\n\ + lsl r0, #16\n\ + cmp r0, #0\n\ + bne _08005C86\n\ + b _08005B56\n\ _08005C86:\n\ - mov r0, #0\n\ - strb r0, [r6, #0x1C]\n\ - b _08005B56\n\ + mov r0, #0\n\ + strb r0, [r6, #0x1C]\n\ + b _08005B56\n\ _08005C8C:\n\ - add r0, r6, #0\n\ - bl TextPrinterWaitWithDownArrow\n\ - lsl r0, #16\n\ - cmp r0, #0\n\ - bne _08005C9A\n\ - b _08005B56\n\ + add r0, r6, #0\n\ + bl TextPrinterWaitWithDownArrow\n\ + lsl r0, #16\n\ + cmp r0, #0\n\ + bne _08005C9A\n\ + b _08005B56\n\ _08005C9A:\n\ - ldrb r0, [r6, #0x4]\n\ - ldrb r2, [r6, #0xD]\n\ - lsl r2, #28\n\ - lsr r1, r2, #4\n\ - orr r1, r2\n\ - lsr r1, #24\n\ - bl FillWindowPixelBuffer\n\ - ldrb r0, [r6, #0x6]\n\ - mov r1, #0\n\ - strb r0, [r6, #0x8]\n\ - ldrb r0, [r6, #0x7]\n\ - strb r0, [r6, #0x9]\n\ - strb r1, [r6, #0x1C]\n\ - b _08005B56\n\ + ldrb r0, [r6, #0x4]\n\ + ldrb r2, [r6, #0xD]\n\ + lsl r2, #28\n\ + lsr r1, r2, #4\n\ + orr r1, r2\n\ + lsr r1, #24\n\ + bl FillWindowPixelBuffer\n\ + ldrb r0, [r6, #0x6]\n\ + mov r1, #0\n\ + strb r0, [r6, #0x8]\n\ + ldrb r0, [r6, #0x7]\n\ + strb r0, [r6, #0x9]\n\ + strb r1, [r6, #0x1C]\n\ + b _08005B56\n\ _08005CB8:\n\ - add r0, r6, #0\n\ - bl TextPrinterWaitWithDownArrow\n\ - lsl r0, #16\n\ - cmp r0, #0\n\ - bne _08005CC6\n\ - b _08005B56\n\ + add r0, r6, #0\n\ + bl TextPrinterWaitWithDownArrow\n\ + lsl r0, #16\n\ + cmp r0, #0\n\ + bne _08005CC6\n\ + b _08005B56\n\ _08005CC6:\n\ - add r0, r6, #0\n\ - bl TextPrinterClearDownArrow\n\ - ldrb r1, [r6, #0x5]\n\ - ldr r0, =gFonts\n\ - ldr r2, [r0]\n\ - lsl r0, r1, #1\n\ - add r0, r1\n\ - lsl r0, #2\n\ - add r0, r2\n\ - ldrb r1, [r6, #0xB]\n\ - ldrb r0, [r0, #0x5]\n\ - add r1, r0\n\ - strb r1, [r6, #0x1F]\n\ - ldrb r0, [r6, #0x6]\n\ - strb r0, [r6, #0x8]\n\ - mov r0, #0x4\n\ - strb r0, [r6, #0x1C]\n\ - b _08005B56\n\ - .pool\n\ + add r0, r6, #0\n\ + bl TextPrinterClearDownArrow\n\ + ldrb r1, [r6, #0x5]\n\ + ldr r0, =gFonts\n\ + ldr r2, [r0]\n\ + lsl r0, r1, #1\n\ + add r0, r1\n\ + lsl r0, #2\n\ + add r0, r2\n\ + ldrb r1, [r6, #0xB]\n\ + ldrb r0, [r0, #0x5]\n\ + add r1, r0\n\ + strb r1, [r6, #0x1F]\n\ + ldrb r0, [r6, #0x6]\n\ + strb r0, [r6, #0x8]\n\ + mov r0, #0x4\n\ + strb r0, [r6, #0x1C]\n\ + b _08005B56\n\ + .pool\n\ _08005CF0:\n\ - ldrb r0, [r6, #0x1F]\n\ - cmp r0, #0\n\ - beq _08005D44\n\ - bl sub_8197964\n\ - ldr r1, =gWindowVerticalScrollSpeeds\n\ - add r0, r1\n\ - ldrb r4, [r0]\n\ - ldrb r2, [r6, #0x1F]\n\ - cmp r2, r4\n\ - bge _08005D20\n\ - ldrb r0, [r6, #0x4]\n\ - ldrb r1, [r6, #0xD]\n\ - lsl r1, #28\n\ - lsr r3, r1, #4\n\ - orr r3, r1\n\ - lsr r3, #24\n\ - mov r1, #0\n\ - bl ScrollWindow\n\ - mov r0, #0\n\ - b _08005D38\n\ - .pool\n\ + ldrb r0, [r6, #0x1F]\n\ + cmp r0, #0\n\ + beq _08005D44\n\ + bl sub_8197964\n\ + ldr r1, =gWindowVerticalScrollSpeeds\n\ + add r0, r1\n\ + ldrb r4, [r0]\n\ + ldrb r2, [r6, #0x1F]\n\ + cmp r2, r4\n\ + bge _08005D20\n\ + ldrb r0, [r6, #0x4]\n\ + ldrb r1, [r6, #0xD]\n\ + lsl r1, #28\n\ + lsr r3, r1, #4\n\ + orr r3, r1\n\ + lsr r3, #24\n\ + mov r1, #0\n\ + bl ScrollWindow\n\ + mov r0, #0\n\ + b _08005D38\n\ + .pool\n\ _08005D20:\n\ - ldrb r0, [r6, #0x4]\n\ - ldrb r1, [r6, #0xD]\n\ - lsl r1, #28\n\ - lsr r3, r1, #4\n\ - orr r3, r1\n\ - lsr r3, #24\n\ - mov r1, #0\n\ - add r2, r4, #0\n\ - bl ScrollWindow\n\ - ldrb r0, [r6, #0x1F]\n\ - sub r0, r4\n\ + ldrb r0, [r6, #0x4]\n\ + ldrb r1, [r6, #0xD]\n\ + lsl r1, #28\n\ + lsr r3, r1, #4\n\ + orr r3, r1\n\ + lsr r3, #24\n\ + mov r1, #0\n\ + add r2, r4, #0\n\ + bl ScrollWindow\n\ + ldrb r0, [r6, #0x1F]\n\ + sub r0, r4\n\ _08005D38:\n\ - strb r0, [r6, #0x1F]\n\ - ldrb r0, [r6, #0x4]\n\ - mov r1, #0x2\n\ - bl CopyWindowToVram\n\ - b _08005B56\n\ + strb r0, [r6, #0x1F]\n\ + ldrb r0, [r6, #0x4]\n\ + mov r1, #0x2\n\ + bl CopyWindowToVram\n\ + b _08005B56\n\ _08005D44:\n\ - strb r0, [r6, #0x1C]\n\ - b _08005B56\n\ + strb r0, [r6, #0x1C]\n\ + b _08005B56\n\ _08005D48:\n\ - bl IsSEPlaying\n\ - lsl r0, #24\n\ - lsr r0, #24\n\ - cmp r0, #0\n\ - beq _08005D56\n\ - b _08005B56\n\ + bl IsSEPlaying\n\ + lsl r0, #24\n\ + lsr r0, #24\n\ + cmp r0, #0\n\ + beq _08005D56\n\ + b _08005B56\n\ _08005D56:\n\ - strb r0, [r6, #0x1C]\n\ - b _08005B56\n\ + strb r0, [r6, #0x1C]\n\ + b _08005B56\n\ _08005D5A:\n\ - ldrb r0, [r6, #0x1E]\n\ - add r1, r0, #0\n\ - cmp r1, #0\n\ - beq _08005D68\n\ - sub r0, #0x1\n\ - strb r0, [r6, #0x1E]\n\ - b _08005B56\n\ + ldrb r0, [r6, #0x1E]\n\ + add r1, r0, #0\n\ + cmp r1, #0\n\ + beq _08005D68\n\ + sub r0, #0x1\n\ + strb r0, [r6, #0x1E]\n\ + b _08005B56\n\ _08005D68:\n\ - strb r1, [r6, #0x1C]\n\ - b _08005B56\n\ + strb r1, [r6, #0x1C]\n\ + b _08005B56\n\ _08005D6C:\n\ - mov r0, #0x1\n\ + mov r0, #0x1\n\ _08005D6E:\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1"); + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n"); } +#endif u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) { -- cgit v1.2.3 From 95827ab64bc2fe148a3c52b0c341002deec72b0e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 27 Jan 2018 11:57:46 +0100 Subject: more pokemon anim functions decompiled --- src/pokemon_animation.c | 1310 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1307 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 1cac2c473..87949e88b 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -592,7 +592,23 @@ static const u8 sSpeciesToBackAnimId[] = 0x11, // SPECIES_CHIMECHO }; -const u8 gUnknown_0860AA64[] = {0x00, 0x05, 0x01, 0x01, 0x00, 0x0f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x00, 0xff}; +const u8 gUnknown_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} +}; const u8 gUnknown_0860AA80[][2] = { @@ -834,8 +850,6 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_860AD68[] = gSpriteAffineAnim_860AD58 }; -extern const s8 gUnknown_0860AD70[][3]; - // code void MonAnimDummySpriteCallback(struct Sprite *sprite) { @@ -1301,6 +1315,20 @@ void pokemonanimfunc_09(struct Sprite *sprite) sprite->data[2]++; } +static const s8 gUnknown_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}, +}; + void sub_817FC20(struct Sprite *sprite) { sub_817F70C(sprite); @@ -1828,3 +1856,1279 @@ void pokemonanimfunc_1D(struct Sprite *sprite) sprite->data[2]++; sub_817F70C(sprite); } + +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, 0x100, 0x100, 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, 0x100 - Sin(sprite->data[4], 32), yScale, 0); + sprite->data[2]++; + sprite->data[4] = (sprite->data[4] + 128 / sprite->data[0]) & 0xFF; + } + + sub_817F70C(sprite); +} + +void pokemonanimfunc_00(struct Sprite *sprite) +{ + sprite->data[0] = 16; + sub_8180714(sprite); + sprite->callback = sub_8180714; +} + +void sub_8180828(struct Sprite *sprite) +{ + s16 posY = 0; + + if (sprite->data[2] > (128 / sprite->data[6]) * sprite->data[7]) + { + HandleSetAffineData(sprite, 0x100, 0x100, 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; + } +} + +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 gUnknown_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} + }, +}; + +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 = gUnknown_03001240[structId].field_6; + r9 = gUnknown_0860AD8E[gUnknown_03001240[structId].field_8][sprite->data[4]][0]; + r10 = gUnknown_0860AD8E[gUnknown_03001240[structId].field_8][sprite->data[4]][1] - r9; + arrId = gUnknown_03001240[structId].field_8; + r7 = sprite->data[3]; + + if (sprite->data[2] == 0) + { + HandleStartAffineAnim(sprite); + sprite->data[2]++; + } + + if (gUnknown_0860AD8E[arrId][sprite->data[4]][2] == 0) + { + HandleSetAffineData(sprite, 0x100, 0x100, 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 / gUnknown_0860AD8E[arrId][sprite->data[4]][2], 10)); + sprite->pos2.x = (r10 * r7 / gUnknown_0860AD8E[arrId][sprite->data[4]][2]) + r9; + + rotation = -(var * sprite->pos2.x) / 8; + HandleSetAffineData(sprite, 0x100, 0x100, rotation); + + if (r7 == gUnknown_0860AD8E[arrId][sprite->data[4]][2]) + { + sprite->data[4]++; + sprite->data[3] = 0; + } + else + { + sprite->data[3]++; + } + } + + sub_817F70C(sprite); +} + +void pokemonanimfunc_05(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_6 = 4096; + gUnknown_03001240[id].field_8 = sprite->data[6]; + sub_8180900(sprite); + sprite->callback = sub_8180900; +} + +const u8 gUnknown_0860ADBE[] = {0x01, 0x01, 0x0c, 0xfe, 0x00, 0x0c, 0x01, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00}; + +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, 0x2DF); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 12); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0x2DF); + } + + sprite->data[2] += 2; +} + +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, 0x1F); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 12); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0x1F); + } + + sprite->data[2] += 2; +} + +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, 0x7C00); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 12); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0x7C00); + } + + sprite->data[2] += 2; +} + +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, 0x3FF); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 12); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0x3FF); + } + + sprite->data[2] += 2; +} + +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, 0x6018); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 12); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0x6018); + } + + sprite->data[2] += 2; +} + +void sub_8180CB4(struct Sprite *sprite); +void sub_8180CE8(struct Sprite *sprite); +void sub_8180D44(struct Sprite *sprite); +void sub_8180DC0(struct Sprite *sprite); +void sub_8180E28(struct Sprite *sprite); + +void pokemonanimfunc_25(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->callback = sub_8180CB4; +} + +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); +} + +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); +} + +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, 0x100, 0x100, 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); +} + +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, 0x100, 0x100, 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); +} + +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); +} + +void sub_8180E78(struct Sprite *sprite); +void sub_8180ED0(struct Sprite *sprite); +void sub_8180F2C(struct Sprite *sprite); + +void pokemonanimfunc_26(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->data[3] = 0; + sprite->callback = sub_8180E78; +} + +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); +} + +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); +} + +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, 0x100, 0x100, 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); +} + +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 = 0; + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + sprite->data[3] = 2; + } +} + +void sub_8181024(struct Sprite *sprite); +void sub_8181068(struct Sprite *sprite); +void sub_81810C4(struct Sprite *sprite); + +void pokemonanimfunc_28(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->callback = sub_8181024; +} + +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); +} + +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, 0x100, 0x100, rotation * 512); + + if (sprite->data[2] <= 32) + sprite->callback = sub_81810C4; + + sub_817F70C(sprite); +} + +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); +} + +void sub_8181110(struct Sprite *sprite); +void sub_8181144(struct Sprite *sprite); +void sub_81811A4(struct Sprite *sprite); + +void pokemonanimfunc_29(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->callback = sub_8181110; +} + +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); +} + +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, 0x100, 0x100, sprite->data[2] << 8); + sub_817F70C(sprite); +} + +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); +} + +void sub_8181214(struct Sprite *sprite); + +void pokemonanimfunc_2A(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_2 = 2; + sub_8181214(sprite); + sprite->callback = sub_8181214; +} + +void sub_8181214(struct Sprite *sprite) +{ + if (gUnknown_03001240[sprite->data[0]].field_0 != 0) + { + gUnknown_03001240[sprite->data[0]].field_0--; + } + else + { + sub_817F70C(sprite); + if (sprite->data[2] == 0) + { + sprite->data[2]++; + HandleStartAffineAnim(sprite); + sprite->data[7] = gUnknown_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 (gUnknown_03001240[sprite->data[0]].field_4 > 1) + { + gUnknown_03001240[sprite->data[0]].field_4--; + sprite->data[5] = 0; + sprite->data[6] = 0; + gUnknown_03001240[sprite->data[0]].field_0 = 10; + } + else + { + sub_817F77C(sprite); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + } + + HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6] << 8); + sub_817F70C(sprite); + } +} + +void sub_8181370(struct Sprite *sprite); + +void pokemonanimfunc_2B(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->data[6] = 0; + sprite->data[7] = 0; + sprite->callback = sub_8181370; +} + +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, 0x100, 0x100, 0); + sprite->data[7]++; + } + else if (sprite->data[6] > 64 && sprite->data[7] == 0) + { + HandleSetAffineData(sprite, -0x100, 0x100, 0); + sprite->data[7]++; + } + + if (sprite->data[6] > 255) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + HandleSetAffineData(sprite, 0x100, 0x100, 0); + sub_817F77C(sprite); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + sub_817F70C(sprite); +} + +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 (gUnknown_0860AA64[sprite->data[6]][1] == 0xFF) + { + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + if (sprite->data[4] == 1) + { + if (gUnknown_0860AA64[sprite->data[6]][0] != 0) + BlendPalette(sprite->data[7], 0x10, 0x10, 0x3FF); + else + BlendPalette(sprite->data[7], 0x10, 0, 0x3FF); + + sprite->data[4] = 0; + } + + if (gUnknown_0860AA64[sprite->data[6]][1] == sprite->data[5]) + { + sprite->data[4] = 1; + sprite->data[5] = 0; + sprite->data[6]++; + } + else + { + sprite->data[5]++; + } + } +} + +void sub_81814D4(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + HandleStartAffineAnim(sprite); + + sub_817F70C(sprite); + if (sprite->data[2] > gUnknown_03001240[sprite->data[0]].field_8) + { + HandleSetAffineData(sprite, 0x100, 0x100, 0); + sprite->pos2.x = 0; + if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + { + gUnknown_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) / gUnknown_03001240[sprite->data[0]].field_8; + sprite->pos2.x = -(Sin(index, 10)); + HandleSetAffineData(sprite, 0x100, 0x100, Sin(index, 3276)); + } + + sprite->data[2]++; + sub_817F70C(sprite); +} + +void pokemonanimfunc_2D(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_8 = 50; + sub_81814D4(sprite); + sprite->callback = sub_81814D4; +} + +void sub_81815D4(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + HandleStartAffineAnim(sprite); + + sub_817F70C(sprite); + if (sprite->data[2] > gUnknown_03001240[sprite->data[0]].field_8) + { + HandleSetAffineData(sprite, 0x100, 0x100, 0); + sprite->pos2.x = 0; + if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + { + gUnknown_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) / gUnknown_03001240[sprite->data[0]].field_8; + sprite->pos2.x = -(Sin(index, 10)); + HandleSetAffineData(sprite, 0x100, 0x100, -(Sin(index, 3276))); + } + + sprite->data[2]++; + sub_817F70C(sprite); +} + +void pokemonanimfunc_2E(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_8 = 50; + sub_81815D4(sprite); + sprite->callback = sub_81815D4; +} + +void sub_8181708(struct Sprite *sprite); +void sub_8181770(struct Sprite *sprite); +void sub_8181794(struct Sprite *sprite); + +void pokemonanimfunc_2F(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->data[6] = -(14 * sprite->centerToCornerVecX / 10); + sprite->data[7] = 128; + sprite->callback = sub_8181708; +} + +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, 0x100, 0x100, (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); +} + +void sub_8181770(struct Sprite *sprite) +{ + if (sprite->data[3] == 20) + { + sprite->callback = sub_8181794; + sprite->data[3] = 0; + } + + sprite->data[3]++; +} + +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, 0x100, 0x100, (sprite->data[7] - 128) << 8); + if (sprite->data[7] >= 128) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + HandleSetAffineData(sprite, 0x100, 0x100, 0); + sprite->data[2] = 0; + sub_817F77C(sprite); + sprite->callback = pokemonanimfunc_10; + } + + sub_817F70C(sprite); +} + +void sub_8181810(struct Sprite *sprite) +{ + if (gUnknown_03001240[sprite->data[0]].field_0 != 0) + { + gUnknown_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, 0x100 - sprite->data[6], 0x100 + 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, 0x100 + sprite->data[6], 0x100 - sprite->data[7], 0); + if (sprite->data[4] == 128) + { + if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + { + gUnknown_03001240[sprite->data[0]].field_4--; + gUnknown_03001240[sprite->data[0]].field_0 = 10; + sprite->data[4] = 0; + sprite->data[5] = 0; + } + else + { + HandleSetAffineData(sprite, 0x100, 0x100, 0); + sub_817F77C(sprite); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + } + } + + sprite->data[4] += gUnknown_03001240[sprite->data[0]].field_6; + } +} + +void pokemonanimfunc_30(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_6 = 4; + sub_8181810(sprite); + sprite->callback = sub_8181810; +} + +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); +} + +void sub_8181ABC(struct Sprite *sprite); +void sub_8181B4C(struct Sprite *sprite); +void sub_8181C2C(struct Sprite *sprite); + +void pokemonanimfunc_32(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_8 = -1; + HandleStartAffineAnim(sprite); + sprite->data[3] = 0; + sub_8181ABC(sprite); + sprite->callback = sub_8181ABC; +} + +void sub_8181ABC(struct Sprite *sprite) +{ + if (gUnknown_03001240[sprite->data[0]].field_0 != 0) + { + gUnknown_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 * gUnknown_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); + } +} + +void sub_8181B4C(struct Sprite *sprite) +{ + sub_817F70C(sprite); + if (sprite->data[2] > 48) + { + HandleSetAffineData(sprite, 0x100, 0x100, 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 -= gUnknown_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); +} + +void sub_8181C2C(struct Sprite *sprite) +{ + s32 counter; + + sub_817F70C(sprite); + counter = sprite->data[2]; + if (counter > 128) + { + if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + { + gUnknown_03001240[sprite->data[0]].field_4--; + gUnknown_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") = gUnknown_03001240[sprite->data[0]].field_8; + + sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (gUnknown_03001240[sprite->data[0]].field_8 * 8); + sprite->pos2.y = -(Sin(counter % 128, 8)); + } + + sprite->data[2] += 12; + sub_817F70C(sprite); +} + +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, 0x100, 0x100, 0); + if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + { + gUnknown_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, 0x100, 0x100, rotation << 8); + sprite->data[7] += gUnknown_03001240[sprite->data[0]].field_6; + sub_817F70C(sprite); + } +} + +void pokemonanimfunc_33(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + gUnknown_03001240[id].field_6 = 4; + sub_8181CE8(sprite); + sprite->callback = sub_8181CE8; +} + +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, 0x100, 0x100, 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, 0x100, 0x100, rotation << 8); + sprite->data[7] += 8; + sub_817F70C(sprite); + } +} + +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 = 0; + } + else + { + sprite->data[7]++; + sprite->invisible = 1; + } + + if (sprite->data[2] > 10) + { + sprite->invisible = 0; + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } +} + +void sub_8181F14(struct Sprite *sprite); +void sub_8181F50(struct Sprite *sprite); +void sub_8181FC0(struct Sprite *sprite); + +void pokemonanimfunc_36(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->data[7] = 0; + sprite->callback = sub_8181F14; +} + +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, 0x100, 0x100, sprite->data[7] << 8); +} + +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); +} + +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, 0x100, 0x100, sprite->data[7] << 8); + sub_817F70C(sprite); +} -- cgit v1.2.3 From 8ca9bbe425ef909716317fb7d8751886f8db8c3b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 27 Jan 2018 21:10:00 +0100 Subject: more pokemon anim functions decompiled --- src/pokemon_animation.c | 1082 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1072 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 87949e88b..1496069df 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -1071,14 +1071,13 @@ void pokemonanimfunc_02(struct Sprite *sprite) } else { - s8 var; - + s8 sign; if (!(sprite->data[2] & 1)) - var = 1; + sign = 1; else - var = -1; + sign = -1; - sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 6) * var; + sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 6) * sign; } sprite->data[2]++; @@ -1427,19 +1426,19 @@ void pokemonanimfunc_11(struct Sprite *sprite) } else { - s8 var; + s8 sign; s32 index, amplitude; if (!(sprite->data[2] & 1)) - var = 1; + sign = 1; else - var = -1; + sign = -1; amplitude = Sin(sprite->data[2] / 4, 8); index = sprite->data[2] % 256; - sprite->pos2.y = Sin(index, amplitude) * var; - sprite->pos2.x = Cos(index, amplitude) * var; + sprite->pos2.y = Sin(index, amplitude) * sign; + sprite->pos2.x = Cos(index, amplitude) * sign; } sprite->data[2] += 9; @@ -3132,3 +3131,1066 @@ void sub_8181FC0(struct Sprite *sprite) HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[7] << 8); sub_817F70C(sprite); } + +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, 0x100, 0x100, rotation << 8); + sub_817F70C(sprite); +} + +void sub_81820FC(struct Sprite *sprite); +void sub_818216C(struct Sprite *sprite); +void sub_81821CC(struct Sprite *sprite); +void sub_8182248(struct Sprite *sprite); + +void pokemonanimfunc_38(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->data[7] = 0; + sprite->data[4] = 0; + sprite->callback = sub_81820FC; +} + +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, 0x100, 0x100, -(sprite->data[7]) << 8); + sub_817F70C(sprite); +} + +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, 0x100, 0x100, -(sprite->data[7]) << 8); + sub_817F70C(sprite); +} + +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, 0x100, 0x100, -(sprite->data[7]) << 8); + sub_817F70C(sprite); +} + +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, 0x100, 0x100, -(sprite->data[7]) << 8); + sub_817F70C(sprite); +} + +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); +} + +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, 0x100 - scale, 0x100 - scale, 0); + } + } + else + { + s16 var; + + if (sprite->data[5] == 3) + { + if (sprite->data[7] > 63) + { + sprite->data[7] = 64; + HandleSetAffineData(sprite, 0x100, 0x100, 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, 0x100 - var, 0x100 - var, 0); + } + + sub_817F70C(sprite); +} + +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, 0x100, 0x100, 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, 0x100, yScale + 0x100, 0); + } +} + +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, 0x100, 0x100, 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, 0x100, yScale + 0x100, 0); + } +} + +void sub_81825F8(struct Sprite *sprite); +void sub_8182648(struct Sprite *sprite); +void sub_81826F8(struct Sprite *sprite); + +void pokemonanimfunc_3D(struct Sprite *sprite) +{ + HandleStartAffineAnim(sprite); + sprite->callback = sub_81825F8; + sprite->data[7] = 0; +} + +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, 0x100, 0x100 + yScale, 0); +} + +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, 0x100, 0x100 + yScale, 0); + if (sprite->data[6] == 3) + { + sprite->data[7] = 0; + sprite->callback = sub_81826F8; + } +} + +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, 0x100, 0x100, 0); + } + + HandleSetAffineData(sprite, 0x100, 0x100 + yScale, 0); +} + +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, 0x100, 0x100, 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, 0x100 + xScale, 0x100, 0); + } +} + +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); +} + +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, 0x100, 0x100, 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, 0x100 + xScale, 0x100, 0); + } +} + +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); +} + +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, 0x100, 0x100, 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, 0x100 + scale, 0x100 + scale, 0); + } + + sub_817F70C(sprite); +} + +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, 0x100, 0x100, 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, 0x100 + scale, 0x100 + scale, 0); + } + + sub_817F70C(sprite); +} + +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, 0x100, 0x100, 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, 0x100 + scale, 0x100 + scale, 0); + } + + sub_817F70C(sprite); +} + +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); +} + +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); +} + +void pokemonanimfunc_45(struct Sprite *sprite) +{ + sprite->data[0] = 32; + sub_8180714(sprite); + sprite->callback = sub_8180714; +} + +void pokemonanimfunc_46(struct Sprite *sprite) +{ + sprite->data[0] = 80; + sub_817F8FC(sprite); + sprite->callback = sub_817F8FC; +} + +void pokemonanimfunc_47(struct Sprite *sprite) +{ + sprite->data[0] = 80; + sub_817F978(sprite); + sprite->callback = sub_817F978; +} + +void pokemonanimfunc_48(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 2048; + gUnknown_03001240[id].field_8 = sprite->data[6]; + sub_8180900(sprite); + sprite->callback = sub_8180900; +} + +void pokemonanimfunc_49(struct Sprite *sprite) +{ + sprite->data[6] = 1; + pokemonanimfunc_05(sprite); +} + +void pokemonanimfunc_4A(struct Sprite *sprite) +{ + sprite->data[6] = 1; + pokemonanimfunc_48(sprite); +} + +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]--; + } +} + +void pokemonanimfunc_4C(struct Sprite *sprite) +{ + sprite->data[0] = 30; + sprite->data[7] = 3; + sub_817FCDC(sprite); + sprite->callback = sub_817FCDC; +} + +void pokemonanimfunc_4D(struct Sprite *sprite) +{ + sprite->data[0] = 30; + sub_817FD44(sprite); + sprite->callback = sub_817FD44; +} + +void pokemonanimfunc_4E(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 1024; + gUnknown_03001240[id].field_0 = 0; + gUnknown_03001240[id].field_4 = 2; + sub_817FE30(sprite); + sprite->callback = sub_817FE30; +} + +void pokemonanimfunc_4F(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 512; + gUnknown_03001240[id].field_8 = 3; + gUnknown_03001240[id].field_2 = 12; + sub_817FFF0(sprite); + sprite->callback = sub_817FFF0; +} + +void pokemonanimfunc_50(struct Sprite *sprite) +{ + sprite->data[0] = 24; + sub_818031C(sprite); + sprite->callback = sub_818031C; +} + +void pokemonanimfunc_51(struct Sprite *sprite) +{ + sprite->data[0] = 5; + sub_81804F8(sprite); + sprite->callback = sub_81804F8; +} + +void pokemonanimfunc_52(struct Sprite *sprite) +{ + sprite->data[0] = 3; + sub_817F9F4(sprite); + sprite->callback = sub_817F9F4; +} + +void pokemonanimfunc_53(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_0 = 60; + gUnknown_03001240[id].field_8 = 30; + sub_817FF3C(sprite); + sprite->callback = sub_817FF3C; +} + +void pokemonanimfunc_54(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_2 = 1; + gUnknown_03001240[id].field_4 = 2; + sub_8181214(sprite); + sprite->callback = sub_8181214; +} + +void pokemonanimfunc_55(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 4; + gUnknown_03001240[id].field_4 = 2; + sub_8181810(sprite); + sprite->callback = sub_8181810; +} + +void pokemonanimfunc_56(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_8 = 1; + gUnknown_03001240[id].field_4 = 2; + HandleStartAffineAnim(sprite); + sprite->data[3] = 0; + sub_8181ABC(sprite); + sprite->callback = sub_8181ABC; +} + +void pokemonanimfunc_07(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 2; + sub_8181CE8(sprite); + sprite->callback = sub_8181CE8; +} + +void pokemonanimfunc_08(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 4; + gUnknown_03001240[id].field_4 = 2; + sub_8181CE8(sprite); + sprite->callback = sub_8181CE8; +} + +void pokemonanimfunc_0B(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_8 = 100; + sub_81814D4(sprite); + sprite->callback = sub_81814D4; +} + +void pokemonanimfunc_0C(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_8 = 50; + gUnknown_03001240[id].field_4 = 2; + sub_81814D4(sprite); + sprite->callback = sub_81814D4; +} + +void pokemonanimfunc_0D(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_8 = 100; + sub_81815D4(sprite); + sprite->callback = sub_81815D4; +} + +void pokemonanimfunc_0E(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_8 = 50; + gUnknown_03001240[id].field_4 = 2; + sub_81815D4(sprite); + sprite->callback = sub_81815D4; +} + +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]; +} + +void pokemonanimfunc_57(struct Sprite *sprite) +{ + sprite->data[0] = 60; + sprite->data[7] = 3; + sub_8183140(sprite); + sprite->callback = sub_8183140; +} + +void pokemonanimfunc_58(struct Sprite *sprite) +{ + sprite->data[0] = 30; + sprite->data[7] = 3; + sub_8183140(sprite); + sprite->callback = sub_8183140; +} + +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); +} + +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, 0x100, 0x100, 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 = -0x100 - Sin(index2, 16); + else + xScale = 0x100 + Sin(index2, 16); + + amplitude = sprite->data[3]; + yScale = 0x100 - Sin(index2, amplitude) - Sin(index1, amplitude / 5); + SetAffineData(sprite, xScale, yScale, 0); + sprite->data[5]++; + } +} + +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); +} + +void sub_8183418(struct Sprite *sprite) +{ + s16 index1 = 0, index2; + + if (sprite->data[5] > sprite->data[6]) + { + sprite->data[5] = 0; + HandleSetAffineData(sprite, 0x100, 0x100, 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 = -0x100 + Sin(index2, amplitude) + Sin(index1, amplitude / 5 * 2); + else + xScale = 0x100 - Sin(index2, amplitude) - Sin(index1, amplitude / 5 * 2); + + SetAffineData(sprite, xScale, 0x100, 0); + sprite->data[5]++; + } +} + +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); +} + +void sub_8183574(struct Sprite *sprite) +{ + u8 var6, var7; + u8 var8 = sprite->data[2]; + u8 var9 = sprite->data[6]; + u8 var5 = gUnknown_0860AA80[sprite->data[5]][0]; + u8 var2 = var5; + if (var5 != 0xFF) + var5 = sprite->data[7]; + else + var5 = 0xFF; // needed to match + + var6 = gUnknown_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]++; + } + } +} -- cgit v1.2.3 From 16c46905ff08ab61fbd36c9e30e8d18aa7a03467 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 28 Jan 2018 00:51:20 +0100 Subject: more pokemon animation functions --- src/pokemon_animation.c | 606 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 604 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 1496069df..67915d228 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -2025,8 +2025,6 @@ void pokemonanimfunc_05(struct Sprite *sprite) sprite->callback = sub_8180900; } -const u8 gUnknown_0860ADBE[] = {0x01, 0x01, 0x0c, 0xfe, 0x00, 0x0c, 0x01, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00}; - void pokemonanimfunc_20(struct Sprite *sprite) { if (sprite->data[2] == 0) @@ -4194,3 +4192,607 @@ void sub_8183574(struct Sprite *sprite) } } } + +void pokemonanimfunc_5C(struct Sprite *sprite) +{ + sprite->data[0] = 40; + sprite->data[7] = 6; + sub_8183574(sprite); + sprite->callback = sub_8183574; +} + +void pokemonanimfunc_5D(struct Sprite *sprite) +{ + sprite->data[0] = 70; + sprite->data[7] = 6; + sub_817FCDC(sprite); + sprite->callback = sub_817FCDC; +} + +void pokemonanimfunc_5E(struct Sprite *sprite) +{ + sprite->data[0] = 20; + sub_817F8FC(sprite); + sprite->callback = sub_817F8FC; +} + +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]++; +} + +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]++; +} + +void pokemonanimfunc_61(struct Sprite *sprite) +{ + sprite->data[0] = 70; + sprite->data[7] = 6; + sub_8183140(sprite); + sprite->callback = sub_8183140; +} + +void pokemonanimfunc_62(struct Sprite *sprite) +{ + sprite->data[0] = 24; + sprite->data[7] = 6; + sub_8183574(sprite); + sprite->callback = sub_8183574; +} + +void pokemonanimfunc_63(struct Sprite *sprite) +{ + sprite->data[0] = 56; + sprite->data[7] = 9; + sub_8183574(sprite); + sprite->callback = sub_8183574; +} + +void pokemonanimfunc_64(struct Sprite *sprite) +{ + u8 id = sprite->data[0] = sub_817F758(); + + gUnknown_03001240[id].field_6 = 1024; + gUnknown_03001240[id].field_8 = 6; + gUnknown_03001240[id].field_2 = 24; + sub_817FFF0(sprite); + sprite->callback = sub_817FFF0; +} + +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, 0x100, 0x100, 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) - 0x100); + else + xScale = 0x100 - Sin(index1, amplitude / 5 * 2) - Sin(index2, amplitude); + + yScale = 0x100 - Sin(index1, amplitude / 5) - Sin(index2, amplitude); + SetAffineData(sprite, xScale, yScale, 0); + sprite->data[5]++; + } +} + +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); +} + +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); +} + +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 gUnknown_0860ADBE[][3] = +{ +// x y timer + {1, 1, 12}, + {-2, 0, 12}, + {1, -1, 12}, + {0, 0, 0} +}; + +void sub_8183B4C(struct Sprite *sprite) +{ + sub_817F70C(sprite); + if (sprite->data[2] == 0) + sprite->data[3] = 0; + + if (gUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == sprite->data[2]) + { + sprite->data[3]++; + sprite->data[2] = 0; + } + + if (gUnknown_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 += (gUnknown_0860ADBE[sprite->data[3]][0] * amplitude); + sprite->pos2.y += (gUnknown_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); + } +} + +void pokemonanimfunc_68(struct Sprite *sprite) +{ + sprite->data[5] = 1; + sprite->data[6] = 1; + sub_8183B4C(sprite); + sprite->callback = sub_8183B4C; +} + +void pokemonanimfunc_69(struct Sprite *sprite) +{ + sprite->data[5] = 2; + sprite->data[6] = 1; + sub_8183B4C(sprite); + sprite->callback = sub_8183B4C; +} + +void pokemonanimfunc_6A(struct Sprite *sprite) +{ + sprite->data[5] = 2; + sprite->data[6] = 2; + sub_8183B4C(sprite); + sprite->callback = sub_8183B4C; +} + +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, 0x100, 0x100, 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, 0x100 - scale, 0x100 - scale, 0); + } +} + +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); +} + +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); +} + +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); +} + +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); +} + +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); +} + +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); +} + +void pokemonanimfunc_71(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + HandleStartAffineAnim(sprite); + sprite->data[7] = 5; + sprite->data[6] = 8; + } + + sub_8180828(sprite); +} + +void pokemonanimfunc_72(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + HandleStartAffineAnim(sprite); + sprite->data[7] = 3; + sprite->data[6] = 4; + } + + sub_8180828(sprite); +} + +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); +} + +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); +} + +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); +} + +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); +} + +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); +} + +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); +} + +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]; + } +} + +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); +} + +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); +} + +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); +} -- cgit v1.2.3 From b377112cd6cf91ad01e8c469328d120d93ed2edc Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Sat, 27 Jan 2018 22:58:44 -0500 Subject: decompile item_use --- src/item_use.c | 1271 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1271 insertions(+) create mode 100755 src/item_use.c (limited to 'src') diff --git a/src/item_use.c b/src/item_use.c new file mode 100755 index 000000000..8c24e4a71 --- /dev/null +++ b/src/item_use.c @@ -0,0 +1,1271 @@ +#include "global.h" +#include "battle.h" +#include "berry.h" +#include "bike.h" +#include "coins.h" +#include "constants/flags.h" +#include "constants/items.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "data2.h" +#include "event_data.h" +#include "fieldmap.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "field_screen.h" +#include "field_weather.h" +#include "item.h" +#include "map_obj_8097404.h" +#include "mail.h" +#include "metatile_behavior.h" +#include "overworld.h" +#include "palette.h" +#include "pokemon.h" +#include "rom_818CFC8.h" +#include "script.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +extern u16 gSpecialVar_ItemId; +extern void(**gUnknown_0203CE54)(void); +extern void(**gUnknown_0203CF2C)(void); +extern void(*gUnknown_0203A0F4)(u8 taskId); +extern void(*gUnknown_085920D8[])(void); +extern void (*gUnknown_03006328)(u8, u16, TaskFunc); +extern void unknown_ItemMenu_Confirm(u8 taskId); +extern void sub_81C5B14(u8 taskId); +extern u8 gText_DadsAdvice[]; +extern u8 gText_CantDismountBike[]; +extern void sub_8197434(u8 a, u8 b); +extern void sub_80984F4(void); +extern void ItemUseOutOfBattle_TMHM(u8 a); +extern void ItemUseOutOfBattle_EvolutionStone(u8 b); +extern void bag_menu_mail_related(void); +extern void OpenPokeblockCase(u8 a, void(*b)(void)); +extern void overworld_free_bg_tilemaps(void); +extern bool32 sav1_map_is_biking_allowed(void); +extern bool8 IsPlayerFacingSurfableFishableWater(void); +extern bool8 sub_81221AC(void); +extern u8 gText_ItemFinderNothing[]; +extern u8 gText_ItemFinderNearby[]; +extern u8 gText_ItemFinderOnTop[]; +extern u8 gText_CoinCase[]; +extern u8 gText_PowderQty[]; +extern u8 gUnknown_085920E4[]; +extern u8 Route102_EventScript_274482[]; +extern u8 Route102_EventScript_2744C0[]; +extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[]; +extern u8 gText_BootedUpHM[]; +extern u8 gText_BootedUpTM[]; +extern u8 gText_TMHMContainedVar1[]; +extern u8 gText_PlayerUsedVar2[]; +extern u8 gText_RepelEffectsLingered[]; +extern u8 gText_UsedVar2WildLured[]; +extern u8 gText_UsedVar2WildRepelled[]; +extern u8 gText_BoxFull[]; +extern u8 gText_WontHaveEffect[]; +extern int sub_80247BC(void); +extern struct MapHeader* mapconnection_get_mapheader(struct MapConnection *connection); +extern void SetUpItemUseCallback(u8 taskId); +extern void ItemUseCB_Medicine(u8, u16, TaskFunc); +extern void sub_81B67C8(u8, u16, TaskFunc); +extern void sub_81B79E8(u8, u16, TaskFunc); +extern void dp05_ether(u8, u16, TaskFunc); +extern void dp05_pp_up(u8, u16, TaskFunc); +extern void dp05_rare_candy(u8, u16, TaskFunc); +extern void sub_81B6DC4(u8, u16, TaskFunc); +extern void sub_81B7C74(u8, u16, TaskFunc); +extern u16 ItemIdToBattleMoveId(u16); +extern void bag_menu_yes_no(u8, u8, void(**)(u8 taskId)); +extern void (*gUnknown_085920E8[])(u8 taskId); +extern void sub_81C5924(void); +extern void sub_81C59BC(void); +extern void sub_81AB9A8(u8); +extern void sub_81ABA88(u8); +extern void sub_80B7CC8(void); +extern void flagmods_08054D70(void); +extern u8* sub_806CF78(u16); +extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon*, u16, u8, u8); +extern u8 gBankInMenu; +extern u16 gBattlePartyID[]; +extern void sub_81B89F0(void); +extern u8 GetItemEffectType(u16); + +void MapPostLoadHook_UseItem(void); +extern void sub_80AF6D4(void); +void Task_CallItemUseOnFieldCallback(u8 taskId); +void bag_menu_inits_lists_menu(u8 taskId); +void ItemUseOnFieldCB_Bike(u8 taskId); +void ItemUseOnFieldCB_Rod(u8 taskId); +void ItemUseOnFieldCB_Itemfinder(u8 taskId); +void sub_80FD504(u8 taskId); +void sub_80FD5CC(u8 taskId); +void sub_80FDA94(u8 taskId); +void sub_80FDADC(u8 taskId); +void sub_80FD7C8(u8 taskId); +void sub_80FDC00(u8 taskId); +void sub_80FDD74(u8 taskId); +void sub_80FDE08(u8 taskId); +void sub_80FDE7C(u8 taskId); +void sub_80FDF90(u8 taskId); +void task08_0809AD8C(u8 taskId); +void sub_80FE024(u8 taskId); +void sub_80FE124(u8 taskId); +void sub_80FE164(u8 taskId); + +void DisplayItemMessage(u8 taskId, u8 a, u8* str, void(*callback)(u8 taskId)); +void DisplayItemMessageInBattlePyramid(u8 taskId, u8* str, void(*callback)(u8 taskId)); +void DisplayItemMessageOnField(u8 taskId, u8* str, void(*callback)(u8 taskId)); +void sub_81C6714(u8 taskId); +void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId); +void StartFishing(u8 a); +bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8); +u8 sub_80FD9B0(s16 a, s16 b); +void sub_80FDA24(u8 a); +void sub_80FD8E0(u8 taskId, s16 x, s16 y); +void sub_80FDBEC(void); +bool8 sub_80FDE2C(void); +void ItemUseOutOfBattle_CannotUse(u8 taskId); + +void SetUpItemUseCallback(u8 taskId) +{ + u8 type; + if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY) + type = gTasks[taskId].data[4] - 1; + else + type = ItemId_GetType(gSpecialVar_ItemId) - 1; + if (!InBattlePyramid()) + { + *gUnknown_0203CE54 = gUnknown_085920D8[type]; + unknown_ItemMenu_Confirm(taskId); + } + else + { + *gUnknown_0203CF2C = gUnknown_085920D8[type]; + sub_81C5B14(taskId); + } +} + +void SetUpItemUseOnFieldCallback(u8 taskId) +{ + if (gTasks[taskId].data[3] != 1) + { + gFieldCallback = MapPostLoadHook_UseItem; + SetUpItemUseCallback(taskId); + } + else + gUnknown_0203A0F4(taskId); +} + +void MapPostLoadHook_UseItem(void) +{ + pal_fill_black(); + CreateTask(Task_CallItemUseOnFieldCallback, 8); +} + +void Task_CallItemUseOnFieldCallback(u8 taskId) +{ + if (sub_80ABDFC() == 1) + gUnknown_0203A0F4(taskId); +} + +void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + if (!isUsingRegisteredKeyItemOnField) + { + if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + else + DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714); + } + else + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField); +} + +void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) +{ + DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_DadsAdvice); +} + +void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) +{ + DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_CantDismountBike); +} + +void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId) +{ + sub_8197434(0, 1); + DestroyTask(taskId); + sub_80984F4(); + ScriptContext2_Disable(); +} + +u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) +{ + if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_TMHM) + return 1; + else if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_EvolutionStone) + return 2; + else + return 0; +} + +void sub_80FD254() +{ + struct MailStruct mail; + mail.itemId = gSpecialVar_ItemId; + ReadMail(&mail, bag_menu_mail_related, 0); +} + +void ItemUseOutOfBattle_Mail(u8 taskId) +{ + *gUnknown_0203CE54 = sub_80FD254; + unknown_ItemMenu_Confirm(taskId); +} + +void ItemUseOutOfBattle_Bike(u8 taskId) +{ + s16* data = gTasks[taskId].data; + s16 coordsY; + s16 coordsX; + u8 behavior; + PlayerGetDestCoords(&coordsX, &coordsY); + behavior = MapGridGetMetatileBehaviorAt(coordsX, coordsY); + if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(behavior) == TRUE || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) + DisplayCannotDismountBikeMessage(taskId, data[3]); + else + { + if (sav1_map_is_biking_allowed() == TRUE && IsBikingDisallowedByPlayer() == 0) + { + gUnknown_0203A0F4 = ItemUseOnFieldCB_Bike; + SetUpItemUseOnFieldCallback(taskId); + } + else + DisplayDadsAdviceCannotUseItemMessage(taskId, data[3]); + } +} + +void ItemUseOnFieldCB_Bike(u8 taskId) +{ + if (!ItemId_GetSecondaryId(gSpecialVar_ItemId)) + GetOnOffBike(2); + else + GetOnOffBike(4); + sub_80984F4(); + ScriptContext2_Disable(); + DestroyTask(taskId); +} + +bool32 CanFish() +{ + s16 x, y; + u16 tileBehavior; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + + if (MetatileBehavior_IsWaterfall(tileBehavior)) + return FALSE; + + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4)) + return FALSE; + + if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + if (IsPlayerFacingSurfableFishableWater()) + return TRUE; + } + else + { + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y)) + return TRUE; + if (MetatileBehavior_8089510(tileBehavior) == TRUE) + return TRUE; + } + + return FALSE; +} + +void ItemUseOutOfBattle_Rod(u8 taskId) +{ + if (CanFish() == TRUE) + { + gUnknown_0203A0F4 = ItemUseOnFieldCB_Rod; + SetUpItemUseOnFieldCallback(taskId); + } + else + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); +} + +void ItemUseOnFieldCB_Rod(u8 taskId) +{ + StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId)); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_Itemfinder(u8 var) +{ + IncrementGameStat(0x27); + gUnknown_0203A0F4 = ItemUseOnFieldCB_Itemfinder; + SetUpItemUseOnFieldCallback(var); +} + +void ItemUseOnFieldCB_Itemfinder(u8 taskId) +{ + if (ItemfinderCheckForHiddenItems(gMapHeader.events, taskId) == TRUE) + gTasks[taskId].func = sub_80FD504; + else + DisplayItemMessageOnField(taskId, gText_ItemFinderNothing, sub_80FD5CC); +} + +void sub_80FD504(u8 taskId) +{ + u8 playerDir; + u8 playerDirToItem; + u8 i; + s16* data = gTasks[taskId].data; + if (!data[3]) + { + if (data[4] == 4) + { + playerDirToItem = sub_80FD9B0(data[0], data[1]); + if (playerDirToItem) + { + sub_80FDA24(gUnknown_085920E4[playerDirToItem - 1]); + gTasks[taskId].func = sub_80FDA94; + } + else + { + playerDir = player_get_direction_lower_nybble(); + for (i = 0; i < 4; i++) + { + if (playerDir == gUnknown_085920E4[i]) + data[5] = (i + 1) & 3; + } + gTasks[taskId].func = sub_80FDADC; + data[3] = 0; + data[2] = 0; + } + return; + } + PlaySE(SE_DAUGI); + data[4]++; + } + data[3] = (data[3] + 1) & 0x1F; +} + +void sub_80FD5CC(u8 taskId) +{ + sub_8197434(0, 1); + sub_80984F4(); + ScriptContext2_Disable(); + DestroyTask(taskId); +} + +bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId) +{ + int distanceX, distanceY; + s16 x, y, i, newDistanceX, newDistanceY; + PlayerGetDestCoords(&x, &y); + gTasks[taskId].data[2] = FALSE; + for (i = 0; i < events->bgEventCount; i++) + { + if (events->bgEvents[i].kind == 7 && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4)) + { + distanceX = (u16)events -> bgEvents[i].x + 7; + newDistanceX = distanceX - x; + distanceY = (u16)events -> bgEvents[i].y + 7; + newDistanceY = distanceY - y; + + if ((u16)(newDistanceX + 7) < 15 && (newDistanceY >= -5) && (newDistanceY < 6)) + sub_80FD8E0(taskId, newDistanceX, newDistanceY); + } + } + + sub_80FD7C8(taskId); + if (gTasks[taskId].data[2] == TRUE) + return TRUE; + else + return FALSE; +} + +bool8 sub_80FD6D4(struct MapEvents *events, s16 x, s16 y) +{ + u8 bgEventCount = events->bgEventCount; + struct BgEvent *bgEvent = events->bgEvents; + int i; + + for (i = 0; i < bgEventCount; i++) + { + if (bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed? + { + if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4)) + return TRUE; + else + return FALSE; + } + } + return FALSE; +} + +bool8 sub_80FD730(struct MapConnection *connection, int x, int y) +{ + struct MapHeader *mapHeader; + u16 localX, localY; + u32 localOffset; + s32 localLength; + + mapHeader = mapconnection_get_mapheader(connection); + + switch (connection->direction) + { + // same weird temp variable behavior seen in sub_80FD6D4 + case 2: + localOffset = connection->offset + 7; + localX = x - localOffset; + localLength = mapHeader->mapData->height - 7; + localY = localLength + y; // additions are reversed for some reason + break; + case 1: + localOffset = connection->offset + 7; + localX = x - localOffset; + localLength = gMapHeader.mapData->height + 7; + localY = y - localLength; + break; + case 3: + localLength = mapHeader->mapData->width - 7; + localX = localLength + x; // additions are reversed for some reason + localOffset = connection->offset + 7; + localY = y - localOffset; + break; + case 4: + localLength = gMapHeader.mapData->width + 7; + localX = x - localLength; + localOffset = connection->offset + 7; + localY = y - localOffset; + break; + default: + return FALSE; + } + return sub_80FD6D4(mapHeader->events, localX, localY); +} + +// weird math +#ifdef NONMATCHING +void sub_80FD7C8(u8 taskId) +{ + s16 x, y; + s16 curX, curY; + s16 width = gMapHeader.mapData->width + 7; + s16 height = gMapHeader.mapData->height + 7; + + PlayerGetDestCoords(&x, &y); + + for (curX = x - 7; curX <= x + 7; curX++) + { + for (curY = y - 5; curY <= y + 5; curY++) + { + if (7 > curX + || curX >= width + || 7 > curY + || curY >= height) + { + struct MapConnection *conn = sub_8088A8C(curX, curY); + if (conn && sub_80FD730(conn, curX, curY) == TRUE) + sub_80FD8E0(taskId, curX - x, curY - y); + } + } + } +} +#else +__attribute__((naked)) +void sub_80FD7C8(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + ldr r0, =gMapHeader\n\ + ldr r1, [r0]\n\ + ldr r0, [r1]\n\ + adds r0, 0x7\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + ldr r0, [r1, 0x4]\n\ + adds r0, 0x7\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0xC]\n\ + mov r4, sp\n\ + adds r4, 0x2\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl PlayerGetDestCoords\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + subs r0, 0x7\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + mov r1, sp\n\ + movs r2, 0\n\ + ldrsh r1, [r1, r2]\n\ + adds r1, 0x7\n\ + cmp r0, r1\n\ + bgt _080FD8CC\n\ +_080FD816:\n\ + mov r5, sp\n\ + ldrh r0, [r5, 0x2]\n\ + subs r0, 0x5\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r2, r4, 16\n\ + asrs r1, r2, 16\n\ + movs r6, 0x2\n\ + ldrsh r0, [r5, r6]\n\ + adds r0, 0x5\n\ + lsls r3, 16\n\ + mov r8, r3\n\ + cmp r1, r0\n\ + bgt _080FD8B6\n\ + movs r0, 0x7\n\ + str r0, [sp, 0x10]\n\ + mov r1, r8\n\ + asrs r1, 16\n\ + mov r9, r1\n\ + mov r10, r0\n\ +_080FD83E:\n\ + ldr r3, [sp, 0x10]\n\ + cmp r3, r9\n\ + bgt _080FD860\n\ + ldr r5, [sp, 0x8]\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + cmp r9, r0\n\ + bge _080FD860\n\ + asrs r1, r2, 16\n\ + cmp r10, r1\n\ + bgt _080FD860\n\ + ldr r6, [sp, 0xC]\n\ + lsls r0, r6, 16\n\ + asrs r0, 16\n\ + lsls r7, r4, 16\n\ + cmp r1, r0\n\ + blt _080FD89E\n\ +_080FD860:\n\ + mov r0, r8\n\ + asrs r5, r0, 16\n\ + lsls r4, 16\n\ + asrs r6, r4, 16\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl sub_8088A8C\n\ + adds r7, r4, 0\n\ + cmp r0, 0\n\ + beq _080FD89E\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + bl sub_80FD730\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080FD89E\n\ + mov r0, sp\n\ + ldrh r1, [r0]\n\ + subs r1, r5, r1\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + ldrh r2, [r0, 0x2]\n\ + subs r2, r6, r2\n\ + lsls r2, 16\n\ + asrs r2, 16\n\ + ldr r0, [sp, 0x4]\n\ + bl sub_80FD8E0\n\ +_080FD89E:\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r0, r7, r1\n\ + lsrs r4, r0, 16\n\ + lsls r2, r4, 16\n\ + asrs r1, r2, 16\n\ + mov r3, sp\n\ + movs r5, 0x2\n\ + ldrsh r0, [r3, r5]\n\ + adds r0, 0x5\n\ + cmp r1, r0\n\ + ble _080FD83E\n\ +_080FD8B6:\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + add r1, r8\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + mov r0, sp\n\ + movs r6, 0\n\ + ldrsh r0, [r0, r6]\n\ + adds r0, 0x7\n\ + cmp r1, r0\n\ + ble _080FD816\n\ +_080FD8CC:\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided\n"); +} +#endif + +void sub_80FD8E0(u8 taskId, s16 x, s16 y) +{ + s16 *data = gTasks[taskId].data; + s16 var1, var2, var3, var4; + + if (data[2] == FALSE) + { + data[0] = x; + data[1] = y; + data[2] = TRUE; + } + else + { + // data[0] and data[1] contain the player's coordinates. + // x and y contain the item's coordinates. + if (data[0] < 0) + var1 = data[0] * -1; // item is to the left + else + var1 = data[0]; // item is to the right + + if (data[1] < 0) + var2 = data[1] * -1; // item is to the north + else + var2 = data[1]; // item is to the south + + if (x < 0) + var3 = x * -1; + else + var3 = x; + + if (y < 0) + var4 = y * -1; + else + var4 = y; + + if (var1 + var2 > var3 + var4) + { + data[0] = x; + data[1] = y; + } + else + { + if (var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y))) + { + data[0] = x; + data[1] = y; + } + } + } +} + +u8 sub_80FD9B0(s16 itemX, s16 itemY) +{ + s16 abX, abY; + + if (itemX == 0 && itemY == 0) + return DIR_NONE; // player is standing on the item. + + // get absolute X distance. + if (itemX < 0) + abX = itemX * -1; + else + abX = itemX; + + // get absolute Y distance. + if (itemY < 0) + abY = itemY * -1; + else + abY = itemY; + + if (abX > abY) + { + if (itemX < 0) + return DIR_EAST; + else + return DIR_NORTH; + } + else + { + if (abX < abY) + { + if (itemY < 0) + return DIR_SOUTH; + else + return DIR_WEST; + } + if (abX == abY) + { + if (itemY < 0) + return DIR_SOUTH; + else + return DIR_WEST; + } + return DIR_NONE; // should never get here. return something so it doesnt crash. + } +} + +void sub_80FDA24(u8 direction) +{ + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); + FieldObjectClearAnim(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); + npc_sync_anim_pause_bits(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); + PlayerTurnInPlace(direction); +} + +void sub_80FDA94(u8 taskId) +{ + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE) + DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, sub_80FD5CC); +} + +void sub_80FDADC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE + || data[2] == FALSE) + { + sub_80FDA24(gUnknown_085920E4[data[5]]); + data[2] = 1; + data[5] = (data[5] + 1) & 3; + data[3]++; + + if (data[3] == 4) + DisplayItemMessageOnField(taskId, gText_ItemFinderOnTop, sub_80FD5CC); + } +} + +void ItemUseOutOfBattle_PokeblockCase(u8 taskId) +{ + if (sub_81221AC() == TRUE) + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + } + else if (gTasks[taskId].data[3] != TRUE) + { + *gUnknown_0203CE54 = sub_80FDBEC; + unknown_ItemMenu_Confirm(taskId); + } + else + { + gFieldCallback = sub_80AF6D4; + fade_screen(1, 0); + gTasks[taskId].func = sub_80FDC00; + } +} + +void sub_80FDBEC(void) +{ + OpenPokeblockCase(0, bag_menu_mail_related); +} + +void sub_80FDC00(u8 taskId) +{ + if (!gPaletteFade.active) + { + overworld_free_bg_tilemaps(); + OpenPokeblockCase(0, c2_exit_to_overworld_2_switch); + DestroyTask(taskId); + } +} + +void ItemUseOutOfBattle_CoinCase(u8 taskId) +{ + ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4); + StringExpandPlaceholders(gStringVar4, gText_CoinCase); + + if (!gTasks[taskId].data[3]) + { + DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + } + else + { + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField); + } +} + +void ItemUseOutOfBattle_PowderJar(u8 taskId) +{ + ConvertIntToDecimalStringN(gStringVar1, sub_80247BC(), 0, 5); + StringExpandPlaceholders(gStringVar4, gText_PowderQty); + + if (!gTasks[taskId].data[3]) + { + DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + } + else + { + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField); + } +} + +void sub_80FDD10(u8 taskId) +{ + if (IsPlayerFacingPlantedBerryTree() == TRUE) + { + gUnknown_0203A0F4 = sub_80FDD74; + gFieldCallback = MapPostLoadHook_UseItem; + *gUnknown_0203CE54 = c2_exit_to_overworld_2_switch; + unknown_ItemMenu_Confirm(taskId); + } + else + { + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); + } +} + +void sub_80FDD74(u8 taskId) +{ + RemoveBagItem(gSpecialVar_ItemId, 1); + ScriptContext2_Enable(); + ScriptContext1_SetupScript(Route102_EventScript_274482); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_WailmerPail(u8 taskId) +{ + if (sub_80FDE2C() == TRUE) + { + gUnknown_0203A0F4 = sub_80FDE7C; + SetUpItemUseOnFieldCallback(taskId); + } + else if (TryToWaterBerryTree() == TRUE) + { + gUnknown_0203A0F4 = sub_80FDE08; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + } +} + +void sub_80FDE08(u8 taskId) +{ + ScriptContext2_Enable(); + ScriptContext1_SetupScript(Route102_EventScript_2744C0); + DestroyTask(taskId); +} + +bool8 sub_80FDE2C(void) +{ + u16 x, y; + u8 z; + u8 objId; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + z = PlayerGetZCoord(); + objId = GetFieldObjectIdByXYZ(x, y, z); + if (objId == 16 || gMapObjects[objId].graphicsId != 0xE4) + { + return FALSE; + } + else + return TRUE; +} + +void sub_80FDE7C(u8 taskId) +{ + ScriptContext2_Enable(); + ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_242CFC); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_Medicine(u8 taskId) +{ + gUnknown_03006328 = ItemUseCB_Medicine; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_ReduceEV(u8 taskId) +{ + gUnknown_03006328 = sub_81B67C8; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_SacredAsh(u8 taskId) +{ + gUnknown_03006328 = sub_81B79E8; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_PPRecovery(u8 taskId) +{ + gUnknown_03006328 = dp05_ether; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_PPUp(u8 taskId) +{ + gUnknown_03006328 = dp05_pp_up; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_RareCandy(u8 taskId) +{ + gUnknown_03006328 = dp05_rare_candy; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_TMHM(u8 taskId) +{ + if (gSpecialVar_ItemId >= ITEM_HM01) + DisplayItemMessage(taskId, 1, gText_BootedUpHM, sub_80FDF90); // HM + else + DisplayItemMessage(taskId, 1, gText_BootedUpTM, sub_80FDF90); // TM +} + +void sub_80FDF90(u8 taskId) +{ + PlaySE(SE_PC_LOGIN); + gTasks[taskId].func = task08_0809AD8C; +} + +void task08_0809AD8C(u8 taskId) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); + StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1); + DisplayItemMessage(taskId, 1, gStringVar4, sub_80FE024); + } +} + +void sub_80FE024(u8 taskId) +{ + bag_menu_yes_no(taskId, 6, gUnknown_085920E8); +} + +void sub_80FE03C(u8 taskId) +{ + gUnknown_03006328 = sub_81B6DC4; + SetUpItemUseCallback(taskId); +} + +void sub_80FE058(void) +{ + RemoveBagItem(gSpecialVar_ItemId, 1); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); + if (!InBattlePyramid()) + { + sub_81AB9A8(ItemId_GetPocket(gSpecialVar_ItemId)); + sub_81ABA88(ItemId_GetPocket(gSpecialVar_ItemId)); + } + else + { + sub_81C5924(); + sub_81C59BC(); + } +} + +void ItemUseOutOfBattle_Repel(u8 taskId) +{ + if (VarGet(VAR_REPEL_STEP_COUNT) == 0) + gTasks[taskId].func = sub_80FE124; + else if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, bag_menu_inits_lists_menu); + else + DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, sub_81C6714); +} + +void sub_80FE124(u8 taskId) +{ + s16* data = gTasks[taskId].data; + + if (++data[8] > 7) + { + data[8] = 0; + PlaySE(SE_TU_SAA); + gTasks[taskId].func = sub_80FE164; + } +} + +void sub_80FE164(u8 taskId) +{ + if (!IsSEPlaying()) + { + VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); + sub_80FE058(); + if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + else + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714); + } +} + +void sub_80FE1D0(u8 taskId) +{ + if(++gTasks[taskId].data[8] > 7) + { + PlaySE(SE_BIDORO); + if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + else + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714); + } +} + +void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) +{ + CopyItemName(gSpecialVar_ItemId, gStringVar2); + if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE) + { + FlagSet(FLAG_SYS_ENC_UP_ITEM); + FlagClear(FLAG_SYS_ENC_DOWN_ITEM); + StringExpandPlaceholders(gStringVar4, gText_UsedVar2WildLured); + } + else + { + FlagSet(FLAG_SYS_ENC_DOWN_ITEM); + FlagClear(FLAG_SYS_ENC_UP_ITEM); + StringExpandPlaceholders(gStringVar4, gText_UsedVar2WildRepelled); + } + gTasks[taskId].data[8] = 0; + gTasks[taskId].func = sub_80FE1D0; +} + +void task08_080A1C44(u8 taskId) +{ + player_avatar_init_params_reset(); + sub_80B7CC8(); + DestroyTask(taskId); +} + +void re_escape_rope(u8 taskId) +{ + flagmods_08054D70(); + sub_80FE058(); + gTasks[taskId].data[0] = 0; + DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44); +} + +bool8 sub_80FE314(void) +{ + if (gMapHeader.flags & 2) + return TRUE; + else + return FALSE; +} + +void ItemUseOutOfBattle_EscapeRope(u8 taskId) +{ + if (sub_80FE314() == TRUE) + { + gUnknown_0203A0F4 = re_escape_rope; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + } +} + +void ItemUseOutOfBattle_EvolutionStone(u8 taskId) +{ + gUnknown_03006328 = sub_81B7C74; + SetUpItemUseCallback(taskId); +} + +void ItemUseInBattle_PokeBall(u8 taskId) +{ + if (IsPlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon? + { + RemoveBagItem(gSpecialVar_ItemId, 1); + if (!InBattlePyramid()) + unknown_ItemMenu_Confirm(taskId); + else + sub_81C5B14(taskId); + } + else if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gText_BoxFull, bag_menu_inits_lists_menu); + else + DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, sub_81C6714); +} + +void sub_80FE408(u8 taskId) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + if (!InBattlePyramid()) + unknown_ItemMenu_Confirm(taskId); + else + sub_81C5B14(taskId); + } +} + +void sub_80FE440(u8 taskId) +{ + if(++gTasks[taskId].data[8] > 7) + { + PlaySE(SE_KAIFUKU); + RemoveBagItem(gSpecialVar_ItemId, 1); + if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, sub_806CF78(gSpecialVar_ItemId), sub_80FE408); + else + DisplayItemMessageInBattlePyramid(taskId, sub_806CF78(gSpecialVar_ItemId), sub_80FE408); + } +} + +void ItemUseInBattle_StatIncrease(u8 taskId) +{ + u16 partyId = gBattlePartyID[gBankInMenu]; + + if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) + { + if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gText_WontHaveEffect, bag_menu_inits_lists_menu); + else + DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, sub_81C6714); + } + else + { + gTasks[taskId].func = sub_80FE440; + gTasks[taskId].data[8] = 0; + } +} + +void sub_80FE54C(u8 taskId) +{ + if (!InBattlePyramid()) + { + *gUnknown_0203CE54 = sub_81B89F0; + unknown_ItemMenu_Confirm(taskId); + } + else + { + *gUnknown_0203CF2C = sub_81B89F0; + sub_81C5B14(taskId); + } +} + +void ItemUseInBattle_Medicine(u8 taskId) +{ + gUnknown_03006328 = ItemUseCB_Medicine; + sub_80FE54C(taskId); +} + +void sub_80FE5AC(u8 taskId) +{ + gUnknown_03006328 = sub_81B79E8; + sub_80FE54C(taskId); +} + +void ItemUseInBattle_PPRecovery(u8 taskId) +{ + gUnknown_03006328 = dp05_ether; + sub_80FE54C(taskId); +} + +void ItemUseInBattle_Escape(u8 taskId) +{ + + if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) + { + sub_80FE058(); + if (!InBattlePyramid()) + DisplayItemMessage(taskId, 1, gStringVar4, unknown_ItemMenu_Confirm); + else + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C5B14); + } + else + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + } +} + +void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) +{ + switch (GetItemEffectType(gSpecialVar_ItemId) - 1) + { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + gTasks[taskId].data[4] = 1; + ItemUseOutOfBattle_Medicine(taskId); + break; + case 9: + gTasks[taskId].data[4] = 1; + ItemUseOutOfBattle_SacredAsh(taskId); + break; + case 0: + gTasks[taskId].data[4] = 1; + ItemUseOutOfBattle_RareCandy(taskId); + break; + case 18: + case 19: + gTasks[taskId].data[4] = 1; + ItemUseOutOfBattle_PPUp(taskId); + break; + case 20: + gTasks[taskId].data[4] = 1; + ItemUseOutOfBattle_PPRecovery(taskId); + break; + default: + gTasks[taskId].data[4] = 4; + ItemUseOutOfBattle_CannotUse(taskId); + } +} + +void ItemUseInBattle_EnigmaBerry(u8 taskId) +{ + switch (GetItemEffectType(gSpecialVar_ItemId)) + { + case 0: + ItemUseInBattle_StatIncrease(taskId); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 11: + ItemUseInBattle_Medicine(taskId); + break; + case 21: + ItemUseInBattle_PPRecovery(taskId); + break; + default: + ItemUseOutOfBattle_CannotUse(taskId); + } +} + +void ItemUseOutOfBattle_CannotUse(u8 taskId) +{ + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); +} -- cgit v1.2.3 From ed546d680f726e068183f94d0104a251f75fbfe2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 29 Jan 2018 12:36:56 +0100 Subject: pokemon animation is decompiled --- src/hall_of_fame.c | 3 +- src/pokemon_3.c | 11 +- src/pokemon_animation.c | 2135 +++++++++++++++++++++++++++++++++-------------- 3 files changed, 1502 insertions(+), 647 deletions(-) (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 3e70e22fa..38183e807 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -25,6 +25,7 @@ #include "random.h" #include "event_data.h" #include "overworld.h" +#include "new_menu_helpers.h" struct HallofFameMon { @@ -53,7 +54,6 @@ static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL; extern bool8 gHasHallOfFameRecords; extern u32 gUnknown_0203BCD4; -extern u8 gDecompressionBuffer[]; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern MainCallback gGameContinueCallback; extern u32 gDamagedSaveSectors; @@ -82,7 +82,6 @@ extern const u8 gContestConfetti_Gfx[]; extern const u8 gContestConfetti_Pal[]; extern void sub_81973C4(u8, u8); -extern u16 AddTextPrinterParametrized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void ( *callback)(u16, struct TextPrinter *), u8 fgColor, u8 bgColor, u8 shadowColor); extern void sub_8175620(void); extern u8 TrySavingData(u8); extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 95ec4b6a2..7ffb2f36a 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -74,8 +74,6 @@ extern u8 GetFrontierOpponentClass(u16 trainerId); extern u8 pokemon_order_func(u8 bankPartyId); extern void GetFrontierTrainerName(u8* dest, u16 trainerId); extern void sub_81C488C(u8); -extern void sub_817F578(struct Sprite*, u8 frontAnimId); -extern u8 GetSpeciesBackAnimId(u16 species); static void sub_806E6CC(u8 taskId); @@ -1508,7 +1506,7 @@ static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId) { if (--gTasks[taskId].data[3] == 0) { - sub_817F578(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]); + StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]); sub_81C488C(0xFF); DestroyTask(taskId); } @@ -1523,7 +1521,6 @@ void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u } extern void SpriteCallbackDummy_2(struct Sprite*); -extern void sub_817F60C(struct Sprite*); void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3) { @@ -1580,11 +1577,11 @@ void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneF gTasks[taskId].data[2] = gMonFrontAnimIdsTable[species - 1]; gTasks[taskId].data[3] = gMonAnimationDelayTable[species - 1]; sub_81C488C(taskId); - sub_817F60C(sprite); + SetSpriteCB_MonAnimDummy(sprite); } else { - sub_817F578(sprite, gMonFrontAnimIdsTable[species - 1]); + StartMonSummaryAnimation(sprite, gMonFrontAnimIdsTable[species - 1]); } } @@ -1603,7 +1600,7 @@ void BattleAnimateBackSprite(struct Sprite* sprite, u16 species) } else { - LaunchAnimationTaskForBackSprite(sprite, GetSpeciesBackAnimId(species)); + LaunchAnimationTaskForBackSprite(sprite, GetSpeciesBackAnimSet(species)); sprite->callback = SpriteCallbackDummy_2; } } diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 67915d228..c8fcff93a 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -16,167 +16,171 @@ struct UnkAnimStruct }; extern u16 gBattlePartyID[]; -extern bool32 gUnknown_03001274; -extern struct UnkAnimStruct gUnknown_03001240[]; -extern u8 gUnknown_03001270; // this file's functions -void pokemonanimfunc_00(struct Sprite *sprite); -void pokemonanimfunc_01(struct Sprite *sprite); -void pokemonanimfunc_02(struct Sprite *sprite); -void pokemonanimfunc_03(struct Sprite *sprite); -void pokemonanimfunc_04(struct Sprite *sprite); -void pokemonanimfunc_05(struct Sprite *sprite); -void pokemonanimfunc_06(struct Sprite *sprite); -void pokemonanimfunc_07(struct Sprite *sprite); -void pokemonanimfunc_08(struct Sprite *sprite); -void pokemonanimfunc_09(struct Sprite *sprite); -void pokemonanimfunc_0A(struct Sprite *sprite); -void pokemonanimfunc_0B(struct Sprite *sprite); -void pokemonanimfunc_0C(struct Sprite *sprite); -void pokemonanimfunc_0D(struct Sprite *sprite); -void pokemonanimfunc_0E(struct Sprite *sprite); -void pokemonanimfunc_0F(struct Sprite *sprite); -void pokemonanimfunc_10(struct Sprite *sprite); -void pokemonanimfunc_11(struct Sprite *sprite); -void pokemonanimfunc_12(struct Sprite *sprite); -void pokemonanimfunc_13(struct Sprite *sprite); -void pokemonanimfunc_14(struct Sprite *sprite); -void pokemonanimfunc_15(struct Sprite *sprite); -void pokemonanimfunc_16(struct Sprite *sprite); -void pokemonanimfunc_17(struct Sprite *sprite); -void pokemonanimfunc_18(struct Sprite *sprite); -void pokemonanimfunc_19(struct Sprite *sprite); -void pokemonanimfunc_1A(struct Sprite *sprite); -void pokemonanimfunc_1B(struct Sprite *sprite); -void pokemonanimfunc_1C(struct Sprite *sprite); -void pokemonanimfunc_1D(struct Sprite *sprite); -void pokemonanimfunc_1E(struct Sprite *sprite); -void pokemonanimfunc_1F(struct Sprite *sprite); -void pokemonanimfunc_20(struct Sprite *sprite); -void pokemonanimfunc_21(struct Sprite *sprite); -void pokemonanimfunc_22(struct Sprite *sprite); -void pokemonanimfunc_23(struct Sprite *sprite); -void pokemonanimfunc_24(struct Sprite *sprite); -void pokemonanimfunc_25(struct Sprite *sprite); -void pokemonanimfunc_26(struct Sprite *sprite); -void pokemonanimfunc_27(struct Sprite *sprite); -void pokemonanimfunc_28(struct Sprite *sprite); -void pokemonanimfunc_29(struct Sprite *sprite); -void pokemonanimfunc_2A(struct Sprite *sprite); -void pokemonanimfunc_2B(struct Sprite *sprite); -void pokemonanimfunc_2C(struct Sprite *sprite); -void pokemonanimfunc_2D(struct Sprite *sprite); -void pokemonanimfunc_2E(struct Sprite *sprite); -void pokemonanimfunc_2F(struct Sprite *sprite); -void pokemonanimfunc_30(struct Sprite *sprite); -void pokemonanimfunc_31(struct Sprite *sprite); -void pokemonanimfunc_32(struct Sprite *sprite); -void pokemonanimfunc_33(struct Sprite *sprite); -void pokemonanimfunc_34(struct Sprite *sprite); -void pokemonanimfunc_35(struct Sprite *sprite); -void pokemonanimfunc_36(struct Sprite *sprite); -void pokemonanimfunc_37(struct Sprite *sprite); -void pokemonanimfunc_38(struct Sprite *sprite); -void pokemonanimfunc_39(struct Sprite *sprite); -void pokemonanimfunc_3A(struct Sprite *sprite); -void pokemonanimfunc_3B(struct Sprite *sprite); -void pokemonanimfunc_3C(struct Sprite *sprite); -void pokemonanimfunc_3D(struct Sprite *sprite); -void pokemonanimfunc_3E(struct Sprite *sprite); -void pokemonanimfunc_3F(struct Sprite *sprite); -void pokemonanimfunc_40(struct Sprite *sprite); -void pokemonanimfunc_41(struct Sprite *sprite); -void pokemonanimfunc_42(struct Sprite *sprite); -void pokemonanimfunc_43(struct Sprite *sprite); -void pokemonanimfunc_44(struct Sprite *sprite); -void pokemonanimfunc_45(struct Sprite *sprite); -void pokemonanimfunc_46(struct Sprite *sprite); -void pokemonanimfunc_47(struct Sprite *sprite); -void pokemonanimfunc_48(struct Sprite *sprite); -void pokemonanimfunc_49(struct Sprite *sprite); -void pokemonanimfunc_4A(struct Sprite *sprite); -void pokemonanimfunc_4B(struct Sprite *sprite); -void pokemonanimfunc_4C(struct Sprite *sprite); -void pokemonanimfunc_4D(struct Sprite *sprite); -void pokemonanimfunc_4E(struct Sprite *sprite); -void pokemonanimfunc_4F(struct Sprite *sprite); -void pokemonanimfunc_50(struct Sprite *sprite); -void pokemonanimfunc_51(struct Sprite *sprite); -void pokemonanimfunc_52(struct Sprite *sprite); -void pokemonanimfunc_53(struct Sprite *sprite); -void pokemonanimfunc_54(struct Sprite *sprite); -void pokemonanimfunc_55(struct Sprite *sprite); -void pokemonanimfunc_56(struct Sprite *sprite); -void pokemonanimfunc_57(struct Sprite *sprite); -void pokemonanimfunc_58(struct Sprite *sprite); -void pokemonanimfunc_59(struct Sprite *sprite); -void pokemonanimfunc_5A(struct Sprite *sprite); -void pokemonanimfunc_5B(struct Sprite *sprite); -void pokemonanimfunc_5C(struct Sprite *sprite); -void pokemonanimfunc_5D(struct Sprite *sprite); -void pokemonanimfunc_5E(struct Sprite *sprite); -void pokemonanimfunc_5F(struct Sprite *sprite); -void pokemonanimfunc_60(struct Sprite *sprite); -void pokemonanimfunc_61(struct Sprite *sprite); -void pokemonanimfunc_62(struct Sprite *sprite); -void pokemonanimfunc_63(struct Sprite *sprite); -void pokemonanimfunc_64(struct Sprite *sprite); -void pokemonanimfunc_65(struct Sprite *sprite); -void pokemonanimfunc_66(struct Sprite *sprite); -void pokemonanimfunc_67(struct Sprite *sprite); -void pokemonanimfunc_68(struct Sprite *sprite); -void pokemonanimfunc_69(struct Sprite *sprite); -void pokemonanimfunc_6A(struct Sprite *sprite); -void pokemonanimfunc_6B(struct Sprite *sprite); -void pokemonanimfunc_6C(struct Sprite *sprite); -void pokemonanimfunc_6D(struct Sprite *sprite); -void pokemonanimfunc_6E(struct Sprite *sprite); -void pokemonanimfunc_6F(struct Sprite *sprite); -void pokemonanimfunc_70(struct Sprite *sprite); -void pokemonanimfunc_71(struct Sprite *sprite); -void pokemonanimfunc_72(struct Sprite *sprite); -void pokemonanimfunc_73(struct Sprite *sprite); -void pokemonanimfunc_74(struct Sprite *sprite); -void pokemonanimfunc_75(struct Sprite *sprite); -void pokemonanimfunc_76(struct Sprite *sprite); -void pokemonanimfunc_77(struct Sprite *sprite); -void pokemonanimfunc_78(struct Sprite *sprite); -void pokemonanimfunc_79(struct Sprite *sprite); -void pokemonanimfunc_7A(struct Sprite *sprite); -void pokemonanimfunc_7B(struct Sprite *sprite); -void pokemonanimfunc_7C(struct Sprite *sprite); -void pokemonanimfunc_7D(struct Sprite *sprite); -void pokemonanimfunc_7E(struct Sprite *sprite); -void pokemonanimfunc_7F(struct Sprite *sprite); -void pokemonanimfunc_80(struct Sprite *sprite); -void pokemonanimfunc_81(struct Sprite *sprite); -void pokemonanimfunc_82(struct Sprite *sprite); -void pokemonanimfunc_83(struct Sprite *sprite); -void pokemonanimfunc_84(struct Sprite *sprite); -void pokemonanimfunc_85(struct Sprite *sprite); -void pokemonanimfunc_86(struct Sprite *sprite); -void pokemonanimfunc_87(struct Sprite *sprite); -void pokemonanimfunc_88(struct Sprite *sprite); -void pokemonanimfunc_89(struct Sprite *sprite); -void pokemonanimfunc_8A(struct Sprite *sprite); -void pokemonanimfunc_8B(struct Sprite *sprite); -void pokemonanimfunc_8C(struct Sprite *sprite); -void pokemonanimfunc_8D(struct Sprite *sprite); -void pokemonanimfunc_8E(struct Sprite *sprite); -void pokemonanimfunc_8F(struct Sprite *sprite); -void pokemonanimfunc_90(struct Sprite *sprite); -void pokemonanimfunc_91(struct Sprite *sprite); -void pokemonanimfunc_92(struct Sprite *sprite); -void pokemonanimfunc_93(struct Sprite *sprite); -void pokemonanimfunc_94(struct Sprite *sprite); -void pokemonanimfunc_95(struct Sprite *sprite); -void pokemonanimfunc_96(struct Sprite *sprite); - -void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite); +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 sSpeciesToBackAnimId[] = +static const u8 sSpeciesToBackAnimSet[] = { 0x00, // SPECIES_NONE 0x13, // SPECIES_BULBASAUR @@ -592,7 +596,7 @@ static const u8 sSpeciesToBackAnimId[] = 0x11, // SPECIES_CHIMECHO }; -const u8 gUnknown_0860AA64[][2] = +static const u8 sUnknown_0860AA64[][2] = { {0, 5}, {1, 1}, @@ -610,7 +614,7 @@ const u8 gUnknown_0860AA64[][2] = {0, 0xFF} }; -const u8 gUnknown_0860AA80[][2] = +static const u8 sUnknown_0860AA80[][2] = { {6, 30}, {0xFE, 15}, @@ -773,7 +777,7 @@ static void (* const sMonAnimFunctions[])(struct Sprite *sprite) = pokemonanimfunc_96 }; -// counting from Id 1, because 0 in sSpeciesToBackAnimId is used for mons with no back animation +// counting from Id 1, because 0 in sSpeciesToBackAnimSet is used for mons with no back animation static const u8 sBackAnimationIds[] = { 0x60, 0x5f, 0x02, // 1 @@ -832,30 +836,30 @@ static const u8 sBackAnimNatureModTable[] = 0x01, // NATURE_QUIRKY }; -static const union AffineAnimCmd gSpriteAffineAnim_860AD48[] = +static const union AffineAnimCmd sSpriteAffineAnim_860AD48[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), AFFINEANIMCMDTYPE_END }; -static const union AffineAnimCmd gSpriteAffineAnim_860AD58[] = +static const union AffineAnimCmd sSpriteAffineAnim_860AD58[] = { - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-256, 256, 0, 0), AFFINEANIMCMDTYPE_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_860AD68[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_860AD68[] = { - gSpriteAffineAnim_860AD48, - gSpriteAffineAnim_860AD58 + sSpriteAffineAnim_860AD48, + sSpriteAffineAnim_860AD58 }; // code -void MonAnimDummySpriteCallback(struct Sprite *sprite) +static void MonAnimDummySpriteCallback(struct Sprite *sprite) { } -void sub_817F3F0(struct Sprite *sprite, s16 index, s16 amplitudeX, s16 amplitudeY) +static void sub_817F3F0(struct Sprite *sprite, u16 index, s16 amplitudeX, s16 amplitudeY) { s16 xAdder, yAdder; @@ -872,38 +876,45 @@ void sub_817F3F0(struct Sprite *sprite, s16 index, s16 amplitudeX, s16 amplitude sprite->pos2.y = yAdder + amplitudeY; } -u8 GetSpeciesBackAnimId(u16 species) +u8 GetSpeciesBackAnimSet(u16 species) { - if (sSpeciesToBackAnimId[species] != 0) - return sSpeciesToBackAnimId[species] - 1; + if (sSpeciesToBackAnimSet[species] != 0) + return sSpeciesToBackAnimSet[species] - 1; else return 0; } -void sub_817F498(u8 taskId) +#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].data[1] << 0x10) | (gTasks[taskId].data[2])); + struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].tPtrLO << 0x10) | (gTasks[taskId].tPtrHI)); - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tState == 0) { - gTasks[taskId].data[4] = sprite->data[0]; - gTasks[taskId].data[5] = sprite->data[2]; + gTasks[taskId].tSaved0 = sprite->data[0]; + gTasks[taskId].tSaved2 = sprite->data[2]; sprite->data[1] = 1; sprite->data[0] = 0; for (i = 2; i < 8; i++) sprite->data[i] = 0; - sprite->callback = sMonAnimFunctions[gTasks[taskId].data[3]]; - gUnknown_03001274 = FALSE; + sprite->callback = sMonAnimFunctions[gTasks[taskId].tAnimId]; + sUnknown_03001274 = FALSE; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } if (sprite->callback == SpriteCallbackDummy) { - sprite->data[0] = gTasks[taskId].data[4]; - sprite->data[2] = gTasks[taskId].data[5]; + sprite->data[0] = gTasks[taskId].tSaved0; + sprite->data[2] = gTasks[taskId].tSaved2; sprite->data[1] = 0; DestroyTask(taskId); @@ -912,39 +923,46 @@ void sub_817F498(u8 taskId) void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) { - u8 taskId = CreateTask(sub_817F498, 128); - gTasks[taskId].data[1] = (u32)(sprite) >> 0x10; - gTasks[taskId].data[2] = (u32)(sprite); - gTasks[taskId].data[3] = frontAnimId; + u8 taskId = CreateTask(Task_HandleMonAnimation, 128); + gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tAnimId = frontAnimId; } -void sub_817F578(struct Sprite *sprite, u8 frontAnimId) +void StartMonSummaryAnimation(struct Sprite *sprite, u8 frontAnimId) { - gUnknown_03001274 = TRUE; + sUnknown_03001274 = TRUE; sprite->callback = sMonAnimFunctions[frontAnimId]; } -void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimId) +void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) { u8 nature, taskId, animId, bank; - taskId = CreateTask(sub_817F498, 128); - gTasks[taskId].data[1] = (u32)(sprite) >> 0x10; - gTasks[taskId].data[2] = (u32)(sprite); + taskId = CreateTask(Task_HandleMonAnimation, 128); + gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrHI = (u32)(sprite); bank = sprite->data[0]; nature = GetNature(&gPlayerParty[gBattlePartyID[bank]]); - animId = 3 * backAnimId + sBackAnimNatureModTable[nature]; - gTasks[taskId].data[3] = sBackAnimationIds[animId]; + animId = 3 * backAnimSet + sBackAnimNatureModTable[nature]; + gTasks[taskId].tAnimId = sBackAnimationIds[animId]; } -void sub_817F60C(struct Sprite *sprite) +#undef tState +#undef tPtrLO +#undef tPtrHI +#undef tAnimId +#undef tSaved0 +#undef tSaved2 + +void SetSpriteCB_MonAnimDummy(struct Sprite *sprite) { sprite->callback = MonAnimDummySpriteCallback; } -void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) +static void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) { u8 matrixNum; struct ObjAffineSrcData affineSrcData; @@ -963,12 +981,12 @@ void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) gOamMatrices[matrixNum].d = dest.d; } -void HandleStartAffineAnim(struct Sprite *sprite) +static void HandleStartAffineAnim(struct Sprite *sprite) { sprite->oam.affineMode = 3; - sprite->affineAnims = gSpriteAffineAnimTable_860AD68; + sprite->affineAnims = sSpriteAffineAnimTable_860AD68; - if (gUnknown_03001274 == TRUE) + if (sUnknown_03001274 == TRUE) InitSpriteAffineAnim(sprite); if (!sprite->data[1]) @@ -980,7 +998,7 @@ void HandleStartAffineAnim(struct Sprite *sprite) sprite->affineAnimPaused = 1; } -void HandleSetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) +static void HandleSetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) { if (!sprite->data[1]) { @@ -991,42 +1009,42 @@ void HandleSetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rota SetAffineData(sprite, xScale, yScale, rotation); } -void sub_817F70C(struct Sprite *sprite) +static void sub_817F70C(struct Sprite *sprite) { if (!sprite->data[1]) sprite->pos2.x *= -1; } -bool32 sub_817F724(u8 id) +static bool32 sub_817F724(u8 id) { - if (id >= 4) + if (id >= STRUCT_COUNT) { return FALSE; } else { - gUnknown_03001240[id].field_6 = 0; - gUnknown_03001240[id].field_0 = 0; - gUnknown_03001240[id].field_4 = 1; - gUnknown_03001240[id].field_2 = 0; - gUnknown_03001240[id].field_8 = 0; + 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; } } -u8 sub_817F758(void) +static u8 sub_817F758(void) { - gUnknown_03001270 = (gUnknown_03001270 + 1) % 4; - sub_817F724(gUnknown_03001270); - return gUnknown_03001270; + sUnknown_03001270 = (sUnknown_03001270 + 1) % STRUCT_COUNT; + sub_817F724(sUnknown_03001270); + return sUnknown_03001270; } -void sub_817F77C(struct Sprite *sprite) +static void sub_817F77C(struct Sprite *sprite) { sprite->oam.affineMode = 1; CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - if (gUnknown_03001274 == TRUE) + if (sUnknown_03001274 == TRUE) { if (!sprite->data[1]) sprite->hFlip = 1; @@ -1039,14 +1057,14 @@ void sub_817F77C(struct Sprite *sprite) } } -void pokemonanimfunc_01(struct Sprite *sprite) +static void pokemonanimfunc_01(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 40) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -1062,7 +1080,7 @@ void pokemonanimfunc_01(struct Sprite *sprite) sprite->data[2]++; } -void pokemonanimfunc_02(struct Sprite *sprite) +static void pokemonanimfunc_02(struct Sprite *sprite) { if (sprite->data[2] > 40) { @@ -1083,7 +1101,7 @@ void pokemonanimfunc_02(struct Sprite *sprite) sprite->data[2]++; } -void sub_817F8FC(struct Sprite *sprite) +static void sub_817F8FC(struct Sprite *sprite) { sub_817F70C(sprite); @@ -1101,14 +1119,14 @@ void sub_817F8FC(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_03(struct Sprite *sprite) +static void pokemonanimfunc_03(struct Sprite *sprite) { sprite->data[0] = 40; sub_817F8FC(sprite); sprite->callback = sub_817F8FC; } -void sub_817F978(struct Sprite *sprite) +static void sub_817F978(struct Sprite *sprite) { sub_817F70C(sprite); @@ -1126,7 +1144,7 @@ void sub_817F978(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_04(struct Sprite *sprite) +static void pokemonanimfunc_04(struct Sprite *sprite) { sprite->data[0] = 40; sub_817F978(sprite); @@ -1134,7 +1152,7 @@ void pokemonanimfunc_04(struct Sprite *sprite) } #ifdef NONMATCHING -void sub_817F9F4(struct Sprite *sprite) +static void sub_817F9F4(struct Sprite *sprite) { s32 counter = sprite->data[2]; @@ -1166,7 +1184,7 @@ void sub_817F9F4(struct Sprite *sprite) #else __attribute__((naked)) -void sub_817F9F4(struct Sprite *sprite) +static void sub_817F9F4(struct Sprite *sprite) { asm(".syntax unified\n\ push {r4,lr}\n\ @@ -1235,14 +1253,14 @@ _0817FA60:\n\ #endif // NONMATCHING -void pokemonanimfunc_1E(struct Sprite *sprite) +static void pokemonanimfunc_1E(struct Sprite *sprite) { sprite->data[0] = 4; sub_817F9F4(sprite); sprite->callback = sub_817F9F4; } -void pokemonanimfunc_06(struct Sprite *sprite) +static void pokemonanimfunc_06(struct Sprite *sprite) { s32 counter = sprite->data[2]; @@ -1282,14 +1300,14 @@ void pokemonanimfunc_06(struct Sprite *sprite) sprite->data[2] += 12; } -void pokemonanimfunc_09(struct Sprite *sprite) +static void pokemonanimfunc_09(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 40) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -1314,7 +1332,7 @@ void pokemonanimfunc_09(struct Sprite *sprite) sprite->data[2]++; } -static const s8 gUnknown_0860AD70[][3] = +static const s8 sUnknown_0860AD70[][3] = { {-1, -1, 6}, {2, 0, 6}, @@ -1328,16 +1346,16 @@ static const s8 gUnknown_0860AD70[][3] = {0, 0, 0}, }; -void sub_817FC20(struct Sprite *sprite) +static void sub_817FC20(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) sprite->data[3] = 0; - if (gUnknown_0860AD70[sprite->data[3]][2] == sprite->data[2]) + if (sUnknown_0860AD70[sprite->data[3]][2] == sprite->data[2]) { - if (gUnknown_0860AD70[sprite->data[3]][2] == 0) + if (sUnknown_0860AD70[sprite->data[3]][2] == 0) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -1348,26 +1366,26 @@ void sub_817FC20(struct Sprite *sprite) } } - if (gUnknown_0860AD70[sprite->data[3]][2] == 0) + if (sUnknown_0860AD70[sprite->data[3]][2] == 0) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { - sprite->pos2.x += gUnknown_0860AD70[sprite->data[3]][0]; - sprite->pos2.y += gUnknown_0860AD70[sprite->data[3]][1]; + sprite->pos2.x += sUnknown_0860AD70[sprite->data[3]][0]; + sprite->pos2.y += sUnknown_0860AD70[sprite->data[3]][1]; sprite->data[2]++; sub_817F70C(sprite); } } -void pokemonanimfunc_0A(struct Sprite *sprite) +static void pokemonanimfunc_0A(struct Sprite *sprite) { sub_817FC20(sprite); sprite->callback = sub_817FC20; } -void sub_817FCDC(struct Sprite *sprite) +static void sub_817FCDC(struct Sprite *sprite) { s32 counter = sprite->data[2]; @@ -1384,7 +1402,7 @@ void sub_817FCDC(struct Sprite *sprite) sprite->data[2] += sprite->data[0]; } -void pokemonanimfunc_0F(struct Sprite *sprite) +static void pokemonanimfunc_0F(struct Sprite *sprite) { sprite->data[0] = 60; sprite->data[7] = 3; @@ -1392,7 +1410,7 @@ void pokemonanimfunc_0F(struct Sprite *sprite) sprite->callback = sub_817FCDC; } -void sub_817FD44(struct Sprite *sprite) +static void sub_817FD44(struct Sprite *sprite) { s32 counter = sprite->data[2]; @@ -1409,14 +1427,14 @@ void sub_817FD44(struct Sprite *sprite) sprite->data[2] += sprite->data[0]; } -void pokemonanimfunc_10(struct Sprite *sprite) +static void pokemonanimfunc_10(struct Sprite *sprite) { sprite->data[0] = 60; sub_817FD44(sprite); sprite->callback = sub_817FD44; } -void pokemonanimfunc_11(struct Sprite *sprite) +static void pokemonanimfunc_11(struct Sprite *sprite) { if (sprite->data[2] > 512) { @@ -1444,30 +1462,30 @@ void pokemonanimfunc_11(struct Sprite *sprite) sprite->data[2] += 9; } -void sub_817FE30(struct Sprite *sprite) +static void sub_817FE30(struct Sprite *sprite) { s16 id = sprite->data[0]; - if (gUnknown_03001240[id].field_0 != 0) + if (sUnknown_03001240[id].field_0 != 0) { - gUnknown_03001240[id].field_0--; + sUnknown_03001240[id].field_0--; } else { - if (sprite->data[2] == 0 && gUnknown_03001240[id].field_8 == 0) + if (sprite->data[2] == 0 && sUnknown_03001240[id].field_8 == 0) { HandleStartAffineAnim(sprite); - gUnknown_03001240[id].field_8++; + sUnknown_03001240[id].field_8++; } - if (sprite->data[2] > gUnknown_03001240[id].field_6) + if (sprite->data[2] > sUnknown_03001240[id].field_6) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); - if (gUnknown_03001240[id].field_4 > 1) + if (sUnknown_03001240[id].field_4 > 1) { - gUnknown_03001240[id].field_4--; - gUnknown_03001240[id].field_0 = 10; + sUnknown_03001240[id].field_4--; + sUnknown_03001240[id].field_0 = 10; sprite->data[2] = 0; } else @@ -1479,62 +1497,62 @@ void sub_817FE30(struct Sprite *sprite) else { sprite->data[6] = Sin(sprite->data[2] % 256, 4096); - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6]); + HandleSetAffineData(sprite, 256, 256, sprite->data[6]); } sprite->data[2] += 16; } } -void pokemonanimfunc_12(struct Sprite *sprite) +static void pokemonanimfunc_12(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 512; - gUnknown_03001240[id].field_0 = 0; + sUnknown_03001240[id].field_6 = 512; + sUnknown_03001240[id].field_0 = 0; sub_817FE30(sprite); sprite->callback = sub_817FE30; } -void sub_817FF3C(struct Sprite *sprite) +static void sub_817FF3C(struct Sprite *sprite) { u8 id = sprite->data[0]; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); - if (sprite->data[2] > gUnknown_03001240[id].field_0) + if (sprite->data[2] > sUnknown_03001240[id].field_0) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { - sprite->data[6] = (65536 / gUnknown_03001240[id].field_8) * sprite->data[2]; - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6]); + sprite->data[6] = (65536 / sUnknown_03001240[id].field_8) * sprite->data[2]; + HandleSetAffineData(sprite, 256, 256, sprite->data[6]); } sprite->data[2]++; } -void pokemonanimfunc_1F(struct Sprite *sprite) +static void pokemonanimfunc_1F(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_0 = 60; - gUnknown_03001240[id].field_8 = 20; + sUnknown_03001240[id].field_0 = 60; + sUnknown_03001240[id].field_8 = 20; sub_817FF3C(sprite); sprite->callback = sub_817FF3C; } -void sub_817FFF0(struct Sprite *sprite) +static void sub_817FFF0(struct Sprite *sprite) { u8 id = sprite->data[0]; sub_817F70C(sprite); - if (sprite->data[2] > gUnknown_03001240[id].field_6) + if (sprite->data[2] > sUnknown_03001240[id].field_6) { sprite->pos2.x = 0; sprite->pos2.y = 0; @@ -1544,26 +1562,26 @@ void sub_817FFF0(struct Sprite *sprite) { s16 index = (sprite->data[2] + 192) % 256; - sprite->pos2.x = -(Cos(index, gUnknown_03001240[id].field_8 * 2)); - sprite->pos2.y = Sin(index, gUnknown_03001240[id].field_8) + gUnknown_03001240[id].field_8; + 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] += gUnknown_03001240[id].field_2; + sprite->data[2] += sUnknown_03001240[id].field_2; sub_817F70C(sprite); } -void pokemonanimfunc_14(struct Sprite *sprite) +static void pokemonanimfunc_14(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 512; - gUnknown_03001240[id].field_8 = 6; - gUnknown_03001240[id].field_2 = 24; + 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; } -void pokemonanimfunc_15(struct Sprite *sprite) +static void pokemonanimfunc_15(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; @@ -1582,7 +1600,7 @@ void pokemonanimfunc_15(struct Sprite *sprite) sprite->data[2]++; } -void pokemonanimfunc_16(struct Sprite *sprite) +static void pokemonanimfunc_16(struct Sprite *sprite) { s16 index1 = 0, index2 = 0; @@ -1591,7 +1609,7 @@ void pokemonanimfunc_16(struct Sprite *sprite) if (sprite->data[2] > 40) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -1617,7 +1635,7 @@ void pokemonanimfunc_16(struct Sprite *sprite) sprite->data[2]++; } -void pokemonanimfunc_17(struct Sprite *sprite) +static void pokemonanimfunc_17(struct Sprite *sprite) { s16 posY = 0, index1 = 0, index2 = 0; @@ -1626,7 +1644,7 @@ void pokemonanimfunc_17(struct Sprite *sprite) if (sprite->data[2] > 40) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = posY; @@ -1658,12 +1676,12 @@ void pokemonanimfunc_17(struct Sprite *sprite) sprite->data[2]++; } -void sub_818031C(struct Sprite *sprite) +static void sub_818031C(struct Sprite *sprite) { u8 index = sprite->data[2]; u8 var7 = sprite->data[6]; - u8 var5 = gUnknown_0860AA80[sprite->data[5]][0]; - u8 var6 = gUnknown_0860AA80[sprite->data[5]][1]; + u8 var5 = sUnknown_0860AA80[sprite->data[5]][0]; + u8 var6 = sUnknown_0860AA80[sprite->data[5]][1]; u8 amplitude = 0; if (var5 != 0xFE) @@ -1693,14 +1711,14 @@ void sub_818031C(struct Sprite *sprite) } } -void pokemonanimfunc_19(struct Sprite *sprite) +static void pokemonanimfunc_19(struct Sprite *sprite) { sprite->data[0] = 48; sub_818031C(sprite); sprite->callback = sub_818031C; } -void pokemonanimfunc_1A(struct Sprite *sprite) +static void pokemonanimfunc_1A(struct Sprite *sprite) { u8 counter = 0; @@ -1712,7 +1730,7 @@ void pokemonanimfunc_1A(struct Sprite *sprite) if (sprite->data[2] > 35) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; @@ -1722,25 +1740,25 @@ void pokemonanimfunc_1A(struct Sprite *sprite) s16 index = ((counter - 10) * 128) / 20; if (counter < 10) - HandleSetAffineData(sprite, 0x100, 0x100, counter / 2 * 512); + HandleSetAffineData(sprite, 256, 256, counter / 2 * 512); else if (counter >= 10 && counter <= 29) sprite->pos2.x = -(Sin(index, 5)); else - HandleSetAffineData(sprite, 0x100, 0x100, (35 - counter) / 2 * 1024); + HandleSetAffineData(sprite, 256, 256, (35 - counter) / 2 * 1024); } sprite->data[2]++; sub_817F70C(sprite); } -void pokemonanimfunc_1B(struct Sprite *sprite) +static void pokemonanimfunc_1B(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 100) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -1749,13 +1767,13 @@ void pokemonanimfunc_1B(struct Sprite *sprite) { s16 index = (sprite->data[2] * 256) / 100; sprite->pos2.y = Sin(index, 10); - HandleSetAffineData(sprite, 0x100, 0x100, Sin(index, 3276)); + HandleSetAffineData(sprite, 256, 256, Sin(index, 3276)); } sprite->data[2]++; } -void sub_81804F8(struct Sprite *sprite) +static void sub_81804F8(struct Sprite *sprite) { s32 var = 0; s16 index = 0; @@ -1765,7 +1783,7 @@ void sub_81804F8(struct Sprite *sprite) if (sprite->data[2] > 100) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -1776,20 +1794,20 @@ void sub_81804F8(struct Sprite *sprite) var = (sprite->data[2] * 512) / 100; var &= 0xFF; sprite->pos2.y = Sin(index, sprite->data[0]); - HandleSetAffineData(sprite, 0x100, 0x100, Sin(var, 3276)); + HandleSetAffineData(sprite, 256, 256, Sin(var, 3276)); } sprite->data[2]++; } -void pokemonanimfunc_1C(struct Sprite *sprite) +static void pokemonanimfunc_1C(struct Sprite *sprite) { sprite->data[0] = 10; sub_81804F8(sprite); sprite->callback = sub_81804F8; } -void sub_81805B0(struct Sprite *sprite) +static void sub_81805B0(struct Sprite *sprite) { s32 var = 0; s16 index = 0; @@ -1799,7 +1817,7 @@ void sub_81805B0(struct Sprite *sprite) if (sprite->data[2] > 100) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -1810,20 +1828,20 @@ void sub_81805B0(struct Sprite *sprite) var = (sprite->data[2] * 512) / 100; var &= 0xFF; sprite->pos2.y = -(Sin(index / 2, sprite->data[0] * 2)); - HandleSetAffineData(sprite, 0x100, 0x100, Sin(var, 3276)); + HandleSetAffineData(sprite, 256, 256, Sin(var, 3276)); } sprite->data[2]++; } -void pokemonanimfunc_18(struct Sprite *sprite) +static void pokemonanimfunc_18(struct Sprite *sprite) { sprite->data[0] = 5; sub_81805B0(sprite); sprite->callback = sub_81805B0; } -void pokemonanimfunc_1D(struct Sprite *sprite) +static void pokemonanimfunc_1D(struct Sprite *sprite) { s32 var; s16 index = 0; @@ -1836,7 +1854,7 @@ void pokemonanimfunc_1D(struct Sprite *sprite) if (sprite->data[2] > 100) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -1849,14 +1867,14 @@ void pokemonanimfunc_1D(struct Sprite *sprite) var = (sprite->data[2] * 512) / toDiv; var &= 0xFF; sprite->pos2.x = Sin(index, 8); - HandleSetAffineData(sprite, 0x100, 0x100, Sin(var, 3276)); + HandleSetAffineData(sprite, 256, 256, Sin(var, 3276)); } sprite->data[2]++; sub_817F70C(sprite); } -void sub_8180714(struct Sprite *sprite) +static void sub_8180714(struct Sprite *sprite) { s16 posY = 0; @@ -1870,7 +1888,7 @@ void sub_8180714(struct Sprite *sprite) if (sprite->data[2] > sprite->data[0] * 3) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -1885,7 +1903,7 @@ void sub_8180714(struct Sprite *sprite) posY = (256 - yScale) / 8; sprite->pos2.y = -(Sin(sprite->data[3], 10)) - posY; - HandleSetAffineData(sprite, 0x100 - Sin(sprite->data[4], 32), yScale, 0); + HandleSetAffineData(sprite, 256 - Sin(sprite->data[4], 32), yScale, 0); sprite->data[2]++; sprite->data[4] = (sprite->data[4] + 128 / sprite->data[0]) & 0xFF; } @@ -1893,20 +1911,20 @@ void sub_8180714(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_00(struct Sprite *sprite) +static void pokemonanimfunc_00(struct Sprite *sprite) { sprite->data[0] = 16; sub_8180714(sprite); sprite->callback = sub_8180714; } -void sub_8180828(struct Sprite *sprite) +static void sub_8180828(struct Sprite *sprite) { s16 posY = 0; if (sprite->data[2] > (128 / sprite->data[6]) * sprite->data[7]) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -1925,7 +1943,7 @@ void sub_8180828(struct Sprite *sprite) } } -void pokemonanimfunc_13(struct Sprite *sprite) +static void pokemonanimfunc_13(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -1937,7 +1955,7 @@ void pokemonanimfunc_13(struct Sprite *sprite) sub_8180828(sprite); } -static const s8 gUnknown_0860AD8E[][8][3] = +static const s8 sUnknown_0860AD8E[][8][3] = { { {0, 8, 8}, @@ -1961,7 +1979,7 @@ static const s8 gUnknown_0860AD8E[][8][3] = }, }; -void sub_8180900(struct Sprite *sprite) +static void sub_8180900(struct Sprite *sprite) { s16 var; u8 structId; @@ -1972,10 +1990,10 @@ void sub_8180900(struct Sprite *sprite) sub_817F70C(sprite); structId = sprite->data[0]; - var = gUnknown_03001240[structId].field_6; - r9 = gUnknown_0860AD8E[gUnknown_03001240[structId].field_8][sprite->data[4]][0]; - r10 = gUnknown_0860AD8E[gUnknown_03001240[structId].field_8][sprite->data[4]][1] - r9; - arrId = gUnknown_03001240[structId].field_8; + 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) @@ -1984,9 +2002,9 @@ void sub_8180900(struct Sprite *sprite) sprite->data[2]++; } - if (gUnknown_0860AD8E[arrId][sprite->data[4]][2] == 0) + if (sUnknown_0860AD8E[arrId][sprite->data[4]][2] == 0) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sprite->pos2.y = 0; sub_817F77C(sprite); @@ -1996,13 +2014,13 @@ void sub_8180900(struct Sprite *sprite) { u16 rotation; - sprite->pos2.y = -(Sin(r7 * 128 / gUnknown_0860AD8E[arrId][sprite->data[4]][2], 10)); - sprite->pos2.x = (r10 * r7 / gUnknown_0860AD8E[arrId][sprite->data[4]][2]) + r9; + 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, 0x100, 0x100, rotation); + HandleSetAffineData(sprite, 256, 256, rotation); - if (r7 == gUnknown_0860AD8E[arrId][sprite->data[4]][2]) + if (r7 == sUnknown_0860AD8E[arrId][sprite->data[4]][2]) { sprite->data[4]++; sprite->data[3] = 0; @@ -2016,16 +2034,16 @@ void sub_8180900(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_05(struct Sprite *sprite) +static void pokemonanimfunc_05(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 4096; - gUnknown_03001240[id].field_8 = sprite->data[6]; + sUnknown_03001240[id].field_6 = 4096; + sUnknown_03001240[id].field_8 = sprite->data[6]; sub_8180900(sprite); sprite->callback = sub_8180900; } -void pokemonanimfunc_20(struct Sprite *sprite) +static void pokemonanimfunc_20(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; @@ -2044,7 +2062,7 @@ void pokemonanimfunc_20(struct Sprite *sprite) sprite->data[2] += 2; } -void pokemonanimfunc_21(struct Sprite *sprite) +static void pokemonanimfunc_21(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; @@ -2063,7 +2081,7 @@ void pokemonanimfunc_21(struct Sprite *sprite) sprite->data[2] += 2; } -void pokemonanimfunc_22(struct Sprite *sprite) +static void pokemonanimfunc_22(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; @@ -2082,7 +2100,7 @@ void pokemonanimfunc_22(struct Sprite *sprite) sprite->data[2] += 2; } -void pokemonanimfunc_23(struct Sprite *sprite) +static void pokemonanimfunc_23(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; @@ -2101,7 +2119,7 @@ void pokemonanimfunc_23(struct Sprite *sprite) sprite->data[2] += 2; } -void pokemonanimfunc_24(struct Sprite *sprite) +static void pokemonanimfunc_24(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; @@ -2120,19 +2138,19 @@ void pokemonanimfunc_24(struct Sprite *sprite) sprite->data[2] += 2; } -void sub_8180CB4(struct Sprite *sprite); -void sub_8180CE8(struct Sprite *sprite); -void sub_8180D44(struct Sprite *sprite); -void sub_8180DC0(struct Sprite *sprite); -void sub_8180E28(struct Sprite *sprite); +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); -void pokemonanimfunc_25(struct Sprite *sprite) +static void pokemonanimfunc_25(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_8180CB4; } -void sub_8180CB4(struct Sprite *sprite) +static void sub_8180CB4(struct Sprite *sprite) { sub_817F70C(sprite); if (++sprite->pos2.x > 7) @@ -2144,7 +2162,7 @@ void sub_8180CB4(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180CE8(struct Sprite *sprite) +static void sub_8180CE8(struct Sprite *sprite) { sub_817F70C(sprite); @@ -2172,7 +2190,7 @@ void sub_8180CE8(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180D44(struct Sprite *sprite) +static void sub_8180D44(struct Sprite *sprite) { u8 rotation; @@ -2184,7 +2202,7 @@ void sub_8180D44(struct Sprite *sprite) if (++sprite->data[5] > sprite->data[6]) sprite->data[5] = sprite->data[6]; - HandleSetAffineData(sprite, 0x100, 0x100, rotation * 256); + HandleSetAffineData(sprite, 256, 256, rotation * 256); if (sprite->pos2.x < -8) { @@ -2198,7 +2216,7 @@ void sub_8180D44(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180DC0(struct Sprite *sprite) +static void sub_8180DC0(struct Sprite *sprite) { sub_817F70C(sprite); @@ -2208,7 +2226,7 @@ void sub_8180DC0(struct Sprite *sprite) if (sprite->data[2] < 0) sprite->data[2] = 0; - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[2] << 8); + HandleSetAffineData(sprite, 256, 256, sprite->data[2] << 8); if (sprite->data[2] == 0) sprite->callback = sub_8180E28; } @@ -2222,7 +2240,7 @@ void sub_8180DC0(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180E28(struct Sprite *sprite) +static void sub_8180E28(struct Sprite *sprite) { sub_817F70C(sprite); @@ -2237,18 +2255,18 @@ void sub_8180E28(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180E78(struct Sprite *sprite); -void sub_8180ED0(struct Sprite *sprite); -void sub_8180F2C(struct Sprite *sprite); +static void sub_8180E78(struct Sprite *sprite); +static void sub_8180ED0(struct Sprite *sprite); +static void sub_8180F2C(struct Sprite *sprite); -void pokemonanimfunc_26(struct Sprite *sprite) +static void pokemonanimfunc_26(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[3] = 0; sprite->callback = sub_8180E78; } -void sub_8180E78(struct Sprite *sprite) +static void sub_8180E78(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x++; @@ -2267,7 +2285,7 @@ void sub_8180E78(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180ED0(struct Sprite *sprite) +static void sub_8180ED0(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x = Cos(sprite->data[4], 16) - 8; @@ -2286,7 +2304,7 @@ void sub_8180ED0(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8180F2C(struct Sprite *sprite) +static void sub_8180F2C(struct Sprite *sprite) { sub_817F70C(sprite); @@ -2302,7 +2320,7 @@ void sub_8180F2C(struct Sprite *sprite) sprite->pos2.y = -(Sin(sprite->data[2], 5)) + 4; sprite->data[2] -= 4; rotation = sprite->data[2] - 32; - HandleSetAffineData(sprite, 0x100, 0x100, rotation * 512); + HandleSetAffineData(sprite, 256, 256, rotation * 512); if (sprite->data[2] <= 32) { @@ -2316,7 +2334,7 @@ void sub_8180F2C(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_27(struct Sprite *sprite) +static void pokemonanimfunc_27(struct Sprite *sprite) { if (sprite->data[3] > 0) { @@ -2335,17 +2353,17 @@ void pokemonanimfunc_27(struct Sprite *sprite) } } -void sub_8181024(struct Sprite *sprite); -void sub_8181068(struct Sprite *sprite); -void sub_81810C4(struct Sprite *sprite); +static void sub_8181024(struct Sprite *sprite); +static void sub_8181068(struct Sprite *sprite); +static void sub_81810C4(struct Sprite *sprite); -void pokemonanimfunc_28(struct Sprite *sprite) +static void pokemonanimfunc_28(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_8181024; } -void sub_8181024(struct Sprite *sprite) +static void sub_8181024(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x--; @@ -2362,7 +2380,7 @@ void sub_8181024(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181068(struct Sprite *sprite) +static void sub_8181068(struct Sprite *sprite) { u32 rotation; @@ -2371,7 +2389,7 @@ void sub_8181068(struct Sprite *sprite) sprite->pos2.x = Cos(sprite->data[2], 22); sprite->pos2.y = -(Sin(sprite->data[2], 22)); rotation = sprite->data[2] - 32; - HandleSetAffineData(sprite, 0x100, 0x100, rotation * 512); + HandleSetAffineData(sprite, 256, 256, rotation * 512); if (sprite->data[2] <= 32) sprite->callback = sub_81810C4; @@ -2379,7 +2397,7 @@ void sub_8181068(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_81810C4(struct Sprite *sprite) +static void sub_81810C4(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x--; @@ -2394,17 +2412,17 @@ void sub_81810C4(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181110(struct Sprite *sprite); -void sub_8181144(struct Sprite *sprite); -void sub_81811A4(struct Sprite *sprite); +static void sub_8181110(struct Sprite *sprite); +static void sub_8181144(struct Sprite *sprite); +static void sub_81811A4(struct Sprite *sprite); -void pokemonanimfunc_29(struct Sprite *sprite) +static void pokemonanimfunc_29(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_8181110; } -void sub_8181110(struct Sprite *sprite) +static void sub_8181110(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x++; @@ -2419,7 +2437,7 @@ void sub_8181110(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181144(struct Sprite *sprite) +static void sub_8181144(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[2] += 16; @@ -2437,11 +2455,11 @@ void sub_8181144(struct Sprite *sprite) sprite->pos2.y += 2; } - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[2] << 8); + HandleSetAffineData(sprite, 256, 256, sprite->data[2] << 8); sub_817F70C(sprite); } -void sub_81811A4(struct Sprite *sprite) +static void sub_81811A4(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x++; @@ -2458,21 +2476,21 @@ void sub_81811A4(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181214(struct Sprite *sprite); +static void sub_8181214(struct Sprite *sprite); -void pokemonanimfunc_2A(struct Sprite *sprite) +static void pokemonanimfunc_2A(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_2 = 2; + sUnknown_03001240[id].field_2 = 2; sub_8181214(sprite); sprite->callback = sub_8181214; } -void sub_8181214(struct Sprite *sprite) +static void sub_8181214(struct Sprite *sprite) { - if (gUnknown_03001240[sprite->data[0]].field_0 != 0) + if (sUnknown_03001240[sprite->data[0]].field_0 != 0) { - gUnknown_03001240[sprite->data[0]].field_0--; + sUnknown_03001240[sprite->data[0]].field_0--; } else { @@ -2481,7 +2499,7 @@ void sub_8181214(struct Sprite *sprite) { sprite->data[2]++; HandleStartAffineAnim(sprite); - sprite->data[7] = gUnknown_03001240[sprite->data[0]].field_2; + sprite->data[7] = sUnknown_03001240[sprite->data[0]].field_2; sprite->data[3] = -1; sprite->data[4] = -1; sprite->data[5] = 0; @@ -2508,12 +2526,12 @@ void sub_8181214(struct Sprite *sprite) { sprite->pos2.x = 0; sprite->pos2.y = 0; - if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { - gUnknown_03001240[sprite->data[0]].field_4--; + sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[5] = 0; sprite->data[6] = 0; - gUnknown_03001240[sprite->data[0]].field_0 = 10; + sUnknown_03001240[sprite->data[0]].field_0 = 10; } else { @@ -2522,14 +2540,14 @@ void sub_8181214(struct Sprite *sprite) } } - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6] << 8); + HandleSetAffineData(sprite, 256, 256, sprite->data[6] << 8); sub_817F70C(sprite); } } -void sub_8181370(struct Sprite *sprite); +static void sub_8181370(struct Sprite *sprite); -void pokemonanimfunc_2B(struct Sprite *sprite) +static void pokemonanimfunc_2B(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[6] = 0; @@ -2537,7 +2555,7 @@ void pokemonanimfunc_2B(struct Sprite *sprite) sprite->callback = sub_8181370; } -void sub_8181370(struct Sprite *sprite) +static void sub_8181370(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[6] += 4; @@ -2545,12 +2563,12 @@ void sub_8181370(struct Sprite *sprite) sprite->pos2.y = -(Sin((sprite->data[6] * 2) & 0xFF, 8)); if (sprite->data[6] > 192 && sprite->data[7] == 1) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->data[7]++; } else if (sprite->data[6] > 64 && sprite->data[7] == 0) { - HandleSetAffineData(sprite, -0x100, 0x100, 0); + HandleSetAffineData(sprite, -256, 256, 0); sprite->data[7]++; } @@ -2558,14 +2576,14 @@ void sub_8181370(struct Sprite *sprite) { sprite->pos2.x = 0; sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } -void pokemonanimfunc_2C(struct Sprite *sprite) +static void pokemonanimfunc_2C(struct Sprite *sprite) { if (++sprite->data[2] == 1) { @@ -2575,7 +2593,7 @@ void pokemonanimfunc_2C(struct Sprite *sprite) sprite->data[4] = 0; } - if (gUnknown_0860AA64[sprite->data[6]][1] == 0xFF) + if (sUnknown_0860AA64[sprite->data[6]][1] == 0xFF) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -2583,7 +2601,7 @@ void pokemonanimfunc_2C(struct Sprite *sprite) { if (sprite->data[4] == 1) { - if (gUnknown_0860AA64[sprite->data[6]][0] != 0) + if (sUnknown_0860AA64[sprite->data[6]][0] != 0) BlendPalette(sprite->data[7], 0x10, 0x10, 0x3FF); else BlendPalette(sprite->data[7], 0x10, 0, 0x3FF); @@ -2591,7 +2609,7 @@ void pokemonanimfunc_2C(struct Sprite *sprite) sprite->data[4] = 0; } - if (gUnknown_0860AA64[sprite->data[6]][1] == sprite->data[5]) + if (sUnknown_0860AA64[sprite->data[6]][1] == sprite->data[5]) { sprite->data[4] = 1; sprite->data[5] = 0; @@ -2604,19 +2622,19 @@ void pokemonanimfunc_2C(struct Sprite *sprite) } } -void sub_81814D4(struct Sprite *sprite) +static void sub_81814D4(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); sub_817F70C(sprite); - if (sprite->data[2] > gUnknown_03001240[sprite->data[0]].field_8) + if (sprite->data[2] > sUnknown_03001240[sprite->data[0]].field_8) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; - if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { - gUnknown_03001240[sprite->data[0]].field_4--; + sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[2] = 0; } else @@ -2627,36 +2645,36 @@ void sub_81814D4(struct Sprite *sprite) } else { - s16 index = (sprite->data[2] * 256) / gUnknown_03001240[sprite->data[0]].field_8; + s16 index = (sprite->data[2] * 256) / sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = -(Sin(index, 10)); - HandleSetAffineData(sprite, 0x100, 0x100, Sin(index, 3276)); + HandleSetAffineData(sprite, 256, 256, Sin(index, 3276)); } sprite->data[2]++; sub_817F70C(sprite); } -void pokemonanimfunc_2D(struct Sprite *sprite) +static void pokemonanimfunc_2D(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 50; + sUnknown_03001240[id].field_8 = 50; sub_81814D4(sprite); sprite->callback = sub_81814D4; } -void sub_81815D4(struct Sprite *sprite) +static void sub_81815D4(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); sub_817F70C(sprite); - if (sprite->data[2] > gUnknown_03001240[sprite->data[0]].field_8) + if (sprite->data[2] > sUnknown_03001240[sprite->data[0]].field_8) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; - if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { - gUnknown_03001240[sprite->data[0]].field_4--; + sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[2] = 0; } else @@ -2667,28 +2685,28 @@ void sub_81815D4(struct Sprite *sprite) } else { - s16 index = (sprite->data[2] * 256) / gUnknown_03001240[sprite->data[0]].field_8; + s16 index = (sprite->data[2] * 256) / sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = -(Sin(index, 10)); - HandleSetAffineData(sprite, 0x100, 0x100, -(Sin(index, 3276))); + HandleSetAffineData(sprite, 256, 256, -(Sin(index, 3276))); } sprite->data[2]++; sub_817F70C(sprite); } -void pokemonanimfunc_2E(struct Sprite *sprite) +static void pokemonanimfunc_2E(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 50; + sUnknown_03001240[id].field_8 = 50; sub_81815D4(sprite); sprite->callback = sub_81815D4; } -void sub_8181708(struct Sprite *sprite); -void sub_8181770(struct Sprite *sprite); -void sub_8181794(struct Sprite *sprite); +static void sub_8181708(struct Sprite *sprite); +static void sub_8181770(struct Sprite *sprite); +static void sub_8181794(struct Sprite *sprite); -void pokemonanimfunc_2F(struct Sprite *sprite) +static void pokemonanimfunc_2F(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[6] = -(14 * sprite->centerToCornerVecX / 10); @@ -2696,7 +2714,7 @@ void pokemonanimfunc_2F(struct Sprite *sprite) sprite->callback = sub_8181708; } -void sub_8181708(struct Sprite *sprite) +static void sub_8181708(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7]--; @@ -2704,7 +2722,7 @@ void sub_8181708(struct Sprite *sprite) sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6] += 0)); // dummy += 0 is needed to match - HandleSetAffineData(sprite, 0x100, 0x100, (sprite->data[7] - 128) << 8); + HandleSetAffineData(sprite, 256, 256, (sprite->data[7] - 128) << 8); if (sprite->data[7] <= 120) { sprite->data[7] = 120; @@ -2715,7 +2733,7 @@ void sub_8181708(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181770(struct Sprite *sprite) +static void sub_8181770(struct Sprite *sprite) { if (sprite->data[3] == 20) { @@ -2726,7 +2744,7 @@ void sub_8181770(struct Sprite *sprite) sprite->data[3]++; } -void sub_8181794(struct Sprite *sprite) +static void sub_8181794(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7] += 2; @@ -2734,12 +2752,12 @@ void sub_8181794(struct Sprite *sprite) sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6] += 0)); // dummy += 0 is needed to match - HandleSetAffineData(sprite, 0x100, 0x100, (sprite->data[7] - 128) << 8); + HandleSetAffineData(sprite, 256, 256, (sprite->data[7] - 128) << 8); if (sprite->data[7] >= 128) { sprite->pos2.x = 0; sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->data[2] = 0; sub_817F77C(sprite); sprite->callback = pokemonanimfunc_10; @@ -2748,11 +2766,11 @@ void sub_8181794(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181810(struct Sprite *sprite) +static void sub_8181810(struct Sprite *sprite) { - if (gUnknown_03001240[sprite->data[0]].field_0 != 0) + if (sUnknown_03001240[sprite->data[0]].field_0 != 0) { - gUnknown_03001240[sprite->data[0]].field_0--; + sUnknown_03001240[sprite->data[0]].field_0--; } else { @@ -2769,7 +2787,7 @@ void sub_8181810(struct Sprite *sprite) 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, 0x100 - sprite->data[6], 0x100 + sprite->data[7], 0); + HandleSetAffineData(sprite, 256 - sprite->data[6], 256 + sprite->data[7], 0); if (sprite->data[4] == 128) { sprite->data[4] = 0; @@ -2781,38 +2799,38 @@ void sub_8181810(struct Sprite *sprite) 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, 0x100 + sprite->data[6], 0x100 - sprite->data[7], 0); + HandleSetAffineData(sprite, 256 + sprite->data[6], 256 - sprite->data[7], 0); if (sprite->data[4] == 128) { - if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { - gUnknown_03001240[sprite->data[0]].field_4--; - gUnknown_03001240[sprite->data[0]].field_0 = 10; + 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, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } } - sprite->data[4] += gUnknown_03001240[sprite->data[0]].field_6; + sprite->data[4] += sUnknown_03001240[sprite->data[0]].field_6; } } -void pokemonanimfunc_30(struct Sprite *sprite) +static void pokemonanimfunc_30(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 4; + sUnknown_03001240[id].field_6 = 4; sub_8181810(sprite); sprite->callback = sub_8181810; } -void pokemonanimfunc_31(struct Sprite *sprite) +static void pokemonanimfunc_31(struct Sprite *sprite) { s32 counter = sprite->data[2]; sub_817F70C(sprite); @@ -2847,25 +2865,25 @@ void pokemonanimfunc_31(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181ABC(struct Sprite *sprite); -void sub_8181B4C(struct Sprite *sprite); -void sub_8181C2C(struct Sprite *sprite); +static void sub_8181ABC(struct Sprite *sprite); +static void sub_8181B4C(struct Sprite *sprite); +static void sub_8181C2C(struct Sprite *sprite); -void pokemonanimfunc_32(struct Sprite *sprite) +static void pokemonanimfunc_32(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = -1; + sUnknown_03001240[id].field_8 = -1; HandleStartAffineAnim(sprite); sprite->data[3] = 0; sub_8181ABC(sprite); sprite->callback = sub_8181ABC; } -void sub_8181ABC(struct Sprite *sprite) +static void sub_8181ABC(struct Sprite *sprite) { - if (gUnknown_03001240[sprite->data[0]].field_0 != 0) + if (sUnknown_03001240[sprite->data[0]].field_0 != 0) { - gUnknown_03001240[sprite->data[0]].field_0--; + sUnknown_03001240[sprite->data[0]].field_0--; } else { @@ -2880,7 +2898,7 @@ void sub_8181ABC(struct Sprite *sprite) } else { - s32 var = 8 * gUnknown_03001240[sprite->data[0]].field_8; + 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; @@ -2890,12 +2908,12 @@ void sub_8181ABC(struct Sprite *sprite) } } -void sub_8181B4C(struct Sprite *sprite) +static void sub_8181B4C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 48) { - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sprite->data[2] = 0; sprite->callback = sub_8181C2C; @@ -2907,7 +2925,7 @@ void sub_8181B4C(struct Sprite *sprite) if (sprite->data[2] >= 16 && sprite->data[2] <= 31) { sprite->data[3] += 8; - sprite->pos2.x -= gUnknown_03001240[sprite->data[0]].field_8; + sprite->pos2.x -= sUnknown_03001240[sprite->data[0]].field_8; } yDelta = 0; @@ -2924,7 +2942,7 @@ void sub_8181B4C(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181C2C(struct Sprite *sprite) +static void sub_8181C2C(struct Sprite *sprite) { s32 counter; @@ -2932,10 +2950,10 @@ void sub_8181C2C(struct Sprite *sprite) counter = sprite->data[2]; if (counter > 128) { - if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { - gUnknown_03001240[sprite->data[0]].field_4--; - gUnknown_03001240[sprite->data[0]].field_0 = 10; + 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; @@ -2952,9 +2970,9 @@ void sub_8181C2C(struct Sprite *sprite) } else { - register s32 var asm("r4") = gUnknown_03001240[sprite->data[0]].field_8; + register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8; - sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (gUnknown_03001240[sprite->data[0]].field_8 * 8); + sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (sUnknown_03001240[sprite->data[0]].field_8 * 8); sprite->pos2.y = -(Sin(counter % 128, 8)); } @@ -2962,7 +2980,7 @@ void sub_8181C2C(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181CE8(struct Sprite *sprite) +static void sub_8181CE8(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -2975,10 +2993,10 @@ void sub_8181CE8(struct Sprite *sprite) { sprite->pos2.x = 0; sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); - if (gUnknown_03001240[sprite->data[0]].field_4 > 1) + HandleSetAffineData(sprite, 256, 256, 0); + if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { - gUnknown_03001240[sprite->data[0]].field_4--; + sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[2] = 0; sprite->data[7] = 0; } @@ -2996,21 +3014,21 @@ void sub_8181CE8(struct Sprite *sprite) sprite->pos2.x = -(Sin(sprite->data[7], 16)); rotation = Sin(sprite->data[7], 32); - HandleSetAffineData(sprite, 0x100, 0x100, rotation << 8); - sprite->data[7] += gUnknown_03001240[sprite->data[0]].field_6; + HandleSetAffineData(sprite, 256, 256, rotation << 8); + sprite->data[7] += sUnknown_03001240[sprite->data[0]].field_6; sub_817F70C(sprite); } } -void pokemonanimfunc_33(struct Sprite *sprite) +static void pokemonanimfunc_33(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 4; + sUnknown_03001240[id].field_6 = 4; sub_8181CE8(sprite); sprite->callback = sub_8181CE8; } -void pokemonanimfunc_34(struct Sprite *sprite) +static void pokemonanimfunc_34(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -3023,7 +3041,7 @@ void pokemonanimfunc_34(struct Sprite *sprite) { sprite->pos2.x = 0; sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sub_817F70C(sprite); @@ -3035,13 +3053,13 @@ void pokemonanimfunc_34(struct Sprite *sprite) 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, 0x100, 0x100, rotation << 8); + HandleSetAffineData(sprite, 256, 256, rotation << 8); sprite->data[7] += 8; sub_817F70C(sprite); } } -void pokemonanimfunc_35(struct Sprite *sprite) +static void pokemonanimfunc_35(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = 0; @@ -3065,18 +3083,18 @@ void pokemonanimfunc_35(struct Sprite *sprite) } } -void sub_8181F14(struct Sprite *sprite); -void sub_8181F50(struct Sprite *sprite); -void sub_8181FC0(struct Sprite *sprite); +static void sub_8181F14(struct Sprite *sprite); +static void sub_8181F50(struct Sprite *sprite); +static void sub_8181FC0(struct Sprite *sprite); -void pokemonanimfunc_36(struct Sprite *sprite) +static void pokemonanimfunc_36(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 0; sprite->callback = sub_8181F14; } -void sub_8181F14(struct Sprite *sprite) +static void sub_8181F14(struct Sprite *sprite) { if (sprite->data[7] > 31) { @@ -3089,10 +3107,10 @@ void sub_8181F14(struct Sprite *sprite) sprite->data[7] += 4; } - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[7] << 8); + HandleSetAffineData(sprite, 256, 256, sprite->data[7] << 8); } -void sub_8181F50(struct Sprite *sprite) +static void sub_8181F50(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 512) @@ -3110,7 +3128,7 @@ void sub_8181F50(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_8181FC0(struct Sprite *sprite) +static void sub_8181FC0(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7] -= 2; @@ -3126,11 +3144,11 @@ void sub_8181FC0(struct Sprite *sprite) sprite->pos2.x = -(Sin(sprite->data[7] * 2, 16)); } - HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[7] << 8); + HandleSetAffineData(sprite, 256, 256, sprite->data[7] << 8); sub_817F70C(sprite); } -void pokemonanimfunc_37(struct Sprite *sprite) +static void pokemonanimfunc_37(struct Sprite *sprite) { u16 rotation; @@ -3158,16 +3176,16 @@ void pokemonanimfunc_37(struct Sprite *sprite) } rotation = Sin(sprite->data[7] % 128, 16); - HandleSetAffineData(sprite, 0x100, 0x100, rotation << 8); + HandleSetAffineData(sprite, 256, 256, rotation << 8); sub_817F70C(sprite); } -void sub_81820FC(struct Sprite *sprite); -void sub_818216C(struct Sprite *sprite); -void sub_81821CC(struct Sprite *sprite); -void sub_8182248(struct Sprite *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); -void pokemonanimfunc_38(struct Sprite *sprite) +static void pokemonanimfunc_38(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 0; @@ -3175,7 +3193,7 @@ void pokemonanimfunc_38(struct Sprite *sprite) sprite->callback = sub_81820FC; } -void sub_81820FC(struct Sprite *sprite) +static void sub_81820FC(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[7] > 24) @@ -3193,11 +3211,11 @@ void sub_81820FC(struct Sprite *sprite) sprite->pos2.y = -(Sin(sprite->data[7], 8)); } - HandleSetAffineData(sprite, 0x100, 0x100, -(sprite->data[7]) << 8); + HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } -void sub_818216C(struct Sprite *sprite) +static void sub_818216C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[7] > 32) @@ -3212,11 +3230,11 @@ void sub_818216C(struct Sprite *sprite) sprite->pos2.y = -(Sin(sprite->data[7], 8)); } - HandleSetAffineData(sprite, 0x100, 0x100, -(sprite->data[7]) << 8); + HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } -void sub_81821CC(struct Sprite *sprite) +static void sub_81821CC(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7] += (sprite->data[6] * 4); @@ -3234,11 +3252,11 @@ void sub_81821CC(struct Sprite *sprite) sprite->data[5]++; } - HandleSetAffineData(sprite, 0x100, 0x100, -(sprite->data[7]) << 8); + HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } -void sub_8182248(struct Sprite *sprite) +static void sub_8182248(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[7] <= 0) @@ -3254,11 +3272,11 @@ void sub_8182248(struct Sprite *sprite) sprite->pos2.y = -(Sin(sprite->data[7], 8)); } - HandleSetAffineData(sprite, 0x100, 0x100, -(sprite->data[7]) << 8); + HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } -void pokemonanimfunc_39(struct Sprite *sprite) +static void pokemonanimfunc_39(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 40) @@ -3290,7 +3308,7 @@ void pokemonanimfunc_39(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_3A(struct Sprite *sprite) +static void pokemonanimfunc_3A(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -3309,7 +3327,7 @@ void pokemonanimfunc_3A(struct Sprite *sprite) { s16 scale = (8 * sprite->data[6]) / 20; scale = Sin(sprite->data[7] - scale, 64); - HandleSetAffineData(sprite, 0x100 - scale, 0x100 - scale, 0); + HandleSetAffineData(sprite, 256 - scale, 256 - scale, 0); } } else @@ -3321,7 +3339,7 @@ void pokemonanimfunc_3A(struct Sprite *sprite) if (sprite->data[7] > 63) { sprite->data[7] = 64; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -3352,13 +3370,13 @@ void pokemonanimfunc_3A(struct Sprite *sprite) } sprite->data[7] += 2; - HandleSetAffineData(sprite, 0x100 - var, 0x100 - var, 0); + HandleSetAffineData(sprite, 256 - var, 256 - var, 0); } sub_817F70C(sprite); } -void pokemonanimfunc_3B(struct Sprite *sprite) +static void pokemonanimfunc_3B(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -3370,7 +3388,7 @@ void pokemonanimfunc_3B(struct Sprite *sprite) if (sprite->data[7] > 512) { sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -3381,11 +3399,11 @@ void pokemonanimfunc_3B(struct Sprite *sprite) sprite->pos2.y = Sin(sprite->data[7] % 256, 8); sprite->data[7] += 8; yScale = Sin(sprite->data[7] % 128, 96); - HandleSetAffineData(sprite, 0x100, yScale + 0x100, 0); + HandleSetAffineData(sprite, 256, yScale + 256, 0); } } -void pokemonanimfunc_3C(struct Sprite *sprite) +static void pokemonanimfunc_3C(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -3397,7 +3415,7 @@ void pokemonanimfunc_3C(struct Sprite *sprite) if (sprite->data[7] > 256) { sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } @@ -3408,22 +3426,22 @@ void pokemonanimfunc_3C(struct Sprite *sprite) sprite->pos2.y = Sin(sprite->data[7], 16); sprite->data[7] += 4; yScale = Sin((sprite->data[7] % 64) * 2, 128); - HandleSetAffineData(sprite, 0x100, yScale + 0x100, 0); + HandleSetAffineData(sprite, 256, yScale + 256, 0); } } -void sub_81825F8(struct Sprite *sprite); -void sub_8182648(struct Sprite *sprite); -void sub_81826F8(struct Sprite *sprite); +static void sub_81825F8(struct Sprite *sprite); +static void sub_8182648(struct Sprite *sprite); +static void sub_81826F8(struct Sprite *sprite); -void pokemonanimfunc_3D(struct Sprite *sprite) +static void pokemonanimfunc_3D(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_81825F8; sprite->data[7] = 0; } -void sub_81825F8(struct Sprite *sprite) +static void sub_81825F8(struct Sprite *sprite) { s16 yScale; @@ -3440,10 +3458,10 @@ void sub_81825F8(struct Sprite *sprite) yScale = Sin(sprite->data[7], 128); } - HandleSetAffineData(sprite, 0x100, 0x100 + yScale, 0); + HandleSetAffineData(sprite, 256, 256 + yScale, 0); } -void sub_8182648(struct Sprite *sprite) +static void sub_8182648(struct Sprite *sprite) { s16 yScale; @@ -3473,7 +3491,7 @@ void sub_8182648(struct Sprite *sprite) yScale = Cos((index * 2) + sprite->data[7], 128) * sign; } - HandleSetAffineData(sprite, 0x100, 0x100 + yScale, 0); + HandleSetAffineData(sprite, 256, 256 + yScale, 0); if (sprite->data[6] == 3) { sprite->data[7] = 0; @@ -3481,7 +3499,7 @@ void sub_8182648(struct Sprite *sprite) } } -void sub_81826F8(struct Sprite *sprite) +static void sub_81826F8(struct Sprite *sprite) { s16 yScale; @@ -3493,20 +3511,20 @@ void sub_81826F8(struct Sprite *sprite) sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); } - HandleSetAffineData(sprite, 0x100, 0x100 + yScale, 0); + HandleSetAffineData(sprite, 256, 256 + yScale, 0); } -void sub_8182764(struct Sprite *sprite) +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, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); } else { @@ -3515,11 +3533,11 @@ void sub_8182764(struct Sprite *sprite) 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, 0x100 + xScale, 0x100, 0); + HandleSetAffineData(sprite, 256 + xScale, 256, 0); } } -void pokemonanimfunc_3E(struct Sprite *sprite) +static void pokemonanimfunc_3E(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -3534,14 +3552,14 @@ void pokemonanimfunc_3E(struct Sprite *sprite) sub_8182764(sprite); } -void sub_8182830(struct Sprite *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, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); } else { @@ -3550,11 +3568,11 @@ void sub_8182830(struct Sprite *sprite) 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, 0x100 + xScale, 0x100, 0); + HandleSetAffineData(sprite, 256 + xScale, 256, 0); } } -void pokemonanimfunc_3F(struct Sprite *sprite) +static void pokemonanimfunc_3F(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -3569,7 +3587,7 @@ void pokemonanimfunc_3F(struct Sprite *sprite) sub_8182830(sprite); } -void pokemonanimfunc_40(struct Sprite *sprite) +static void pokemonanimfunc_40(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -3583,7 +3601,7 @@ void pokemonanimfunc_40(struct Sprite *sprite) { sprite->pos2.x = 0; sub_817F77C(sprite); - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else @@ -3593,13 +3611,13 @@ void pokemonanimfunc_40(struct Sprite *sprite) sprite->pos2.x = Sin(sprite->data[7] % 256, 8); sprite->data[7] += 8; scale = Sin(sprite->data[7] % 128, 96); - HandleSetAffineData(sprite, 0x100 + scale, 0x100 + scale, 0); + HandleSetAffineData(sprite, 256 + scale, 256 + scale, 0); } sub_817F70C(sprite); } -void pokemonanimfunc_41(struct Sprite *sprite) +static void pokemonanimfunc_41(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -3613,7 +3631,7 @@ void pokemonanimfunc_41(struct Sprite *sprite) { sprite->pos2.x = 0; sub_817F77C(sprite); - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else @@ -3623,13 +3641,13 @@ void pokemonanimfunc_41(struct Sprite *sprite) sprite->pos2.x = -(Sin((sprite->data[7] % 256) / 2, 16)); sprite->data[7] += 8; scale = -(Sin((sprite->data[7] % 256) / 2, 64)); - HandleSetAffineData(sprite, 0x100 + scale, 0x100 + scale, 0); + HandleSetAffineData(sprite, 256 + scale, 256 + scale, 0); } sub_817F70C(sprite); } -void pokemonanimfunc_42(struct Sprite *sprite) +static void pokemonanimfunc_42(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -3643,7 +3661,7 @@ void pokemonanimfunc_42(struct Sprite *sprite) { sprite->pos2.x = 0; sub_817F77C(sprite); - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else @@ -3653,13 +3671,13 @@ void pokemonanimfunc_42(struct Sprite *sprite) sprite->pos2.x = -(Sin(sprite->data[7] % 256 , 8)); sprite->data[7] += 8; scale = Sin((sprite->data[7] % 256) / 2, 96); - HandleSetAffineData(sprite, 0x100 + scale, 0x100 + scale, 0); + HandleSetAffineData(sprite, 256 + scale, 256 + scale, 0); } sub_817F70C(sprite); } -void pokemonanimfunc_43(struct Sprite *sprite) +static void pokemonanimfunc_43(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) @@ -3693,7 +3711,7 @@ void pokemonanimfunc_43(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_44(struct Sprite *sprite) +static void pokemonanimfunc_44(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -3750,50 +3768,50 @@ void pokemonanimfunc_44(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_45(struct Sprite *sprite) +static void pokemonanimfunc_45(struct Sprite *sprite) { sprite->data[0] = 32; sub_8180714(sprite); sprite->callback = sub_8180714; } -void pokemonanimfunc_46(struct Sprite *sprite) +static void pokemonanimfunc_46(struct Sprite *sprite) { sprite->data[0] = 80; sub_817F8FC(sprite); sprite->callback = sub_817F8FC; } -void pokemonanimfunc_47(struct Sprite *sprite) +static void pokemonanimfunc_47(struct Sprite *sprite) { sprite->data[0] = 80; sub_817F978(sprite); sprite->callback = sub_817F978; } -void pokemonanimfunc_48(struct Sprite *sprite) +static void pokemonanimfunc_48(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 2048; - gUnknown_03001240[id].field_8 = sprite->data[6]; + sUnknown_03001240[id].field_6 = 2048; + sUnknown_03001240[id].field_8 = sprite->data[6]; sub_8180900(sprite); sprite->callback = sub_8180900; } -void pokemonanimfunc_49(struct Sprite *sprite) +static void pokemonanimfunc_49(struct Sprite *sprite) { sprite->data[6] = 1; pokemonanimfunc_05(sprite); } -void pokemonanimfunc_4A(struct Sprite *sprite) +static void pokemonanimfunc_4A(struct Sprite *sprite) { sprite->data[6] = 1; pokemonanimfunc_48(sprite); } -void pokemonanimfunc_4B(struct Sprite *sprite) +static void pokemonanimfunc_4B(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[0] = 0; @@ -3809,7 +3827,7 @@ void pokemonanimfunc_4B(struct Sprite *sprite) } } -void pokemonanimfunc_4C(struct Sprite *sprite) +static void pokemonanimfunc_4C(struct Sprite *sprite) { sprite->data[0] = 30; sprite->data[7] = 3; @@ -3817,156 +3835,156 @@ void pokemonanimfunc_4C(struct Sprite *sprite) sprite->callback = sub_817FCDC; } -void pokemonanimfunc_4D(struct Sprite *sprite) +static void pokemonanimfunc_4D(struct Sprite *sprite) { sprite->data[0] = 30; sub_817FD44(sprite); sprite->callback = sub_817FD44; } -void pokemonanimfunc_4E(struct Sprite *sprite) +static void pokemonanimfunc_4E(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 1024; - gUnknown_03001240[id].field_0 = 0; - gUnknown_03001240[id].field_4 = 2; + 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; } -void pokemonanimfunc_4F(struct Sprite *sprite) +static void pokemonanimfunc_4F(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 512; - gUnknown_03001240[id].field_8 = 3; - gUnknown_03001240[id].field_2 = 12; + 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; } -void pokemonanimfunc_50(struct Sprite *sprite) +static void pokemonanimfunc_50(struct Sprite *sprite) { sprite->data[0] = 24; sub_818031C(sprite); sprite->callback = sub_818031C; } -void pokemonanimfunc_51(struct Sprite *sprite) +static void pokemonanimfunc_51(struct Sprite *sprite) { sprite->data[0] = 5; sub_81804F8(sprite); sprite->callback = sub_81804F8; } -void pokemonanimfunc_52(struct Sprite *sprite) +static void pokemonanimfunc_52(struct Sprite *sprite) { sprite->data[0] = 3; sub_817F9F4(sprite); sprite->callback = sub_817F9F4; } -void pokemonanimfunc_53(struct Sprite *sprite) +static void pokemonanimfunc_53(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_0 = 60; - gUnknown_03001240[id].field_8 = 30; + sUnknown_03001240[id].field_0 = 60; + sUnknown_03001240[id].field_8 = 30; sub_817FF3C(sprite); sprite->callback = sub_817FF3C; } -void pokemonanimfunc_54(struct Sprite *sprite) +static void pokemonanimfunc_54(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_2 = 1; - gUnknown_03001240[id].field_4 = 2; + sUnknown_03001240[id].field_2 = 1; + sUnknown_03001240[id].field_4 = 2; sub_8181214(sprite); sprite->callback = sub_8181214; } -void pokemonanimfunc_55(struct Sprite *sprite) +static void pokemonanimfunc_55(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 4; - gUnknown_03001240[id].field_4 = 2; + sUnknown_03001240[id].field_6 = 4; + sUnknown_03001240[id].field_4 = 2; sub_8181810(sprite); sprite->callback = sub_8181810; } -void pokemonanimfunc_56(struct Sprite *sprite) +static void pokemonanimfunc_56(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 1; - gUnknown_03001240[id].field_4 = 2; + 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; } -void pokemonanimfunc_07(struct Sprite *sprite) +static void pokemonanimfunc_07(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 2; + sUnknown_03001240[id].field_6 = 2; sub_8181CE8(sprite); sprite->callback = sub_8181CE8; } -void pokemonanimfunc_08(struct Sprite *sprite) +static void pokemonanimfunc_08(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 4; - gUnknown_03001240[id].field_4 = 2; + sUnknown_03001240[id].field_6 = 4; + sUnknown_03001240[id].field_4 = 2; sub_8181CE8(sprite); sprite->callback = sub_8181CE8; } -void pokemonanimfunc_0B(struct Sprite *sprite) +static void pokemonanimfunc_0B(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 100; + sUnknown_03001240[id].field_8 = 100; sub_81814D4(sprite); sprite->callback = sub_81814D4; } -void pokemonanimfunc_0C(struct Sprite *sprite) +static void pokemonanimfunc_0C(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 50; - gUnknown_03001240[id].field_4 = 2; + sUnknown_03001240[id].field_8 = 50; + sUnknown_03001240[id].field_4 = 2; sub_81814D4(sprite); sprite->callback = sub_81814D4; } -void pokemonanimfunc_0D(struct Sprite *sprite) +static void pokemonanimfunc_0D(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 100; + sUnknown_03001240[id].field_8 = 100; sub_81815D4(sprite); sprite->callback = sub_81815D4; } -void pokemonanimfunc_0E(struct Sprite *sprite) +static void pokemonanimfunc_0E(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_8 = 50; - gUnknown_03001240[id].field_4 = 2; + sUnknown_03001240[id].field_8 = 50; + sUnknown_03001240[id].field_4 = 2; sub_81815D4(sprite); sprite->callback = sub_81815D4; } -void sub_8183140(struct Sprite *sprite) +static void sub_8183140(struct Sprite *sprite) { s32 counter = sprite->data[2]; if (counter > 2304) @@ -3982,7 +4000,7 @@ void sub_8183140(struct Sprite *sprite) sprite->data[2] += sprite->data[0]; } -void pokemonanimfunc_57(struct Sprite *sprite) +static void pokemonanimfunc_57(struct Sprite *sprite) { sprite->data[0] = 60; sprite->data[7] = 3; @@ -3990,7 +4008,7 @@ void pokemonanimfunc_57(struct Sprite *sprite) sprite->callback = sub_8183140; } -void pokemonanimfunc_58(struct Sprite *sprite) +static void pokemonanimfunc_58(struct Sprite *sprite) { sprite->data[0] = 30; sprite->data[7] = 3; @@ -3998,7 +4016,7 @@ void pokemonanimfunc_58(struct Sprite *sprite) sprite->callback = sub_8183140; } -void pokemonanimfunc_59(struct Sprite *sprite) +static void pokemonanimfunc_59(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) @@ -4032,7 +4050,7 @@ void pokemonanimfunc_59(struct Sprite *sprite) sub_817F70C(sprite); } -void sub_81832C8(struct Sprite *sprite) +static void sub_81832C8(struct Sprite *sprite) { s16 index1 = 0, index2 = 0; @@ -4040,7 +4058,7 @@ void sub_81832C8(struct Sprite *sprite) { sprite->pos2.y = 0; sprite->data[5] = 0; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); if (sprite->data[4] <= 1) { sub_817F77C(sprite); @@ -4067,18 +4085,18 @@ void sub_81832C8(struct Sprite *sprite) } if (sprite->data[1] == 0) - xScale = -0x100 - Sin(index2, 16); + xScale = -256 - Sin(index2, 16); else - xScale = 0x100 + Sin(index2, 16); + xScale = 256 + Sin(index2, 16); amplitude = sprite->data[3]; - yScale = 0x100 - Sin(index2, amplitude) - Sin(index1, amplitude / 5); + yScale = 256 - Sin(index2, amplitude) - Sin(index1, amplitude / 5); SetAffineData(sprite, xScale, yScale, 0); sprite->data[5]++; } } -void pokemonanimfunc_5A(struct Sprite *sprite) +static void pokemonanimfunc_5A(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4094,14 +4112,14 @@ void pokemonanimfunc_5A(struct Sprite *sprite) sub_81832C8(sprite); } -void sub_8183418(struct Sprite *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, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); if (sprite->data[4] <= 1) { sub_817F77C(sprite); @@ -4130,16 +4148,16 @@ void sub_8183418(struct Sprite *sprite) amplitude = sprite->data[3]; if (sprite->data[1] == 0) - xScale = -0x100 + Sin(index2, amplitude) + Sin(index1, amplitude / 5 * 2); + xScale = -256 + Sin(index2, amplitude) + Sin(index1, amplitude / 5 * 2); else - xScale = 0x100 - Sin(index2, amplitude) - Sin(index1, amplitude / 5 * 2); + xScale = 256 - Sin(index2, amplitude) - Sin(index1, amplitude / 5 * 2); - SetAffineData(sprite, xScale, 0x100, 0); + SetAffineData(sprite, xScale, 256, 0); sprite->data[5]++; } } -void pokemonanimfunc_5B(struct Sprite *sprite) +static void pokemonanimfunc_5B(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4155,19 +4173,19 @@ void pokemonanimfunc_5B(struct Sprite *sprite) sub_8183418(sprite); } -void sub_8183574(struct Sprite *sprite) +static void sub_8183574(struct Sprite *sprite) { u8 var6, var7; u8 var8 = sprite->data[2]; u8 var9 = sprite->data[6]; - u8 var5 = gUnknown_0860AA80[sprite->data[5]][0]; + 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 = gUnknown_0860AA80[sprite->data[5]][1]; + var6 = sUnknown_0860AA80[sprite->data[5]][1]; var7 = 0; if (var2 != 0xFE) var7 = (var6 - var9) * var5 / var6; @@ -4193,7 +4211,7 @@ void sub_8183574(struct Sprite *sprite) } } -void pokemonanimfunc_5C(struct Sprite *sprite) +static void pokemonanimfunc_5C(struct Sprite *sprite) { sprite->data[0] = 40; sprite->data[7] = 6; @@ -4201,7 +4219,7 @@ void pokemonanimfunc_5C(struct Sprite *sprite) sprite->callback = sub_8183574; } -void pokemonanimfunc_5D(struct Sprite *sprite) +static void pokemonanimfunc_5D(struct Sprite *sprite) { sprite->data[0] = 70; sprite->data[7] = 6; @@ -4209,14 +4227,14 @@ void pokemonanimfunc_5D(struct Sprite *sprite) sprite->callback = sub_817FCDC; } -void pokemonanimfunc_5E(struct Sprite *sprite) +static void pokemonanimfunc_5E(struct Sprite *sprite) { sprite->data[0] = 20; sub_817F8FC(sprite); sprite->callback = sub_817F8FC; } -void pokemonanimfunc_5F(struct Sprite *sprite) +static void pokemonanimfunc_5F(struct Sprite *sprite) { if (sprite->data[2] > 40) { @@ -4237,7 +4255,7 @@ void pokemonanimfunc_5F(struct Sprite *sprite) sprite->data[2]++; } -void pokemonanimfunc_60(struct Sprite *sprite) +static void pokemonanimfunc_60(struct Sprite *sprite) { if (sprite->data[2] > 40) { @@ -4258,7 +4276,7 @@ void pokemonanimfunc_60(struct Sprite *sprite) sprite->data[2]++; } -void pokemonanimfunc_61(struct Sprite *sprite) +static void pokemonanimfunc_61(struct Sprite *sprite) { sprite->data[0] = 70; sprite->data[7] = 6; @@ -4266,7 +4284,7 @@ void pokemonanimfunc_61(struct Sprite *sprite) sprite->callback = sub_8183140; } -void pokemonanimfunc_62(struct Sprite *sprite) +static void pokemonanimfunc_62(struct Sprite *sprite) { sprite->data[0] = 24; sprite->data[7] = 6; @@ -4274,7 +4292,7 @@ void pokemonanimfunc_62(struct Sprite *sprite) sprite->callback = sub_8183574; } -void pokemonanimfunc_63(struct Sprite *sprite) +static void pokemonanimfunc_63(struct Sprite *sprite) { sprite->data[0] = 56; sprite->data[7] = 9; @@ -4282,25 +4300,25 @@ void pokemonanimfunc_63(struct Sprite *sprite) sprite->callback = sub_8183574; } -void pokemonanimfunc_64(struct Sprite *sprite) +static void pokemonanimfunc_64(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); - gUnknown_03001240[id].field_6 = 1024; - gUnknown_03001240[id].field_8 = 6; - gUnknown_03001240[id].field_2 = 24; + 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; } -void sub_81837DC(struct Sprite *sprite) +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, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); if (sprite->data[4] <= 1) { sub_817F77C(sprite); @@ -4329,17 +4347,17 @@ void sub_81837DC(struct Sprite *sprite) amplitude = sprite->data[3]; if (sprite->data[1] == 0) - xScale = Sin(index2, amplitude) + (Sin(index1, amplitude / 5 * 2) - 0x100); + xScale = Sin(index2, amplitude) + (Sin(index1, amplitude / 5 * 2) - 256); else - xScale = 0x100 - Sin(index1, amplitude / 5 * 2) - Sin(index2, amplitude); + xScale = 256 - Sin(index1, amplitude / 5 * 2) - Sin(index2, amplitude); - yScale = 0x100 - Sin(index1, amplitude / 5) - Sin(index2, amplitude); + yScale = 256 - Sin(index1, amplitude / 5) - Sin(index2, amplitude); SetAffineData(sprite, xScale, yScale, 0); sprite->data[5]++; } } -void pokemonanimfunc_65(struct Sprite *sprite) +static void pokemonanimfunc_65(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4355,7 +4373,7 @@ void pokemonanimfunc_65(struct Sprite *sprite) sub_81837DC(sprite); } -void pokemonanimfunc_66(struct Sprite *sprite) +static void pokemonanimfunc_66(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) @@ -4389,7 +4407,7 @@ void pokemonanimfunc_66(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_67(struct Sprite *sprite) +static void pokemonanimfunc_67(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) @@ -4423,7 +4441,7 @@ void pokemonanimfunc_67(struct Sprite *sprite) sub_817F70C(sprite); } -static const s8 gUnknown_0860ADBE[][3] = +static const s8 sUnknown_0860ADBE[][3] = { // x y timer {1, 1, 12}, @@ -4432,19 +4450,19 @@ static const s8 gUnknown_0860ADBE[][3] = {0, 0, 0} }; -void sub_8183B4C(struct Sprite *sprite) +static void sub_8183B4C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) sprite->data[3] = 0; - if (gUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == sprite->data[2]) + if (sUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == sprite->data[2]) { sprite->data[3]++; sprite->data[2] = 0; } - if (gUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == 0) + if (sUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == 0) { if (--sprite->data[6] == 0) sprite->callback = SpriteCB_SetDummyOnAnimEnd; @@ -4454,14 +4472,14 @@ void sub_8183B4C(struct Sprite *sprite) else { s32 amplitude = sprite->data[5]; - sprite->pos2.x += (gUnknown_0860ADBE[sprite->data[3]][0] * amplitude); - sprite->pos2.y += (gUnknown_0860ADBE[sprite->data[3]][1] * sprite->data[5]); // what's the point of the var if you're not reusing it? + 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); } } -void pokemonanimfunc_68(struct Sprite *sprite) +static void pokemonanimfunc_68(struct Sprite *sprite) { sprite->data[5] = 1; sprite->data[6] = 1; @@ -4469,7 +4487,7 @@ void pokemonanimfunc_68(struct Sprite *sprite) sprite->callback = sub_8183B4C; } -void pokemonanimfunc_69(struct Sprite *sprite) +static void pokemonanimfunc_69(struct Sprite *sprite) { sprite->data[5] = 2; sprite->data[6] = 1; @@ -4477,7 +4495,7 @@ void pokemonanimfunc_69(struct Sprite *sprite) sprite->callback = sub_8183B4C; } -void pokemonanimfunc_6A(struct Sprite *sprite) +static void pokemonanimfunc_6A(struct Sprite *sprite) { sprite->data[5] = 2; sprite->data[6] = 2; @@ -4485,7 +4503,7 @@ void pokemonanimfunc_6A(struct Sprite *sprite) sprite->callback = sub_8183B4C; } -void sub_8183C6C(struct Sprite *sprite) +static void sub_8183C6C(struct Sprite *sprite) { if (sprite->data[7] > 255) { @@ -4493,7 +4511,7 @@ void sub_8183C6C(struct Sprite *sprite) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; - HandleSetAffineData(sprite, 0x100, 0x100, 0); + HandleSetAffineData(sprite, 256, 256, 0); } else { @@ -4510,11 +4528,11 @@ void sub_8183C6C(struct Sprite *sprite) sprite->data[7] = 256; scale = Sin(sprite->data[7] / 2, 64); - HandleSetAffineData(sprite, 0x100 - scale, 0x100 - scale, 0); + HandleSetAffineData(sprite, 256 - scale, 256 - scale, 0); } } -void pokemonanimfunc_6B(struct Sprite *sprite) +static void pokemonanimfunc_6B(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -4530,7 +4548,7 @@ void pokemonanimfunc_6B(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_6C(struct Sprite *sprite) +static void pokemonanimfunc_6C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) @@ -4546,7 +4564,7 @@ void pokemonanimfunc_6C(struct Sprite *sprite) sub_817F70C(sprite); } -void pokemonanimfunc_6D(struct Sprite *sprite) +static void pokemonanimfunc_6D(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4561,7 +4579,7 @@ void pokemonanimfunc_6D(struct Sprite *sprite) sub_8182764(sprite); } -void pokemonanimfunc_6E(struct Sprite *sprite) +static void pokemonanimfunc_6E(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4576,7 +4594,7 @@ void pokemonanimfunc_6E(struct Sprite *sprite) sub_8182764(sprite); } -void pokemonanimfunc_6F(struct Sprite *sprite) +static void pokemonanimfunc_6F(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4591,7 +4609,7 @@ void pokemonanimfunc_6F(struct Sprite *sprite) sub_8182830(sprite); } -void pokemonanimfunc_70(struct Sprite *sprite) +static void pokemonanimfunc_70(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4606,7 +4624,7 @@ void pokemonanimfunc_70(struct Sprite *sprite) sub_8182830(sprite); } -void pokemonanimfunc_71(struct Sprite *sprite) +static void pokemonanimfunc_71(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4618,7 +4636,7 @@ void pokemonanimfunc_71(struct Sprite *sprite) sub_8180828(sprite); } -void pokemonanimfunc_72(struct Sprite *sprite) +static void pokemonanimfunc_72(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4630,7 +4648,7 @@ void pokemonanimfunc_72(struct Sprite *sprite) sub_8180828(sprite); } -void pokemonanimfunc_73(struct Sprite *sprite) +static void pokemonanimfunc_73(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4645,7 +4663,7 @@ void pokemonanimfunc_73(struct Sprite *sprite) sub_81832C8(sprite); } -void pokemonanimfunc_74(struct Sprite *sprite) +static void pokemonanimfunc_74(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4660,7 +4678,7 @@ void pokemonanimfunc_74(struct Sprite *sprite) sub_81832C8(sprite); } -void pokemonanimfunc_75(struct Sprite *sprite) +static void pokemonanimfunc_75(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4676,7 +4694,7 @@ void pokemonanimfunc_75(struct Sprite *sprite) sub_8183418(sprite); } -void pokemonanimfunc_76(struct Sprite *sprite) +static void pokemonanimfunc_76(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4692,7 +4710,7 @@ void pokemonanimfunc_76(struct Sprite *sprite) sub_8183418(sprite); } -void pokemonanimfunc_77(struct Sprite *sprite) +static void pokemonanimfunc_77(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4708,7 +4726,7 @@ void pokemonanimfunc_77(struct Sprite *sprite) sub_81837DC(sprite); } -void pokemonanimfunc_78(struct Sprite *sprite) +static void pokemonanimfunc_78(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4724,7 +4742,7 @@ void pokemonanimfunc_78(struct Sprite *sprite) sub_81837DC(sprite); } -void sub_8183FA8(struct Sprite *sprite) +static void sub_8183FA8(struct Sprite *sprite) { if (sprite->data[7] > 255) { @@ -4752,7 +4770,7 @@ void sub_8183FA8(struct Sprite *sprite) } } -void pokemonanimfunc_79(struct Sprite *sprite) +static void pokemonanimfunc_79(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4767,7 +4785,7 @@ void pokemonanimfunc_79(struct Sprite *sprite) sub_8183FA8(sprite); } -void pokemonanimfunc_7A(struct Sprite *sprite) +static void pokemonanimfunc_7A(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4782,7 +4800,7 @@ void pokemonanimfunc_7A(struct Sprite *sprite) sub_8183FA8(sprite); } -void pokemonanimfunc_7B(struct Sprite *sprite) +static void pokemonanimfunc_7B(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4796,3 +4814,844 @@ void pokemonanimfunc_7B(struct Sprite *sprite) 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, 0x3FF); + else + BlendPalette(sprite->data[7], 0x10, 0, 0x3FF); + + 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 const u16 sUnknown_0860AE88[] = +{ + 0x1F, 0x3E0, 0x7C00, 0x0 +}; + +static void BackAnimBlend(struct Sprite *sprite) +{ + if (sprite->data[2] > 127) + { + BlendPalette(sprite->data[7], 0x10, 0, 0x1F); + sprite->callback = SpriteCB_SetDummyOnAnimEnd; + } + else + { + sprite->data[6] = Sin(sprite->data[2], 12); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], sUnknown_0860AE88[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; +} -- cgit v1.2.3 From 78728ae454b6c184b69f4a8c145f32904d406f19 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 29 Jan 2018 14:36:13 +0100 Subject: add rgb constants --- src/battle_interface.c | 15 ++++++++------- src/palette.c | 1 + src/pokemon_animation.c | 49 +++++++++++++++++++++++++------------------------ 3 files changed, 34 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/battle_interface.c b/src/battle_interface.c index 6a6bf00a2..da6f97942 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -20,6 +20,7 @@ #include "international_string_util.h" #include "safari_zone.h" #include "battle_anim.h" +#include "constants/rgb.h" struct TestingBar { @@ -555,13 +556,13 @@ enum PAL_STATUS_BRN }; -static const u16 sStatusIconPalettes[] = +static const u16 sStatusIconColors[] = { - 0x6198, // PAL_STATUS_PSN - 0xEF7, // PAL_STATUS_PAR - 0x4694, // PAL_STATUS_SLP - 0x72D1, // PAL_STATUS_FRZ - 0x29DC // PAL_STATUS_BRN + RGB(24, 12, 24), // PAL_STATUS_PSN + RGB(23, 23, 3), // PAL_STATUS_PAR + RGB(20, 20, 17), // PAL_STATUS_SLP + RGB(17, 22, 28), // PAL_STATUS_FRZ + RGB(28, 14, 10) // PAL_STATUS_BRN }; static const struct WindowTemplate sHealthboxWindowTemplate = {0, 0, 0, 8, 2, 0, 0}; // width = 8, height = 2 @@ -2071,7 +2072,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16; pltAdder += bank + 12; - FillPalette(sStatusIconPalettes[statusPalId], pltAdder + 0x100, 2); + FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2); CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * 32), 96); if (IsDoubleBattle() == TRUE || GetBankSide(bank) == SIDE_OPPONENT) diff --git a/src/palette.c b/src/palette.c index d7b6ad479..cc2046b14 100644 --- a/src/palette.c +++ b/src/palette.c @@ -4,6 +4,7 @@ #include "decompress.h" #include "gpu_regs.h" #include "task.h" +#include "constants/rgb.h" enum { diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index c8fcff93a..2bd4e3ef9 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -5,6 +5,7 @@ #include "trig.h" #include "task.h" #include "blend_palette.h" +#include "constants/rgb.h" struct UnkAnimStruct { @@ -903,7 +904,7 @@ static void Task_HandleMonAnimation(u8 taskId) sprite->data[1] = 1; sprite->data[0] = 0; - for (i = 2; i < 8; i++) + for (i = 2; i < ARRAY_COUNT(sprite->data); i++) sprite->data[i] = 0; sprite->callback = sMonAnimFunctions[gTasks[taskId].tAnimId]; @@ -1588,13 +1589,13 @@ static void pokemonanimfunc_15(struct Sprite *sprite) if (sprite->data[2] > 128) { - BlendPalette(sprite->data[7], 0x10, 0, 0); + 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], 0); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_BLACK); } sprite->data[2]++; @@ -2050,13 +2051,13 @@ static void pokemonanimfunc_20(struct Sprite *sprite) if (sprite->data[2] > 128) { - BlendPalette(sprite->data[7], 0x10, 0, 0x2DF); + 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], 0x2DF); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB(31, 22, 0)); } sprite->data[2] += 2; @@ -2069,13 +2070,13 @@ static void pokemonanimfunc_21(struct Sprite *sprite) if (sprite->data[2] > 128) { - BlendPalette(sprite->data[7], 0x10, 0, 0x1F); + 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], 0x1F); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_RED); } sprite->data[2] += 2; @@ -2088,13 +2089,13 @@ static void pokemonanimfunc_22(struct Sprite *sprite) if (sprite->data[2] > 128) { - BlendPalette(sprite->data[7], 0x10, 0, 0x7C00); + 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], 0x7C00); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_BLUE); } sprite->data[2] += 2; @@ -2107,13 +2108,13 @@ static void pokemonanimfunc_23(struct Sprite *sprite) if (sprite->data[2] > 128) { - BlendPalette(sprite->data[7], 0x10, 0, 0x3FF); + 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], 0x3FF); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_YELLOW); } sprite->data[2] += 2; @@ -2126,13 +2127,13 @@ static void pokemonanimfunc_24(struct Sprite *sprite) if (sprite->data[2] > 128) { - BlendPalette(sprite->data[7], 0x10, 0, 0x6018); + 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], 0x6018); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB(24, 0, 24)); } sprite->data[2] += 2; @@ -2602,9 +2603,9 @@ static void pokemonanimfunc_2C(struct Sprite *sprite) if (sprite->data[4] == 1) { if (sUnknown_0860AA64[sprite->data[6]][0] != 0) - BlendPalette(sprite->data[7], 0x10, 0x10, 0x3FF); + BlendPalette(sprite->data[7], 0x10, 0x10, RGB_YELLOW); else - BlendPalette(sprite->data[7], 0x10, 0, 0x3FF); + BlendPalette(sprite->data[7], 0x10, 0, RGB_YELLOW); sprite->data[4] = 0; } @@ -5357,9 +5358,9 @@ static void BackAnimBlendYellow(struct Sprite *sprite) if (sprite->data[4] == 1) { if (array[sprite->data[6]].field_0 != 0) - BlendPalette(sprite->data[7], 0x10, 0x10, 0x3FF); + BlendPalette(sprite->data[7], 0x10, 0x10, RGB_YELLOW); else - BlendPalette(sprite->data[7], 0x10, 0, 0x3FF); + BlendPalette(sprite->data[7], 0x10, 0, RGB_YELLOW); sprite->data[4] = 0; } @@ -5419,22 +5420,22 @@ static void pokemonanimfunc_8D(struct Sprite *sprite) BackAnimBlendYellow(sprite); } -static const u16 sUnknown_0860AE88[] = -{ - 0x1F, 0x3E0, 0x7C00, 0x0 -}; - 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, 0x1F); + 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], sUnknown_0860AE88[sprite->data[1]]); + BlendPalette(sprite->data[7], 0x10, sprite->data[6], sColors[sprite->data[1]]); } } -- cgit v1.2.3 From d728124a7b51d5db257d58ae9b47a5285c696748 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 29 Jan 2018 15:55:34 +0100 Subject: decompile time events --- src/time_events.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/time_events.c (limited to 'src') diff --git a/src/time_events.c b/src/time_events.c new file mode 100644 index 000000000..1f169a5c6 --- /dev/null +++ b/src/time_events.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "time_events.h" +#include "event_data.h" +#include "field_weather.h" +#include "pokemon.h" +#include "random.h" +#include "overworld.h" +#include "rtc.h" +#include "script.h" +#include "task.h" + +static u32 GetMirageRnd(void) +{ + u32 hi = VarGet(VAR_MIRAGE_RND_H); + u32 lo = VarGet(VAR_MIRAGE_RND_L); + return (hi << 16) | lo; +} + +static void SetMirageRnd(u32 rnd) +{ + VarSet(VAR_MIRAGE_RND_H, rnd >> 16); + VarSet(VAR_MIRAGE_RND_L, rnd); +} + +// unused +void InitMirageRnd(void) +{ + SetMirageRnd((Random() << 16) | Random()); +} + +void UpdateMirageRnd(u16 days) +{ + s32 rnd = GetMirageRnd(); + while (days) + { + rnd = 1103515245 * rnd + 12345; + days--; + } + SetMirageRnd(rnd); +} + +bool8 IsMirageIslandPresent(void) +{ + u16 rnd = GetMirageRnd() >> 16; + int i; + + for (i = 0; i < PARTY_SIZE; i++) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && (GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY) & 0xFFFF) == rnd) + return TRUE; + + return FALSE; +} + +void UpdateShoalTideFlag(void) +{ + static const u8 tide[] = + { + 1, // 00 + 1, // 01 + 1, // 02 + 0, // 03 + 0, // 04 + 0, // 05 + 0, // 06 + 0, // 07 + 0, // 08 + 1, // 09 + 1, // 10 + 1, // 11 + 1, // 12 + 1, // 13 + 1, // 14 + 0, // 15 + 0, // 16 + 0, // 17 + 0, // 18 + 0, // 19 + 0, // 20 + 1, // 21 + 1, // 22 + 1, // 23 + }; + + if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0())) + { + RtcCalcLocalTime(); + if (tide[gLocalTime.hours]) + FlagSet(FLAG_SYS_SHOAL_TIDE); + else + FlagClear(FLAG_SYS_SHOAL_TIDE); + } +} + +static void Task_WaitWeather(u8 taskId) +{ + if (IsWeatherChangeComplete()) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void WaitWeather(void) +{ + CreateTask(Task_WaitWeather, 80); +} + +void InitBirchState(void) +{ + *GetVarPointer(VAR_BIRCH_STATE) = 0; +} + +void UpdateBirchState(u16 days) +{ + u16 *state = GetVarPointer(VAR_BIRCH_STATE); + *state += days; + *state %= 7; +} -- cgit v1.2.3 From 76fc1d1c129fa1aa01bd51d44ba1aa780f69f9cf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 29 Jan 2018 16:25:09 +0100 Subject: make time events compile --- src/decoration.c | 10 +++++----- src/egg_hatch.c | 4 ++-- src/scrcmd.c | 10 +++++----- src/secret_base.c | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/decoration.c b/src/decoration.c index a9777c86f..68a455285 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -529,7 +529,7 @@ void SecretBasePC_PutAway(u8 taskId) { sub_8126A58(0); sub_8197434(0, 0); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].data[2] = 0; gTasks[taskId].func = sub_8129ABC; } @@ -1247,7 +1247,7 @@ void sub_8127F68(u8 taskId) { if (sub_8127F38() == TRUE) { - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].data[2] = 0; gTasks[taskId].func = sub_8128060; } @@ -1661,7 +1661,7 @@ void sub_8128BA0(u8 taskId) void sub_8128BBC(u8 taskId) { - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].data[2] = 0; gTasks[taskId].func = c1_overworld_prev_quest; } @@ -2635,7 +2635,7 @@ void sub_812A1A0(u8 taskId) void sub_812A1C0(u8 taskId) { - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].data[2] = 0; gTasks[taskId].func = sub_81298EC; } @@ -2654,7 +2654,7 @@ void sub_812A210(u8 taskId) void sub_812A22C(u8 taskId) { - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].data[2] = 0; gTasks[taskId].func = sub_812A25C; } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 435886638..e8f22e903 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -61,7 +61,7 @@ extern u8 sav1_map_get_name(void); extern s8 ProcessMenuInputNoWrap_(void); extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8); extern void sub_806A068(u16, u8); -extern void fade_screen(u8, u8); +extern void FadeScreen(u8, u8); extern void overworld_free_bg_tilemaps(void); extern void sub_80AF168(void); extern void AllocateMonSpritesGfx(void); @@ -465,7 +465,7 @@ void EggHatch(void) { ScriptContext2_Enable(); CreateTask(Task_EggHatch, 10); - fade_screen(1, 0); + FadeScreen(1, 0); } static void Task_EggHatch(u8 taskID) diff --git a/src/scrcmd.c b/src/scrcmd.c index 0557cd95e..1768f0d4c 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -638,7 +638,7 @@ static bool8 IsPaletteNotActive(void) bool8 ScrCmd_fadescreen(struct ScriptContext *ctx) { - fade_screen(ScriptReadByte(ctx), 0); + FadeScreen(ScriptReadByte(ctx), 0); SetupNativeScript(ctx, IsPaletteNotActive); return TRUE; } @@ -648,7 +648,7 @@ bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx) u8 mode = ScriptReadByte(ctx); u8 speed = ScriptReadByte(ctx); - fade_screen(mode, speed); + FadeScreen(mode, speed); SetupNativeScript(ctx, IsPaletteNotActive); return TRUE; } @@ -662,12 +662,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case 1: default: CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE); - fade_screen(mode, 0); + FadeScreen(mode, 0); break; case 0: case 2: CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE); - fade_screen(mode, 0); + FadeScreen(mode, 0); break; } @@ -726,7 +726,7 @@ bool8 ScrCmd_setweather(struct ScriptContext *ctx) bool8 ScrCmd_resetweather(struct ScriptContext *ctx) { - sub_80AEDBC(); + SetSav1WeatherFromCurrMapHeader(); return FALSE; } diff --git a/src/secret_base.c b/src/secret_base.c index bf6bec1f8..61c2511b7 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -394,7 +394,7 @@ void sub_80E8FD0(u8 taskId) void sub_80E9068(void) { CreateTask(sub_80E8FD0, 0); - fade_screen(1, 0); + FadeScreen(1, 0); saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); } @@ -451,7 +451,7 @@ void sub_80E916C(u8 taskId) void sub_80E91F8(void) { CreateTask(sub_80E916C, 0); - fade_screen(1, 0); + FadeScreen(1, 0); } bool8 CurrentMapIsSecretBase(void) @@ -651,7 +651,7 @@ void sub_80E96A4(u8 taskId) void sub_80E9728(void) { CreateTask(sub_80E96A4, 0); - fade_screen(1, 0); + FadeScreen(1, 0); } void sub_80E9744(void) -- cgit v1.2.3 From db3ecf5012612ed08aab55f4a8993afea74a4216 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 29 Jan 2018 17:47:12 +0100 Subject: decompile scanline effect --- src/battle_2.c | 45 +++----- src/battle_transition.c | 258 ++++++++++++++++++++++---------------------- src/berry_fix_program.c | 2 +- src/diploma.c | 2 +- src/evolution_scene.c | 6 +- src/hall_of_fame.c | 2 +- src/mail.c | 2 +- src/option_menu.c | 2 +- src/pokeblock.c | 2 +- src/reshow_battle_screen.c | 6 +- src/scanline_effect.c | 262 +++++++++++++++++++++++++++++++++++++++++++++ src/use_pokeblock.c | 4 +- src/wallclock.c | 2 +- 13 files changed, 422 insertions(+), 173 deletions(-) create mode 100644 src/scanline_effect.c (limited to 'src') diff --git a/src/battle_2.c b/src/battle_2.c index 61e39b39f..4ff2bd19a 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -4,7 +4,7 @@ #include "main.h" #include "load_save.h" #include "gpu_regs.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "battle_setup.h" #include "battle_scripts.h" #include "pokemon.h" @@ -46,13 +46,6 @@ #include "battle_string_ids.h" #include "data2.h" -struct UnknownStruct6 -{ - u16 unk0[0xA0]; - u8 fillerA0[0x640]; - u16 unk780[0xA0]; -}; - struct UnknownPokemonStruct2 { /*0x00*/ u16 species; @@ -90,8 +83,6 @@ extern void (*gBattleMainFunc)(void); extern void (*gCB2_AfterEvolution)(void); extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for? extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for? -extern u8 gUnknown_02039B28[]; // possibly a struct? -extern struct UnknownStruct6 gUnknown_02038C28; // todo: identify & document extern struct MusicPlayerInfo gMPlayInfo_SE1; extern struct MusicPlayerInfo gMPlayInfo_SE2; extern u8 gDecompressionBuffer[]; @@ -162,6 +153,7 @@ extern const u8 * const gBattlescriptsForBallThrow[]; extern const u8 * const gBattlescriptsForRunningByItem[]; extern const u8 * const gBattlescriptsForUsingItem[]; extern const u8 * const gBattlescriptsForSafariActions[]; +extern const struct ScanlineEffectParams gUnknown_0831AC70; // strings extern const u8 gText_LinkStandby3[]; @@ -180,7 +172,7 @@ extern const u8 gText_Confusion[]; extern const u8 gText_Love[]; // functions -extern void dp12_8087EA4(void); +extern void ScanlineEffect_Clear(void); extern void sub_80356D0(void); extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower extern void sub_8166188(void); // battle tower, sets link battle mons level but why? @@ -383,24 +375,21 @@ static void CB2_InitBattleInternal(void) else { gBattle_WIN0V = 0x5051; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 80; i++) { - gUnknown_02038C28.unk0[i] = 0xF0; - gUnknown_02038C28.unk780[i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; } for (i = 80; i < 160; i++) { - #ifndef NONMATCHING - asm(""::"r"(i)); // needed to match - #endif // NONMATCHING - - gUnknown_02038C28.unk0[i] = 0xFF10; - gUnknown_02038C28.unk780[i] = 0xFF10; + asm(""::"r"(i)); + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; } - sub_80BA038(gUnknown_0831AC70); + ScanlineEffect_SetParams(gUnknown_0831AC70); } ResetPaletteFade(); @@ -1596,7 +1585,7 @@ void BattleMainCB2(void) static void FreeRestoreBattleData(void) { gMain.callback1 = gPreBattleCallback1; - gUnknown_02039B28[0x15] = 3; + gScanlineEffect.state = 3; gMain.inBattle = 0; ZeroEnemyPartyMons(); m4aSongNumStop(0x5A); @@ -1814,7 +1803,7 @@ void VBlankCB_Battle(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_80BA0A8(); + ScanlineEffect_InitHBlankDmaTransfer(); } void nullsub_17(void) @@ -1952,18 +1941,18 @@ void sub_8038D64(void) SetGpuReg(REG_OFFSET_WINOUT, 0); gBattle_WIN0H = 0xF0; gBattle_WIN0V = 0x5051; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 80; i++) { - gUnknown_02038C28.unk0[i] = 0xF0; - gUnknown_02038C28.unk780[i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; } for (i = 80; i < 160; i++) { asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_02038C28.unk0[i] = 0xFF10; - gUnknown_02038C28.unk780[i] = 0xFF10; + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; } ResetPaletteFade(); diff --git a/src/battle_transition.c b/src/battle_transition.c index e003e0fce..0ff8cd903 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -14,7 +14,7 @@ #include "constants/songs.h" #include "constants/trainers.h" #include "field_camera.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "malloc.h" #include "gpu_regs.h" #include "decompress.h" @@ -56,8 +56,6 @@ struct StructRectangularSpiral typedef bool8 (*TransitionStateFunc)(struct Task *task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); -extern u16 gUnknown_020393A8[]; -extern u16 gUnknown_02038C28[][0x3C0]; extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; @@ -65,7 +63,7 @@ extern const struct OamData gFieldObjectBaseOam_32x32; extern void c2_exit_to_overworld_2_switch(void); extern void sub_80AC3D0(void); -extern void dp12_8087EA4(void); +extern void ScanlineEffect_Clear(void); // this file's functions static void LaunchBattleTransitionTask(u8 transitionId); @@ -1110,9 +1108,9 @@ static void Phase2Task_Swirl(u8 taskId) static bool8 Phase2_Swirl_Func1(struct Task *task) { sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); - sub_8149F98(gUnknown_020393A8, sTransitionStructPtr->field_14, 0, 2, 0, 160); + sub_8149F98(gScanlineEffectRegBuffers[1], sTransitionStructPtr->field_14, 0, 2, 0, 160); SetVBlankCallback(VBlankCB_Phase2_Swirl); SetHBlankCallback(HBlankCB_Phase2_Swirl); @@ -1129,7 +1127,7 @@ static bool8 Phase2_Swirl_Func2(struct Task *task) task->tData1 += 4; task->tData2 += 8; - sub_8149F98(gUnknown_02038C28[0], sTransitionStructPtr->field_14, task->tData1, 2, task->tData2, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], sTransitionStructPtr->field_14, task->tData1, 2, task->tData2, 160); if (!gPaletteFade.active) { @@ -1145,12 +1143,12 @@ static void VBlankCB_Phase2_Swirl(void) { VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_Swirl(void) { - u16 var = gUnknown_02038C28[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1HOFS = var; REG_BG2HOFS = var; REG_BG3HOFS = var; @@ -1164,10 +1162,10 @@ static void Phase2Task_Shuffle(u8 taskId) static bool8 Phase2_Shuffle_Func1(struct Task *task) { sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); - memset(gUnknown_020393A8, sTransitionStructPtr->field_16, 0x140); + memset(gScanlineEffectRegBuffers[1], sTransitionStructPtr->field_16, 0x140); SetVBlankCallback(VBlankCB_Phase2_Shuffle); SetHBlankCallback(HBlankCB_Phase2_Shuffle); @@ -1192,7 +1190,7 @@ static bool8 Phase2_Shuffle_Func2(struct Task *task) for (i = 0; i < 160; i++, r4 += 4224) { u16 var = r4 / 256; - gUnknown_02038C28[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); } if (!gPaletteFade.active) @@ -1206,12 +1204,12 @@ static void VBlankCB_Phase2_Shuffle(void) { VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_Shuffle(void) { - u16 var = gUnknown_02038C28[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1VOFS = var; REG_BG2VOFS = var; REG_BG3VOFS = var; @@ -1257,7 +1255,7 @@ static void sub_814669C(struct Task *task) s32 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); task->tData1 = 16; task->tData2 = 0; @@ -1272,7 +1270,7 @@ static void sub_814669C(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = 240; + gScanlineEffectRegBuffers[1][i] = 240; } SetVBlankCallback(VBlankCB0_Phase2_BigPokeball); @@ -1351,7 +1349,7 @@ static bool8 Phase2_BigPokeball_Func2(struct Task *task) dst1[i * 32 + j] = *BigPokeballMap | 0xF000; } } - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); task->tState++; return TRUE; @@ -1363,7 +1361,7 @@ static bool8 Phase2_Aqua_Func2(struct Task *task) sub_8149F58(&dst1, &dst2); LZ77UnCompVram(sTeamAqua_Tilemap, dst1); - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); task->tState++; return FALSE; @@ -1375,7 +1373,7 @@ static bool8 Phase2_Magma_Func2(struct Task *task) sub_8149F58(&dst1, &dst2); LZ77UnCompVram(sTeamMagma_Tilemap, dst1); - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); task->tState++; return FALSE; @@ -1388,7 +1386,7 @@ static bool8 Phase2_Regice_Func2(struct Task *task) sub_8149F58(&dst1, &dst2); LoadPalette(gUnknown_085BC2B4, 0xF0, 0x20); CpuCopy16(gUnknown_085BC314, dst1, 0x500); - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); task->tState++; return FALSE; @@ -1401,7 +1399,7 @@ static bool8 Phase2_Registeel_Func2(struct Task *task) sub_8149F58(&dst1, &dst2); LoadPalette(gUnknown_085BC2D4, 0xF0, 0x20); CpuCopy16(gUnknown_085BCB14, dst1, 0x500); - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); task->tState++; return FALSE; @@ -1414,7 +1412,7 @@ static bool8 Phase2_Regirock_Func2(struct Task *task) sub_8149F58(&dst1, &dst2); LoadPalette(gUnknown_085BC2F4, 0xF0, 0x20); CpuCopy16(gUnknown_085BD314, dst1, 0x500); - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); task->tState++; return FALSE; @@ -1499,7 +1497,7 @@ static bool8 Phase2_BigPokeball_Func3(struct Task *task) task->tData4 += 8; task->tData5 -= 256; - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5 >> 8, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5 >> 8, 160); sTransitionStructPtr->VBlank_DMA++; return FALSE; @@ -1519,7 +1517,7 @@ static bool8 Phase2_BigPokeball_Func4(struct Task *task) task->tData4 += 8; task->tData5 -= 256; - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5 >> 8, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5 >> 8, 160); sTransitionStructPtr->VBlank_DMA++; return FALSE; @@ -1531,7 +1529,7 @@ static bool8 Phase2_BigPokeball_Func5(struct Task *task) task->tData4 += 8; task->tData5 -= 256; - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 132, task->tData5 >> 8, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5 >> 8, 160); if (task->tData5 <= 0) { @@ -1577,7 +1575,7 @@ static bool8 Phase2_BigPokeball_Func6(struct Task *task) if (task->tData1 < 0) task->tData1 = 0; } - sub_814A014(gUnknown_02038C28[0], 120, 80, task->tData1); + sub_814A014(gScanlineEffectRegBuffers[0], 120, 80, task->tData1); if (task->tData1 == 0) { SetVBlankCallback(NULL); @@ -1604,7 +1602,7 @@ static void Transition_BigPokeball_Vblank(void) DmaStop(0); VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = sTransitionStructPtr->WININ; REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; @@ -1615,13 +1613,13 @@ static void Transition_BigPokeball_Vblank(void) static void VBlankCB0_Phase2_BigPokeball(void) { Transition_BigPokeball_Vblank(); - DmaSet(0, gUnknown_020393A8, ®_BG0HOFS, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, 0xA2400001); } static void VBlankCB1_Phase2_BigPokeball(void) { Transition_BigPokeball_Vblank(); - DmaSet(0, gUnknown_020393A8, ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void Phase2Task_PokeballsTrail(u8 taskId) @@ -1741,7 +1739,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func1(struct Task *task) u16 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); sTransitionStructPtr->WININ = 0; sTransitionStructPtr->WINOUT = 63; @@ -1750,7 +1748,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func1(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_020393A8[i] = 0xF3F4; + gScanlineEffectRegBuffers[1][i] = 0xF3F4; } SetVBlankCallback(VBlankCB_Phase2_Clockwise_BlackFade); @@ -1767,7 +1765,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func2(struct Task *task) sub_814A1AC(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->data[4], -1, 1, 1); do { - gUnknown_02038C28[0][sTransitionStructPtr->data[3]] = (sTransitionStructPtr->data[2] + 1) | 0x7800; + gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (sTransitionStructPtr->data[2] + 1) | 0x7800; } while (!sub_814A228(sTransitionStructPtr->data, 1, 1)); sTransitionStructPtr->data[4] += 16; @@ -1795,7 +1793,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func3(struct Task *task) r1 = 120, r3 = sTransitionStructPtr->data[2] + 1; if (sTransitionStructPtr->data[5] >= 80) r1 = sTransitionStructPtr->data[2], r3 = 240; - gUnknown_02038C28[0][sTransitionStructPtr->data[3]] = (r3) | (r1 << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (r3) | (r1 << 8); if (var != 0) break; var = sub_814A228(sTransitionStructPtr->data, 1, 1); @@ -1811,7 +1809,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func3(struct Task *task) { while (sTransitionStructPtr->data[3] < sTransitionStructPtr->data[5]) { - gUnknown_02038C28[0][++sTransitionStructPtr->data[3]] = (r3) | (r1 << 8); + gScanlineEffectRegBuffers[0][++sTransitionStructPtr->data[3]] = (r3) | (r1 << 8); } } @@ -1826,7 +1824,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func4(struct Task *task) sub_814A1AC(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->data[4], 160, 1, 1); do { - gUnknown_02038C28[0][sTransitionStructPtr->data[3]] = (sTransitionStructPtr->data[2] << 8) | 0xF0; + gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (sTransitionStructPtr->data[2] << 8) | 0xF0; } while (!sub_814A228(sTransitionStructPtr->data, 1, 1)); sTransitionStructPtr->data[4] -= 16; @@ -1851,12 +1849,12 @@ static bool8 Phase2_Clockwise_BlackFade_Func5(struct Task *task) while (1) { - r1 = (gUnknown_02038C28[0][sTransitionStructPtr->data[3]]) & 0xFF; + r1 = (gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]]) & 0xFF; r2 = sTransitionStructPtr->data[2]; if (sTransitionStructPtr->data[5] <= 80) r2 = 120, r1 = sTransitionStructPtr->data[2]; var4 = (r1) | (r2 << 8); - gUnknown_02038C28[0][sTransitionStructPtr->data[3]] = var4; + gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = var4; if (var != 0) break; var = sub_814A228(sTransitionStructPtr->data, 1, 1); @@ -1872,7 +1870,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func5(struct Task *task) { while (sTransitionStructPtr->data[3] > sTransitionStructPtr->data[5]) { - gUnknown_02038C28[0][--sTransitionStructPtr->data[3]] = (r1) | (r2 << 8); + gScanlineEffectRegBuffers[0][--sTransitionStructPtr->data[3]] = (r1) | (r2 << 8); } } @@ -1892,7 +1890,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func6(struct Task *task) r2 = 120, r3 = sTransitionStructPtr->data[2]; if (sTransitionStructPtr->data[2] >= 120) r2 = 0, r3 = 240; - gUnknown_02038C28[0][sTransitionStructPtr->data[3]] = (r3) | (r2 << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (r3) | (r2 << 8); } while (!sub_814A228(sTransitionStructPtr->data, 1, 1)); @@ -1917,12 +1915,12 @@ static void VBlankCB_Phase2_Clockwise_BlackFade(void) DmaStop(0); VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = sTransitionStructPtr->WININ; REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; - REG_WIN0H = gUnknown_02038C28[1][0]; - DmaSet(0, gUnknown_02038C28[1], ®_WIN0H, 0xA2400001); + REG_WIN0H = gScanlineEffectRegBuffers[1][0]; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void Phase2Task_Ripple(u8 taskId) @@ -1935,11 +1933,11 @@ static bool8 Phase2_Ripple_Func1(struct Task *task) u8 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 160; i++) { - gUnknown_020393A8[i] = sTransitionStructPtr->field_16; + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_16; } SetVBlankCallback(VBlankCB_Phase2_Ripple); @@ -1971,7 +1969,7 @@ static bool8 Phase2_Ripple_Func2(struct Task *task) // todo: fix the asm s16 var = r4 >> 8; asm(""); - gUnknown_02038C28[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); } if (++task->tData3 == 81) @@ -1991,12 +1989,12 @@ static void VBlankCB_Phase2_Ripple(void) { VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_Ripple(void) { - u16 var = gUnknown_02038C28[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1VOFS = var; REG_BG2VOFS = var; REG_BG3VOFS = var; @@ -2012,7 +2010,7 @@ static bool8 Phase2_Wave_Func1(struct Task *task) u8 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); sTransitionStructPtr->WININ = 63; sTransitionStructPtr->WINOUT = 0; @@ -2021,7 +2019,7 @@ static bool8 Phase2_Wave_Func1(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = 242; + gScanlineEffectRegBuffers[1][i] = 242; } SetVBlankCallback(VBlankCB_Phase2_Wave); @@ -2037,7 +2035,7 @@ static bool8 Phase2_Wave_Func2(struct Task *task) bool8 nextFunc; sTransitionStructPtr->VBlank_DMA = FALSE; - toStore = gUnknown_02038C28[0]; + toStore = gScanlineEffectRegBuffers[0]; r5 = task->tData2; task->tData2 += 16; task->tData1 += 8; @@ -2073,11 +2071,11 @@ static void VBlankCB_Phase2_Wave(void) DmaStop(0); VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = sTransitionStructPtr->WININ; REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; - DmaSet(0, gUnknown_02038C28[1], ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void Phase2Task_Sydney(u8 taskId) @@ -2120,7 +2118,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task *task) u8 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); Mugshots_CreateOpponentPlayerSprites(task); task->tData1 = 0; @@ -2132,7 +2130,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = 0xF0F1; + gScanlineEffectRegBuffers[1][i] = 0xF0F1; } SetVBlankCallback(VBlankCB0_Phase2_Mugshots); @@ -2177,7 +2175,7 @@ static bool8 Phase2_Mugshot_Func3(struct Task *task) sTransitionStructPtr->VBlank_DMA = FALSE; - toStore = gUnknown_02038C28[0]; + toStore = gScanlineEffectRegBuffers[0]; r5 = task->tData1; task->tData1 += 0x10; @@ -2223,7 +2221,7 @@ static bool8 Phase2_Mugshot_Func4(struct Task *task) sTransitionStructPtr->VBlank_DMA = FALSE; - for (i = 0, toStore = gUnknown_02038C28[0]; i < 160; i++, toStore++) + for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < 160; i++, toStore++) { *toStore = 0xF0; } @@ -2266,8 +2264,8 @@ static bool8 Phase2_Mugshot_Func6(struct Task *task) sTransitionStructPtr->VBlank_DMA = FALSE; SetVBlankCallback(NULL); DmaStop(0); - memset(gUnknown_02038C28[0], 0, 0x140); - memset(gUnknown_02038C28[1], 0, 0x140); + memset(gScanlineEffectRegBuffers[0], 0, 0x140); + memset(gScanlineEffectRegBuffers[1], 0, 0x140); SetGpuReg(REG_OFFSET_WIN0H, 0xF0); SetGpuReg(REG_OFFSET_BLDY, 0); task->tState++; @@ -2300,15 +2298,15 @@ static bool8 Phase2_Mugshot_Func7(struct Task *task) { s16 index1 = 0x50 - i; s16 index2 = 0x50 + i; - if (gUnknown_02038C28[0][index1] <= 15) + if (gScanlineEffectRegBuffers[0][index1] <= 15) { r6 = TRUE; - gUnknown_02038C28[0][index1]++; + gScanlineEffectRegBuffers[0][index1]++; } - if (gUnknown_02038C28[0][index2] <= 15) + if (gScanlineEffectRegBuffers[0][index2] <= 15) { r6 = TRUE; - gUnknown_02038C28[0][index2]++; + gScanlineEffectRegBuffers[0][index2]++; } } } @@ -2336,7 +2334,7 @@ static bool8 Phase2_Mugshot_Func9(struct Task *task) sTransitionStructPtr->VBlank_DMA = FALSE; task->tData3++; - memset(gUnknown_02038C28[0], task->tData3, 0x140); + memset(gScanlineEffectRegBuffers[0], task->tData3, 0x140); if (task->tData3 > 15) task->tState++; @@ -2357,12 +2355,12 @@ static void VBlankCB0_Phase2_Mugshots(void) DmaStop(0); VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_BG0VOFS = sTransitionStructPtr->BG0VOFS; REG_WININ = sTransitionStructPtr->WININ; REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; - DmaSet(0, gUnknown_02038C28[1], ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void VBlankCB1_Phase2_Mugshots(void) @@ -2370,9 +2368,9 @@ static void VBlankCB1_Phase2_Mugshots(void) DmaStop(0); VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_BLDCNT = sTransitionStructPtr->BLDCNT; - DmaSet(0, gUnknown_02038C28[1], ®_BLDY, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, 0xA2400001); } static void HBlankCB_Phase2_Mugshots(void) @@ -2500,7 +2498,7 @@ static bool8 Phase2_Slice_Func1(struct Task *task) u16 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); task->tData2 = 256; task->tData3 = 1; @@ -2511,8 +2509,8 @@ static bool8 Phase2_Slice_Func1(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = sTransitionStructPtr->field_14; - gUnknown_02038C28[1][160 + i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_14; + gScanlineEffectRegBuffers[1][160 + i] = 0xF0; } EnableInterrupts(INTR_FLAG_HBLANK); @@ -2541,8 +2539,8 @@ static bool8 Phase2_Slice_Func2(struct Task *task) for (i = 0; i < 160; i++) { - u16 *storeLoc1 = &gUnknown_02038C28[0][i]; - u16 *storeLoc2 = &gUnknown_02038C28[0][i + 160]; + u16 *storeLoc1 = &gScanlineEffectRegBuffers[0][i]; + u16 *storeLoc2 = &gScanlineEffectRegBuffers[0][i + 160]; if (i & 1) { *storeLoc1 = sTransitionStructPtr->field_14 + task->tData1; @@ -2578,15 +2576,15 @@ static void VBlankCB_Phase2_Slice(void) REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 640); - DmaSet(0, &gUnknown_02038C28[1][160], ®_WIN0H, 0xA2400001); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, 0xA2400001); } static void HBlankCB_Phase2_Slice(void) { if (REG_VCOUNT < 160) { - u16 var = gUnknown_02038C28[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1HOFS = var; REG_BG2HOFS = var; REG_BG3HOFS = var; @@ -2603,7 +2601,7 @@ static bool8 Phase2_ShredSplit_Func1(struct Task *task) u16 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); sTransitionStructPtr->WININ = 63; sTransitionStructPtr->WINOUT = 0; @@ -2611,13 +2609,13 @@ static bool8 Phase2_ShredSplit_Func1(struct Task *task) for (i = 0; i < 0xA0; i++) { - gUnknown_02038C28[1][i] = sTransitionStructPtr->field_14; - gUnknown_02038C28[1][0xA0 + i] = 0xF0; - gUnknown_02038C28[0][i] = sTransitionStructPtr->field_14; - gUnknown_02038C28[0][0xA0 + i] = 0xF0; - gUnknown_02038C28[0][0x140 + i] = 0; - gUnknown_02038C28[0][0x1E0 + i] = 0x100; - gUnknown_02038C28[0][0x280 + i] = 1; + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_14; + gScanlineEffectRegBuffers[1][0xA0 + i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_14; + gScanlineEffectRegBuffers[0][0xA0 + i] = 0xF0; + gScanlineEffectRegBuffers[0][0x140 + i] = 0; + gScanlineEffectRegBuffers[0][0x1E0 + i] = 0x100; + gScanlineEffectRegBuffers[0][0x280 + i] = 1; } task->tData4 = 0; @@ -2657,9 +2655,9 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) unkVar = (arr1[j]) + (arr2[k] * -(i) * 2); if (unkVar >= 0 && (unkVar != 79 || j != 1)) { - ptr4 = &gUnknown_02038C28[0][unkVar + 320]; - ptr3 = &gUnknown_02038C28[0][unkVar + 480]; - ptr1 = &gUnknown_02038C28[0][unkVar + 640]; + ptr4 = &gScanlineEffectRegBuffers[0][unkVar + 320]; + ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 480]; + ptr1 = &gScanlineEffectRegBuffers[0][unkVar + 640]; if (*ptr4 > 0xEF) { *ptr4 = 0xF0; @@ -2673,8 +2671,8 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) if (*ptr3 <= 0xFFF) *ptr3 += *ptr1; } - ptr2 = &gUnknown_02038C28[0][unkVar]; - ptr3 = &gUnknown_02038C28[0][unkVar + 160]; + ptr2 = &gScanlineEffectRegBuffers[0][unkVar]; + ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 160]; *ptr2 = sTransitionStructPtr->field_14 + *ptr4; *ptr3 = 0xF0 - *ptr4; @@ -2691,9 +2689,9 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) unkVar = (arr1[j] + 1) + (arr2[k] * -(i) * 2); if (unkVar <= 160 && (unkVar != 80 || j != 1)) { - ptr4 = &gUnknown_02038C28[0][unkVar + 320]; - ptr3 = &gUnknown_02038C28[0][unkVar + 480]; - ptr1 = &gUnknown_02038C28[0][unkVar + 640]; + ptr4 = &gScanlineEffectRegBuffers[0][unkVar + 320]; + ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 480]; + ptr1 = &gScanlineEffectRegBuffers[0][unkVar + 640]; if (*ptr4 > 0xEF) { *ptr4 = 0xF0; @@ -2707,8 +2705,8 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) if (*ptr3 <= 0xFFF) *ptr3 += *ptr1; } - ptr2 = &gUnknown_02038C28[0][unkVar]; - ptr3 = &gUnknown_02038C28[0][unkVar + 160]; + ptr2 = &gScanlineEffectRegBuffers[0][unkVar]; + ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 160]; *ptr2 = sTransitionStructPtr->field_14 - *ptr4; *ptr3 = (*ptr4 << 8) | (0xF1); @@ -2732,7 +2730,7 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) // This function never increments the state counter, because the loop condition // is always false, resulting in the game being stuck in an infinite loop. -// It's possible this transition is only partially +// It's possible this transition is only partially // done and the second part was left out. static bool8 Phase2_ShredSplit_Func3(struct Task *task) { @@ -2742,7 +2740,7 @@ static bool8 Phase2_ShredSplit_Func3(struct Task *task) for (i = 0; i < 0xA0; i++) { - if (gUnknown_02038C28[1][i] != 0xF0 && gUnknown_02038C28[1][i] != checkVar2) + if (gScanlineEffectRegBuffers[1][i] != 0xF0 && gScanlineEffectRegBuffers[1][i] != checkVar2) done = FALSE; // a break statement should be put here } @@ -2775,7 +2773,7 @@ static bool8 Phase2_Blackhole_Func1(struct Task *task) s32 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); sTransitionStructPtr->WININ = 0; sTransitionStructPtr->WINOUT = 63; @@ -2784,7 +2782,7 @@ static bool8 Phase2_Blackhole_Func1(struct Task *task) for (i = 0; i < 0xA0; i++) { - gUnknown_02038C28[1][i] = 0; + gScanlineEffectRegBuffers[1][i] = 0; } SetVBlankCallback(VBlankCB1_Phase2_BigPokeball); @@ -2814,7 +2812,7 @@ static bool8 Phase2_Blackhole1_Func3(struct Task *task) task->tData1 += (task->tData2 >> 8); if (task->tData1 > 0xA0) task->tData1 = 0xA0; - sub_814A014(gUnknown_02038C28[0], 0x78, 0x50, task->tData1); + sub_814A014(gScanlineEffectRegBuffers[0], 0x78, 0x50, task->tData1); if (task->tData1 == 0xA0) { task->tFuncState = 1; @@ -2840,7 +2838,7 @@ static bool8 Phase2_Blackhole1_Func2(struct Task *task) } task->tData1 += gUnknown_085C8C80[task->tData6]; task->tData6 = (task->tData6 + 1) % 2; - sub_814A014(gUnknown_02038C28[0], 0x78, 0x50, task->tData1); + sub_814A014(gScanlineEffectRegBuffers[0], 0x78, 0x50, task->tData1); if (task->tData1 < 9) { task->tState++; @@ -2866,7 +2864,7 @@ static bool8 Phase2_Blackhole2_Func2(struct Task *task) if (task->tData1 > 0xA0) task->tData1 = 0xA0; - sub_814A014(gUnknown_02038C28[0], 0x78, 0x50, task->tData1); + sub_814A014(gScanlineEffectRegBuffers[0], 0x78, 0x50, task->tData1); if (task->tData1 == 0xA0) { DmaStop(0); @@ -3113,7 +3111,7 @@ static bool8 Phase2_Rayquaza_Func3(struct Task *task) u16 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); SetGpuReg(REG_OFFSET_BG0CNT, 0x9A08); sub_8149F58(&dst1, &dst2); @@ -3126,8 +3124,8 @@ static bool8 Phase2_Rayquaza_Func3(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[0][i] = 0; - gUnknown_02038C28[1][i] = 0x100; + gScanlineEffectRegBuffers[0][i] = 0; + gScanlineEffectRegBuffers[1][i] = 0x100; } SetVBlankCallback(VBlankCB_Phase2_Rayquaza); @@ -3212,7 +3210,7 @@ static bool8 Phase2_Rayquaza_Func9(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = 0; + gScanlineEffectRegBuffers[1][i] = 0; } SetVBlankCallback(VBlankCB1_Phase2_BigPokeball); @@ -3233,11 +3231,11 @@ static void VBlankCB_Phase2_Rayquaza(void) VBlankCB_BattleTransition(); if (sTransitionStructPtr->field_20 == 0) - dmaSrc = gUnknown_02038C28[0]; + dmaSrc = gScanlineEffectRegBuffers[0]; else if (sTransitionStructPtr->field_20 == 1) - dmaSrc = gUnknown_02038C28[1]; + dmaSrc = gScanlineEffectRegBuffers[1]; else - dmaSrc = gUnknown_02038C28[0]; + dmaSrc = gScanlineEffectRegBuffers[0]; DmaSet(0, dmaSrc, ®_BG0VOFS, 0xA2400001); } @@ -3252,7 +3250,7 @@ static bool8 Phase2_WhiteFade_Func1(struct Task *task) u16 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); sTransitionStructPtr->BLDCNT = 0xBF; sTransitionStructPtr->BLDY = 0; @@ -3262,8 +3260,8 @@ static bool8 Phase2_WhiteFade_Func1(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = 0; - gUnknown_02038C28[1][i + 160] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0; + gScanlineEffectRegBuffers[1][i + 160] = 0xF0; } EnableInterrupts(INTR_FLAG_HBLANK); @@ -3343,8 +3341,8 @@ static void VBlankCB0_Phase2_WhiteFade(void) REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 640); - DmaSet(0, &gUnknown_02038C28[1][160], ®_WIN0H, 0xA2400001); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, 0xA2400001); } static void VBlankCB1_Phase2_WhiteFade(void) @@ -3360,7 +3358,7 @@ static void VBlankCB1_Phase2_WhiteFade(void) static void HBlankCB_Phase2_WhiteFade(void) { - REG_BLDY = gUnknown_02038C28[1][REG_VCOUNT]; + REG_BLDY = gScanlineEffectRegBuffers[1][REG_VCOUNT]; } static void sub_8149864(struct Sprite *sprite) @@ -3374,8 +3372,8 @@ static void sub_8149864(struct Sprite *sprite) else { u16 i; - u16* ptr1 = &gUnknown_02038C28[0][sprite->pos1.y]; - u16* ptr2 = &gUnknown_02038C28[0][sprite->pos1.y + 160]; + u16* ptr1 = &gScanlineEffectRegBuffers[0][sprite->pos1.y]; + u16* ptr2 = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160]; for (i = 0; i < 20; i++) { ptr1[i] = sprite->data[0] >> 8; @@ -3465,7 +3463,7 @@ static bool8 Phase2_Shards_Func1(struct Task *task) u16 i; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); sTransitionStructPtr->WININ = 0x3F; sTransitionStructPtr->WINOUT = 0; @@ -3473,10 +3471,10 @@ static bool8 Phase2_Shards_Func1(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[0][i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = 0xF0; } - CpuSet(gUnknown_02038C28[0], gUnknown_02038C28[1], 0xA0); + CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 0xA0); SetVBlankCallback(VBlankCB_Phase2_Shards); task->tState++; @@ -3505,8 +3503,8 @@ static bool8 Phase2_Shards_Func3(struct Task *task) for (i = 0, nextFunc = FALSE; i < 16; i++) { - s16 r3 = gUnknown_02038C28[0][sTransitionStructPtr->data[3]] >> 8; - s16 r4 = gUnknown_02038C28[0][sTransitionStructPtr->data[3]] & 0xFF; + s16 r3 = gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] >> 8; + s16 r4 = gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] & 0xFF; if (task->tData2 == 0) { if (r3 < sTransitionStructPtr->data[2]) @@ -3521,7 +3519,7 @@ static bool8 Phase2_Shards_Func3(struct Task *task) if (r4 <= r3) r4 = r3; } - gUnknown_02038C28[0][sTransitionStructPtr->data[3]] = (r4) | (r3 << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (r4) | (r3 << 8); if (nextFunc) { task->tState++; @@ -3568,12 +3566,12 @@ static void VBlankCB_Phase2_Shards(void) DmaStop(0); VBlankCB_BattleTransition(); if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = sTransitionStructPtr->WININ; REG_WINOUT = sTransitionStructPtr->WINOUT; REG_WIN0V = sTransitionStructPtr->WIN0V; - REG_WIN0H = gUnknown_02038C28[1][0]; - DmaSet(0, gUnknown_02038C28[1], ®_WIN0H, 0xA2400001); + REG_WIN0H = gScanlineEffectRegBuffers[1][0]; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } // sub-task for phase2 @@ -3875,7 +3873,7 @@ static bool8 Phase2_29_Func2(struct Task *task) sub_8149F58(&dst1, &dst2); LZ77UnCompVram(gUnknown_085C828C, dst1); - sub_8149F98(gUnknown_02038C28[0], 0, task->tData4, 0x84, task->tData5, 160); + sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 0x84, task->tData5, 160); task->tState++; return TRUE; @@ -3896,7 +3894,7 @@ static bool8 Phase2_30_Func1(struct Task *task) u16 *dst1, *dst2; sub_8149F08(); - dp12_8087EA4(); + ScanlineEffect_Clear(); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); task->tData2 = 0x2000; task->tData1 = 0x7FFF; @@ -3934,7 +3932,7 @@ static bool8 Phase2_30_Func3(struct Task *task) for (i = 0; i < 160; i++) { - gUnknown_02038C28[1][i] = sTransitionStructPtr->field_16; + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_16; } SetVBlankCallback(VBlankCB_Phase2_30); @@ -3980,7 +3978,7 @@ static bool8 Phase2_30_Func4(struct Task *task) { s16 index = var6 / 256; asm(""); - gUnknown_02038C28[0][i] = sTransitionStructPtr->field_16 + Sin(index, amplitude); + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index, amplitude); } if (++task->tData3 == 101) @@ -4004,12 +4002,12 @@ static void VBlankCB_Phase2_30(void) REG_BLDALPHA = sTransitionStructPtr->BLDALPHA; if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gUnknown_02038C28[0], gUnknown_02038C28[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_30(void) { - u16 var = gUnknown_02038C28[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG0VOFS = var; } diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index f487489d4..7b968a221 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -6,7 +6,7 @@ #include "main.h" #include "sprite.h" #include "task.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "window.h" #include "text.h" #include "menu.h" diff --git a/src/diploma.c b/src/diploma.c index 24e5e9727..89447c5ba 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -3,7 +3,7 @@ #include "palette.h" #include "main.h" #include "gpu_regs.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "task.h" #include "malloc.h" #include "decompress.h" diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 5dfc36cb2..cbd37be52 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -11,7 +11,7 @@ #include "pokemon.h" #include "string_util.h" #include "battle.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "decompress.h" #include "m4a.h" #include "menu.h" @@ -1367,7 +1367,7 @@ static void VBlankCB_EvolutionScene(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_80BA0A8(); + ScanlineEffect_InitHBlankDmaTransfer(); } static void VBlankCB_TradeEvolutionScene(void) @@ -1384,7 +1384,7 @@ static void VBlankCB_TradeEvolutionScene(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_80BA0A8(); + ScanlineEffect_InitHBlankDmaTransfer(); } static void sub_813FDEC(u8 taskId) diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 5390814eb..62d2b39a4 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -20,7 +20,7 @@ #include "string_util.h" #include "m4a.h" #include "international_string_util.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "trig.h" #include "random.h" #include "event_data.h" diff --git a/src/mail.c b/src/mail.c index c3cbe4a3c..ac263ac67 100644 --- a/src/mail.c +++ b/src/mail.c @@ -4,7 +4,7 @@ #include "main.h" #include "overworld.h" #include "task.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "palette.h" #include "text.h" #include "menu.h" diff --git a/src/option_menu.c b/src/option_menu.c index 7f92756ab..cbbe14b77 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -2,7 +2,7 @@ #include "option_menu.h" #include "main.h" #include "menu.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "palette.h" #include "sprite.h" #include "task.h" diff --git a/src/pokeblock.c b/src/pokeblock.c index 1a4ce3155..472b030e0 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -14,7 +14,7 @@ #include "battle.h" #include "battle_controllers.h" #include "palette.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "list_menu.h" #include "gpu_regs.h" #include "decompress.h" diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 3df2ff151..a4bb4a728 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -3,7 +3,7 @@ #include "battle.h" #include "palette.h" #include "main.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "text.h" #include "gpu_regs.h" #include "bg.h" @@ -34,7 +34,7 @@ extern struct SpriteTemplate gUnknown_0202499C; extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[]; -extern void dp12_8087EA4(void); +extern void ScanlineEffect_Clear(void); extern void sub_8035658(void); extern bool8 IsDoubleBattle(void); extern u8 GetSubstituteSpriteDefault_Y(u8 bank); @@ -72,7 +72,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) switch (gBattleScripting.reshowMainState) { case 0: - dp12_8087EA4(); + ScanlineEffect_Clear(); sub_8035658(); SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0); SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0); diff --git a/src/scanline_effect.c b/src/scanline_effect.c new file mode 100644 index 000000000..148e053fc --- /dev/null +++ b/src/scanline_effect.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "data2.h" +#include "task.h" +#include "trig.h" +#include "scanline_effect.h" + +static void CopyValue16Bit(void); +static void CopyValue32Bit(void); + +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; + +// EWRAM vars + +// Per-scanline register values. +// This is double buffered so that it can be safely written to at any time +// without overwriting the buffer that the DMA is currently reading +EWRAM_DATA u16 gScanlineEffectRegBuffers[2][0x3C0] = {0}; + +EWRAM_DATA struct ScanlineEffect gScanlineEffect = {0}; +EWRAM_DATA static bool8 sShouldStopWaveTask = FALSE; + +void ScanlineEffect_Stop(void) +{ + gScanlineEffect.state = 0; + DmaStop(0); + if (gScanlineEffect.waveTaskId != 0xFF) + { + DestroyTask(gScanlineEffect.waveTaskId); + gScanlineEffect.waveTaskId = 0xFF; + } +} + +void ScanlineEffect_Clear(void) +{ + CpuFill16(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); + gScanlineEffect.dmaSrcBuffers[0] = NULL; + gScanlineEffect.dmaSrcBuffers[1] = NULL; + gScanlineEffect.dmaDest = NULL; + gScanlineEffect.dmaControl = 0; + gScanlineEffect.srcBuffer = 0; + gScanlineEffect.state = 0; + gScanlineEffect.unused16 = 0; + gScanlineEffect.unused17 = 0; + gScanlineEffect.waveTaskId = 0xFF; +} + +void ScanlineEffect_SetParams(struct ScanlineEffectParams params) +{ + if (params.dmaControl == SCANLINE_EFFECT_DMACNT_16BIT) // 16-bit + { + // Set the DMA src to the value for the second scanline because the + // first DMA transfer occurs in HBlank *after* the first scanline is drawn + gScanlineEffect.dmaSrcBuffers[0] = (u16 *)gScanlineEffectRegBuffers[0] + 1; + gScanlineEffect.dmaSrcBuffers[1] = (u16 *)gScanlineEffectRegBuffers[1] + 1; + gScanlineEffect.setFirstScanlineReg = CopyValue16Bit; + } + else // assume 32-bit + { + // Set the DMA src to the value for the second scanline because the + // first DMA transfer occurs in HBlank *after* the first scanline is drawn + gScanlineEffect.dmaSrcBuffers[0] = (u32 *)gScanlineEffectRegBuffers[0] + 1; + gScanlineEffect.dmaSrcBuffers[1] = (u32 *)gScanlineEffectRegBuffers[1] + 1; + gScanlineEffect.setFirstScanlineReg = CopyValue32Bit; + } + + gScanlineEffect.dmaControl = params.dmaControl; + gScanlineEffect.dmaDest = params.dmaDest; + gScanlineEffect.state = params.initState; + gScanlineEffect.unused16 = params.unused9; + gScanlineEffect.unused17 = params.unused9; +} + +void ScanlineEffect_InitHBlankDmaTransfer(void) +{ + if (gScanlineEffect.state == 0) + { + return; + } + else if (gScanlineEffect.state == 3) + { + gScanlineEffect.state = 0; + DmaStop(0); + sShouldStopWaveTask = TRUE; + } + else + { + DmaStop(0); + // Set DMA to copy to dest register on each HBlank for the next frame. + // The HBlank DMA transfers do not occurr during VBlank, so the transfer + // will begin on the HBlank after the first scanline + DmaSet(0, gScanlineEffect.dmaSrcBuffers[gScanlineEffect.srcBuffer], gScanlineEffect.dmaDest, gScanlineEffect.dmaControl); + // Manually set the reg for the first scanline + gScanlineEffect.setFirstScanlineReg(); + // Swap current buffer + gScanlineEffect.srcBuffer ^= 1; + } +} + +// These two functions are used to copy the register for the first scanline, +// depending whether it is a 16-bit register or a 32-bit register. + +static void CopyValue16Bit(void) +{ + u16 *dest = (u16 *)gScanlineEffect.dmaDest; + u16 *src = (u16 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer]; + + *dest = *src; +} + +static void CopyValue32Bit(void) +{ + u32 *dest = (u32 *)gScanlineEffect.dmaDest; + u32 *src = (u32 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer]; + + *dest = *src; +} + +#define tStartLine data[0] +#define tEndLine data[1] +#define tWaveLength data[2] +#define tSrcBufferOffset data[3] +#define tFramesUntilMove data[4] +#define tDelayInterval data[5] +#define tRegOffset data[6] +#define tApplyBattleBgOffsets data[7] + +static void TaskFunc_UpdateWavePerFrame(u8 taskId) +{ + int value = 0; + int i; + int offset; + + if (sShouldStopWaveTask) + { + DestroyTask(taskId); + gScanlineEffect.waveTaskId = 0xFF; + } + else + { + if (gTasks[taskId].tApplyBattleBgOffsets) + { + switch (gTasks[taskId].tRegOffset) + { + case SCANLINE_EFFECT_REG_BG0HOFS: + value = gBattle_BG0_X; + break; + case SCANLINE_EFFECT_REG_BG0VOFS: + value = gBattle_BG0_Y; + break; + case SCANLINE_EFFECT_REG_BG1HOFS: + value = gBattle_BG1_X; + break; + case SCANLINE_EFFECT_REG_BG1VOFS: + value = gBattle_BG1_Y; + break; + case SCANLINE_EFFECT_REG_BG2HOFS: + value = gBattle_BG2_X; + break; + case SCANLINE_EFFECT_REG_BG2VOFS: + value = gBattle_BG2_Y; + break; + case SCANLINE_EFFECT_REG_BG3HOFS: + value = gBattle_BG3_X; + break; + case SCANLINE_EFFECT_REG_BG3VOFS: + value = gBattle_BG3_Y; + break; + } + } + if (gTasks[taskId].tFramesUntilMove != 0) + { + gTasks[taskId].tFramesUntilMove--; + offset = gTasks[taskId].tSrcBufferOffset + 320; + for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gScanlineEffectRegBuffers[0][offset] + value; + offset++; + } + } + else + { + gTasks[taskId].tFramesUntilMove = gTasks[taskId].tDelayInterval; + offset = gTasks[taskId].tSrcBufferOffset + 320; + for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gScanlineEffectRegBuffers[0][offset] + value; + offset++; + } + + // increment src buffer offset + gTasks[taskId].tSrcBufferOffset++; + if (gTasks[taskId].tSrcBufferOffset == gTasks[taskId].tWaveLength) + gTasks[taskId].tSrcBufferOffset = 0; + } + } +} + +static void GenerateWave(u16 *buffer, u8 frequency, u8 amplitude, u8 unused) +{ + u16 i = 0; + u8 theta = 0; + + while (i < 256) + { + buffer[i] = (gSineTable[theta] * amplitude) / 256; + theta += frequency; + i++; + } +} + +// Initializes a background "wave" effect that affects scanlines startLine (inclusive) to endLine (exclusive). +// 'frequency' and 'amplitude' control the frequency and amplitude of the wave. +// 'delayInterval' controls how fast the wave travels up the screen. The wave will shift upwards one scanline every 'delayInterval'+1 frames. +// 'regOffset' is the offset of the video register to modify. +u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 applyBattleBgOffsets) +{ + int i; + int offset; + struct ScanlineEffectParams params; + u8 taskId; + + ScanlineEffect_Clear(); + + params.dmaDest = (void *)(REG_ADDR_BG0HOFS + regOffset); + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.initState = 1; + params.unused9 = 0; + ScanlineEffect_SetParams(params); + + taskId = CreateTask(TaskFunc_UpdateWavePerFrame, 0); + + gTasks[taskId].tStartLine = startLine; + gTasks[taskId].tEndLine = endLine; + gTasks[taskId].tWaveLength = 256 / frequency; + gTasks[taskId].tSrcBufferOffset = 0; + gTasks[taskId].tFramesUntilMove = delayInterval; + gTasks[taskId].tDelayInterval = delayInterval; + gTasks[taskId].tRegOffset = regOffset; + gTasks[taskId].tApplyBattleBgOffsets = applyBattleBgOffsets; + + gScanlineEffect.waveTaskId = taskId; + sShouldStopWaveTask = FALSE; + + GenerateWave(&gScanlineEffectRegBuffers[0][320], frequency, amplitude, endLine - startLine); + + offset = 320; + for (i = startLine; i < endLine; i++) + { + gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[0][offset]; + gScanlineEffectRegBuffers[1][i] = gScanlineEffectRegBuffers[0][offset]; + offset++; + } + + return taskId; +} diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 12f475c93..c8898d08f 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -4,7 +4,7 @@ #include "malloc.h" #include "palette.h" #include "pokenav.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "text.h" #include "bg.h" #include "window.h" @@ -131,7 +131,7 @@ void sub_8166340(void) ProcessSpriteCopyRequests(); TransferPlttBuffer(); sub_81D2108(gUnknown_0203BCAC->field_7C58); - sub_80BA0A8(); + ScanlineEffect_InitHBlankDmaTransfer(); } void sub_816636C(void (*func)(void)) diff --git a/src/wallclock.c b/src/wallclock.c index dbea24b4c..f15bbbc27 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -12,7 +12,7 @@ #include "window.h" #include "text_window.h" #include "menu.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "task.h" #include "strings.h" #include "sound.h" -- cgit v1.2.3 From a75c476d57a8ffad9bebc7524c698cc2d5738d2a Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Tue, 30 Jan 2018 13:13:07 -0600 Subject: Get RenderText a bit closer (thanks Egg) --- src/text.c | 545 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 270 insertions(+), 275 deletions(-) (limited to 'src') diff --git a/src/text.c b/src/text.c index 6be46b7b1..936f96798 100644 --- a/src/text.c +++ b/src/text.c @@ -2054,300 +2054,295 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c #ifdef NONMATCHING u16 RenderText(struct TextPrinter *textPrinter) { - struct TextPrinterSubStruct* r4 = &textPrinter->sub_union.sub; - int temp; - int r4two; - int jpnvar; - u8* tempTwo; - u16 songId; - int dummy; - u8 dummyTwo; - + struct TextPrinterSubStruct *r4 = &textPrinter->sub_union.sub; + u16 currChar; + s32 width; + switch (textPrinter->state) // _080057C4 { - case 0: // _080057F0 - if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && r4->font_type_upper) - textPrinter->delayCounter = 0; - if (textPrinter->delayCounter && textPrinter->text_speed) //_0800580A + case 0: // _080057F0 + if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && r4->font_type_upper) + textPrinter->delayCounter = 0; + + if (textPrinter->delayCounter && textPrinter->text_speed) //_0800580A + { + textPrinter->delayCounter--; + if (gTextFlags.flag_0 && (gMain.newKeys & (A_BUTTON | B_BUTTON))) { - textPrinter->delayCounter--; - if (gTextFlags.flag_0 && (gMain.newKeys & (A_BUTTON | B_BUTTON))) - { - r4->font_type_upper = 1; - textPrinter->delayCounter = 0; - } - return 3; + r4->font_type_upper = 1; + textPrinter->delayCounter = 0; } - else // _0800584C + return 3; + } + + if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.flag_2) + textPrinter->delayCounter = 3; + else + textPrinter->delayCounter = textPrinter->text_speed; + + currChar = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + + switch (currChar) //_0800588A + { + case 0xF8+6: //_080058B8 + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->subPrinter.currentY += (gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing); + return 2; + case 0xF8+5: //_080058DC + textPrinter->subPrinter.current_text_offset++; + return 2; + case 0xF8+4: //_080058E0 + currChar = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + switch (currChar) // _080058F0 { - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.flag_2) - textPrinter->delayCounter = 3; - else - textPrinter->delayCounter = textPrinter->text_speed; - temp = *textPrinter->subPrinter.current_text_offset; + case 1: // _08005960 + textPrinter->subPrinter.fontColor_h = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 2: // _08005982 + textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 3: // _080059A6 + textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 4: // _080059C0 + textPrinter->subPrinter.fontColor_h = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); + return 2; + case 5: // _08005A0E + textPrinter->subPrinter.current_text_offset++; + return 2; + case 6: //_08005A12 + r4->font_type = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 7: // _08005A0A + return 2; + case 8: // _08005A2A + textPrinter->delayCounter = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + textPrinter->state = 6; + return 2; + case 9: // _08005A3A + textPrinter->state = 1; + if (gTextFlags.flag_2) + r4->frames_visible_counter = 0; + return 3; + case 10: // _08005A58 + textPrinter->state = 5; + return 3; + case 11: // _08005A5C + currChar = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + currChar |= *textPrinter->subPrinter.current_text_offset << 8; textPrinter->subPrinter.current_text_offset++; - switch (temp) //_0800588A + PlayBGM(currChar); + return 2; + case 16: // _08005A76 + currChar = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + currChar |= (*textPrinter->subPrinter.current_text_offset << 8); + textPrinter->subPrinter.current_text_offset++; + PlaySE(currChar); + return 2; + case 13: // _08005A90 + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x + *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 14: // _08005A98 + textPrinter->subPrinter.currentY = textPrinter->subPrinter.y + *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 15: // _08005AA4 + FillWindowPixelBuffer(textPrinter->subPrinter.windowId, textPrinter->subPrinter.bgColor | textPrinter->subPrinter.bgColor << 4); + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->subPrinter.currentY = textPrinter->subPrinter.y; + return 2; + case 23: // _08005ABE + m4aMPlayStop(&gMPlayInfo_BGM); + return 2; + case 24: // _08005ACC + m4aMPlayContinue(&gMPlayInfo_BGM); + return 2; + case 17: // _08005AD8 + width = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + if (width > 0) { - case 0xF8+6: //_080058B8 - textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; - textPrinter->subPrinter.currentY += (gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing); - return 2; - case 0xF8+5: //_080058DC - textPrinter->subPrinter.current_text_offset++; - return 2; - case 0xF8+4: //_080058E0 - temp = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - switch (temp) // _080058F0 - { - - case 1: // _08005960 - textPrinter->subPrinter.fontColor_h = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); - return 2; - case 2: // _08005982 - textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); - return 2; - case 3: // _080059A6 - textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); - return 2; - case 4: // _080059C0 - textPrinter->subPrinter.fontColor_h = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fontColor_h, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor); - return 2; - case 5: // _08005A0E - textPrinter->subPrinter.current_text_offset++; - return 2; - case 6: //_08005A12 - r4->font_type = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - return 2; - case 7: // _08005A0A - return 2; - case 8: // _08005A2A - textPrinter->delayCounter = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - textPrinter->state = 6; - return 2; - case 9: // _08005A3A - textPrinter->state = 1; - if (gTextFlags.flag_2) - r4->frames_visible_counter = 0; - return 3; - case 10: // _08005A58 - textPrinter->state = 5; - return 3; - case 11: // _08005A5C - songId = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - songId |= *textPrinter->subPrinter.current_text_offset << 8; - textPrinter->subPrinter.current_text_offset++; - PlayBGM(songId); - return 2; - case 16: // _08005A76 - songId = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - songId |= (*textPrinter->subPrinter.current_text_offset << 8); - textPrinter->subPrinter.current_text_offset++; - PlaySE(songId); - return 2; - case 13: // _08005A90 - textPrinter->subPrinter.currentX = textPrinter->subPrinter.x + *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - return 2; - case 14: // _08005A98 - textPrinter->subPrinter.currentY = textPrinter->subPrinter.y + *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - return 2; - case 15: // _08005AA4 - FillWindowPixelBuffer(textPrinter->subPrinter.windowId, textPrinter->subPrinter.bgColor | textPrinter->subPrinter.bgColor << 4); - textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; - textPrinter->subPrinter.currentY = textPrinter->subPrinter.y; - return 2; - case 23: // _08005ABE - m4aMPlayStop(&gMPlayInfo_BGM); - return 2; - case 24: // _08005ACC - m4aMPlayContinue(&gMPlayInfo_BGM); - return 2; - case 17: // _08005AD8 - temp = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - if (temp > 0) - { - ClearTextSpan(textPrinter, temp); - textPrinter->subPrinter.currentX += temp; - return 0; - } - return 2; - case 18: // _08005AF2 - textPrinter->subPrinter.currentX = *textPrinter->subPrinter.current_text_offset + textPrinter->subPrinter.x; - textPrinter->subPrinter.current_text_offset++; - return 2; - case 19: // _08005B02 - temp = *textPrinter->subPrinter.current_text_offset; - temp += textPrinter->subPrinter.x; - textPrinter->subPrinter.current_text_offset++; - r4two = temp - textPrinter->subPrinter.currentX; - if (temp - textPrinter->subPrinter.currentX > 0) - { - ClearTextSpan(textPrinter, r4two); - textPrinter->subPrinter.currentX += r4two; - return 0; - } - return 2; - case 20: // _08005B26 - textPrinter->minLetterSpacing = *textPrinter->subPrinter.current_text_offset++; - return 2; - case 21: // _08005B36 - textPrinter->japanese = 1; - return 2; - case 22: // _08005B3E - textPrinter->japanese = 0; - return 2; - case 12: // _08005B5A - dummyTwo = *textPrinter->subPrinter.current_text_offset; - dummy = 0x100; - temp = dummy | dummyTwo; - textPrinter->subPrinter.current_text_offset++; - break; - } - break; - case 0xF8+3: // _08005B48 - textPrinter->state = 2; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case 0xF8+2: // _08005B4C - textPrinter->state = 3; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case 0xF8+1: // _08005B5A - dummyTwo = *textPrinter->subPrinter.current_text_offset; - dummy = 0x100; - temp = dummy | dummyTwo; - textPrinter->subPrinter.current_text_offset++; - break; - case 0xF8+0: // _08005B6C - temp = *textPrinter->subPrinter.current_text_offset; - textPrinter->subPrinter.current_text_offset++; - gUnknown_03002F90[0x80] = DrawKeypadIcon(textPrinter->subPrinter.windowId, temp, textPrinter->subPrinter.currentX, textPrinter->subPrinter.currentY); - textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80] + textPrinter->subPrinter.letterSpacing; - return 0; - case 0xF8+7: // _08005D6C - return 1; + ClearTextSpan(textPrinter, width); + textPrinter->subPrinter.currentX += width; + return 0; } - - } - switch (r4->font_type) // _08005B90 - { - case 0: // _08005BCC - jpnvar = textPrinter->japanese; - DecompressGlyphFont0(temp, jpnvar); - break; - case 1: // _08005BDA - jpnvar = textPrinter->japanese; - DecompressGlyphFont1(temp, jpnvar); - break; - case 2: - case 3: - case 4: - case 5: // _08005BE8 - jpnvar = textPrinter->japanese; - DecompressGlyphFont2(temp, jpnvar); - break; - case 7: // _08005BF6 - jpnvar = textPrinter->japanese; - DecompressGlyphFont7(temp, jpnvar); - break; - case 8: // _08005C04 - jpnvar = textPrinter->japanese; - DecompressGlyphFont8(temp, jpnvar); - break; - case 6: // _08005C10 - break; - } - CopyGlyphToWindow(textPrinter); // _08005C10 - if (textPrinter->minLetterSpacing) - { - textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80]; - r4two = textPrinter->minLetterSpacing - gUnknown_03002F90[0x80]; - if (r4two > 0) + return 2; + case 18: // _08005AF2 + textPrinter->subPrinter.currentX = *textPrinter->subPrinter.current_text_offset + textPrinter->subPrinter.x; + textPrinter->subPrinter.current_text_offset++; + return 2; + case 19: // _08005B02 { - ClearTextSpan(textPrinter, r4two); - textPrinter->subPrinter.currentX += r4two; + s32 widthHelper = *textPrinter->subPrinter.current_text_offset; + widthHelper += textPrinter->subPrinter.x; + textPrinter->subPrinter.current_text_offset++; + width = widthHelper - textPrinter->subPrinter.currentX; + if (width > 0) + { + ClearTextSpan(textPrinter, width); + textPrinter->subPrinter.currentX += width; + return 0; + } } + return 2; + case 20: // _08005B26 + textPrinter->minLetterSpacing = *textPrinter->subPrinter.current_text_offset++; + return 2; + case 21: // _08005B36 + textPrinter->japanese = 1; + return 2; + case 22: // _08005B3E + textPrinter->japanese = 0; + return 2; + case 12: // _08005B5A + currChar = *textPrinter->subPrinter.current_text_offset | 0x100; + textPrinter->subPrinter.current_text_offset++; + break; } - else // _08005C48 - { - if (textPrinter->japanese) - textPrinter->subPrinter.currentX += (gUnknown_03002F90[0x80] + textPrinter->subPrinter.letterSpacing); - else - textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80]; - } - return 0; - case 1: // _08005C78 - if (TextPrinterWait(textPrinter)) - textPrinter->state = 0; + break; + + case 0xF8+3: // _08005B48 + textPrinter->state = 2; + TextPrinterInitDownArrowCounters(textPrinter); return 3; - case 2: // _08005C8C - if (TextPrinterWaitWithDownArrow(textPrinter)) - { - FillWindowPixelBuffer(textPrinter->subPrinter.windowId, (textPrinter->subPrinter.bgColor << 4) | textPrinter->subPrinter.bgColor); - textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; - textPrinter->subPrinter.currentY = textPrinter->subPrinter.y; - textPrinter->state = 0; - } + case 0xF8+2: // _08005B4C + textPrinter->state = 3; + TextPrinterInitDownArrowCounters(textPrinter); return 3; - case 3: // _08005CB8 - if (TextPrinterWaitWithDownArrow(textPrinter)) + case 0xF8+1: // _08005B5A + currChar = *textPrinter->subPrinter.current_text_offset | 0x100; + textPrinter->subPrinter.current_text_offset++; + break; + case 0xF8+0: // _08005B6C + currChar = *textPrinter->subPrinter.current_text_offset; + textPrinter->subPrinter.current_text_offset++; + gUnknown_03002F90[0x80] = DrawKeypadIcon(textPrinter->subPrinter.windowId, currChar, textPrinter->subPrinter.currentX, textPrinter->subPrinter.currentY); + textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80] + textPrinter->subPrinter.letterSpacing; + return 0; + case 0xF8+7: // _08005D6C + return 1; + } + + switch (r4->font_type) // _08005B90 + { + case 0: // _08005BCC + DecompressGlyphFont0(currChar, textPrinter->japanese); + break; + case 1: // _08005BDA + DecompressGlyphFont1(currChar, textPrinter->japanese); + break; + case 2: + case 3: + case 4: + case 5: // _08005BE8 + DecompressGlyphFont2(currChar, textPrinter->japanese); + break; + case 7: // _08005BF6 + DecompressGlyphFont7(currChar, textPrinter->japanese); + break; + case 8: // _08005C04 + DecompressGlyphFont8(currChar, textPrinter->japanese); + break; + case 6: // _08005C10 + break; + } + + CopyGlyphToWindow(textPrinter); // _08005C10 + + if (textPrinter->minLetterSpacing) + { + textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80]; + width = textPrinter->minLetterSpacing - gUnknown_03002F90[0x80]; + if (width > 0) { - TextPrinterClearDownArrow(textPrinter); - textPrinter->scrollDistance = gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing; - textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; - textPrinter->state = 4; + ClearTextSpan(textPrinter, width); + textPrinter->subPrinter.currentX += width; } - return 3; - case 4: // _08005CF0 - if (textPrinter->scrollDistance) + } + else // _08005C48 + { + if (textPrinter->japanese) + textPrinter->subPrinter.currentX += (gUnknown_03002F90[0x80] + textPrinter->subPrinter.letterSpacing); + else + textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80]; + } + + return 0; + case 1: // _08005C78 + if (TextPrinterWait(textPrinter)) + textPrinter->state = 0; + return 3; + case 2: // _08005C8C + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + FillWindowPixelBuffer(textPrinter->subPrinter.windowId, (textPrinter->subPrinter.bgColor << 4) | textPrinter->subPrinter.bgColor); + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->subPrinter.currentY = textPrinter->subPrinter.y; + textPrinter->state = 0; + } + return 3; + case 3: // _08005CB8 + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + TextPrinterClearDownArrow(textPrinter); + textPrinter->scrollDistance = gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing; + textPrinter->subPrinter.currentX = textPrinter->subPrinter.x; + textPrinter->state = 4; + } + return 3; + case 4: // _08005CF0 + if (textPrinter->scrollDistance) + { + int scrollSpeed = sub_8197964(); + int speed = gWindowVerticalScrollSpeeds[scrollSpeed]; + if (textPrinter->scrollDistance < speed) { - int scrollSpeed = sub_8197964(); - int r4two = gWindowVerticalScrollSpeeds[scrollSpeed]; - if (textPrinter->scrollDistance < r4two) - { - ScrollWindow(textPrinter->subPrinter.windowId, 0, textPrinter->scrollDistance, textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor); - textPrinter->scrollDistance = 0; - } - else - { - ScrollWindow(textPrinter->subPrinter.windowId, 0, (int)r4two, textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor); - textPrinter->scrollDistance -= r4two; - } - CopyWindowToVram(textPrinter->subPrinter.windowId, 2); + ScrollWindow(textPrinter->subPrinter.windowId, 0, textPrinter->scrollDistance, textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor); + textPrinter->scrollDistance = 0; } else - textPrinter->state = 0; - return 3; - case 5: // _08005D48 - if (!IsSEPlaying()) - textPrinter->state = 0; - return 3; - case 6: // _08005D5A - if (textPrinter->delayCounter != 0) - textPrinter->delayCounter--; - else - textPrinter->state = 0; - return 3; + { + ScrollWindow(textPrinter->subPrinter.windowId, 0, speed, textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor); + textPrinter->scrollDistance -= speed; + } + CopyWindowToVram(textPrinter->subPrinter.windowId, 2); + } + else + { + textPrinter->state = 0; + } + return 3; + case 5: // _08005D48 + if (!IsSEPlaying()) + textPrinter->state = 0; + return 3; + case 6: // _08005D5A + if (textPrinter->delayCounter != 0) + textPrinter->delayCounter--; + else + textPrinter->state = 0; + return 3; } + return 1; } #else -- cgit v1.2.3