diff options
-rw-r--r-- | asm/pokemon_special_anim.s | 495 | ||||
-rw-r--r-- | include/constants/pokemon.h | 1 | ||||
-rw-r--r-- | include/pokemon.h | 2 | ||||
-rw-r--r-- | include/pokemon_special_anim_internal.h | 21 | ||||
-rw-r--r-- | include/strings.h | 10 | ||||
-rw-r--r-- | src/data/pokemon/experience_tables.h | 2 | ||||
-rw-r--r-- | src/daycare.c | 4 | ||||
-rw-r--r-- | src/pokemon.c | 4 | ||||
-rw-r--r-- | src/pokemon_special_anim_scene.c | 202 |
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; +} |