summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokemon_special_anim.s495
-rw-r--r--include/constants/pokemon.h1
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokemon_special_anim_internal.h21
-rw-r--r--include/strings.h10
-rw-r--r--src/data/pokemon/experience_tables.h2
-rw-r--r--src/daycare.c4
-rw-r--r--src/pokemon.c4
-rw-r--r--src/pokemon_special_anim_scene.c202
9 files changed, 237 insertions, 504 deletions
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index 620689927..49fff6ca5 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -5,501 +5,6 @@
.text
- thumb_func_start sub_811D2EC
-sub_811D2EC: @ 811D2EC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_811D0A8
- adds r4, r0, 0
- bl sub_811D0B4
- lsls r0, 16
- lsrs r7, r0, 16
- movs r0, 0
- mov r8, r0
- bl GetTextSpeedSetting
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- bl sub_811D094
- adds r6, r0, 0
- cmp r5, 0x9
- bls _0811D322
- b _0811D4C2
-_0811D322:
- lsls r0, r5, 2
- ldr r1, _0811D32C @ =_0811D330
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811D32C: .4byte _0811D330
- .align 2, 0
-_0811D330:
- .4byte _0811D358
- .4byte _0811D38C
- .4byte _0811D42C
- .4byte _0811D418
- .4byte _0811D404
- .4byte _0811D450
- .4byte _0811D47C
- .4byte _0811D488
- .4byte _0811D498
- .4byte _0811D3DC
-_0811D358:
- adds r4, 0x14
- adds r0, r7, 0
- bl ItemId_GetName
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- adds r2, r0, 0
- ldr r1, _0811D384 @ =gUnknown_841B285
- bl StringCopy
- adds r2, r0, 0
- adds r0, r6, 0
- movs r1, 0x2
- bl GetMonData
- ldr r1, _0811D388 @ =gUnknown_841B293
- adds r0, r4, 0
- bl StringAppend
- b _0811D4A2
- .align 2, 0
-_0811D384: .4byte gUnknown_841B285
-_0811D388: .4byte gUnknown_841B293
-_0811D38C:
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x14
- adds r0, r6, 0
- movs r1, 0x2
- adds r2, r4, 0
- bl GetMonData
- ldr r1, _0811D3D4 @ =gUnknown_841B295
- adds r0, r4, 0
- bl StringAppend
- adds r2, r0, 0
- cmp r5, 0x63
- bhi _0811D3B8
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_0811D3B8:
- movs r3, 0x3
- cmp r5, 0x63
- bhi _0811D3C0
- movs r3, 0x2
-_0811D3C0:
- adds r0, r2, 0
- adds r1, r5, 0
- movs r2, 0
- bl ConvertIntToDecimalStringN
- adds r2, r0, 0
- ldr r1, _0811D3D8 @ =gUnknown_841B2A7
- bl StringAppend
- b _0811D4A2
- .align 2, 0
-_0811D3D4: .4byte gUnknown_841B295
-_0811D3D8: .4byte gUnknown_841B2A7
-_0811D3DC:
- bl DynamicPlaceholderTextUtil_Reset
- bl sub_811D0F4
- adds r1, r0, 0
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- bl sub_811D0D0
- adds r1, r0, 0
- movs r0, 0x1
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- adds r4, 0x14
- ldr r1, _0811D400 @ =gUnknown_841B32E
- b _0811D470
- .align 2, 0
-_0811D400: .4byte gUnknown_841B32E
-_0811D404:
- ldr r1, _0811D444 @ =gUnknown_841B2F1
- movs r2, 0x1
- negs r2, r2
- movs r0, 0x2
- bl GetStringWidth
- add r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
-_0811D418:
- ldr r1, _0811D448 @ =gUnknown_841B2ED
- movs r2, 0x1
- negs r2, r2
- movs r0, 0x2
- bl GetStringWidth
- add r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
-_0811D42C:
- adds r4, 0x14
- ldr r1, _0811D44C @ =gUnknown_8459998
- subs r0, r5, 0x2
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl StringCopy
- movs r1, 0x1
- mov r9, r1
- b _0811D4A2
- .align 2, 0
-_0811D444: .4byte gUnknown_841B2F1
-_0811D448: .4byte gUnknown_841B2ED
-_0811D44C: .4byte gUnknown_8459998
-_0811D450:
- bl DynamicPlaceholderTextUtil_Reset
- bl sub_811D0F4
- adds r1, r0, 0
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- bl sub_811D0C4
- adds r1, r0, 0
- movs r0, 0x1
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- adds r4, 0x14
- ldr r1, _0811D478 @ =gUnknown_841B306
-_0811D470:
- adds r0, r4, 0
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- b _0811D4A2
- .align 2, 0
-_0811D478: .4byte gUnknown_841B306
-_0811D47C:
- adds r4, 0x14
- ldr r1, _0811D484 @ =gUnknown_841B315
- b _0811D48C
- .align 2, 0
-_0811D484: .4byte gUnknown_841B315
-_0811D488:
- adds r4, 0x14
- ldr r1, _0811D494 @ =gUnknown_841B31B
-_0811D48C:
- adds r0, r4, 0
- bl StringCopy
- b _0811D4A2
- .align 2, 0
-_0811D494: .4byte gUnknown_841B31B
-_0811D498:
- adds r4, 0x14
- ldr r1, _0811D4D0 @ =gUnknown_841B329
- adds r0, r4, 0
- bl StringCopy
-_0811D4A2:
- mov r0, r8
- lsls r3, r0, 24
- lsrs r3, 24
- movs r0, 0
- str r0, [sp]
- mov r1, r9
- str r1, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- movs r0, 0x4
- str r0, [sp, 0x10]
- movs r0, 0
- movs r1, 0x2
- adds r2, r4, 0
- bl AddTextPrinterParameterized5
-_0811D4C2:
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D4D0: .4byte gUnknown_841B329
- thumb_func_end sub_811D2EC
-
- thumb_func_start sub_811D4D4
-sub_811D4D4: @ 811D4D4
- push {lr}
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_811D4D4
-
- thumb_func_start sub_811D4EC
-sub_811D4EC: @ 811D4EC
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_811D4EC
-
- thumb_func_start sub_811D4FC
-sub_811D4FC: @ 811D4FC
- push {r4,lr}
- bl sub_811D0A8
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x80
- lsls r1, 9
- lsls r1, r0
- movs r0, 0x4
- orrs r1, r0
- adds r0, r1, 0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- adds r0, r4, 0
- bl sub_811E204
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811D4FC
-
- thumb_func_start sub_811D530
-sub_811D530: @ 811D530
- push {r4,r5,lr}
- sub sp, 0x4
- bl sub_811D0A8
- adds r4, r0, 0
- ldrh r0, [r4]
- cmp r0, 0
- beq _0811D546
- cmp r0, 0x1
- beq _0811D57E
- b _0811D594
-_0811D546:
- bl sub_811E2F4
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _0811D594
- movs r0, 0
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x80
- lsls r2, 9
- lsls r2, r0
- movs r0, 0x4
- orrs r2, r0
- movs r1, 0x1
- negs r1, r1
- str r5, [sp]
- adds r0, r2, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0811D594
-_0811D57E:
- ldr r0, _0811D590 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811D594
- movs r0, 0
- b _0811D596
- .align 2, 0
-_0811D590: .4byte gPaletteFade
-_0811D594:
- movs r0, 0x1
-_0811D596:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_811D530
-
- thumb_func_start sub_811D5A0
-sub_811D5A0: @ 811D5A0
- push {lr}
- bl sub_811D0A8
- movs r1, 0
- strh r1, [r0]
- pop {r0}
- bx r0
- thumb_func_end sub_811D5A0
-
- thumb_func_start sub_811D5B0
-sub_811D5B0: @ 811D5B0
- push {lr}
- bl sub_811E388
- bl ResetPaletteFadeControl
- pop {r0}
- bx r0
- thumb_func_end sub_811D5B0
-
- thumb_func_start sub_811D5C0
-sub_811D5C0: @ 811D5C0
- push {r4,lr}
- sub sp, 0x4
- bl sub_811D0A8
- adds r4, r0, 0
- ldrh r0, [r4]
- cmp r0, 0x8
- bls _0811D5D2
- b _0811D6DE
-_0811D5D2:
- lsls r0, 2
- ldr r1, _0811D5DC @ =_0811D5E0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811D5DC: .4byte _0811D5E0
- .align 2, 0
-_0811D5E0:
- .4byte _0811D604
- .4byte _0811D60C
- .4byte _0811D61C
- .4byte _0811D62C
- .4byte _0811D63E
- .4byte _0811D670
- .4byte _0811D6A0
- .4byte _0811D6BA
- .4byte _0811D6CA
-_0811D604:
- movs r0, 0
- bl sub_811E194
- b _0811D6D6
-_0811D60C:
- bl sub_811D9A8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0811D6E2
- strh r0, [r4, 0x4]
- b _0811D6D6
-_0811D61C:
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x14
- bls _0811D6E2
- b _0811D6D6
-_0811D62C:
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl sub_811DB7C
- movs r0, 0
- strh r0, [r4, 0x4]
- b _0811D6D6
-_0811D63E:
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- lsls r0, 16
- cmp r0, 0
- beq _0811D6E2
- movs r0, 0
- strh r0, [r4, 0x4]
- movs r0, 0x85
- bl PlaySE
- ldr r0, _0811D66C @ =0x00007da8
- str r0, [sp]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- movs r3, 0xC
- bl BeginNormalPaletteFade
- adds r0, r4, 0
- bl sub_811E348
- b _0811D6D6
- .align 2, 0
-_0811D66C: .4byte 0x00007da8
-_0811D670:
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x46
- bls _0811D6E2
- adds r0, r4, 0
- bl sub_811DBA8
- ldr r0, _0811D69C @ =0x00007da8
- str r0, [sp]
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0xC
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- strh r0, [r4, 0x4]
- b _0811D6D6
- .align 2, 0
-_0811D69C: .4byte 0x00007da8
-_0811D6A0:
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- bl sub_811E5A4
- adds r1, r0, 0
- cmp r1, 0
- bne _0811D6E2
- ldrh r0, [r4, 0x4]
- cmp r0, 0x28
- bls _0811D6E2
- strh r1, [r4, 0x4]
- b _0811D6D6
-_0811D6BA:
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x14
- bls _0811D6E2
- b _0811D6D6
-_0811D6CA:
- movs r0, 0x54
- bl PlaySE
- ldr r0, [r4, 0x10]
- bl DestroySprite
-_0811D6D6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0811D6E2
-_0811D6DE:
- movs r0, 0
- b _0811D6E4
-_0811D6E2:
- movs r0, 0x1
-_0811D6E4:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811D5C0
-
thumb_func_start sub_811D6EC
sub_811D6EC: @ 811D6EC
push {lr}
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index bc02bffdd..747bdea4c 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -211,7 +211,6 @@
#define PARTY_SIZE 6
#define MAX_TOTAL_EVS 510
#define UNOWN_FORM_COUNT 28
-#define MAX_MON_LEVEL 100
#define BOX_NAME_LENGTH 8
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 3cefcfcf2..3dd9c5052 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -322,7 +322,7 @@ extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
extern const u8 gStatStageRatios[][2];
extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern struct PokemonStorage* gPokemonStoragePtr;
-extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
+extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h
index 048738ebe..07acd3443 100644
--- a/include/pokemon_special_anim_internal.h
+++ b/include/pokemon_special_anim_internal.h
@@ -5,7 +5,12 @@
struct PokemonSpecialAnimScene
{
- u8 filler_0000[0x914];
+ u16 field_0000;
+ u8 filler_0002[2];
+ u16 field_0004;
+ u8 filler_0006[0xA];
+ struct Sprite * field_0010;
+ u8 field_0014[0x900];
u8 field_0914[BG_SCREEN_SIZE];
u8 field_1114[BG_SCREEN_SIZE];
u8 field_1914[BG_SCREEN_SIZE];
@@ -33,6 +38,20 @@ struct PokemonSpecialAnim
/*0x00a8*/ struct PokemonSpecialAnimScene field_00a8;
}; // size=0x28dc
+struct PokemonSpecialAnim * sub_811D080(void);
+struct Pokemon * sub_811D094(void);
+struct PokemonSpecialAnimScene * sub_811D0A8(void);
+u16 sub_811D0B4(void);
+u8 *sub_811D0C4(void);
+u8 *sub_811D0D0(void);
+u8 *sub_811D0DC(u8 *dest);
+u8 *sub_811D0F4(void);
+u8 sub_811D100(void);
+u16 sub_811D110(void);
+u32 sub_811D120(void);
+void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data);
+bool32 sub_811D178(void);
+
void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType);
bool8 sub_811D280(void);
void sub_811D29C(void);
diff --git a/include/strings.h b/include/strings.h
index 82c35d552..809a17d9d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1442,9 +1442,17 @@ extern const u8 gPCText_Machine[];
extern const u8 gPCText_Simple[];
// pokemon_special_anim
-
extern const u8 gUnknown_841B2ED[];
extern const u8 gUnknown_841B2F1[];
extern const u8 gUnknown_841B2FF[];
+extern const u8 gUnknown_841B285[];
+extern const u8 gUnknown_841B293[];
+extern const u8 gUnknown_841B295[];
+extern const u8 gUnknown_841B2A7[];
+extern const u8 gUnknown_841B32E[];
+extern const u8 gUnknown_841B306[];
+extern const u8 gUnknown_841B315[];
+extern const u8 gUnknown_841B31B[];
+extern const u8 gUnknown_841B329[];
#endif //GUARD_STRINGS_H
diff --git a/src/data/pokemon/experience_tables.h b/src/data/pokemon/experience_tables.h
index b2723e9d2..15bcadeb2 100644
--- a/src/data/pokemon/experience_tables.h
+++ b/src/data/pokemon/experience_tables.h
@@ -15,7 +15,7 @@
:(n <= 36) ? ((n + 14) * CUBE(n) / 50) \
: (((n / 2) + 32) * CUBE(n) / 50)
-const u32 gExperienceTables[][MAX_MON_LEVEL + 1] =
+const u32 gExperienceTables[][MAX_LEVEL + 1] =
{
{ // Medium Fast
0, // 0
diff --git a/src/daycare.c b/src/daycare.c
index 0a19c6c9b..e07c2a234 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -479,7 +479,7 @@ static void ApplyDaycareExperience(struct Pokemon *mon)
bool8 firstMove;
u16 learnedMove;
- for (i = 0; i < MAX_MON_LEVEL; i++)
+ for (i = 0; i < MAX_LEVEL; i++)
{
// Add the mon's gained daycare experience level by level until it can't level up anymore.
if (TryIncrementMonLevel(mon))
@@ -513,7 +513,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon)
species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES);
BoxMonToMon(&daycareMon->mon, &pokemon);
- if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_MON_LEVEL)
+ if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL)
{
experience = GetMonData(&pokemon, MON_DATA_EXP) + daycareMon->steps;
SetMonData(&pokemon, MON_DATA_EXP, &experience);
diff --git a/src/pokemon.c b/src/pokemon.c
index b9e62502d..4c5a3e867 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2143,7 +2143,7 @@ static u8 GetLevelFromMonExp(struct Pokemon *mon)
u32 exp = GetMonData(mon, MON_DATA_EXP, NULL);
s32 level = 1;
- while (level <= MAX_MON_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
+ while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
level++;
return level - 1;
@@ -2155,7 +2155,7 @@ u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon)
u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL);
s32 level = 1;
- while (level <= MAX_MON_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
+ while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
level++;
return level - 1;
diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c
index 760ad2635..50d546415 100644
--- a/src/pokemon_special_anim_scene.c
+++ b/src/pokemon_special_anim_scene.c
@@ -1,12 +1,23 @@
#include "global.h"
#include "gflib.h"
+#include "dynamic_placeholder_text_util.h"
+#include "item.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "pokemon_special_anim_internal.h"
#include "strings.h"
#include "text_window.h"
+#include "constants/songs.h"
void sub_811D7D4(u16 animType);
+void sub_811DB7C(struct PokemonSpecialAnimScene * scene, u8 a1, u8 a2, u8 a3);
+void sub_811DBA8(struct PokemonSpecialAnimScene * scene);
+void sub_811E194(u8 a0);
+void sub_811E204(struct PokemonSpecialAnimScene * scene);
+bool8 sub_811E2F4(void);
+void sub_811E348(struct PokemonSpecialAnimScene * scene);
+void sub_811E388(void);
+bool32 sub_811E5A4(void);
const u16 gUnknown_845963C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal");
const u16 gUnknown_845965C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845965C.gbapal");
@@ -114,3 +125,194 @@ void sub_811D2D0(void)
ClearStdWindowAndFrameToTransparent(0, FALSE);
CopyWindowToVram(0, 1);
}
+
+void sub_811D2EC(u8 a0)
+{
+ // a0 --> r5
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8(); // r4
+ u16 itemId = sub_811D0B4(); // r7
+ u16 strWidth = 0; // r8
+ u8 textSpeed = GetTextSpeedSetting(); // r9
+ struct Pokemon * pokemon = sub_811D094(); // r6
+ u16 level;
+ u8 *str;
+
+ switch (a0)
+ {
+ case 0: // Item was used on Mon
+ str = StringCopy(scene->field_0014, ItemId_GetName(itemId));
+ str = StringCopy(str, gUnknown_841B285);
+ GetMonData(pokemon, MON_DATA_NICKNAME, str);
+ StringAppend(scene->field_0014, gUnknown_841B293);
+ break;
+ case 1: // Mon's level was elevated to level
+ level = GetMonData(pokemon, MON_DATA_LEVEL);
+ GetMonData(pokemon, MON_DATA_NICKNAME, scene->field_0014);
+ str = StringAppend(scene->field_0014, gUnknown_841B295);
+ if (level < MAX_LEVEL)
+ level++;
+ str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, level < MAX_LEVEL ? 2 : 3);
+ StringAppend(str, gUnknown_841B2A7);
+ break;
+ case 9: // Mon learned move
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sub_811D0F4());
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sub_811D0D0());
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->field_0014, gUnknown_841B32E);
+ break;
+ case 4: // poof!
+ strWidth += GetStringWidth(2, gUnknown_841B2F1, -1);
+ // fallthrough
+ case 3: // 2 and...
+ strWidth += GetStringWidth(2, gUnknown_841B2ED, -1);
+ // fallthrough
+ case 2: // 1
+ StringCopy(scene->field_0014, gUnknown_8459998[a0 - 2]);
+ textSpeed = 1;
+ break;
+ case 5: // Mon forgot move
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sub_811D0F4());
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sub_811D0C4());
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->field_0014, gUnknown_841B306);
+ break;
+ case 6: // And...
+ StringCopy(scene->field_0014, gUnknown_841B315);
+ break;
+ case 7: // Machine set!
+ StringCopy(scene->field_0014, gUnknown_841B31B);
+ break;
+ case 8: // Huh?
+ StringCopy(scene->field_0014, gUnknown_841B329);
+ break;
+ default:
+ return;
+ }
+
+ AddTextPrinterParameterized5(0, 2, scene->field_0014, strWidth, 0, textSpeed, NULL, 0, 4);
+}
+
+void sub_811D4D4(void)
+{
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ CopyWindowToVram(0, 2);
+}
+
+bool8 sub_811D4EC(void)
+{
+ return IsTextPrinterActive(0);
+}
+
+void sub_811D4FC(void)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ scene->field_0000 = 0;
+ BlendPalettes((0x10000 << IndexOfSpritePaletteTag(0)) | 4, 16, RGB_BLACK);
+ sub_811E204(scene);
+}
+
+bool8 sub_811D530(void)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+
+ switch (scene->field_0000)
+ {
+ case 0:
+ if (!sub_811E2F4())
+ {
+ BeginNormalPaletteFade((0x10000 << IndexOfSpritePaletteTag(0)) | 4, -1, 16, 0, RGB_BLACK);
+ scene->field_0000++;
+ }
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ return FALSE;
+ break;
+ }
+ return TRUE;
+}
+
+void sub_811D5A0(void)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ scene->field_0000 = 0;
+}
+
+void sub_811D5B0(void)
+{
+ sub_811E388();
+ ResetPaletteFadeControl();
+}
+
+bool8 sub_811D5C0(void)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ switch (scene->field_0000)
+ {
+ case 0:
+ sub_811E194(0);
+ scene->field_0000++;
+ break;
+ case 1:
+ if (!sub_811D9A8())
+ {
+ scene->field_0004 = 0;
+ scene->field_0000++;
+ }
+ break;
+ case 2:
+ scene->field_0004++;
+ if (scene->field_0004 > 20)
+ scene->field_0000++;
+ break;
+ case 3:
+ sub_811DB7C(scene, 1, 0, 1);
+ scene->field_0004 = 0;
+ scene->field_0000++;
+ break;
+ case 4:
+ scene->field_0004++;
+ if (scene->field_0004 > 0)
+ {
+ scene->field_0004 = 0;
+ PlaySE(SE_W025);
+ BeginNormalPaletteFade(0x00000001, 2, 0, 12, RGB(8, 13, 31));
+ sub_811E348(scene);
+ scene->field_0000++;
+ }
+ break;
+ case 5:
+ scene->field_0004++;
+ if (scene->field_0004 > 70)
+ {
+ sub_811DBA8(scene);
+ BeginNormalPaletteFade(0x00000001, 6, 12, 0, RGB(8, 13, 31));
+ scene->field_0004 = 0;
+ scene->field_0000++;
+ }
+ break;
+ case 6:
+ scene->field_0004++;
+ if (!sub_811E5A4() && scene->field_0004 > 40)
+ {
+ scene->field_0004 = 0;
+ scene->field_0000++;
+ }
+ break;
+ case 7:
+ scene->field_0004++;
+ if (scene->field_0004 > 20)
+ {
+ scene->field_0000++;
+ }
+ break;
+ case 8:
+ PlaySE(SE_EXPMAX);
+ DestroySprite(scene->field_0010);
+ scene->field_0000++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}