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 5a57485ece9686eadaf2a96365aa285587ab51af Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Tue, 23 Jan 2018 21:30:13 -0600 Subject: Decompile naming_screen.c --- src/naming_screen.c | 2177 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2177 insertions(+) create mode 100644 src/naming_screen.c (limited to 'src') diff --git a/src/naming_screen.c b/src/naming_screen.c new file mode 100644 index 000000000..403254f9f --- /dev/null +++ b/src/naming_screen.c @@ -0,0 +1,2177 @@ +#include "global.h" +#include "naming_screen.h" +#include "malloc.h" +#include "palette.h" +#include "task.h" +#include "sprite.h" +#include "string_util.h" +#include "new_menu_helpers.h" +#include "window.h" +#include "bg.h" +#include "gpu_regs.h" +#include "pokemon.h" +#include "field_specials.h" +#include "field_player_avatar.h" +#include "field_map_obj.h" +#include "event_data.h" +#include "constants/vars.h" +#include "constants/songs.h" +#include "pokemon_storage_system.h" +#include "sound.h" +#include "trig.h" +#include "field_effect.h" +#include "pokemon_icon.h" +#include "data2.h" +#include "strings.h" +#include "menu.h" +#include "text_window.h" +#include "overworld.h" + +extern EWRAM_DATA struct NamingScreenData *gNamingScreenData; +extern u16 gKeyRepeatStartDelay; + +// graphics +static const u8 gSpriteImage_858BBF8[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); +static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp"); +const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal"); +static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal"); +extern const u16 gNamingScreenMenu_Pal[]; +extern const u8 gNamingScreenMenu_Gfx[]; +extern const u8 gUnknown_08DD4544[]; +extern const u8 gUnknown_08DD4620[]; +extern const u8 gUnknown_08DD46E0[]; +extern const u8 gUnknown_08DD47A0[]; +extern const u8 gNamingScreenRWindow_Gfx[]; +extern const u8 gNamingScreenKeyboardButton_Gfx[]; +extern const u8 gNamingScreenROptions_Gfx[]; +extern const u8 gNamingScreenCursor_Gfx[]; +extern const u8 gNamingScreenRightPointingTriangleTiles[]; +extern const u8 gNamingScreenUnderscoreTiles[]; + +// text +extern const u8 gExpandedPlaceholder_Empty[]; +extern const u8 gText_PkmnTransferredSomeonesPC[]; +extern const u8 gText_PkmnTransferredLanettesPC[]; +extern const u8 gText_PkmnBoxSomeonesPCFull[]; +extern const u8 gText_PkmnBoxLanettesPCFull[]; +extern const u8 gText_MoveOkBack[]; +extern const u8 gText_YourName[]; +extern const u8 gText_BoxName[]; +extern const u8 gText_PkmnsNickname[]; +extern const u8 gText_TellHimTheWords[]; + +// start of .rodata +static const u8 *const gUnknown_0858BDB8[] = +{ + gText_PkmnTransferredSomeonesPC, + gText_PkmnTransferredLanettesPC, + gText_PkmnBoxSomeonesPCFull, + gText_PkmnBoxLanettesPCFull +}; + +static const u8 gUnknown_0858BDC8[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"); + +static const struct BgTemplate gUnknown_0858BE00[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .priority = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 29, + .priority = 1 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 28, + .priority = 2 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .priority = 3 + } +}; + +static const struct WindowTemplate gUnknown_0858BE10[] = { + { 0x01, 0x03, 0x0A, 0x13, 0x08, 0x0A, 0x030 }, + { 0x02, 0x03, 0x0A, 0x13, 0x08, 0x0A, 0x0C8 }, + { 0x03, 0x08, 0x06, 0x11, 0x02, 0x0A, 0x030 }, + { 0x03, 0x08, 0x04, 0x11, 0x02, 0x0A, 0x052 }, + { 0x00, 0x00, 0x00, 0x1E, 0x02, 0x0B, 0x074 }, + DUMMY_WIN_TEMPLATE +}; + +static const u8 gUnknown_0858BE40[] = __("abcdef .ghijkl ,mnopqrs tuvwxyz ABCDEF .GHIJKL ,MNOPQRS TUVWXYZ 01234 56789 !?♂♀/- …“”‘’ "); + +static const u8 gUnknown_0858BEA0[] = { 8, 8, 6 }; +static const u8 gUnknown_0858BEA3[] = { 0, 12, 24, 56, 68, 80, 92, 123, 0, 12, 24, 56, 68, 80, 92, 123, 0, 22, 44, 66, 88, 110, 0, 0 }; + +// forward declarations +static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; +static const struct SubspriteTable gUnknown_0858C050[]; +static const struct SubspriteTable gUnknown_0858C058[]; +static const struct SubspriteTable gUnknown_0858C070[]; +static const struct SubspriteTable gUnknown_0858C078[]; +static const struct SpriteTemplate gUnknown_0858C0C0; +static const struct SpriteTemplate gUnknown_0858C0D8; +static const struct SpriteTemplate gUnknown_0858C0F0; +static const struct SpriteTemplate gUnknown_0858C108; +static const struct SpriteTemplate gUnknown_0858C120; +static const struct SpriteTemplate gUnknown_0858C138; +static const struct SpriteTemplate gUnknown_0858C150; +static const struct SpriteTemplate gUnknown_0858C168; +static const struct SpriteTemplate gUnknown_0858C180; +static const u8* const gUnknown_0858C198[][4]; +static const struct SpriteSheet gUnknown_0858C1C8[]; +static const struct SpritePalette gUnknown_0858C230[]; + +static void C2_NamingScreen(void); +static void NamingScreen_Init(void); +static void choose_name_or_words_screen_init_bgs(void); +static void sub_80E3194(void); +static void sub_80E31B0(u8 taskId); +static bool8 MainState_BeginFadeIn(void); +static bool8 MainState_WaitFadeIn(void); +static bool8 MainState_HandleInput(void); +static bool8 MainState_MoveToOKButton(void); +static bool8 MainState_6(void); +static bool8 MainState_BeginFadeInOut(void); +static bool8 MainState_WaitFadeOutAndExit(void); +static void DisplaySentToPCMessage(void); +static bool8 sub_80E3604(void); +static bool8 MainState_StartPageSwap(void); +static bool8 MainState_WaitPageSwap(void); +static void StartPageSwapAnim(void); +static void Task_HandlePageSwapAnim(u8); +static bool8 IsPageSwapAnimNotInProgress(void); +static void sub_80E3948(u8, u8, u8); +static void Task_80E39BC(u8); +static u16 sub_80E3A74(u8); +static void sub_80E3AE8(u8); +static void sub_80E3B10(struct Task *, u8, u8); +static void sub_80E3CC8(void); +static void CursorInit(void); +static void SetCursorPos(s16, s16); +static void GetCursorPos(s16 *x, s16 *y); +static void MoveCursorToOKButton(void); +static void sub_80E3E3C(u8); +static void sub_80E3E94(u8); +static u8 IsCursorAnimFinished(void); +static u8 GetCurrentPageColumnCount(void); +static void sub_80E3F8C(void); +static void sub_80E4050(void); +static void sub_80E41B8(u8, struct Sprite *, struct Sprite *); +static void sub_80E4218(void); +static void sub_80E4290(void); +static void sub_80E4354(void); +static u8 HandleKeyboardEvent(void); +static u8 sub_80E45E0(void); +static u8 GetInputEvent(void); +static void SetInputState(u8); +static void sub_80E4964(void); +static u8 GetTextCaretPosition(void); +static void DeleteTextCharacter(void); +static bool8 sub_80E4B54(void); +static void AddTextCharacter(u8); +static void sub_80E4BE4(void); +static void choose_name_or_words_screen_load_bg_tile_patterns(void); +static void sub_80E4CB8(void); +static void choose_name_or_words_screen_apply_bg_pals(void); +static void sub_80E4CF8(u8, const void *); +static void nullsub_10(u8, u8); +static void sub_80E4D10(void); +static void sub_80E4DE4(u8, u8); +static void sub_80E4E5C(void); +static void sub_80E4EF0(void); +static void sub_80E4F58(void); +static void NamingScreen_TurnOffScreen(void); +static void NamingScreen_InitDisplayMode(void); +static void VBlankCB_NamingScreen(void); +static void sub_80E501C(void); +static bool8 sub_80E503C(u8); + +void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback) +{ + gNamingScreenData = Alloc(sizeof(struct NamingScreenData)); + if (!gNamingScreenData) + { + SetMainCallback2(returnCallback); + } + else + { + gNamingScreenData->templateNum = templateNum; + gNamingScreenData->unk1E34 = monSpecies; + gNamingScreenData->unk1E36 = monGender; + gNamingScreenData->unk1E38 = monPersonality; + gNamingScreenData->destBuffer = destBuffer; + gNamingScreenData->returnCallback = returnCallback; + + if (templateNum == 0) + StartTimer1(); + + SetMainCallback2(C2_NamingScreen); + } +} + +static void C2_NamingScreen(void) +{ + switch (gMain.state) + { + case 0: + NamingScreen_TurnOffScreen(); + NamingScreen_Init(); + gMain.state++; + break; + case 1: + choose_name_or_words_screen_init_bgs(); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + gMain.state++; + break; + case 3: + ResetSpriteData(); + FreeAllSpritePalettes(); + gMain.state++; + break; + case 4: + ResetTasks(); + gMain.state++; + break; + case 5: + choose_name_or_words_screen_apply_bg_pals(); + gMain.state++; + break; + case 6: + choose_name_or_words_screen_load_bg_tile_patterns(); + gMain.state++; + break; + case 7: + sub_80E3CC8(); + UpdatePaletteFade(); + sub_80E501C(); + gMain.state++; + break; + default: + sub_80E4CB8(); + sub_80E3194(); + break; + } +} + +static void NamingScreen_Init(void) +{ + gNamingScreenData->state = 0; + gNamingScreenData->bg1vOffset = 0; + gNamingScreenData->bg2vOffset = 0; + gNamingScreenData->unk1E1C = 1; + gNamingScreenData->unk1E1E = 2; + gNamingScreenData->unk1E20 = 0; + gNamingScreenData->unk1E21 = 1; + gNamingScreenData->template = sNamingScreenTemplates[gNamingScreenData->templateNum]; + gNamingScreenData->currentPage = gNamingScreenData->template->unk4; + gNamingScreenData->unk1E16 = (240 - gNamingScreenData->template->maxChars * 8) / 2 + 6; + if (gNamingScreenData->templateNum == 4) + gNamingScreenData->unk1E16 += 11; + gNamingScreenData->unk1E25 = gKeyRepeatStartDelay; + memset(gNamingScreenData->textBuffer, 0xFF, sizeof(gNamingScreenData->textBuffer)); + if (gNamingScreenData->template->unk0 != 0) + StringCopy(gNamingScreenData->textBuffer, gNamingScreenData->destBuffer); + gKeyRepeatStartDelay = 16; +} + +static void sub_80E2FA4(void) +{ + u8 i; + for (i = 0; i < MAX_SPRITES; i++) + { + if (gSprites[i].inUse) + gSprites[i].invisible = FALSE; + } + sub_80E3E3C(0); +} + +static void choose_name_or_words_screen_init_bgs(void) +{ + u8 i; + + DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0858BE00, 4); + + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + + sub_81971D0(); + sub_8197200(); + + for (i = 0; i < 5; i++) + gNamingScreenData->windows[i] = AddWindow(&gUnknown_0858BE10[i]); + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0xC, 0x8)); + + SetBgTilemapBuffer(1, gNamingScreenData->tilemapBuffer1); + SetBgTilemapBuffer(2, gNamingScreenData->tilemapBuffer2); + SetBgTilemapBuffer(3, gNamingScreenData->tilemapBuffer3); + + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); +} + +static void sub_80E3194(void) +{ + CreateTask(sub_80E31B0, 2); + SetMainCallback2(sub_80E4F58); +} + +static void sub_80E31B0(u8 taskId) +{ + switch (gNamingScreenData->state) + { + case 0: + MainState_BeginFadeIn(); + sub_80E2FA4(); + NamingScreen_InitDisplayMode(); + break; + case 1: + MainState_WaitFadeIn(); + break; + case 2: + MainState_HandleInput(); + break; + case 3: + MainState_MoveToOKButton(); + MainState_HandleInput(); + break; + case 4: + MainState_StartPageSwap(); + break; + case 5: + MainState_WaitPageSwap(); + break; + case 6: + MainState_6(); + break; + case 7: + sub_80E3604(); + break; + case 8: + MainState_BeginFadeInOut(); + break; + case 9: + MainState_WaitFadeOutAndExit(); + break; + } +} + +static const u8 gUnknown_0858BEBB[] = { 0, 2, 1 }; +static const u8 gUnknown_0858BEBE[] = { 1, 0, 2 }; +static const u8 gUnknown_0858BEC1[] = { 2, 1, 0 }; + +static u8 sub_80E3244(u8 a1) +{ + return gUnknown_0858BEBB[a1]; +} + +static u8 sub_80E3254(void) +{ + return gUnknown_0858BEBE[gNamingScreenData->currentPage]; +} + +static u8 sub_80E3274(void) +{ + return gUnknown_0858BEC1[gNamingScreenData->currentPage]; +} + +static bool8 MainState_BeginFadeIn(void) +{ + sub_80E4CF8(3, gUnknown_08DD4544); + gNamingScreenData->currentPage = 1; + sub_80E4CF8(2, gUnknown_08DD46E0); + sub_80E4CF8(1, gUnknown_08DD4620); + sub_80E4DE4(gNamingScreenData->windows[1], 0); + sub_80E4DE4(gNamingScreenData->windows[0], 1); + nullsub_10(2, 0); + nullsub_10(1, 1); + sub_80E4D10(); + sub_80E4964(); + sub_80E4EF0(); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + BlendPalettes(-1, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gNamingScreenData->state++; + return FALSE; +} + +static bool8 MainState_WaitFadeIn(void) +{ + if (!gPaletteFade.active) + { + SetInputState(INPUT_STATE_ENABLED); + sub_80E3E94(1); + gNamingScreenData->state++; + } + return FALSE; +} + +static bool8 MainState_HandleInput(void) +{ + return HandleKeyboardEvent(); +} + +static bool8 MainState_MoveToOKButton(void) +{ + if (IsCursorAnimFinished()) + { + SetInputState(INPUT_STATE_ENABLED); + MoveCursorToOKButton(); + gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT; + } + return FALSE; +} + +static bool8 MainState_6(void) +{ + sub_80E4BE4(); + SetInputState(INPUT_STATE_DISABLED); + sub_80E3E94(0); + sub_80E3948(3, 0, 1); + if (gNamingScreenData->templateNum == NAMING_SCREEN_CAUGHT_MON && + CalculatePlayerPartyCount() >= 6) + { + DisplaySentToPCMessage(); + gNamingScreenData->state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE; + return FALSE; + } + else + { + gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT; + return TRUE; //Exit the naming screen + } +} + +static bool8 MainState_BeginFadeInOut(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gNamingScreenData->state++; + return FALSE; +} + +static bool8 MainState_WaitFadeOutAndExit(void) +{ + if (!gPaletteFade.active) + { + if (gNamingScreenData->templateNum == NAMING_SCREEN_PLAYER) + SeedRngAndSetTrainerId(); + SetMainCallback2(gNamingScreenData->returnCallback); + DestroyTask(FindTaskIdByFunc(sub_80E31B0)); + FreeAllWindowBuffers(); + FREE_AND_SET_NULL(gNamingScreenData); + } + return FALSE; +} + +static void DisplaySentToPCMessage(void) +{ + u8 stringToDisplay = 0; + + if (!sub_813B260()) + { + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN))); + StringCopy(gStringVar2, gNamingScreenData->destBuffer); + } + else + { + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN))); + StringCopy(gStringVar2, gNamingScreenData->destBuffer); + StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id())); + stringToDisplay = 2; + } + + if (FlagGet(FLAG_SYS_PC_LANETTE)) + stringToDisplay++; + + StringExpandPlaceholders(gStringVar4, gUnknown_0858BDB8[stringToDisplay]); + sub_81973C4(0, 0); + gTextFlags.flag_0 = TRUE; + AddTextPrinterParametrized(0, 1, gStringVar4, GetPlayerTextSpeed(), 0, 2, 1, 3); + CopyWindowToVram(0, 3); +} + +static bool8 sub_80E3604(void) +{ + RunTextPrinters(); + + if (!IsTextPrinterActive(0) && (gMain.newKeys & A_BUTTON)) + gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT; + + return FALSE; +} + +static bool8 MainState_StartPageSwap(void) +{ + SetInputState(INPUT_STATE_DISABLED); + sub_80E4050(); + StartPageSwapAnim(); + sub_80E3E3C(1); + sub_80E3948(0, 0, 1); + PlaySE(SE_WIN_OPEN); + gNamingScreenData->state = MAIN_STATE_WAIT_PAGE_SWAP; + return FALSE; +} + +static bool8 MainState_WaitPageSwap(void) +{ + s16 cursorX; + s16 cursorY; + bool32 var3; + + if (IsPageSwapAnimNotInProgress()) + { + + GetCursorPos(&cursorX, &cursorY); + var3 = (cursorX == GetCurrentPageColumnCount()); + + gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT; + gNamingScreenData->currentPage++; + gNamingScreenData->currentPage %= 3; + + if (var3) + { + cursorX = GetCurrentPageColumnCount(); + } + else + { + if (cursorX >= GetCurrentPageColumnCount()) + cursorX = GetCurrentPageColumnCount() - 1; + } + + SetCursorPos(cursorX, cursorY); + sub_80E4E5C(); + SetInputState(INPUT_STATE_ENABLED); + sub_80E3E3C(0); + } + return FALSE; +} + +//-------------------------------------------------- +// Page Swap +//-------------------------------------------------- + +#define tState data[0] +#define tFrameCount data[1] + +static bool8 PageSwapAnimState_Init(struct Task *); +static bool8 PageSwapAnimState_1(struct Task *); +static bool8 PageSwapAnimState_2(struct Task *); +static bool8 PageSwapAnimState_Done(struct Task *); + +static bool8 (*const sPageSwapAnimStateFuncs[])(struct Task *) = +{ + PageSwapAnimState_Init, + PageSwapAnimState_1, + PageSwapAnimState_2, + PageSwapAnimState_Done, +}; + +static void StartPageSwapAnim(void) +{ + u8 taskId; + + taskId = CreateTask(Task_HandlePageSwapAnim, 0); + Task_HandlePageSwapAnim(taskId); +} + +static void Task_HandlePageSwapAnim(u8 taskId) +{ + while (sPageSwapAnimStateFuncs[gTasks[taskId].tState](&gTasks[taskId]) != 0); +} + +static bool8 IsPageSwapAnimNotInProgress(void) +{ + if (FindTaskIdByFunc(Task_HandlePageSwapAnim) == 0xFF) + return TRUE; + else + return FALSE; +} + +static bool8 PageSwapAnimState_Init(struct Task *task) +{ + gNamingScreenData->bg1vOffset = 0; + gNamingScreenData->bg2vOffset = 0; + task->tState++; + return 0; +} + +static bool8 PageSwapAnimState_1(struct Task *task) +{ + u16 *const arr[] = + { + &gNamingScreenData->bg2vOffset, + &gNamingScreenData->bg1vOffset + }; + + task->tFrameCount += 4; + *arr[gNamingScreenData->unk1E20] = Sin(task->tFrameCount, 40); + *arr[gNamingScreenData->unk1E21] = Sin((task->tFrameCount + 128) & 0xFF, 40); + if (task->tFrameCount >= 64) + { + u8 temp = gNamingScreenData->unk1E1C; //Why u8 and not u16? + + gNamingScreenData->unk1E1C = gNamingScreenData->unk1E1E; + gNamingScreenData->unk1E1E = temp; + task->tState++; + } + return 0; +} + +static bool8 PageSwapAnimState_2(struct Task *task) +{ + u16 *const arr[] = {&gNamingScreenData->bg2vOffset, &gNamingScreenData->bg1vOffset}; + + task->tFrameCount += 4; + *arr[gNamingScreenData->unk1E20] = Sin(task->tFrameCount, 40); + *arr[gNamingScreenData->unk1E21] = Sin((task->tFrameCount + 128) & 0xFF, 40); + if (task->tFrameCount >= 128) + { + u8 temp = gNamingScreenData->unk1E20; + + gNamingScreenData->unk1E20 = gNamingScreenData->unk1E21; + gNamingScreenData->unk1E21 = temp; + task->tState++; + } + return 0; +} + +static bool8 PageSwapAnimState_Done(struct Task *task) +{ + DestroyTask(FindTaskIdByFunc(Task_HandlePageSwapAnim)); + return 0; +} + +#undef tState +#undef tFrameCount + +//-------------------------------------------------- +// +//-------------------------------------------------- + +static void sub_80E3920(void) +{ + u8 taskId; + + taskId = CreateTask(Task_80E39BC, 3); + gTasks[taskId].data[0] = 3; +} + +static void sub_80E3948(u8 a, u8 b, u8 c) +{ + struct Task *task = &gTasks[FindTaskIdByFunc(Task_80E39BC)]; + + if (a == task->data[0] && c == 0) + { + task->data[1] = b; + task->data[2] = 1; + return; + } + if (a == 3 && task->data[1] == 0 && c == 0) + return; + if (task->data[0] != 3) + sub_80E3AE8(task->data[0]); + sub_80E3B10(task, a, b); +} + +static void Task_80E39BC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (task->data[0] == 3 || task->data[2] == 0) + return; + MultiplyInvertedPaletteRGBComponents(sub_80E3A74(task->data[0]), task->data[3], task->data[3], task->data[3]); + if (task->data[5] != 0) + { + task->data[5]--; + if (task->data[5] != 0) + return; + } + task->data[5] = 2; + if (task->data[4] >= 0) + { + if (task->data[3] < 14) + { + task->data[3] += task->data[4]; + task->data[6] += task->data[4]; + } + else + { + task->data[3] = 16; + task->data[6]++; + } + } + else + { + task->data[3] += task->data[4]; + task->data[6] += task->data[4]; + } + + if (task->data[3] == 16 && task->data[6] == 22) + { + task->data[4] = -4; + } + else if (task->data[3] == 0) + { + task->data[2] = task->data[1]; + task->data[4] = 2; + task->data[6] = 0; + } +} + +static u16 sub_80E3A74(u8 a) +{ + const u16 arr[] = + { + IndexOfSpritePaletteTag(4) * 16 + 0x10E, + IndexOfSpritePaletteTag(6) * 16 + 0x10E, + IndexOfSpritePaletteTag(7) * 16 + 0x10E, + IndexOfSpritePaletteTag(7) * 16 + 0x101, + }; + + return arr[a]; +} + +static void sub_80E3AE8(u8 a) +{ + u16 index = sub_80E3A74(a); + + gPlttBufferFaded[index] = gPlttBufferUnfaded[index]; +} + +static void sub_80E3B10(struct Task *task, u8 b, u8 c) +{ + task->data[0] = b; + task->data[1] = c; + task->data[2] = 1; + task->data[3] = 4; + task->data[4] = 2; + task->data[5] = 0; + task->data[6] = 4; +} + +static void sub_80E3B30(struct Sprite *sprite) +{ + if (sprite->animEnded) + StartSpriteAnim(sprite, 0); + sprite->invisible = (sprite->data[4] & 0xFF); + if (sprite->data[0] == GetCurrentPageColumnCount()) + sprite->invisible = TRUE; + if (sprite->invisible || (sprite->data[4] & 0xFF00) == 0 + || sprite->data[0] != sprite->data[2] || sprite->data[1] != sprite->data[3]) + { + sprite->data[5] = 0; + sprite->data[6] = 2; + sprite->data[7] = 2; + } + sprite->data[7]--; + if (sprite->data[7] == 0) + { + sprite->data[5] += sprite->data[6]; + if (sprite->data[5] == 16 || sprite->data[5] == 0) + sprite->data[6] = -sprite->data[6]; + sprite->data[7] = 2; + } + if ((sprite->data[4] & 0xFF00) != 0) + { + s8 gb = sprite->data[5]; + s8 r = sprite->data[5] >> 1; + u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101; + + MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); + } +} + +static void sub_80E3C20(struct Sprite *sprite) +{ + const s16 arr[] = {0, -4, -2, -1}; + + if (sprite->data[0] == 0 || --sprite->data[0] == 0) + { + sprite->data[0] = 8; + sprite->data[1] = (sprite->data[1] + 1) & 3; + } + sprite->pos2.x = arr[sprite->data[1]]; +} + +static void sub_80E3C6C(struct Sprite *sprite) +{ + const s16 arr[] = {2, 3, 2, 1}; + u8 var; + + var = GetTextCaretPosition(); + if (var != (u8)sprite->data[0]) + { + sprite->pos2.y = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + else + { + sprite->pos2.y = arr[sprite->data[1]]; + sprite->data[2]++; + if (sprite->data[2] > 8) + { + sprite->data[1] = (sprite->data[1] + 1) & 3; + sprite->data[2] = 0; + } + } +} + +//-------------------------------------------------- +// Cursor +//-------------------------------------------------- + +static void sub_80E3CC8(void) +{ + CursorInit(); + sub_80E3F8C(); + sub_80E4218(); + sub_80E4290(); + sub_80E4354(); +} + +static void CursorInit(void) +{ + gNamingScreenData->cursorSpriteId = CreateSprite(&gUnknown_0858C138, 38, 88, 1); + sub_80E3E3C(1); + gSprites[gNamingScreenData->cursorSpriteId].oam.priority = 1; + gSprites[gNamingScreenData->cursorSpriteId].oam.objMode = 1; + gSprites[gNamingScreenData->cursorSpriteId].data[6] = 1; + gSprites[gNamingScreenData->cursorSpriteId].data[6] = 2; + SetCursorPos(0, 0); +} + +static void SetCursorPos(s16 x, s16 y) +{ + struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId]; + + if (x < gUnknown_0858BEA0[sub_80E3274()]) + cursorSprite->pos1.x = gUnknown_0858BEA3[x + sub_80E3274() * 8] + 38; + else + cursorSprite->pos1.x = 0; + + cursorSprite->pos1.y = y * 16 + 88; + cursorSprite->data[2] = cursorSprite->data[0]; + cursorSprite->data[3] = cursorSprite->data[1]; + cursorSprite->data[0] = x; + cursorSprite->data[1] = y; +} + +static void GetCursorPos(s16 *x, s16 *y) +{ + struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId]; + + *x = cursorSprite->data[0]; + *y = cursorSprite->data[1]; +} + +static void MoveCursorToOKButton(void) +{ + SetCursorPos(GetCurrentPageColumnCount(), 2); +} + +static void sub_80E3E3C(u8 a) +{ + gSprites[gNamingScreenData->cursorSpriteId].data[4] &= -256; + gSprites[gNamingScreenData->cursorSpriteId].data[4] |= a; + StartSpriteAnim(&gSprites[gNamingScreenData->cursorSpriteId], 0); +} + +static void sub_80E3E94(u8 a) +{ + gSprites[gNamingScreenData->cursorSpriteId].data[4] &= 0xFF; + gSprites[gNamingScreenData->cursorSpriteId].data[4] |= a << 8; +} + +static void sub_80E3ED8(void) +{ + StartSpriteAnim(&gSprites[gNamingScreenData->cursorSpriteId], 1); +} + +static bool8 IsCursorAnimFinished(void) +{ + return gSprites[gNamingScreenData->cursorSpriteId].animEnded; +} + +enum +{ + KEY_ROLE_CHAR, + KEY_ROLE_PAGE, + KEY_ROLE_BACKSPACE, + KEY_ROLE_OK, +}; + +static const u8 sKeyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK}; + +static u8 GetKeyRoleAtCursorPos(void) +{ + s16 cursorX; + s16 cursorY; + + GetCursorPos(&cursorX, &cursorY); + if (cursorX < GetCurrentPageColumnCount()) + return KEY_ROLE_CHAR; + else + return sKeyRoles[cursorY]; +} + +static u8 GetCurrentPageColumnCount(void) +{ + return gUnknown_0858BEA0[sub_80E3274()]; +} + +static void sub_80E3F8C(void) +{ + u8 spriteId1; + u8 spriteId2; + u8 spriteId3; + + spriteId1 = CreateSprite(&gUnknown_0858C0C0, 0xCC, 0x58, 0); + gNamingScreenData->unk1E24 = spriteId1; + SetSubspriteTables(&gSprites[spriteId1], gUnknown_0858C050); + gSprites[spriteId1].invisible = TRUE; + + spriteId2 = CreateSprite(&gUnknown_0858C0F0, 0xCC, 0x54, 1); + gSprites[spriteId1].data[6] = spriteId2; + SetSubspriteTables(&gSprites[spriteId2], gUnknown_0858C058); + gSprites[spriteId2].invisible = TRUE; + + spriteId3 = CreateSprite(&gUnknown_0858C0D8, 0xCC, 0x53, 2); + gSprites[spriteId3].oam.priority = 1; + gSprites[spriteId1].data[7] = spriteId3; + gSprites[spriteId3].invisible = TRUE; +} + +static void sub_80E4050(void) +{ + struct Sprite *sprite = &gSprites[gNamingScreenData->unk1E24]; + + sprite->data[0] = 2; + sprite->data[1] = gNamingScreenData->currentPage; +} + +static u8 sub_80E40AC(struct Sprite *); +static u8 sub_80E4100(struct Sprite *); +static u8 sub_80E4104(struct Sprite *); +static u8 sub_80E4178(struct Sprite *); + +static u8 (*const gUnknown_0858BEE8[])(struct Sprite *) = +{ + sub_80E40AC, + sub_80E4100, + sub_80E4104, + sub_80E4178, +}; + +static void sub_80E4084(struct Sprite *sprite) +{ + while (gUnknown_0858BEE8[sprite->data[0]](sprite) != 0); +} + +static u8 sub_80E40AC(struct Sprite *sprite) +{ + struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite2 = &gSprites[sprite->data[7]]; + + sub_80E41B8(sub_80E3244(gNamingScreenData->currentPage), sprite1, sprite2); + sprite->data[0]++; + return 0; +} + +static u8 sub_80E4100(struct Sprite *sprite) +{ + return 0; +} + +static u8 sub_80E4104(struct Sprite *sprite) +{ + struct Sprite *r4 = &gSprites[sprite->data[6]]; + struct Sprite *r5 = &gSprites[sprite->data[7]]; + + r4->pos2.y++; + if (r4->pos2.y > 7) + { + sprite->data[0]++; + r4->pos2.y = -4; + r4->invisible = TRUE; + sub_80E41B8(sub_80E3244(((u8)sprite->data[1] + 1) % 3), r4, r5); + } + return 0; +} + +static u8 sub_80E4178(struct Sprite *sprite) +{ + struct Sprite *r2 = &gSprites[sprite->data[6]]; + + r2->invisible = FALSE; + r2->pos2.y++; + if (r2->pos2.y >= 0) + { + r2->pos2.y = 0; + sprite->data[0] = 1; + } + return 0; +} + +static const u16 gUnknown_0858BEF8[] = {1, 3, 2}; +static const u16 gUnknown_0858BEFE[] = {4, 6, 5}; + +static void sub_80E41B8(u8 a, struct Sprite *b, struct Sprite *c) +{ + c->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_0858BEF8[a]); + b->sheetTileStart = GetSpriteTileStartByTag(gUnknown_0858BEFE[a]); + b->subspriteTableNum = a; +} + +// + +static void sub_80E4218(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_0858C108, 0xCC, 0x74, 0); + SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C070); + gSprites[spriteId].invisible = TRUE; + + spriteId = CreateSprite(&gUnknown_0858C120, 0xCC, 0x8C, 0); + SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C070); + gSprites[spriteId].invisible = TRUE; +} + +static void sub_80E4290(void) +{ + u8 spriteId; + s16 r1; + u8 i; + + r1 = gNamingScreenData->unk1E16 - 5; + spriteId = CreateSprite(&gUnknown_0858C150, r1, 0x38, 0); + gSprites[spriteId].oam.priority = 3; + gSprites[spriteId].invisible = TRUE; + r1 = gNamingScreenData->unk1E16; + for (i = 0; i < gNamingScreenData->template->maxChars; i++, r1 += 8) + { + spriteId = CreateSprite(&gUnknown_0858C168, r1 + 3, 0x3C, 0); + gSprites[spriteId].oam.priority = 3; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].invisible = TRUE; + } +} + +// + +static void TaskDummy2(void); +static void sub_80E4384(void); +static void sub_80E43E0(void); +static void sub_80E4420(void); +static void sub_80E447C(void); + +static void (*const gUnknown_0858BF04[])(void) = +{ + TaskDummy2, + sub_80E4384, + sub_80E43E0, + sub_80E4420, + sub_80E447C, +}; + +static void sub_80E4354(void) +{ + gUnknown_0858BF04[gNamingScreenData->template->unk2](); +} + +static void TaskDummy2(void) +{ + +} + +static void sub_80E4384(void) +{ + u8 rivalGfxId; + u8 spriteId; + + rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gNamingScreenData->unk1E34); + spriteId = AddPseudoFieldObject(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0); + gSprites[spriteId].oam.priority = 3; + StartSpriteAnim(&gSprites[spriteId], 4); +} + +static void sub_80E43E0(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_0858C180, 0x38, 0x29, 0); + SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C078); + gSprites[spriteId].oam.priority = 3; +} + +static void sub_80E4420(void) +{ + u8 spriteId; + + sub_80D2F04(); + spriteId = CreateMonIcon(gNamingScreenData->unk1E34, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->unk1E38, 1); + gSprites[spriteId].oam.priority = 3; +} + +static void sub_80E447C(void) +{ + u8 spriteId; + + spriteId = AddPseudoFieldObject(0x13, SpriteCallbackDummy, 0x38, 0x25, 0); + gSprites[spriteId].oam.priority = 3; + StartSpriteAnim(&gSprites[spriteId], 4); +} + +//-------------------------------------------------- +// Keyboard handling +//-------------------------------------------------- + +static bool8 KeyboardKeyHandler_Character(u8); +static bool8 KeyboardKeyHandler_Page(u8); +static bool8 KeyboardKeyHandler_Backspace(u8); +static bool8 KeyboardKeyHandler_OK(u8); + +static bool8 (*const sKeyboardKeyHandlers[])(u8) = +{ + KeyboardKeyHandler_Character, + KeyboardKeyHandler_Page, + KeyboardKeyHandler_Backspace, + KeyboardKeyHandler_OK, +}; + +static bool8 HandleKeyboardEvent(void) +{ + u8 event = GetInputEvent(); + u8 keyRole = GetKeyRoleAtCursorPos(); + + if (event == KBEVENT_PRESSED_SELECT) + { + return sub_80E45E0(); + } + else if (event == KBEVENT_PRESSED_B) + { + DeleteTextCharacter(); + return FALSE; + } + else if (event == KBEVENT_PRESSED_START) + { + MoveCursorToOKButton(); + return FALSE; + } + else + { + return sKeyboardKeyHandlers[keyRole](event); + } +} + +static bool8 KeyboardKeyHandler_Character(u8 event) +{ + sub_80E3948(3, 0, 0); + if (event == KBEVENT_PRESSED_A) + { + bool8 var = sub_80E4B54(); + + sub_80E3ED8(); + if (var) + { + SetInputState(INPUT_STATE_2); + gNamingScreenData->state = MAIN_STATE_MOVE_TO_OK_BUTTON; + } + } + return FALSE; +} + +static bool8 KeyboardKeyHandler_Page(u8 event) +{ + sub_80E3948(0, 1, 0); + if (event == KBEVENT_PRESSED_A) + return sub_80E45E0(); + else + return FALSE; +} + +static bool8 KeyboardKeyHandler_Backspace(u8 event) +{ + sub_80E3948(1, 1, 0); + if (event == KBEVENT_PRESSED_A) + DeleteTextCharacter(); + return FALSE; +} + +static bool8 KeyboardKeyHandler_OK(u8 event) +{ + sub_80E3948(2, 1, 0); + if (event == KBEVENT_PRESSED_A) + { + PlaySE(SE_SELECT); + gNamingScreenData->state = MAIN_STATE_6; + return TRUE; + } + else + return FALSE; +} + +static bool8 sub_80E45E0(void) +{ + gNamingScreenData->state = MAIN_STATE_START_PAGE_SWAP; + return TRUE; +} + +//-------------------------------------------------- +// Input handling +//-------------------------------------------------- + +enum +{ + FNKEY_CASE, + FNKEY_BACK, + FNKEY_OK, +}; + +#define tState data[0] +#define tKeyboardEvent data[1] +#define tKbFunctionKey data[2] + + +static void InputState_Disabled(struct Task *); +static void InputState_Enabled(struct Task *); +static void InputState_2(struct Task *); + +static void (*const sInputStateFuncs[])(struct Task *) = +{ + InputState_Disabled, + InputState_Enabled, + InputState_2, +}; + +static void Task_HandleInput(u8); +static void HandleDpadMovement(struct Task *); + +static void InputInit(void) +{ + CreateTask(Task_HandleInput, 1); +} + +static u8 GetInputEvent(void) +{ + u8 taskId = FindTaskIdByFunc(Task_HandleInput); + + return gTasks[taskId].tKeyboardEvent; +} + +static void SetInputState(u8 state) +{ + u8 taskId = FindTaskIdByFunc(Task_HandleInput); + + gTasks[taskId].tState = state; +} + +static void Task_HandleInput(u8 taskId) +{ + sInputStateFuncs[gTasks[taskId].tState](&gTasks[taskId]); +} + +static void InputState_Disabled(struct Task *task) +{ + task->tKeyboardEvent = 0; +} + +static void InputState_Enabled(struct Task *task) +{ + task->tKeyboardEvent = 0; + + if (gMain.newKeys & A_BUTTON) + task->tKeyboardEvent = KBEVENT_PRESSED_A; + else if (gMain.newKeys & B_BUTTON) + task->tKeyboardEvent = KBEVENT_PRESSED_B; + else if (gMain.newKeys & SELECT_BUTTON) + task->tKeyboardEvent = KBEVENT_PRESSED_SELECT; + else if (gMain.newKeys & START_BUTTON) + task->tKeyboardEvent = KBEVENT_PRESSED_START; + else + HandleDpadMovement(task); +} + +static void InputState_2(struct Task *task) +{ + task->tKeyboardEvent = 0; +} + +static void HandleDpadMovement(struct Task *task) +{ + const s16 sDpadDeltaX[] = + { + 0, //none + 0, //up + 0, //down + -1, //left + 1 //right + }; + + const s16 sDpadDeltaY[] = + { + 0, //none + -1, //up + 1, //down + 0, //left + 0 //right + }; + + const s16 s4RowTo3RowTableY[] = {0, 1, 1, 2}; + const s16 gUnknown_0858BF50[] = {0, 0, 3}; + + s16 cursorX; + s16 cursorY; + u16 dpadDir; + s16 prevCursorX; + + GetCursorPos(&cursorX, &cursorY); + dpadDir = 0; + if (gMain.newAndRepeatedKeys & DPAD_UP) + dpadDir = 1; + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + dpadDir = 2; + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + dpadDir = 3; + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + dpadDir = 4; + + //Get new cursor position + prevCursorX = cursorX; + cursorX += sDpadDeltaX[dpadDir]; + cursorY += sDpadDeltaY[dpadDir]; + + //Wrap cursor position in the X direction + if (cursorX < 0) + cursorX = GetCurrentPageColumnCount(); + if (cursorX > GetCurrentPageColumnCount()) + cursorX = 0; + + //Handle cursor movement in X direction + if (sDpadDeltaX[dpadDir] != 0) + { + if (cursorX == GetCurrentPageColumnCount()) + { + //We are now on the last column + task->tKbFunctionKey = cursorY; + cursorY = s4RowTo3RowTableY[cursorY]; + } + else if (prevCursorX == GetCurrentPageColumnCount()) + { + if (cursorY == 1) + cursorY = task->tKbFunctionKey; + else + cursorY = gUnknown_0858BF50[cursorY]; + } + } + + if (cursorX == GetCurrentPageColumnCount()) + { + //There are only 3 keys on the last column, unlike the others, + //so wrap Y accordingly + if (cursorY < 0) + cursorY = 2; + if (cursorY > 2) + cursorY = 0; + if (cursorY == 0) + task->tKbFunctionKey = FNKEY_BACK; + else if (cursorY == 2) + task->tKbFunctionKey = FNKEY_OK; + } + else + { + if (cursorY < 0) + cursorY = 3; + if (cursorY > 3) + cursorY = 0; + } + SetCursorPos(cursorX, cursorY); +} + +#undef tState +#undef tKeyboardEvent +#undef tKbFunctionKey + +static void sub_80E4894(void) +{ + FillWindowPixelBuffer(gNamingScreenData->windows[3], 0x11); + PrintTextOnWindow(gNamingScreenData->windows[3], 1, gNamingScreenData->template->title, 8, 1, 0, 0); + PutWindowTilemap(gNamingScreenData->windows[3]); +} + +static void sub_80E48E8(void) +{ + u8 buffer[0x20]; + + StringCopy(buffer, gSpeciesNames[gNamingScreenData->unk1E34]); + StringAppendN(buffer, gNamingScreenData->template->title, 15); + FillWindowPixelBuffer(gNamingScreenData->windows[3], 0x11); + PrintTextOnWindow(gNamingScreenData->windows[3], 1, buffer, 8, 1, 0, 0); + PutWindowTilemap(gNamingScreenData->windows[3]); +} + +static void (*const gUnknown_0858BF58[])(void) = +{ + sub_80E4894, + sub_80E4894, + sub_80E48E8, + sub_80E48E8, + sub_80E4894, +}; + +static void sub_80E4964(void) +{ + gUnknown_0858BF58[gNamingScreenData->templateNum](); +} + +static void TaskDummy3(void); +static void sub_80E49BC(void); + +static void (*const gUnknown_0858BF6C[])(void) = +{ + TaskDummy3, + sub_80E49BC, +}; + +static void sub_80E498C(void) +{ + gUnknown_0858BF6C[gNamingScreenData->template->unk3](); +} + +static void TaskDummy3(void) +{ + +} + +static const struct TextColor sGenderColors[2] = +{ + {0, 9, 8}, + {0, 5, 4} +}; + +static void sub_80E49BC(void) +{ + u8 genderSymbol[2]; + bool8 isFemale = FALSE; + + StringCopy(genderSymbol, gText_MaleSymbol); + + if (gNamingScreenData->unk1E36 != MON_GENDERLESS) + { + if (gNamingScreenData->unk1E36 == MON_FEMALE) + { + StringCopy(genderSymbol, gText_FemaleSymbol); + isFemale = TRUE; + } + box_print(gNamingScreenData->windows[2], 1, 0x68, 1, &sGenderColors[isFemale], -1, genderSymbol); + } +} + +static u8 GetCharAtKeyboardPos(s16 a, s16 b) +{ + return gUnknown_0858BE40[a + b * 8 + sub_80E3274() * 32]; +} + + +static u8 GetTextCaretPosition(void) +{ + u8 i; + + for (i = 0; i < gNamingScreenData->template->maxChars; i++) + { + if (gNamingScreenData->textBuffer[i] == EOS) + return i; + } + return gNamingScreenData->template->maxChars - 1; +} + +static u8 GetPreviousTextCaretPosition(void) +{ + s8 i; + + for (i = gNamingScreenData->template->maxChars - 1; i > 0; i--) + { + if (gNamingScreenData->textBuffer[i] != EOS) + return i; + } + return 0; +} + +static void DeleteTextCharacter(void) +{ + u8 index; + u8 var2; + + index = GetPreviousTextCaretPosition(); + gNamingScreenData->textBuffer[index] = 0; + sub_80E4D10(); + CopyBgTilemapBufferToVram(3); + gNamingScreenData->textBuffer[index] = EOS; + var2 = GetKeyRoleAtCursorPos(); + if (var2 == 0 || var2 == 2) + sub_80E3948(1, 0, 1); + PlaySE(SE_BOWA); +} + +static bool8 sub_80E4B54(void) +{ + s16 x; + s16 y; + + GetCursorPos(&x, &y); + AddTextCharacter(GetCharAtKeyboardPos(x, y)); + sub_80E4D10(); + CopyBgTilemapBufferToVram(3); + PlaySE(SE_SELECT); + + if (GetPreviousTextCaretPosition() != gNamingScreenData->template->maxChars - 1) + return FALSE; + else + return TRUE; +} + +static void AddTextCharacter(u8 ch) +{ + u8 index = GetTextCaretPosition(); + + gNamingScreenData->textBuffer[index] = ch; +} + +static void sub_80E4BE4(void) +{ + u8 i; + + for (i = 0; i < gNamingScreenData->template->maxChars; i++) + { + if (gNamingScreenData->textBuffer[i] != CHAR_SPACE && gNamingScreenData->textBuffer[i] != EOS) + { + StringCopyN(gNamingScreenData->destBuffer, gNamingScreenData->textBuffer, gNamingScreenData->template->maxChars + 1); + break; + } + } +} + +static void choose_name_or_words_screen_load_bg_tile_patterns(void) +{ + LZ77UnCompWram(gNamingScreenMenu_Gfx, gNamingScreenData->tileBuffer); + LoadBgTiles(1, gNamingScreenData->tileBuffer, 0x600, 0); + LoadBgTiles(2, gNamingScreenData->tileBuffer, 0x600, 0); + LoadBgTiles(3, gNamingScreenData->tileBuffer, 0x600, 0); + LoadSpriteSheets(gUnknown_0858C1C8); + LoadSpritePalettes(gUnknown_0858C230); +} + +static void sub_80E4CB8(void) +{ + InputInit(); + sub_80E3920(); +} + +static void choose_name_or_words_screen_apply_bg_pals(void) +{ + LoadPalette(gNamingScreenMenu_Pal, 0, 0xC0); + LoadPalette(gUnknown_0858BD78, 0xA0, sizeof(gUnknown_0858BD78)); + LoadPalette(stdpal_get(2), 0xB0, 0x20); +} + +static void sub_80E4CF8(u8 bg, const void *src) +{ + CopyToBgTilemapBuffer(bg, src, 0, 0); +} + +static void nullsub_10(u8 a1, u8 a2) +{ + +} + +static void sub_80E4D10(void) +{ + u8 i; + u8 temp[2]; + u16 unk2; + u8 maxChars = gNamingScreenData->template->maxChars; + u16 unk = gNamingScreenData->unk1E16 - 0x40; + + FillWindowPixelBuffer(gNamingScreenData->windows[2], 0x11); + + for (i = 0; i < maxChars; i++) + { + temp[0] = gNamingScreenData->textBuffer[i]; + temp[1] = gExpandedPlaceholder_Empty[0]; + unk2 = (sub_80E503C(temp[0]) == 1) ? 2 : 0; + + PrintTextOnWindow(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL); + } + + sub_80E498C(); + CopyWindowToVram(gNamingScreenData->windows[2], 2); + PutWindowTilemap(gNamingScreenData->windows[2]); +} + +static const struct AlignedTextColor sUnkColor1 = +{ + 13, 1, 2 +}; + +static const struct AlignedTextColor sUnkColor2 = +{ + 14, 1, 2 +}; + +static const struct AlignedTextColor sUnkColor3 = +{ + 15, 1, 2 +}; + +static const u8 sFillValues[3] = +{ + 0xEE, 0xDD, 0xFF +}; + +static const struct AlignedTextColor *const sUnkColors[3] = +{ + &sUnkColor2, + &sUnkColor1, + &sUnkColor3 +}; + +static void sub_80E4DE4(u8 window, u8 a1) +{ + u8 i; + + FillWindowPixelBuffer(window, sFillValues[a1]); + + for (i = 0; i < 4; i++) + { + box_print(window, 1, 0, i * 16 + 1, sUnkColors[a1], 0, gUnknown_0858C198[a1][i]); + } + + PutWindowTilemap(window); +} + +static const u8 *const gUnknown_0858BF98[] = +{ + gUnknown_08DD4620, + gUnknown_08DD46E0, + gUnknown_08DD47A0 +}; + +static void sub_80E4E5C(void) +{ + u8 unk1; + u8 unk2; + u8 unk3; + u8 bg1Priority = GetGpuReg(REG_OFFSET_BG1CNT) & 3; + u8 bg2Priority = GetGpuReg(REG_OFFSET_BG2CNT) & 3; + + if (bg1Priority > bg2Priority) + { + unk1 = 1; + unk2 = 1; + unk3 = gNamingScreenData->windows[0]; + } + else + { + unk1 = 2; + unk2 = 2; + unk3 = gNamingScreenData->windows[1]; + } + + sub_80E4CF8(unk1, gUnknown_0858BF98[gNamingScreenData->currentPage]); + sub_80E4DE4(unk3, sub_80E3254()); + nullsub_10(unk1, sub_80E3254()); + CopyBgTilemapBufferToVram(unk2); +} + +static void sub_80E4EF0(void) +{ + const u8 arr[] = { 15, 1, 2 }; + + FillWindowPixelBuffer(gNamingScreenData->windows[4], 0xFF); + box_print(gNamingScreenData->windows[4], 0, 2, 1, arr, 0, gText_MoveOkBack); + PutWindowTilemap(gNamingScreenData->windows[4]); + CopyWindowToVram(gNamingScreenData->windows[4], 3); +} + +static void sub_80E4F58(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void NamingScreen_TurnOffScreen(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); +} + +static void NamingScreen_InitDisplayMode(void) +{ + SetVBlankCallback(VBlankCB_NamingScreen); +} + +static void VBlankCB_NamingScreen(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + SetGpuReg(REG_OFFSET_BG1VOFS, gNamingScreenData->bg1vOffset); + SetGpuReg(REG_OFFSET_BG2VOFS, gNamingScreenData->bg2vOffset); + SetGpuReg(REG_OFFSET_BG1CNT, GetGpuReg(REG_OFFSET_BG1CNT) & 0xFFFC); + SetGpuRegBits(REG_OFFSET_BG1CNT, gNamingScreenData->unk1E1C); + SetGpuReg(REG_OFFSET_BG2CNT, GetGpuReg(REG_OFFSET_BG2CNT) & 0xFFFC); + SetGpuRegBits(REG_OFFSET_BG2CNT, gNamingScreenData->unk1E1E); +} + +static void sub_80E501C(void) +{ + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); +} + +static bool8 sub_80E503C(u8 character) +{ + u8 i; + + for (i = 0; gUnknown_0858BDC8[i] != EOS; i++) + { + if (character == gUnknown_0858BDC8[i]) + return FALSE; + } + return FALSE; +} + +static void sub_80E5074(void) +{ + DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194); +} + +static void sub_80E509C(void) +{ + DoNamingScreen(1, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194); +} + +static void sub_80E50C4(void) +{ + DoNamingScreen(2, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194); +} + +static void sub_80E50EC(void) +{ + DoNamingScreen(3, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194); +} + +//-------------------------------------------------- +// Forward-declared variables +//-------------------------------------------------- + +static const struct NamingScreenTemplate playerNamingScreenTemplate = +{ + .unk0 = 0, + .maxChars = 7, + .unk2 = 1, + .unk3 = 0, + .unk4 = 1, + .unk5 = 35, + .unk6 = 0, + .unk7 = 0, + .title = gText_YourName, +}; + +static const struct NamingScreenTemplate pcBoxNamingTemplate = +{ + .unk0 = 0, + .maxChars = 8, + .unk2 = 2, + .unk3 = 0, + .unk4 = 1, + .unk5 = 19, + .unk6 = 0, + .unk7 = 0, + .title = gText_BoxName, +}; + +static const struct NamingScreenTemplate monNamingScreenTemplate = +{ + .unk0 = 0, + .maxChars = 10, + .unk2 = 3, + .unk3 = 1, + .unk4 = 1, + .unk5 = 35, + .unk6 = 0, + .unk7 = 0, + .title = gText_PkmnsNickname, +}; + +static const struct NamingScreenTemplate wandaWordsScreenTemplate = +{ + .unk0 = 1, + .maxChars = 15, + .unk2 = 4, + .unk3 = 0, + .unk4 = 1, + .unk5 = 11, + .unk6 = 0, + .unk7 = 0, + .title = gText_TellHimTheWords, +}; + +static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = +{ + &playerNamingScreenTemplate, + &pcBoxNamingTemplate, + &monNamingScreenTemplate, + &monNamingScreenTemplate, + &wandaWordsScreenTemplate, +}; + +const struct OamData gOamData_858BFEC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_858BFF4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_858BFFC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct Subsprite gUnknown_0858C004[] = +{ + {-20, -16, 1, 1, 0, 1}, + { 12, -16, 0, 0, 4, 1}, + {-20, -8, 1, 1, 5, 1}, + { 12, -8, 0, 0, 9, 1}, + {-20, 0, 1, 1, 10, 1}, + { 12, 0, 0, 0, 14, 1}, + {-20, 8, 1, 1, 15, 1}, + { 12, 8, 0, 0, 19, 1} +}; + +static const struct Subsprite gUnknown_0858C024[] = +{ + {-12, -4, 1, 0, 0, 1}, + { 4, -4, 0, 0, 2, 1} +}; + +static const struct Subsprite gUnknown_0858C02C[] = +{ + {-20, -12, 1, 1, 0, 1}, + { 12, -12, 0, 0, 4, 1}, + {-20, -4, 1, 1, 5, 1}, + { 12, -4, 0, 0, 9, 1}, + {-20, 4, 1, 1, 10, 1}, + { 12, 4, 0, 0, 14, 1} +}; + +static const struct Subsprite gUnknown_0858C044[] = +{ + {-8, -12, 1, 0, 0, 3}, + {-8, -4, 1, 0, 2, 3}, + {-8, 4, 1, 0, 4, 3} +}; + +static const struct SubspriteTable gUnknown_0858C050[] = +{ + {ARRAY_COUNT(gUnknown_0858C004), gUnknown_0858C004} +}; + +static const struct SubspriteTable gUnknown_0858C058[] = +{ + {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024}, + {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024}, + {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024} +}; + +static const struct SubspriteTable gUnknown_0858C070[] = +{ + {ARRAY_COUNT(gUnknown_0858C02C), gUnknown_0858C02C} +}; + +static const struct SubspriteTable gUnknown_0858C078[] = +{ + {ARRAY_COUNT(gUnknown_0858C044), gUnknown_0858C044} +}; + +static const struct SpriteFrameImage gUnknown_0858C080[] = +{ + {gSpriteImage_858BBF8, sizeof(gSpriteImage_858BBF8)}, + {gSpriteImage_858BCB8, sizeof(gSpriteImage_858BCB8)}, +}; + +static const union AnimCmd gSpriteAnim_858C090[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_858C098[] = +{ + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_858C0A4[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(1, 2), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const gSpriteAnimTable_858C0B0[] = +{ + gSpriteAnim_858C090 +}; + +static const union AnimCmd *const gSpriteAnimTable_858C0B4[] = +{ + gSpriteAnim_858C090, + gSpriteAnim_858C098 +}; + +static const union AnimCmd *const gSpriteAnimTable_858C0BC[] = +{ + gSpriteAnim_858C0A4 +}; + +static const struct SpriteTemplate gUnknown_0858C0C0 = +{ + .tileTag = 0x0002, + .paletteTag = 0x0004, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E4084 +}; + +static const struct SpriteTemplate gUnknown_0858C0D8 = +{ + .tileTag = 0x0003, + .paletteTag = 0x0001, + .oam = &gOamData_858BFFC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_0858C0F0 = +{ + .tileTag = 0x0004, + .paletteTag = 0x0004, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_0858C108 = +{ + .tileTag = 0x0000, + .paletteTag = 0x0006, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_0858C120 = +{ + .tileTag = 0x0001, + .paletteTag = 0x0007, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_0858C138 = +{ + .tileTag = 0x0007, + .paletteTag = 0x0005, + .oam = &gOamData_858BFF4, + .anims = gSpriteAnimTable_858C0B4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E3B30 +}; + +static const struct SpriteTemplate gUnknown_0858C150 = +{ + .tileTag = 0x000A, + .paletteTag = 0x0003, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E3C20 +}; + +static const struct SpriteTemplate gUnknown_0858C168 = +{ + .tileTag = 0x000B, + .paletteTag = 0x0003, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E3C6C +}; + +static const struct SpriteTemplate gUnknown_0858C180 = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x0000, + .oam = &gOamData_858BFEC, + .anims = gSpriteAnimTable_858C0BC, + .images = gUnknown_0858C080, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +extern const u8 gUnknown_0862B88D[]; +extern const u8 gUnknown_0862B8AE[]; +extern const u8 gUnknown_0862B8CF[]; +extern const u8 gUnknown_0862B8F0[]; +extern const u8 gUnknown_0862B911[]; +extern const u8 gUnknown_0862B932[]; +extern const u8 gUnknown_0862B953[]; +extern const u8 gUnknown_0862B974[]; +extern const u8 gUnknown_0862B995[]; +extern const u8 gUnknown_0862B9AE[]; +extern const u8 gUnknown_0862B9C7[]; +extern const u8 gUnknown_0862B9E0[]; + +static const u8* const gUnknown_0858C198[][4] = +{ + { + gUnknown_0862B88D, + gUnknown_0862B8AE, + gUnknown_0862B8CF, + gUnknown_0862B8F0 + }, + { + gUnknown_0862B911, + gUnknown_0862B932, + gUnknown_0862B953, + gUnknown_0862B974 + }, + { + gUnknown_0862B995, + gUnknown_0862B9AE, + gUnknown_0862B9C7, + gUnknown_0862B9E0 + }, +}; + +static const struct SpriteSheet gUnknown_0858C1C8[] = +{ + {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, 0x0000}, + {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, 0x0001}, + {gNamingScreenRWindow_Gfx, 0x280, 0x0002}, + {gNamingScreenKeyboardButton_Gfx + 0x20, 0x100, 0x0003}, + {gNamingScreenROptions_Gfx, 0x060, 0x0004}, + {gNamingScreenROptions_Gfx + 0xA0, 0x060, 0x0005}, + {gNamingScreenROptions_Gfx + 0x140, 0x060, 0x0006}, + {gNamingScreenCursor_Gfx, 0x080, 0x0007}, + {gNamingScreenCursor_Gfx + 0xA0, 0x080, 0x0008}, + {gNamingScreenCursor_Gfx + 0x140, 0x080, 0x0009}, + {gNamingScreenRightPointingTriangleTiles, 0x020, 0x000A}, + {gNamingScreenUnderscoreTiles, 0x020, 0x000B}, + {NULL} +}; + +static const struct SpritePalette gUnknown_0858C230[] = +{ + {gNamingScreenMenu_Pal, 0x0000}, + {gNamingScreenMenu_Pal + 0x10, 0x0001}, + {gNamingScreenMenu_Pal + 0x20, 0x0002}, + {gNamingScreenMenu_Pal + 0x30, 0x0003}, + {gNamingScreenMenu_Pal + 0x40, 0x0004}, + {gNamingScreenMenu_Pal + 0x50, 0x0005}, + {gNamingScreenMenu_Pal + 0x40, 0x0006}, + {gNamingScreenMenu_Pal + 0x40, 0x0007}, + {NULL} +}; -- cgit v1.2.3 From cc307730a12b3f9f2b3194aa77f8d7f66946a193 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Tue, 23 Jan 2018 21:34:15 -0600 Subject: Add entry in sym_ewram.txt and organize a bit --- src/naming_screen.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/naming_screen.c b/src/naming_screen.c index 403254f9f..c8dcfc1b1 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -27,14 +27,10 @@ #include "text_window.h" #include "overworld.h" -extern EWRAM_DATA struct NamingScreenData *gNamingScreenData; +EWRAM_DATA static struct NamingScreenData *gNamingScreenData = NULL; extern u16 gKeyRepeatStartDelay; -// graphics -static const u8 gSpriteImage_858BBF8[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); -static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp"); -const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal"); -static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal"); +// extern graphics extern const u16 gNamingScreenMenu_Pal[]; extern const u8 gNamingScreenMenu_Gfx[]; extern const u8 gUnknown_08DD4544[]; @@ -48,7 +44,7 @@ extern const u8 gNamingScreenCursor_Gfx[]; extern const u8 gNamingScreenRightPointingTriangleTiles[]; extern const u8 gNamingScreenUnderscoreTiles[]; -// text +// extern text extern const u8 gExpandedPlaceholder_Empty[]; extern const u8 gText_PkmnTransferredSomeonesPC[]; extern const u8 gText_PkmnTransferredLanettesPC[]; @@ -61,6 +57,11 @@ extern const u8 gText_PkmnsNickname[]; extern const u8 gText_TellHimTheWords[]; // start of .rodata +static const u8 gSpriteImage_858BBF8[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); +static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp"); +static const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal"); +static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal"); + static const u8 *const gUnknown_0858BDB8[] = { gText_PkmnTransferredSomeonesPC, -- cgit v1.2.3 From 5784098446d4f380434a939e4c72577c8136bb81 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Tue, 23 Jan 2018 23:14:22 -0600 Subject: Organization and naming --- src/naming_screen.c | 185 +++++++++++++++++++++++++++------------------------- 1 file changed, 96 insertions(+), 89 deletions(-) (limited to 'src') diff --git a/src/naming_screen.c b/src/naming_screen.c index c8dcfc1b1..b206c9c37 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -26,6 +26,7 @@ #include "menu.h" #include "text_window.h" #include "overworld.h" +#include "constants/map_objects.h" EWRAM_DATA static struct NamingScreenData *gNamingScreenData = NULL; extern u16 gKeyRepeatStartDelay; @@ -55,6 +56,19 @@ extern const u8 gText_YourName[]; extern const u8 gText_BoxName[]; extern const u8 gText_PkmnsNickname[]; extern const u8 gText_TellHimTheWords[]; +extern const u8 gUnknown_0862B88D[]; +extern const u8 gUnknown_0862B8AE[]; +extern const u8 gUnknown_0862B8CF[]; +extern const u8 gUnknown_0862B8F0[]; +extern const u8 gUnknown_0862B911[]; +extern const u8 gUnknown_0862B932[]; +extern const u8 gUnknown_0862B953[]; +extern const u8 gUnknown_0862B974[]; +extern const u8 gUnknown_0862B995[]; +extern const u8 gUnknown_0862B9AE[]; +extern const u8 gUnknown_0862B9C7[]; +extern const u8 gUnknown_0862B9E0[]; + // start of .rodata static const u8 gSpriteImage_858BBF8[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); @@ -126,8 +140,8 @@ static const struct SpriteTemplate gUnknown_0858C0F0; static const struct SpriteTemplate gUnknown_0858C108; static const struct SpriteTemplate gUnknown_0858C120; static const struct SpriteTemplate gUnknown_0858C138; -static const struct SpriteTemplate gUnknown_0858C150; -static const struct SpriteTemplate gUnknown_0858C168; +static const struct SpriteTemplate sSpriteTemplate_InputArrow; +static const struct SpriteTemplate sSpriteTemplate_Underscore; static const struct SpriteTemplate gUnknown_0858C180; static const u8* const gUnknown_0858C198[][4]; static const struct SpriteSheet gUnknown_0858C1C8[]; @@ -135,7 +149,7 @@ static const struct SpritePalette gUnknown_0858C230[]; static void C2_NamingScreen(void); static void NamingScreen_Init(void); -static void choose_name_or_words_screen_init_bgs(void); +static void NamingScreen_InitBGs(void); static void sub_80E3194(void); static void sub_80E31B0(u8 taskId); static bool8 MainState_BeginFadeIn(void); @@ -166,12 +180,12 @@ static void sub_80E3E3C(u8); static void sub_80E3E94(u8); static u8 IsCursorAnimFinished(void); static u8 GetCurrentPageColumnCount(void); -static void sub_80E3F8C(void); +static void CreatePageSwitcherSprites(void); static void sub_80E4050(void); static void sub_80E41B8(u8, struct Sprite *, struct Sprite *); -static void sub_80E4218(void); -static void sub_80E4290(void); -static void sub_80E4354(void); +static void CreateBackOkSprites(void); +static void CreateUnderscoreSprites(void); +static void CreateInputTargetIcon(void); static u8 HandleKeyboardEvent(void); static u8 sub_80E45E0(void); static u8 GetInputEvent(void); @@ -208,9 +222,9 @@ void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGende else { gNamingScreenData->templateNum = templateNum; - gNamingScreenData->unk1E34 = monSpecies; - gNamingScreenData->unk1E36 = monGender; - gNamingScreenData->unk1E38 = monPersonality; + gNamingScreenData->monSpecies = monSpecies; + gNamingScreenData->monGender = monGender; + gNamingScreenData->monPersonality = monPersonality; gNamingScreenData->destBuffer = destBuffer; gNamingScreenData->returnCallback = returnCallback; @@ -231,7 +245,7 @@ static void C2_NamingScreen(void) gMain.state++; break; case 1: - choose_name_or_words_screen_init_bgs(); + NamingScreen_InitBGs(); gMain.state++; break; case 2: @@ -273,16 +287,16 @@ static void NamingScreen_Init(void) gNamingScreenData->state = 0; gNamingScreenData->bg1vOffset = 0; gNamingScreenData->bg2vOffset = 0; - gNamingScreenData->unk1E1C = 1; - gNamingScreenData->unk1E1E = 2; - gNamingScreenData->unk1E20 = 0; - gNamingScreenData->unk1E21 = 1; + gNamingScreenData->bg1Priority = BGCNT_PRIORITY(1); + gNamingScreenData->bg2Priority = BGCNT_PRIORITY(2); + gNamingScreenData->bgToReveal = 0; + gNamingScreenData->bgToHide = 1; gNamingScreenData->template = sNamingScreenTemplates[gNamingScreenData->templateNum]; gNamingScreenData->currentPage = gNamingScreenData->template->unk4; - gNamingScreenData->unk1E16 = (240 - gNamingScreenData->template->maxChars * 8) / 2 + 6; + gNamingScreenData->inputCharBaseXPos = (240 - gNamingScreenData->template->maxChars * 8) / 2 + 6; if (gNamingScreenData->templateNum == 4) - gNamingScreenData->unk1E16 += 11; - gNamingScreenData->unk1E25 = gKeyRepeatStartDelay; + gNamingScreenData->inputCharBaseXPos += 11; + gNamingScreenData->keyRepeatStartDelayCopy = gKeyRepeatStartDelay; memset(gNamingScreenData->textBuffer, 0xFF, sizeof(gNamingScreenData->textBuffer)); if (gNamingScreenData->template->unk0 != 0) StringCopy(gNamingScreenData->textBuffer, gNamingScreenData->destBuffer); @@ -300,7 +314,7 @@ static void sub_80E2FA4(void) sub_80E3E3C(0); } -static void choose_name_or_words_screen_init_bgs(void) +static void NamingScreen_InitBGs(void) { u8 i; @@ -636,14 +650,14 @@ static bool8 PageSwapAnimState_1(struct Task *task) }; task->tFrameCount += 4; - *arr[gNamingScreenData->unk1E20] = Sin(task->tFrameCount, 40); - *arr[gNamingScreenData->unk1E21] = Sin((task->tFrameCount + 128) & 0xFF, 40); + *arr[gNamingScreenData->bgToReveal] = Sin(task->tFrameCount, 40); + *arr[gNamingScreenData->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); if (task->tFrameCount >= 64) { - u8 temp = gNamingScreenData->unk1E1C; //Why u8 and not u16? + u8 temp = gNamingScreenData->bg1Priority; //Why u8 and not u16? - gNamingScreenData->unk1E1C = gNamingScreenData->unk1E1E; - gNamingScreenData->unk1E1E = temp; + gNamingScreenData->bg1Priority = gNamingScreenData->bg2Priority; + gNamingScreenData->bg2Priority = temp; task->tState++; } return 0; @@ -651,17 +665,21 @@ static bool8 PageSwapAnimState_1(struct Task *task) static bool8 PageSwapAnimState_2(struct Task *task) { - u16 *const arr[] = {&gNamingScreenData->bg2vOffset, &gNamingScreenData->bg1vOffset}; + u16 *const arr[] = + { + &gNamingScreenData->bg2vOffset, + &gNamingScreenData->bg1vOffset + }; task->tFrameCount += 4; - *arr[gNamingScreenData->unk1E20] = Sin(task->tFrameCount, 40); - *arr[gNamingScreenData->unk1E21] = Sin((task->tFrameCount + 128) & 0xFF, 40); + *arr[gNamingScreenData->bgToReveal] = Sin(task->tFrameCount, 40); + *arr[gNamingScreenData->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); if (task->tFrameCount >= 128) { - u8 temp = gNamingScreenData->unk1E20; + u8 temp = gNamingScreenData->bgToReveal; - gNamingScreenData->unk1E20 = gNamingScreenData->unk1E21; - gNamingScreenData->unk1E21 = temp; + gNamingScreenData->bgToReveal = gNamingScreenData->bgToHide; + gNamingScreenData->bgToHide = temp; task->tState++; } return 0; @@ -856,10 +874,10 @@ static void sub_80E3C6C(struct Sprite *sprite) static void sub_80E3CC8(void) { CursorInit(); - sub_80E3F8C(); - sub_80E4218(); - sub_80E4290(); - sub_80E4354(); + CreatePageSwitcherSprites(); + CreateBackOkSprites(); + CreateUnderscoreSprites(); + CreateInputTargetIcon(); } static void CursorInit(void) @@ -952,14 +970,14 @@ static u8 GetCurrentPageColumnCount(void) return gUnknown_0858BEA0[sub_80E3274()]; } -static void sub_80E3F8C(void) +static void CreatePageSwitcherSprites(void) { u8 spriteId1; u8 spriteId2; u8 spriteId3; spriteId1 = CreateSprite(&gUnknown_0858C0C0, 0xCC, 0x58, 0); - gNamingScreenData->unk1E24 = spriteId1; + gNamingScreenData->selectBtnFrameSpriteId = spriteId1; SetSubspriteTables(&gSprites[spriteId1], gUnknown_0858C050); gSprites[spriteId1].invisible = TRUE; @@ -976,7 +994,7 @@ static void sub_80E3F8C(void) static void sub_80E4050(void) { - struct Sprite *sprite = &gSprites[gNamingScreenData->unk1E24]; + struct Sprite *sprite = &gSprites[gNamingScreenData->selectBtnFrameSpriteId]; sprite->data[0] = 2; sprite->data[1] = gNamingScreenData->currentPage; @@ -1057,7 +1075,7 @@ static void sub_80E41B8(u8 a, struct Sprite *b, struct Sprite *c) // -static void sub_80E4218(void) +static void CreateBackOkSprites(void) { u8 spriteId; @@ -1070,46 +1088,48 @@ static void sub_80E4218(void) gSprites[spriteId].invisible = TRUE; } -static void sub_80E4290(void) +static void CreateUnderscoreSprites(void) { u8 spriteId; - s16 r1; + s16 xPos; u8 i; - r1 = gNamingScreenData->unk1E16 - 5; - spriteId = CreateSprite(&gUnknown_0858C150, r1, 0x38, 0); + xPos = gNamingScreenData->inputCharBaseXPos - 5; + spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 0x38, 0); gSprites[spriteId].oam.priority = 3; gSprites[spriteId].invisible = TRUE; - r1 = gNamingScreenData->unk1E16; - for (i = 0; i < gNamingScreenData->template->maxChars; i++, r1 += 8) + xPos = gNamingScreenData->inputCharBaseXPos; + for (i = 0; i < gNamingScreenData->template->maxChars; i++, xPos += 8) { - spriteId = CreateSprite(&gUnknown_0858C168, r1 + 3, 0x3C, 0); + spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 0x3C, 0); gSprites[spriteId].oam.priority = 3; gSprites[spriteId].data[0] = i; gSprites[spriteId].invisible = TRUE; } } -// +//-------------------------------------------------- +// Icon creation (the thing you're naming or giving input to) +//-------------------------------------------------- static void TaskDummy2(void); -static void sub_80E4384(void); -static void sub_80E43E0(void); -static void sub_80E4420(void); -static void sub_80E447C(void); +static void NamingScreen_CreatePlayerIcon(void); +static void NamingScreen_CreatePCIcon(void); +static void NamingScreen_CreateMonIcon(void); +static void NamingScreen_CreateWandaDadIcon(void); -static void (*const gUnknown_0858BF04[])(void) = +static void (*const sIconFunctions[])(void) = { TaskDummy2, - sub_80E4384, - sub_80E43E0, - sub_80E4420, - sub_80E447C, + NamingScreen_CreatePlayerIcon, + NamingScreen_CreatePCIcon, + NamingScreen_CreateMonIcon, + NamingScreen_CreateWandaDadIcon, }; -static void sub_80E4354(void) +static void CreateInputTargetIcon(void) { - gUnknown_0858BF04[gNamingScreenData->template->unk2](); + sIconFunctions[gNamingScreenData->template->iconFunction](); } static void TaskDummy2(void) @@ -1117,18 +1137,18 @@ static void TaskDummy2(void) } -static void sub_80E4384(void) +static void NamingScreen_CreatePlayerIcon(void) { u8 rivalGfxId; u8 spriteId; - rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gNamingScreenData->unk1E34); + rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gNamingScreenData->monSpecies); spriteId = AddPseudoFieldObject(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0); gSprites[spriteId].oam.priority = 3; StartSpriteAnim(&gSprites[spriteId], 4); } -static void sub_80E43E0(void) +static void NamingScreen_CreatePCIcon(void) { u8 spriteId; @@ -1137,20 +1157,20 @@ static void sub_80E43E0(void) gSprites[spriteId].oam.priority = 3; } -static void sub_80E4420(void) +static void NamingScreen_CreateMonIcon(void) { u8 spriteId; sub_80D2F04(); - spriteId = CreateMonIcon(gNamingScreenData->unk1E34, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->unk1E38, 1); + spriteId = CreateMonIcon(gNamingScreenData->monSpecies, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->monPersonality, 1); gSprites[spriteId].oam.priority = 3; } -static void sub_80E447C(void) +static void NamingScreen_CreateWandaDadIcon(void) { u8 spriteId; - spriteId = AddPseudoFieldObject(0x13, SpriteCallbackDummy, 0x38, 0x25, 0); + spriteId = AddPseudoFieldObject(MAP_OBJ_GFX_MAN_1, SpriteCallbackDummy, 0x38, 0x25, 0); gSprites[spriteId].oam.priority = 3; StartSpriteAnim(&gSprites[spriteId], 4); } @@ -1436,7 +1456,7 @@ static void sub_80E48E8(void) { u8 buffer[0x20]; - StringCopy(buffer, gSpeciesNames[gNamingScreenData->unk1E34]); + StringCopy(buffer, gSpeciesNames[gNamingScreenData->monSpecies]); StringAppendN(buffer, gNamingScreenData->template->title, 15); FillWindowPixelBuffer(gNamingScreenData->windows[3], 0x11); PrintTextOnWindow(gNamingScreenData->windows[3], 1, buffer, 8, 1, 0, 0); @@ -1489,9 +1509,9 @@ static void sub_80E49BC(void) StringCopy(genderSymbol, gText_MaleSymbol); - if (gNamingScreenData->unk1E36 != MON_GENDERLESS) + if (gNamingScreenData->monGender != MON_GENDERLESS) { - if (gNamingScreenData->unk1E36 == MON_FEMALE) + if (gNamingScreenData->monGender == MON_FEMALE) { StringCopy(genderSymbol, gText_FemaleSymbol); isFemale = TRUE; @@ -1623,7 +1643,7 @@ static void sub_80E4D10(void) u8 temp[2]; u16 unk2; u8 maxChars = gNamingScreenData->template->maxChars; - u16 unk = gNamingScreenData->unk1E16 - 0x40; + u16 unk = gNamingScreenData->inputCharBaseXPos - 0x40; FillWindowPixelBuffer(gNamingScreenData->windows[2], 0x11); @@ -1753,9 +1773,9 @@ static void VBlankCB_NamingScreen(void) SetGpuReg(REG_OFFSET_BG1VOFS, gNamingScreenData->bg1vOffset); SetGpuReg(REG_OFFSET_BG2VOFS, gNamingScreenData->bg2vOffset); SetGpuReg(REG_OFFSET_BG1CNT, GetGpuReg(REG_OFFSET_BG1CNT) & 0xFFFC); - SetGpuRegBits(REG_OFFSET_BG1CNT, gNamingScreenData->unk1E1C); + SetGpuRegBits(REG_OFFSET_BG1CNT, gNamingScreenData->bg1Priority); SetGpuReg(REG_OFFSET_BG2CNT, GetGpuReg(REG_OFFSET_BG2CNT) & 0xFFFC); - SetGpuRegBits(REG_OFFSET_BG2CNT, gNamingScreenData->unk1E1E); + SetGpuRegBits(REG_OFFSET_BG2CNT, gNamingScreenData->bg2Priority); } static void sub_80E501C(void) @@ -1806,7 +1826,7 @@ static const struct NamingScreenTemplate playerNamingScreenTemplate = { .unk0 = 0, .maxChars = 7, - .unk2 = 1, + .iconFunction = 1, .unk3 = 0, .unk4 = 1, .unk5 = 35, @@ -1819,7 +1839,7 @@ static const struct NamingScreenTemplate pcBoxNamingTemplate = { .unk0 = 0, .maxChars = 8, - .unk2 = 2, + .iconFunction = 2, .unk3 = 0, .unk4 = 1, .unk5 = 19, @@ -1832,7 +1852,7 @@ static const struct NamingScreenTemplate monNamingScreenTemplate = { .unk0 = 0, .maxChars = 10, - .unk2 = 3, + .iconFunction = 3, .unk3 = 1, .unk4 = 1, .unk5 = 35, @@ -1845,7 +1865,7 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate = { .unk0 = 1, .maxChars = 15, - .unk2 = 4, + .iconFunction = 4, .unk3 = 0, .unk4 = 1, .unk5 = 11, @@ -2079,7 +2099,7 @@ static const struct SpriteTemplate gUnknown_0858C138 = .callback = sub_80E3B30 }; -static const struct SpriteTemplate gUnknown_0858C150 = +static const struct SpriteTemplate sSpriteTemplate_InputArrow = { .tileTag = 0x000A, .paletteTag = 0x0003, @@ -2090,7 +2110,7 @@ static const struct SpriteTemplate gUnknown_0858C150 = .callback = sub_80E3C20 }; -static const struct SpriteTemplate gUnknown_0858C168 = +static const struct SpriteTemplate sSpriteTemplate_Underscore = { .tileTag = 0x000B, .paletteTag = 0x0003, @@ -2112,19 +2132,6 @@ static const struct SpriteTemplate gUnknown_0858C180 = .callback = SpriteCallbackDummy }; -extern const u8 gUnknown_0862B88D[]; -extern const u8 gUnknown_0862B8AE[]; -extern const u8 gUnknown_0862B8CF[]; -extern const u8 gUnknown_0862B8F0[]; -extern const u8 gUnknown_0862B911[]; -extern const u8 gUnknown_0862B932[]; -extern const u8 gUnknown_0862B953[]; -extern const u8 gUnknown_0862B974[]; -extern const u8 gUnknown_0862B995[]; -extern const u8 gUnknown_0862B9AE[]; -extern const u8 gUnknown_0862B9C7[]; -extern const u8 gUnknown_0862B9E0[]; - static const u8* const gUnknown_0858C198[][4] = { { -- cgit v1.2.3 From b8b0431477b841162b48b30afb46bb31c11960a0 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Tue, 23 Jan 2018 23:32:16 -0600 Subject: Identification --- src/naming_screen.c | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/naming_screen.c b/src/naming_screen.c index b206c9c37..889956560 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -292,13 +292,13 @@ static void NamingScreen_Init(void) gNamingScreenData->bgToReveal = 0; gNamingScreenData->bgToHide = 1; gNamingScreenData->template = sNamingScreenTemplates[gNamingScreenData->templateNum]; - gNamingScreenData->currentPage = gNamingScreenData->template->unk4; + gNamingScreenData->currentPage = gNamingScreenData->template->initialPage; gNamingScreenData->inputCharBaseXPos = (240 - gNamingScreenData->template->maxChars * 8) / 2 + 6; if (gNamingScreenData->templateNum == 4) gNamingScreenData->inputCharBaseXPos += 11; gNamingScreenData->keyRepeatStartDelayCopy = gKeyRepeatStartDelay; memset(gNamingScreenData->textBuffer, 0xFF, sizeof(gNamingScreenData->textBuffer)); - if (gNamingScreenData->template->unk0 != 0) + if (gNamingScreenData->template->copyExistingString != 0) StringCopy(gNamingScreenData->textBuffer, gNamingScreenData->destBuffer); gKeyRepeatStartDelay = 16; } @@ -1488,7 +1488,7 @@ static void (*const gUnknown_0858BF6C[])(void) = static void sub_80E498C(void) { - gUnknown_0858BF6C[gNamingScreenData->template->unk3](); + gUnknown_0858BF6C[gNamingScreenData->template->addGenderIcon](); } static void TaskDummy3(void) @@ -1824,53 +1824,45 @@ static void sub_80E50EC(void) static const struct NamingScreenTemplate playerNamingScreenTemplate = { - .unk0 = 0, + .copyExistingString = 0, .maxChars = 7, .iconFunction = 1, - .unk3 = 0, - .unk4 = 1, - .unk5 = 35, - .unk6 = 0, - .unk7 = 0, + .addGenderIcon = 0, + .initialPage = 1, + .unused = 35, .title = gText_YourName, }; static const struct NamingScreenTemplate pcBoxNamingTemplate = { - .unk0 = 0, + .copyExistingString = 0, .maxChars = 8, .iconFunction = 2, - .unk3 = 0, - .unk4 = 1, - .unk5 = 19, - .unk6 = 0, - .unk7 = 0, + .addGenderIcon = 0, + .initialPage = 1, + .unused = 19, .title = gText_BoxName, }; static const struct NamingScreenTemplate monNamingScreenTemplate = { - .unk0 = 0, + .copyExistingString = 0, .maxChars = 10, .iconFunction = 3, - .unk3 = 1, - .unk4 = 1, - .unk5 = 35, - .unk6 = 0, - .unk7 = 0, + .addGenderIcon = 1, + .initialPage = 1, + .unused = 35, .title = gText_PkmnsNickname, }; static const struct NamingScreenTemplate wandaWordsScreenTemplate = { - .unk0 = 1, + .copyExistingString = 1, .maxChars = 15, .iconFunction = 4, - .unk3 = 0, - .unk4 = 1, - .unk5 = 11, - .unk6 = 0, - .unk7 = 0, + .addGenderIcon = 0, + .initialPage = 1, + .unused = 11, .title = gText_TellHimTheWords, }; -- cgit v1.2.3 From 0c47cd6fc3723bffce2d36c41ab601eab8831626 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Wed, 24 Jan 2018 00:18:10 -0600 Subject: Renamed link_strings and fixed warning in fldeff_cut.s --- src/naming_screen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/naming_screen.c b/src/naming_screen.c index 889956560..54b6f0bb9 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1738,10 +1738,10 @@ static void sub_80E4E5C(void) static void sub_80E4EF0(void) { - const u8 arr[] = { 15, 1, 2 }; + const struct TextColor color[] = { 15, 1, 2 }; FillWindowPixelBuffer(gNamingScreenData->windows[4], 0xFF); - box_print(gNamingScreenData->windows[4], 0, 2, 1, arr, 0, gText_MoveOkBack); + box_print(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack); PutWindowTilemap(gNamingScreenData->windows[4]); CopyWindowToVram(gNamingScreenData->windows[4], 3); } -- cgit v1.2.3 From 10037ac0e1c1737dc7cb309257369b17ccd5e028 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Wed, 24 Jan 2018 01:03:20 -0600 Subject: Fix spelling of 'Parametrized' to 'Parameterized' --- src/battle_interface.c | 2 +- src/berry_blender.c | 2 +- src/decoration.c | 2 +- src/diploma.c | 4 ++-- src/egg_hatch.c | 2 +- src/hall_of_fame.c | 8 ++++---- src/naming_screen.c | 2 +- src/pokeblock.c | 2 +- src/pokeblock_feed.c | 2 +- src/pokemon_summary_screen.c | 4 ++-- src/save_failed_screen.c | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/battle_interface.c b/src/battle_interface.c index 6a6bf00a2..2338682e2 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2575,7 +2575,7 @@ static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, color.bgColor = 1; color.shadowColor = 3; - AddTextPrinterParametrized2(winId, 0, x, y, 0, 0, &color, -1, str); + AddTextPrinterParameterized2(winId, 0, x, y, 0, 0, &color, -1, str); *windowId = winId; return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); diff --git a/src/berry_blender.c b/src/berry_blender.c index 51580b50b..c7f465967 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -3602,7 +3602,7 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3 FillWindowPixelBuffer(windowId, txtColor.fgColor | (txtColor.fgColor << 4)); } - AddTextPrinterParametrized2(windowId, 1, x, y, letterSpacing, 1, &txtColor, speed, string); + AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, 1, &txtColor, speed, string); } static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed) diff --git a/src/decoration.c b/src/decoration.c index c539091c8..a9777c86f 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -500,7 +500,7 @@ void sub_8126B80(u8 taskId) void sub_8126C08(void) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParametrized(0, 1, sSecretBasePCMenuItemDescriptions[sSecretBasePCMenuCursorPos], 0, 0, 2, 1, 3); + AddTextPrinterParameterized(0, 1, sSecretBasePCMenuItemDescriptions[sSecretBasePCMenuCursorPos], 0, 0, 2, 1, 3); } void SecretBasePC_Decorate(u8 taskId) diff --git a/src/diploma.c b/src/diploma.c index fedc10bd0..24e5e9727 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -17,7 +17,7 @@ extern int decompress_and_copy_tile_data_to_vram(u8 bg_id, void *src, int size, extern bool8 free_temp_tile_data_buffers_if_possible(void); extern void sub_80861E8(void); // rom4 extern bool16 sub_80C0944(void); -extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, u8 *str); +extern void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, u8 *str); extern u16 gUnknown_0860F074[]; @@ -215,5 +215,5 @@ static void PrintDiplomaText(u8 *text, u8 var1, u8 var2) .shadowColor = 3, }; - AddTextPrinterParametrized2(0, 1, var1, var2, 0, 0, &color, -1, text); + AddTextPrinterParameterized2(0, 1, var1, var2, 0, 0, &color, -1, text); } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 37f2b2e19..435886638 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -866,7 +866,7 @@ static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed) sEggHatchData->textColor.fgColor = 0; sEggHatchData->textColor.bgColor = 5; sEggHatchData->textColor.shadowColor = 6; - AddTextPrinterParametrized2(windowId, 1, x, y, 0, 0, &sEggHatchData->textColor, speed, string); + AddTextPrinterParameterized2(windowId, 1, x, y, 0, 0, &sEggHatchData->textColor, speed, string); } u8 GetEggStepsToSubtract(void) diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 3e70e22fa..5390814eb 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -82,7 +82,7 @@ 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 u16 AddTextPrinterParameterized(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); @@ -540,7 +540,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) *lastSavedTeam = *sHofMonPtr; sub_81973C4(0, 0); - AddTextPrinterParametrized(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); gTasks[taskId].func = Task_Hof_TrySaveData; } @@ -747,7 +747,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); HallOfFame_PrintPlayerInfo(1, 2); sub_81973C4(0, 0); - AddTextPrinterParametrized(0, 1, gText_LeagueChamp, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized(0, 1, gText_LeagueChamp, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; } @@ -1116,7 +1116,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) { sub_8198180(gText_UnkCtrlF800Exit, 8, 1); sub_81973C4(0, 0); - AddTextPrinterParametrized(0, 1, gText_HOFCorrupted, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized(0, 1, gText_HOFCorrupted, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; } diff --git a/src/naming_screen.c b/src/naming_screen.c index 54b6f0bb9..7139b5c90 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -532,7 +532,7 @@ static void DisplaySentToPCMessage(void) StringExpandPlaceholders(gStringVar4, gUnknown_0858BDB8[stringToDisplay]); sub_81973C4(0, 0); gTextFlags.flag_0 = TRUE; - AddTextPrinterParametrized(0, 1, gStringVar4, GetPlayerTextSpeed(), 0, 2, 1, 3); + AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), 0, 2, 1, 3); CopyWindowToVram(0, 3); } diff --git a/src/pokeblock.c b/src/pokeblock.c index 573eed52b..1a4ce3155 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -583,7 +583,7 @@ static void HandleInitWindows(void) static void PrintOnPokeblockWindow(u8 windowId, const u8 *string, s32 x) { - AddTextPrinterParametrized2(windowId, 1, x, 1, 0, 0, &sTextColorInPokeblockMenu, 0, string); + AddTextPrinterParameterized2(windowId, 1, x, 1, 0, 0, &sTextColorInPokeblockMenu, 0, string); } static void PutPokeblockInfoText(void) diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index b26da118c..d899e54f1 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -792,7 +792,7 @@ static void Task_HandleMonAtePokeblock(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2); gTextFlags.flag_0 = 1; - AddTextPrinterParametrized(0, 1, gStringVar4, GetPlayerTextSpeed(), NULL, 2, 1, 3); + AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), NULL, 2, 1, 3); gTasks[taskId].func = Task_WaitForAtePokeblockText; } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a900badd1..4affd830d 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -162,7 +162,7 @@ extern struct BattleMove gBattleMoves[]; extern u32 ChangeBgX(u8 bg, u32 value, u8 op); extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f); -extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor* colors, s8 speed, u8 *str); +extern void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor* colors, s8 speed, u8 *str); extern s32 GetStringCenterAlignXOffset(u8 fontId, u8 *str, s32 totalWidth); extern s32 GetStringRightAlignXOffset(u8 fontId, u8 *str, s32 totalWidth); extern bool8 sub_81A6BF4(); @@ -2557,7 +2557,7 @@ void sub_81C2554() void sub_81C25A4(u8 a, u8 *b, u8 c, u8 d, u8 e, u8 f) { - AddTextPrinterParametrized2(a, 1, c, d, 0, e, &gUnknown_0861CD2C[f], 0, b); + AddTextPrinterParameterized2(a, 1, c, d, 0, e, &gUnknown_0861CD2C[f], 0, b); } void sub_81C25E8() diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 8764daa5f..95897e721 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -173,7 +173,7 @@ static void SaveFailedScreenTextPrint(u8 *text, u8 var1, u8 var2) color.fgColor = 0; color.bgColor = 15; color.shadowColor = 3; - AddTextPrinterParametrized2(gSaveFailedWindowIds[TEXT_WIN_ID], 1, var1 * 8, var2 * 8 + 1, 0, 0, &color, 0, text); + AddTextPrinterParameterized2(gSaveFailedWindowIds[TEXT_WIN_ID], 1, var1 * 8, var2 * 8 + 1, 0, 0, &color, 0, text); } void DoSaveFailedScreen(u8 saveType) -- 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 2a16b7cb81419aed581a86a831d1e2413ad57b39 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Sun, 28 Jan 2018 00:22:06 -0500 Subject: decompile field_message_box --- src/field_message_box.c | 162 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100755 src/field_message_box.c (limited to 'src') diff --git a/src/field_message_box.c b/src/field_message_box.c new file mode 100755 index 000000000..fc51bc588 --- /dev/null +++ b/src/field_message_box.c @@ -0,0 +1,162 @@ +#include "global.h" +#include "string.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +extern void sub_81973A4(void); +extern void sub_81973C4(u8, u8); +extern u16 sub_8197224(void); +extern int sub_8196094(void); +extern void sub_8196080(u8*); +extern void AddTextPrinterForMessage(u8); +extern void sub_8197434(u8, u8); +extern void sub_81973FC(u8, u8); + +extern u8 gUnknown_020375BC; + +void textbox_fdecode_auto_and_task_add(u8*, int); +void textbox_auto_and_task_add(void); + +void sub_8098128(void) +{ + gUnknown_020375BC = 0; + gTextFlags.flag_0 = 0; + gTextFlags.flag_1 = 0; + gTextFlags.flag_2 = 0; + gTextFlags.flag_3 = 0; +} + +void sub_8098154(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sub_81973A4(); + task->data[0]++; + break; + case 1: + sub_81973C4(0, 1); + task->data[0]++; + break; + case 2: + if (sub_8197224() != 1) + { + gUnknown_020375BC = 0; + DestroyTask(taskId); + } + } +} + +void task_add_textbox(void) +{ + CreateTask(sub_8098154, 0x50); +} + +void task_del_textbox(void) +{ + u8 taskId = FindTaskIdByFunc(sub_8098154); + if (taskId != 0xFF) + DestroyTask(taskId); +} + +bool8 ShowFieldMessage(u8 *str) +{ + if (gUnknown_020375BC != 0) + return FALSE; + textbox_fdecode_auto_and_task_add(str, 1); + gUnknown_020375BC = 2; + return TRUE; +} + +void sub_8098214(u8 taskId) +{ + if (sub_8196094() == 0) + { + gUnknown_020375BC = 0; + DestroyTask(taskId); + } +} + +bool8 sub_8098238(u8 *str) +{ + if (gUnknown_020375BC != 0) + return FALSE; + StringExpandPlaceholders(gStringVar4, str); + CreateTask(sub_8098214, 0); + sub_8196080(str); + gUnknown_020375BC = 2; + return TRUE; +} + +bool8 ShowFieldAutoScrollMessage(u8 *str) +{ + if (gUnknown_020375BC != 0) + return FALSE; + gUnknown_020375BC = 3; + textbox_fdecode_auto_and_task_add(str, 0); + return TRUE; +} + +bool8 sub_80982A0(u8 *str) +{ + gUnknown_020375BC = 3; + textbox_fdecode_auto_and_task_add(str, 1); + return TRUE; +} + +bool8 sub_80982B8(void) +{ + if (gUnknown_020375BC != 0) + return FALSE; + gUnknown_020375BC = 2; + textbox_auto_and_task_add(); + return TRUE; +} + +void textbox_fdecode_auto_and_task_add(u8* str, int a) +{ + StringExpandPlaceholders(gStringVar4, str); + AddTextPrinterForMessage(a); + task_add_textbox(); +} + +void textbox_auto_and_task_add(void) +{ + AddTextPrinterForMessage(1); + task_add_textbox(); +} + +void HideFieldMessageBox(void) +{ + task_del_textbox(); + sub_8197434(0, 1); + gUnknown_020375BC = 0; +} + +u8 textbox_any_visible(void) +{ + return gUnknown_020375BC; +} + +bool8 IsFieldMessageBoxHidden(void) +{ + if (gUnknown_020375BC == 0) + return TRUE; + return FALSE; +} + +void sub_8098358(void) +{ + task_del_textbox(); + sub_81973FC(0, 1); + gUnknown_020375BC = 0; +} + +void sub_8098374(void) +{ + task_del_textbox(); + gUnknown_020375BC = 0; +} -- cgit v1.2.3 From 3eaaa59c047f529c81bcfe2cd0f5d0c8fdcc6bff Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 29 Jan 2018 04:13:15 -0500 Subject: start decompiling field_map_obj_helpers --- src/field_map_obj_helpers.c | 371 ++++++++++++++++++++++++++++++++++++++++++++ src/trainer_see.c | 2 +- 2 files changed, 372 insertions(+), 1 deletion(-) create mode 100755 src/field_map_obj_helpers.c (limited to 'src') diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c new file mode 100755 index 000000000..1247a7cd7 --- /dev/null +++ b/src/field_map_obj_helpers.c @@ -0,0 +1,371 @@ +#include "global.h" +#include "field_ground_effect.h" +#include "field_map_obj.h" + +typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); + +extern const s8 gUnknown_0850E7BA[]; +extern const s8 gUnknown_0850E772[]; + +extern s16 gUnknown_0850E768[]; +extern SpriteStepFunc *const gUnknown_0850E754[]; +extern const struct Coords16 gUnknown_0850DB7C[4]; + +bool8 FreezeMapObject(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6 || mapObject->mapobj_bit_8) + { + return TRUE; + } + else + { + mapObject->mapobj_bit_8 = 1; + mapObject->mapobj_bit_23 = gSprites[mapObject->spriteId].animPaused; + mapObject->mapobj_bit_24 = gSprites[mapObject->spriteId].affineAnimPaused; + gSprites[mapObject->spriteId].animPaused = 1; + gSprites[mapObject->spriteId].affineAnimPaused = 1; + return FALSE; + } +} + +void FreezeMapObjects(void) +{ + u8 i; + for (i = 0; i < 16; i++) + if (gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); +} + +void FreezeMapObjectsExceptOne(u8 a1) +{ + u8 i; + for (i = 0; i < 16; i++) + if (i != a1 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); +} + +void npc_sync_anim_pause_bits(struct MapObject *mapObject) +{ + if (mapObject->active && mapObject->mapobj_bit_8) + { + mapObject->mapobj_bit_8 = 0; + gSprites[mapObject->spriteId].animPaused = mapObject->mapobj_bit_23; + gSprites[mapObject->spriteId].affineAnimPaused = mapObject->mapobj_bit_24; + } +} + +void UnfreezeMapObjects(void) +{ + u8 i; + for (i = 0; i < 16; i++) + if (gMapObjects[i].active) + npc_sync_anim_pause_bits(&gMapObjects[i]); +} + +void little_step(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += gUnknown_0850DB7C[dir].x; + sprite->pos1.y += gUnknown_0850DB7C[dir].y; +} + +void double_little_steps(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 2 * (u16) gUnknown_0850DB7C[dir].x; + sprite->pos1.y += 2 * (u16) gUnknown_0850DB7C[dir].y; +} + +void triple_little_steps(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 2 * (u16) gUnknown_0850DB7C[dir].x + (u16) gUnknown_0850DB7C[dir].x; + sprite->pos1.y += 2 * (u16) gUnknown_0850DB7C[dir].y + (u16) gUnknown_0850DB7C[dir].y; +} + +void quad_little_steps(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 4 * (u16) gUnknown_0850DB7C[dir].x; + sprite->pos1.y += 4 * (u16) gUnknown_0850DB7C[dir].y; +} + +void oct_little_steps(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 8 * (u16) gUnknown_0850DB7C[dir].x; + sprite->pos1.y += 8 * (u16) gUnknown_0850DB7C[dir].y; +} + +void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) +{ + sprite->data[3] = a2; + sprite->data[4] = a3; + sprite->data[5] = 0; +} + +bool8 obj_npc_ministep(struct Sprite *sprite) +{ + if (sprite->data[5] >= gUnknown_0850E768[sprite->data[4]]) + return FALSE; + + gUnknown_0850E754[sprite->data[4]][sprite->data[5]](sprite, sprite->data[3]); + + sprite->data[5]++; + + if (sprite->data[5] < gUnknown_0850E768[sprite->data[4]]) + return FALSE; + + return TRUE; +} + +void sub_80976DC(struct Sprite *sprite, u8 a2) +{ + sprite->data[3] = a2; + sprite->data[4] = 0; + sprite->data[5] = 0; +} + +bool8 sub_80976EC(struct Sprite *sprite) +{ + if (!(sprite->data[4] & 1)) + { + little_step(sprite, sprite->data[3]); + sprite->data[5]++; + } + + sprite->data[4]++; + + if (sprite->data[5] > 15) + return TRUE; + else + return FALSE; +} + +// new helper added here in the middle. Perhaps Game Freak kept these organized in alphebetical order or some other heirarchy? + +s16 sub_8097728(s16 a1) +{ + return gUnknown_0850E7BA[a1]; +} + +s16 sub_809773C(s16 a1) +{ + return gUnknown_0850E772[a1]; +} + +void sub_8097750(struct Sprite *sprite) +{ + sprite->data[6] = 0; + sprite->data[7] = 0; +} + +bool8 sub_8097758(struct Sprite *sprite) +{ + bool8 result = FALSE; + + switch(sprite->data[7]) + { + case 0: + sprite->pos2.x += sub_809773C(sprite->data[6]); + sprite->pos2.y += sub_8097728(sprite->data[6]); + break; + case 1: + sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]); + sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]); + break; + case 2: + sprite->pos2.x -= sub_809773C(sprite->data[6]); + sprite->pos2.y += sub_8097728(sprite->data[6]); + break; + case 3: + sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]); + sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]); + break; + } + if(++sprite->data[6] == 0x48) + { + sprite->data[6] = 0; + sprite->data[7]++; + } + if(sprite->data[7] == 0x4) + { + sprite->pos2.y = 0; + sprite->pos2.x = 0; + result = TRUE; + } + return result; +} + +extern const s8 *const gUnknown_0850E834[]; +extern s16 gUnknown_0850E840[]; +extern u8 gUnknown_0850E846[]; + +s16 sub_8097820(s16 a1, u8 a2) +{ + return gUnknown_0850E834[a2][a1]; +} + +void sub_809783C(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) +{ + sprite->data[3] = a2; + sprite->data[4] = a3; + sprite->data[5] = a4; + sprite->data[6] = 0; +} + +u8 sub_809785C(struct Sprite *sprite) +{ + s16 v5[3]; + u8 v6[3]; + u8 v2; + + memcpy(v5, gUnknown_0850E840, 6); // TODO: get rid of memcpy + memcpy(v6, gUnknown_0850E846, 3); + v2 = 0; + + if (sprite->data[4]) + little_step(sprite, sprite->data[3]); + + sprite->pos2.y = sub_8097820(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); + + sprite->data[6]++; + + if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) + v2 = 1; + + if (sprite->data[6] >= v5[sprite->data[4]]) + { + sprite->pos2.y = 0; + v2 = -1; + } + + return v2; +} + +extern s16 gUnknown_0850E84A[]; +extern u8 gUnknown_0850E850[]; + +u8 sub_80978E4(struct Sprite *sprite) +{ + s16 v5[3]; + u8 v6[3]; + u8 v2; + + memcpy(v5, gUnknown_0850E84A, 6); + memcpy(v6, gUnknown_0850E850, 3); + v2 = 0; + + if (sprite->data[4] && !(sprite->data[6] & 1)) + little_step(sprite, sprite->data[3]); + + sprite->pos2.y = sub_8097820(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); + + sprite->data[6]++; + + if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) + v2 = 1; + + if (sprite->data[6] >= v5[sprite->data[4]]) + { + sprite->pos2.y = 0; + v2 = -1; + } + + return v2; +} + +void SetFieldObjectStepTimer(struct Sprite *sprite, u16 timer) +{ + sprite->data[3] = timer; +} + + +bool8 RunFieldObjectStepTimer(struct Sprite *sprite) +{ + sprite->data[3]--; + + if (sprite->data[3] == 0) + return TRUE; + else + return FALSE; +} + +void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3) +{ + sprite->animNum = a2; + sprite->animPaused = 0 ; + SeekSpriteAnim(sprite, a3); +} + +bool8 sub_80979BC(struct Sprite *sprite) +{ + if (sprite->animEnded) + return TRUE; + else + return FALSE; +} + +void sub_80979D4(struct Sprite *sprite, bool8 invisible) +{ + u16 x, y; + s16 x2, y2; + + sprite->invisible = invisible; + + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } + else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + + x2 = x - (sprite->centerToCornerVecX >> 1); + y2 = y - (sprite->centerToCornerVecY >> 1); + + if ((s16)x > 255 || x2 < -16) + sprite->invisible = 1; + if ((s16)y > 175 || y2 < -16) + sprite->invisible = 1; +} + +extern void sub_8097D68(struct Sprite *sprite); + +void sub_8097AC8(struct Sprite *sprite) +{ + sub_8097D68(sprite); + SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); + sub_80979D4(sprite, sprite->data[2]); +} + +void sub_8097AF0(void) +{ + int i; + + for(i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if(sprite->inUse && sprite->callback == sub_8097AC8) + DestroySprite(sprite); + } +} + +int sub_8097B2C(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end. +{ + int i; + + for(i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if(sprite->inUse && sprite->callback == sub_8097AC8 && (u8)sprite->data[0] == var) + return i; + } + return MAX_SPRITES; +} + +void sub_8097B78(u8 var1, u8 var2) +{ + u8 spriteId = sub_8097B2C(var1); + + if(spriteId != MAX_SPRITES) + StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(var2)); +} diff --git a/src/trainer_see.c b/src/trainer_see.c index 53bc5cbbb..38773ec50 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -639,7 +639,7 @@ void sub_80B45D0(void) gApproachingTrainerId++; gSpecialVar_Result = 1; UnfreezeMapObjects(); - sub_80974D0(gApproachingTrainers[1].mapObjectId); + FreezeMapObjectsExceptOne(gApproachingTrainers[1].mapObjectId); } else { -- 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 e6fb626c1fddb2f696b26219156d2591867295e7 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 29 Jan 2018 16:46:56 +0100 Subject: decompile_coord_event_weather --- src/coord_event_weather.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/coord_event_weather.c (limited to 'src') diff --git a/src/coord_event_weather.c b/src/coord_event_weather.c new file mode 100644 index 000000000..60b87fa30 --- /dev/null +++ b/src/coord_event_weather.c @@ -0,0 +1,119 @@ +#include "global.h" +#include "constants/weather.h" +#include "coord_event_weather.h" +#include "field_weather.h" + +struct CoordEventWeather +{ + u8 coordEventWeather; + void (*func)(void); +}; + +static void CoordEventWeather_Clouds(void); +static void CoordEventWeather_Sunny(void); +static void CoordEventWeather_LightRain(void); +static void CoordEventWeather_Snow(void); +static void CoordEventWeather_Thunderstorm(void); +static void CoordEventWeather_Fog(void); +static void CoordEventWeather_DiagonalFog(void); +static void CoordEventWeather_Ash(void); +static void CoordEventWeather_Sandstorm(void); +static void CoordEventWeather_Dark(void); +static void CoordEventWeather_Drought(void); +static void CoordEventWeather_Route119Cycle(void); +static void CoordEventWeather_Route123Cycle(void); + +static const struct CoordEventWeather sCoordEventWeatherFuncs[] = +{ + { COORD_EVENT_WEATHER_CLOUDS, CoordEventWeather_Clouds }, + { COORD_EVENT_WEATHER_SUNNY, CoordEventWeather_Sunny }, + { COORD_EVENT_WEATHER_RAIN_LIGHT, CoordEventWeather_LightRain }, + { COORD_EVENT_WEATHER_SNOW, CoordEventWeather_Snow }, + { COORD_EVENT_WEATHER_RAIN_MED, CoordEventWeather_Thunderstorm }, + { COORD_EVENT_WEATHER_FOG_1, CoordEventWeather_Fog }, + { COORD_EVENT_WEATHER_FOG_2, CoordEventWeather_DiagonalFog }, + { COORD_EVENT_WEATHER_ASH, CoordEventWeather_Ash }, + { COORD_EVENT_WEATHER_SANDSTORM, CoordEventWeather_Sandstorm }, + { COORD_EVENT_WEATHER_SHADE, CoordEventWeather_Dark }, + { COORD_EVENT_WEATHER_DROUGHT, CoordEventWeather_Drought }, + { COORD_EVENT_WEATHER_ROUTE119_CYCLE, CoordEventWeather_Route119Cycle }, + { COORD_EVENT_WEATHER_ROUTE123_CYCLE, CoordEventWeather_Route123Cycle }, +}; + +static void CoordEventWeather_Clouds(void) +{ + SetWeather(WEATHER_CLOUDS); +} + +static void CoordEventWeather_Sunny(void) +{ + SetWeather(WEATHER_SUNNY); +} + +static void CoordEventWeather_LightRain(void) +{ + SetWeather(WEATHER_RAIN_LIGHT); +} + +static void CoordEventWeather_Snow(void) +{ + SetWeather(WEATHER_SNOW); +} + +static void CoordEventWeather_Thunderstorm(void) +{ + SetWeather(WEATHER_RAIN_MED); +} + +static void CoordEventWeather_Fog(void) +{ + SetWeather(WEATHER_FOG_1); +} + +static void CoordEventWeather_DiagonalFog(void) +{ + SetWeather(WEATHER_FOG_2); +} + +static void CoordEventWeather_Ash(void) +{ + SetWeather(WEATHER_ASH); +} + +static void CoordEventWeather_Sandstorm(void) +{ + SetWeather(WEATHER_SANDSTORM); +} + +static void CoordEventWeather_Dark(void) +{ + SetWeather(WEATHER_SHADE); +} + +static void CoordEventWeather_Drought(void) +{ + SetWeather(WEATHER_DROUGHT); +} + +static void CoordEventWeather_Route119Cycle(void) +{ + SetWeather(WEATHER_ROUTE119_CYCLE); +} + +static void CoordEventWeather_Route123Cycle(void) +{ + SetWeather(WEATHER_ROUTE123_CYCLE); +} + +void DoCoordEventWeather(u8 coordEventWeather) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(sCoordEventWeatherFuncs); i++) + { + if (sCoordEventWeatherFuncs[i].coordEventWeather == coordEventWeather) + { + sCoordEventWeatherFuncs[i].func(); + return; + } + } +} -- 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 42bfa15ae0669979958883a8fdaa76b72c30011a Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 29 Jan 2018 15:49:28 -0500 Subject: decompile more of field_map_obj_helpers.c --- src/field_map_obj_helpers.c | 180 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 167 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index 1247a7cd7..b0f7442f4 100755 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -1,15 +1,22 @@ #include "global.h" #include "field_ground_effect.h" #include "field_map_obj.h" +#include "field_effect.h" -typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); +extern void sub_8097D68(struct Sprite *sprite); -extern const s8 gUnknown_0850E7BA[]; -extern const s8 gUnknown_0850E772[]; +typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); +extern const struct Coords16 gUnknown_0850DB7C[4]; extern s16 gUnknown_0850E768[]; extern SpriteStepFunc *const gUnknown_0850E754[]; -extern const struct Coords16 gUnknown_0850DB7C[4]; +extern const s8 gUnknown_0850E772[]; +extern const s8 gUnknown_0850E7BA[]; +extern const s8 *const gUnknown_0850E834[]; +extern s16 gUnknown_0850E840[]; +extern u8 gUnknown_0850E846[]; +extern s16 gUnknown_0850E84A[]; +extern u8 gUnknown_0850E850[]; bool8 FreezeMapObject(struct MapObject *mapObject) { @@ -192,10 +199,6 @@ bool8 sub_8097758(struct Sprite *sprite) return result; } -extern const s8 *const gUnknown_0850E834[]; -extern s16 gUnknown_0850E840[]; -extern u8 gUnknown_0850E846[]; - s16 sub_8097820(s16 a1, u8 a2) { return gUnknown_0850E834[a2][a1]; @@ -238,9 +241,6 @@ u8 sub_809785C(struct Sprite *sprite) return v2; } -extern s16 gUnknown_0850E84A[]; -extern u8 gUnknown_0850E850[]; - u8 sub_80978E4(struct Sprite *sprite) { s16 v5[3]; @@ -328,8 +328,6 @@ void sub_80979D4(struct Sprite *sprite, bool8 invisible) sprite->invisible = 1; } -extern void sub_8097D68(struct Sprite *sprite); - void sub_8097AC8(struct Sprite *sprite) { sub_8097D68(sprite); @@ -369,3 +367,159 @@ void sub_8097B78(u8 var1, u8 var2) if(spriteId != MAX_SPRITES) StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(var2)); } + +void sub_8097BB4(u8 var1, u8 var2) +{ + int spriteId = sub_8097B2C(var1); + + if(spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(var2); + u16 tileNum = sprite->oam.tileNum; + + sprite->oam = *gfxInfo->oam; + sprite->oam.tileNum = tileNum; + sprite->oam.paletteNum = gfxInfo->paletteSlot; + sprite->images = gfxInfo->images; + + if(gfxInfo->subspriteTables == NULL) + { + sprite->subspriteTables = NULL; + sprite->subspriteTableNum = 0; + sprite->subspriteMode = 0; + } + else + { + SetSubspriteTables(sprite, gfxInfo->subspriteTables); + sprite->subspriteMode = 2; + } + StartSpriteAnim(sprite, 0); + } +} + +void sub_8097C44(u8 var, bool32 var2) +{ + u8 spriteId = sub_8097B2C(var); + + if(spriteId == MAX_SPRITES) + return; + + if(var2) + gSprites[spriteId].data[2] = 1; + else + gSprites[spriteId].data[2] = 0; +} + +bool32 sub_8097C8C(u8 var) +{ + u8 spriteId = sub_8097B2C(var); + + if(spriteId == MAX_SPRITES) + return FALSE; + + return (gSprites[spriteId].data[2] == TRUE); +} + +void sub_8097CC4(u8 var1, u8 var2) +{ + u8 spriteId = sub_8097B2C(var1); + + if(spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[3] = var2; + gSprites[spriteId].data[4] = 0; + } +} + +void sub_8097CF4(struct Sprite *sprite) +{ + switch(sprite->data[4]) + { + case 0: + sprite->pos2.y = 0; + sprite->data[4]++; + case 1: + sprite->pos2.y -= 8; + if(sprite->pos2.y == -160) + { + sprite->pos2.y = 0; + sprite->data[2] = 1; + sprite->data[3] = 0; + sprite->data[4] = 0; + } + } +} + +void sub_8097D30(struct Sprite *sprite) +{ + switch(sprite->data[4]) + { + case 0: + sprite->pos2.y = -160; + sprite->data[4]++; + case 1: + sprite->pos2.y += 8; + if(sprite->pos2.y == 0) + { + sprite->data[3] = 0; + sprite->data[4] = 0; + } + } +} + +void sub_8097D68(struct Sprite *sprite) +{ + switch(sprite->data[3]) + { + case 1: + sub_8097D30(sprite); + break; + case 2: + sub_8097CF4(sprite); + break; + case 0: + break; + default: + sprite->data[3] = 0; + break; + } +} + +bool32 sub_8097D9C(u8 var) +{ + u8 spriteId = sub_8097B2C(var); + + if(spriteId == MAX_SPRITES) + return FALSE; + + if(gSprites[spriteId].data[3] != FALSE) + return TRUE; + + return FALSE; +} + +u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject) +{ + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); + return FieldEffectStart(fieldEffectId); +} + +void DoShadowFieldEffect(struct MapObject *mapObject) +{ + if (!mapObject->mapobj_bit_22) + { + mapObject->mapobj_bit_22 = 1; + oe_exec_and_other_stuff(FLDEFF_SHADOW, mapObject); + } +} + +void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) +{ + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + gFieldEffectArguments[0] = sprite->pos1.x; + gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; + gFieldEffectArguments[2] = 151; + gFieldEffectArguments[3] = 3; + FieldEffectStart(FLDEFF_RIPPLE); +} -- 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 From f0cc705d35820fa6673200ace50aa67e5832f3f8 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Tue, 30 Jan 2018 17:16:41 -0500 Subject: fixes --- src/field_message_box.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/field_message_box.c b/src/field_message_box.c index fc51bc588..ea80b2ea9 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -1,19 +1,11 @@ #include "global.h" +#include "new_menu_helpers.h" #include "string.h" #include "string_util.h" #include "task.h" #include "text.h" -extern void sub_81973A4(void); -extern void sub_81973C4(u8, u8); -extern u16 sub_8197224(void); -extern int sub_8196094(void); -extern void sub_8196080(u8*); -extern void AddTextPrinterForMessage(u8); -extern void sub_8197434(u8, u8); -extern void sub_81973FC(u8, u8); - -extern u8 gUnknown_020375BC; +u8 gUnknown_020375BC = 0; void textbox_fdecode_auto_and_task_add(u8*, int); void textbox_auto_and_task_add(void); -- cgit v1.2.3 From 741b8adf9a43989182ff3648bf14e3236d4b5ce9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 30 Jan 2018 23:23:35 +0100 Subject: decompile mystery event menu --- src/battle_controllers.c | 6 +- src/mystery_event_menu.c | 303 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 306 insertions(+), 3 deletions(-) create mode 100644 src/mystery_event_menu.c (limited to 'src') diff --git a/src/battle_controllers.c b/src/battle_controllers.c index c6d47e71e..c28b6ef3b 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -64,7 +64,7 @@ void HandleLinkBattleSetup(void) if (gLinkVSyncDisabled) sub_800B488(); if (!gReceivedRemoteLinkPlayers) - sub_8009734(); + OpenLink(); CreateTask(task00_08081A90, 0); CreateTasksForSendRecvLinkBuffers(); } @@ -793,9 +793,9 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) else var = (gBattleTypeFlags & BATTLE_TYPE_MULTI) ? 4 : 2; - if (sub_800ABAC() >= var) + if (GetLinkPlayerCount_2() >= var) { - if (sub_800ABBC()) + if (IsLinkMaster()) { sub_800A620(); gTasks[taskId].data[11]++; diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c new file mode 100644 index 000000000..0478f50cd --- /dev/null +++ b/src/mystery_event_menu.c @@ -0,0 +1,303 @@ +#include "global.h" +#include "mystery_event_menu.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "mystery_event_script.h" +#include "palette.h" +#include "save.h" +#include "constants/songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "bg.h" +#include "window.h" +#include "gpu_regs.h" +#include "text_window.h" +#include "new_menu_helpers.h" +#include "decompress.h" + +// this file's functions +static void CB2_MysteryEventMenu(void); +static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed); + +// EWRAM vars +static EWRAM_DATA u8 sUnknown_0203BCF8 = 0; // set but unused + +// const rom data +static const struct BgTemplate sBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sWindowTemplates[] = +{ + {0, 4, 15, 22, 4, 14, 20}, + {0, 7, 6, 16, 4, 14, 0x6C}, + DUMMY_WIN_TEMPLATE +}; + +// code +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static bool8 CheckLanguageMatch(void) +{ + return (gLinkPlayers[0].language == gLinkPlayers[1].language); +} + +void CB2_InitMysteryEventMenu(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + if (InitWindows(sWindowTemplates)) + { + s32 i; + + DeactivateAllTextPrinters(); + for (i = 0; i < 2; i++) + FillWindowPixelBuffer(i, 0); + + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14); + sub_809882C(0, 1u, 0xD0u); + sub_81978B0(0xE0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + CreateTask(Task_DestroySelf, 0); + StopMapMusic(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + FillPalette(0, 0, 2); + SetMainCallback2(CB2_MysteryEventMenu); + } +} + +static bool8 GetEventLoadMessage(u8 *dest, u32 status) +{ + bool8 retVal = TRUE; + + if (status == 0) + { + StringCopy(dest, gText_EventSafelyLoaded); + retVal = FALSE; + } + + if (status == 2) + retVal = FALSE; + + if (status == 1) + StringCopy(dest, gText_LoadErrorEndingSession); + + return retVal; +} + +static void CB2_MysteryEventMenu(void) +{ + switch (gMain.state) + { + case 0: + SetWindowBorderStyle(0, 1, 1, 0xD); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + ShowBg(0); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gMain.state++; + break; + case 1: + if (!gPaletteFade.active) + { + PrintMysteryMenuText(0, gText_LinkStandby2, 1, 2, 1); + gMain.state++; + } + break; + case 2: + if (!IsTextPrinterActive(0)) + { + gMain.state++; + gLinkType = 21761; + OpenLink(); + } + break; + case 3: + if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4) + { + PlaySE(SE_PIN); + PrintMysteryMenuText(0, gText_PressAToLoadEvent, 1, 2, 1); + gMain.state++; + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + } + break; + case 4: + if (!IsTextPrinterActive(0)) + gMain.state++; + break; + case 5: + if (GetLinkPlayerCount_2() == 2) + { + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_800A620(); + SetWindowBorderStyle(1, 1, 1, 0xD); + PrintMysteryMenuText(1, gText_LoadingEvent, 1, 2, 0); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); + gMain.state++; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + } + } + else + { + GetEventLoadMessage(gStringVar4, 1); + PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + gMain.state = 13; + } + break; + case 6: + if (IsLinkConnectionEstablished()) + { + if (gReceivedRemoteLinkPlayers != 0) + { + if (sub_800A0C8(2, 2) == 3) + { + sub_800AC34(); + GetEventLoadMessage(gStringVar4, 1); + PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + gMain.state = 13; + } + else if (CheckLanguageMatch()) + { + PrintMysteryMenuText(0, gText_DontRemoveCableTurnOff, 1, 2, 1); + gMain.state++; + } + else + { + CloseLink(); + GetEventLoadMessage(gStringVar4, 1); + PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + gMain.state = 13; + } + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + } + break; + case 7: + if (!IsTextPrinterActive(0)) + gMain.state++; + break; + case 8: + if (GetBlockReceivedStatus()) + { + ResetBlockReceivedFlags(); + gMain.state++; + } + break; + case 9: + gMain.state++; + break; + case 10: + sub_800AC34(); + gMain.state++; + break; + case 11: + if (gReceivedRemoteLinkPlayers == 0) + { + u16 unkVal = RunMysteryEventScript(gDecompressionBuffer); + CpuFill32(0, gDecompressionBuffer, 0x7D4); + if (!GetEventLoadMessage(gStringVar4, unkVal)) + TrySavingData(NORMAL_SAVE); + gMain.state++; + } + break; + case 12: + PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + gMain.state++; + break; + case 13: + if (!IsTextPrinterActive(0)) + { + gMain.state++; + sUnknown_0203BCF8 = 0; + } + break; + case 14: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gMain.state++; + } + break; + case 15: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gMain.state++; + break; + case 16: + if (!gPaletteFade.active) + DoSoftReset(); + break; + } + + if (gLinkStatus & 0x40 && !IsLinkMaster()) + { + CloseLink(); + GetEventLoadMessage(gStringVar4, 1); + PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + gMain.state = 13; + } + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed) +{ + struct TextColor textColor; + u8 letterSpacing = 0; + u8 lineSpacing = 1; + textColor.fgColor = 1; + textColor.bgColor = 2; + textColor.shadowColor = 3; + + FillWindowPixelBuffer(windowId, (textColor.fgColor) | (textColor.fgColor << 4)); + AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, &textColor, speed, text); +} -- cgit v1.2.3 From 6453b884338f070c6626e84ca591db7f71dcb3ad Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 30 Jan 2018 18:19:41 -0500 Subject: finish decompiling field_map_obj_helpers.c --- src/field_map_obj_helpers.c | 319 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) (limited to 'src') diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index b0f7442f4..a9c6dcc5c 100755 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -2,8 +2,13 @@ #include "field_ground_effect.h" #include "field_map_obj.h" #include "field_effect.h" +#include "map_obj_8097404.h" +#include "malloc.h" +#include "task.h" +#include "util.h" extern void sub_8097D68(struct Sprite *sprite); +extern void sub_8097FE4(u8); typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); @@ -523,3 +528,317 @@ void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) gFieldEffectArguments[3] = 3; FieldEffectStart(FLDEFF_RIPPLE); } + +#ifdef NONMATCHING +bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite) +{ + bool32 ableToStore = FALSE; + if (gUnknown_020375B8 == NULL) + { + gUnknown_020375B8 = AllocZeroed(0x14); + gUnknown_020375B8[0] = mapObject->localId; + gUnknown_020375B8[16] = 1; + ableToStore = TRUE; + } + else + { + u8 i; + u8 firstFreeSlot; + bool32 found; + for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++) + { + if (firstFreeSlot == 16 && gUnknown_020375B8[i] == 0) + firstFreeSlot = i; + + if (gUnknown_020375B8[i] == mapObject->localId) + { + found = TRUE; + break; + } + } + + if (!found && firstFreeSlot != 16) + { + gUnknown_020375B8[firstFreeSlot] = mapObject->localId; + gUnknown_020375B8[16]++; + ableToStore = TRUE; // the nonmatching problem is that ableToStore == TRUE isnt being merged with the above ableToStore = TRUE assignment. + } + } + + if (ableToStore == TRUE) + { + mapObject->mapobj_bit_12 = TRUE; + mapObject->mapobj_bit_9 = TRUE; + } + + sprite->data[2] = 1; + return TRUE; +} +#else +__attribute__((naked)) +bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + adds r4, r0, 0\n\ + mov r8, r1\n\ + movs r0, 0\n\ + mov r12, r0\n\ + ldr r0, =gUnknown_020375B8\n\ + ldr r1, [r0]\n\ + adds r6, r0, 0\n\ + cmp r1, 0\n\ + bne _08097E80\n\ + movs r0, 0x14\n\ + bl AllocZeroed\n\ + str r0, [r6]\n\ + ldrb r1, [r4, 0x8]\n\ + strb r1, [r0]\n\ + ldr r1, [r6]\n\ + movs r0, 0x1\n\ + strb r0, [r1, 0x10]\n\ + b _08097ECC\n\ + .pool\n\ +_08097E80:\n\ + movs r2, 0x10\n\ + movs r5, 0\n\ + movs r1, 0\n\ + adds r3, r6, 0\n\ + b _08097E90\n\ +_08097E8A:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ +_08097E90:\n\ + cmp r1, 0xF\n\ + bhi _08097EB2\n\ + cmp r2, 0x10\n\ + bne _08097EA4\n\ + ldr r0, [r3]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08097EA4\n\ + adds r2, r1, 0\n\ +_08097EA4:\n\ + ldr r0, [r3]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + ldrb r7, [r4, 0x8]\n\ + cmp r0, r7\n\ + bne _08097E8A\n\ + movs r5, 0x1\n\ +_08097EB2:\n\ + cmp r5, 0\n\ + bne _08097ECE\n\ + cmp r2, 0x10\n\ + beq _08097ECE\n\ + ldr r0, [r6]\n\ + adds r0, r2\n\ + ldrb r1, [r4, 0x8]\n\ + strb r1, [r0]\n\ + ldr r1, [r6]\n\ + ldrb r0, [r1, 0x10]\n\ + adds r0, 0x1\n\ + strb r0, [r1, 0x10]\n\ + movs r0, 0x1\n\ +_08097ECC:\n\ + mov r12, r0\n\ +_08097ECE:\n\ + mov r1, r12\n\ + cmp r1, 0x1\n\ + bne _08097EE0\n\ + ldrb r0, [r4, 0x1]\n\ + movs r1, 0x10\n\ + orrs r0, r1\n\ + movs r1, 0x2\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ +_08097EE0:\n\ + movs r0, 0x1\n\ + mov r7, r8\n\ + strh r0, [r7, 0x32]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided"); +} +#endif + +// this function is very similar to the above one and I don't want to decompile this one until the above is matching. +__attribute__((naked)) +bool32 sub_8097EF0(struct MapObject *mapObject, struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + adds r6, r0, 0\n\ + mov r8, r1\n\ + movs r0, 0x1\n\ + strh r0, [r1, 0x32]\n\ + ldr r5, =gUnknown_020375B8\n\ + ldr r0, [r5]\n\ + cmp r0, 0\n\ + beq _08097F68\n\ + movs r7, 0\n\ + adds r0, r6, 0\n\ + bl sub_8097F78\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x10\n\ + beq _08097F28\n\ + ldr r0, [r5]\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + ldr r1, [r5]\n\ + ldrb r0, [r1, 0x10]\n\ + subs r0, 0x1\n\ + strb r0, [r1, 0x10]\n\ + movs r7, 0x1\n\ +_08097F28:\n\ + ldr r0, [r5]\n\ + ldrb r4, [r0, 0x10]\n\ + cmp r4, 0\n\ + bne _08097F36\n\ + bl Free\n\ + str r4, [r5]\n\ +_08097F36:\n\ + cmp r7, 0x1\n\ + bne _08097F68\n\ + ldrb r0, [r6, 0x5]\n\ + bl GetFieldObjectGraphicsInfo\n\ + ldrb r1, [r0, 0xC]\n\ + lsls r1, 25\n\ + lsrs r1, 31\n\ + lsls r1, 4\n\ + ldrb r2, [r6, 0x1]\n\ + movs r0, 0x11\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + movs r1, 0x3\n\ + negs r1, r1\n\ + ands r0, r1\n\ + strb r0, [r6, 0x1]\n\ + mov r2, r8\n\ + adds r2, 0x2C\n\ + ldrb r1, [r2]\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ +_08097F68:\n\ + movs r0, 0x1\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .pool\n\ + .syntax divided"); +} + +u8 sub_8097F78(struct MapObject *mapObject) +{ + u8 i; + + for(i = 0; i < 0x10; i++) + { + if(gUnknown_020375B8[i] == mapObject->localId) + return i; + } + return 0x10; +} + +void sub_8097FA4(struct MapObject *mapObject) +{ + u8 taskId = CreateTask(sub_8097FE4, 0xFF); + struct Task *task = &gTasks[taskId]; + + StoreWordInTwoHalfwords(&task->data[0], (u32)mapObject); + mapObject->mapobj_unk_1B = taskId; + task->data[3] = 0xFFFF; +} + +void sub_8097FE4(u8 taskId) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + struct Task *task = &gTasks[taskId]; + + LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&mapObject); // load the map object pointer. + sprite = &gSprites[mapObject->spriteId]; + + if(!(task->data[2] & 0x3)) + sprite->pos2.y += task->data[3]; + + if(!(task->data[2] & 0xF)) + task->data[3] = -task->data[3]; + + task->data[2]++; +} + +void sub_8098044(u8 taskId) +{ + u32 word; + struct Task *task = &gTasks[taskId]; + + LoadWordFromTwoHalfwords(&task->data[0], &word); // huh??? why does it load a word that never gets used??? + DestroyTask(taskId); +} + +void sub_8098074(u8 var1, u8 var2) +{ + u8 i; + + for(i = 0; i < 0x10; i++) + { + if(i != var1 && i != var2 && + gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); + } +} + +bool32 sub_80980C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->pos2.y = 0; + sprite->data[2]++; + return FALSE; +} + +bool32 sub_80980D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->pos2.y -= 8; + + if(sprite->pos2.y == -160) + sprite->data[2]++; + return FALSE; +} + +bool32 sub_80980F4(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->pos2.y = -160; + sprite->data[2]++; + return FALSE; +} + +bool32 sub_8098108(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->pos2.y += 8; + + if(!sprite->pos2.y) + sprite->data[2]++; + return FALSE; +} + +// though this function returns FALSE without doing anything, this header is required due to being in an array of functions which needs it. +bool32 sub_8098124(struct MapObject *mapObject, struct Sprite *sprite) +{ + return TRUE; +} -- cgit v1.2.3 From 536a338ff9aac796c542b3bb01a822c2a28df0a5 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 30 Jan 2018 18:22:56 -0500 Subject: cleanup --- src/field_map_obj_helpers.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index a9c6dcc5c..27f1de479 100755 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -43,7 +43,7 @@ bool8 FreezeMapObject(struct MapObject *mapObject) void FreezeMapObjects(void) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < MAP_OBJECTS_COUNT; i++) if (gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) FreezeMapObject(&gMapObjects[i]); } @@ -51,7 +51,7 @@ void FreezeMapObjects(void) void FreezeMapObjectsExceptOne(u8 a1) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < MAP_OBJECTS_COUNT; i++) if (i != a1 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) FreezeMapObject(&gMapObjects[i]); } @@ -69,7 +69,7 @@ void npc_sync_anim_pause_bits(struct MapObject *mapObject) void UnfreezeMapObjects(void) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < MAP_OBJECTS_COUNT; i++) if (gMapObjects[i].active) npc_sync_anim_pause_bits(&gMapObjects[i]); } @@ -748,12 +748,12 @@ u8 sub_8097F78(struct MapObject *mapObject) { u8 i; - for(i = 0; i < 0x10; i++) + for(i = 0; i < MAP_OBJECTS_COUNT; i++) { if(gUnknown_020375B8[i] == mapObject->localId) return i; } - return 0x10; + return MAP_OBJECTS_COUNT; } void sub_8097FA4(struct MapObject *mapObject) @@ -797,7 +797,7 @@ void sub_8098074(u8 var1, u8 var2) { u8 i; - for(i = 0; i < 0x10; i++) + for(i = 0; i < MAP_OBJECTS_COUNT; i++) { if(i != var1 && i != var2 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) @@ -837,7 +837,7 @@ bool32 sub_8098108(struct MapObject *mapObject, struct Sprite *sprite) return FALSE; } -// though this function returns FALSE without doing anything, this header is required due to being in an array of functions which needs it. +// though this function returns TRUE without doing anything, this header is required due to being in an array of functions which needs it. bool32 sub_8098124(struct MapObject *mapObject, struct Sprite *sprite) { return TRUE; -- cgit v1.2.3 From 05bd37bf469638c5f918733d074ec930af3f6508 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 30 Jan 2018 18:30:59 -0500 Subject: rename header --- src/field_map_obj.c | 2 +- src/field_map_obj_helpers.c | 2 +- src/item_use.c | 2 +- src/trainer_see.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index df80494b3..906eff4b7 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -14,7 +14,7 @@ #include "rom_818CFC8.h" #include "rom_81BE66C.h" #include "field_ground_effect.h" -#include "map_obj_8097404.h" +#include "field_map_obj_helpers.h" #include "mauville_old_man.h" #include "metatile_behavior.h" #include "field_effect.h" diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index 27f1de479..ed578ad61 100755 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -2,7 +2,7 @@ #include "field_ground_effect.h" #include "field_map_obj.h" #include "field_effect.h" -#include "map_obj_8097404.h" +#include "field_map_obj_helpers.h" #include "malloc.h" #include "task.h" #include "util.h" diff --git a/src/item_use.c b/src/item_use.c index 4c7276bb8..8fe705a50 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -15,7 +15,7 @@ #include "field_screen.h" #include "field_weather.h" #include "item.h" -#include "map_obj_8097404.h" +#include "field_map_obj_helpers.h" #include "mail.h" #include "metatile_behavior.h" #include "overworld.h" diff --git a/src/trainer_see.c b/src/trainer_see.c index 38773ec50..7706da703 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -6,7 +6,7 @@ #include "field_effect.h" #include "field_map_obj.h" #include "field_player_avatar.h" -#include "map_obj_8097404.h" +#include "field_map_obj_helpers.h" #include "pokenav.h" #include "task.h" #include "util.h" -- cgit v1.2.3 From d5d62c9d4ddb047ad11129127102c63d54be6e54 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Tue, 30 Jan 2018 19:28:38 -0500 Subject: fix ewram --- src/field_message_box.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field_message_box.c b/src/field_message_box.c index ea80b2ea9..9570040eb 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -5,7 +5,7 @@ #include "task.h" #include "text.h" -u8 gUnknown_020375BC = 0; +EWRAM_DATA u8 gUnknown_020375BC = 0; void textbox_fdecode_auto_and_task_add(u8*, int); void textbox_auto_and_task_add(void); -- cgit v1.2.3 From 3ff5db0b69a56fe916c156bc97d7753b570a12d7 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 30 Jan 2018 21:17:36 -0500 Subject: forward declarations --- src/field_map_obj_helpers.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index ed578ad61..1e0e9b66b 100755 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -7,9 +7,6 @@ #include "task.h" #include "util.h" -extern void sub_8097D68(struct Sprite *sprite); -extern void sub_8097FE4(u8); - typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); extern const struct Coords16 gUnknown_0850DB7C[4]; @@ -23,6 +20,9 @@ extern u8 gUnknown_0850E846[]; extern s16 gUnknown_0850E84A[]; extern u8 gUnknown_0850E850[]; +void sub_8097D68(struct Sprite *sprite); +void sub_8097FE4(u8); + bool8 FreezeMapObject(struct MapObject *mapObject) { if (mapObject->mapobj_bit_6 || mapObject->mapobj_bit_8) -- cgit v1.2.3 From 78bd2b0849f357f0d2fbbb8e1e69e50d630dd9b0 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 31 Jan 2018 15:26:57 -0500 Subject: move save rodata to source and use saveblock chunk macros --- src/save.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/save.c b/src/save.c index 023ca6870..138ec7cce 100644 --- a/src/save.c +++ b/src/save.c @@ -4,13 +4,67 @@ #include "constants/game_stat.h" #include "task.h" +// for the chunk declarations +extern struct SaveBlock2 gSaveblock2; +extern struct SaveBlock1 gSaveblock1; +extern struct PokemonStorage gPokemonStorage; + extern struct SaveSectionLocation gRamSaveSectionLocations[0xE]; extern u8 gDecompressionBuffer[]; extern u32 gFlashMemoryPresent; extern u16 gUnknown_03006294; extern bool8 gSoftResetDisabled; -extern const struct SaveSectionOffsets gSaveSectionOffsets[0xE]; +// Divide save blocks into individual chunks to be written to flash sectors + +// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer +#define SECTOR_DATA_SIZE 3968 +#define SECTOR_FOOTER_SIZE 128 + +/* + * Sector Layout: + * + * Sectors 0 - 13: Save Slot 1 + * Sectors 14 - 27: Save Slot 2 + * Sectors 28 - 29: Hall of Fame + * Sectors 30 - 31: e-Reader battle tower data, maybe? (note: depreciated in Emerald US) + * + * There are two save slots for saving the player's game data. We alternate between + * them each time the game is saved, so that if the current save slot is corrupt, + * we can load the previous one. We also rotate the sectors in each save slot + * so that the same data is not always being written to the same sector. This + * might be done to reduce wear on the flash memory, but I'm not sure, since all + * 14 sectors get written anyway. + */ + +// (u8 *)structure was removed from the first statement of the macro in Emerald. +// This is because malloc is used to allocate addresses so storing the raw +// addresses should not be done in the offsets information. +#define SAVEBLOCK_CHUNK(structure, chunkNum) \ +{ \ + chunkNum * SECTOR_DATA_SIZE, \ + min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \ +} \ + +const struct SaveSectionOffsets gSaveSectionOffsets[] = +{ + SAVEBLOCK_CHUNK(gSaveblock2, 0), + + SAVEBLOCK_CHUNK(gSaveblock1, 0), + SAVEBLOCK_CHUNK(gSaveblock1, 1), + SAVEBLOCK_CHUNK(gSaveblock1, 2), + SAVEBLOCK_CHUNK(gSaveblock1, 3), + + SAVEBLOCK_CHUNK(gPokemonStorage, 0), + SAVEBLOCK_CHUNK(gPokemonStorage, 1), + SAVEBLOCK_CHUNK(gPokemonStorage, 2), + SAVEBLOCK_CHUNK(gPokemonStorage, 3), + SAVEBLOCK_CHUNK(gPokemonStorage, 4), + SAVEBLOCK_CHUNK(gPokemonStorage, 5), + SAVEBLOCK_CHUNK(gPokemonStorage, 6), + SAVEBLOCK_CHUNK(gPokemonStorage, 7), + SAVEBLOCK_CHUNK(gPokemonStorage, 8), +}; extern void DoSaveFailedScreen(u8); // save_failed_screen extern void LoadSerializedGame(void); // load_save -- cgit v1.2.3 From a998cba4f03b34c147acb78d4b70766a50346afe Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 31 Jan 2018 15:53:38 -0500 Subject: depreciate depreciate --- src/save.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/save.c b/src/save.c index 138ec7cce..0c35c3795 100644 --- a/src/save.c +++ b/src/save.c @@ -27,7 +27,7 @@ extern bool8 gSoftResetDisabled; * Sectors 0 - 13: Save Slot 1 * Sectors 14 - 27: Save Slot 2 * Sectors 28 - 29: Hall of Fame - * Sectors 30 - 31: e-Reader battle tower data, maybe? (note: depreciated in Emerald US) + * Sectors 30 - 31: e-Reader battle tower data, maybe? (note: deprecated in Emerald US) * * There are two save slots for saving the player's game data. We alternate between * them each time the game is saved, so that if the current save slot is corrupt, -- cgit v1.2.3 From eb6aed50e56f36ce416f7ecc8edfacea1da61bf1 Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Wed, 31 Jan 2018 16:12:46 -0600 Subject: Update save.c with recorded battle sector --- src/save.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/save.c b/src/save.c index 0c35c3795..8d77e801a 100644 --- a/src/save.c +++ b/src/save.c @@ -27,7 +27,8 @@ extern bool8 gSoftResetDisabled; * Sectors 0 - 13: Save Slot 1 * Sectors 14 - 27: Save Slot 2 * Sectors 28 - 29: Hall of Fame - * Sectors 30 - 31: e-Reader battle tower data, maybe? (note: deprecated in Emerald US) + * Sector 30: e-Reader/Mystery Gift Stuff (note: e-Reader is deprecated in Emerald US) + * Sector 31: Recorded Battle * * There are two save slots for saving the player's game data. We alternate between * them each time the game is saved, so that if the current save slot is corrupt, -- cgit v1.2.3