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