From 3ee36e8fcf7fd5e1739b52b4ddc9e2ac2103c8bb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 12 Nov 2017 21:40:18 -0800 Subject: Start decompiling the second half of pokemon_summary_screen --- src/pokemon/pokemon_summary_screen.c | 168 ++++++++++++++++++++++++++++++++++- 1 file changed, 167 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 70b9b7d94..02c5b7501 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1,13 +1,35 @@ #include "global.h" #include "pokemon_summary_screen.h" +#include "data2.h" +#include "ewram.h" +#include "item.h" +#include "items.h" #include "link.h" #include "menu.h" +#include "menu_helpers.h" +#include "party_menu.h" #include "pokemon.h" #include "region_map.h" +#include "species.h" #include "string_util.h" +#include "strings.h" #include "strings2.h" #include "tv.h" -#include "ewram.h" + +struct SummaryScreenStruct +{ + /*0x00*/ u8 filler0[9]; + /*0x09*/ u8 unk9; +}; + +#define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) + +extern u8 *sub_80A1E58(u8 *, u8); +static void sub_80A0A2C(struct Pokemon *, u8, u8); +extern void sub_80A1FF8(const u8 *, u8, u8, u8); + +extern const u8 gUnknown_083C15AE[]; +extern const u8 gUnknown_083C15B4[]; bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { @@ -178,3 +200,147 @@ void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 MenuPrint(gStringVar4, left++, top++); } + +void sub_80A0958(struct Pokemon *pokemon) +{ + u16 species; + u8 *buffer; + u8 level; + + species = GetMonData(pokemon, MON_DATA_SPECIES); + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x11; + buffer[2] = 0x7; + buffer[3] = CHAR_SLASH; + buffer += 4; + buffer = StringCopy(buffer, gSpeciesNames[species]); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x50; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 0, 14); + MenuZeroFillWindowRect(3, 16, 9, 17); + + level = GetMonData(pokemon, MON_DATA_LEVEL); + + buffer = sub_80A1E58(gStringVar1, 13); + buffer[0] = 0x34; + buffer += 1; + buffer = ConvertIntToDecimalString(buffer, level); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x20; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 3, 16); + sub_80A0A2C(pokemon, 7, 16); +} + +void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) +{ + const u8 *genderSymbol; + u8 var1; + u8 bottom; + u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + + if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F) + { + u8 gender = GetMonGender(pokemon); + switch (gender) + { + default: + bottom = top + 1; + MenuZeroFillWindowRect(left, top, left, bottom); + return; + case MON_MALE: + genderSymbol = gOtherText_MaleSymbol2; + var1 = 11; + break; + case MON_FEMALE: + genderSymbol = gOtherText_FemaleSymbolAndLv; + var1 = 12; + break; + } + + sub_80A1FF8(genderSymbol, var1, left, top); + } +} + +u8 GetNumRibbons(struct Pokemon *pokemon) +{ + u8 numRibbons = GetMonData(pokemon, MON_DATA_COOL_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_BEAUTY_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_CUTE_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_SMART_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_TOUGH_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_CHAMPION_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_WINNING_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_VICTORY_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_ARTIST_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_EFFORT_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_1); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_2); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_3); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_4); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_5); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_6); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_7); + + return numRibbons; +} + +void PrintNumRibbons(struct Pokemon *pokemon) +{ + u8 numRibbons = GetNumRibbons(pokemon); + + if (numRibbons == 0) + { + StringCopy(gStringVar1, gOtherText_None); + } + else + { + u8 ribbonsStringLength; + u8 *text; + + StringCopy(gStringVar1, gOtherText_Ribbons00); + ribbonsStringLength = StringLength(gStringVar1); + + text = &gStringVar1[ribbonsStringLength - 2]; + + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 0x14; + text[2] = 6; + ConvertIntToDecimalStringN(&text[3], numRibbons, 1, 2); + } + + MenuPrint(gUnknown_083C15AE, 21, 4); +} + +void PrintHeldItemName(u16 itemId, u8 left, u8 top) +{ + if (itemId == ITEM_ENIGMA_BERRY + && sub_80F9344() == TRUE + && IsLinkDoubleBattle() == TRUE + && (ewramSS.unk9 == 1 || ewramSS.unk9 == 4 || ewramSS.unk9 == 5)) + { + StringCopy(gStringVar1, ItemId_GetItem(itemId)->name); + } + else if (itemId == 0) + { + StringCopy(gStringVar1, gOtherText_None); + } + else + { + CopyItemName(itemId, gStringVar1); + } + + MenuPrint(gUnknown_083C15B4, left, top); +} + + -- cgit v1.2.3 From e5a0da4d11fcf6bb1a4ca0ed27da7aaa234c28ac Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 14 Nov 2017 20:58:19 -0800 Subject: Decompile DrawExperienceProgressBar() --- src/pokemon/pokemon_summary_screen.c | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 02c5b7501..63f9a9b9e 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -343,4 +343,71 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) MenuPrint(gUnknown_083C15B4, left, top); } +void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) +{ + u32 curExperience; + u8 level; + u16 species; + u8 i; + u16 *vramAddr; + u32 expToNextLevel = 0; + s64 numExpProgressBarTicks = 0; + + curExperience = GetMonData(pokemon, MON_DATA_EXP); + level = GetMonData(pokemon, MON_DATA_LEVEL); + species = GetMonData(pokemon, MON_DATA_SPECIES); + + // The experience progress bar is shown as empty when the Pokemon is already level 100. + if (level < 100) + { + u32 nextLevelExp; + u32 expSinceLastLevel; + u32 expBetweenLevels; + u32 curLevelExperience; + + nextLevelExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expToNextLevel = nextLevelExp - curExperience; + curLevelExperience = gExperienceTables[gBaseStats[species].growthRate][level]; + expBetweenLevels = (nextLevelExp - curLevelExperience); + expSinceLastLevel = curExperience - curLevelExperience; + + // Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar. + // There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator + // is multiplied by 64. + numExpProgressBarTicks = (expSinceLastLevel * 64) / expBetweenLevels; + if (numExpProgressBarTicks == 0 && expSinceLastLevel != 0) + { + // Ensure sure some exp. gain is visible in the progress bar. + numExpProgressBarTicks = 1; + } + } + + ConvertIntToDecimalString(gStringVar1, expToNextLevel); + MenuPrint_RightAligned(gStringVar1, left + 6, top); + + // Draw each of the 8 tiles that make up the experience progress bar. + vramAddr = (u16 *)(VRAM + 0x4CAA); + for (i = 0; i < 8; i++) + { + u16 tile; + u16 baseTile = 0x2062; + + if (numExpProgressBarTicks > 7) + { + tile = 0x206A; // full exp. bar block + } + else + { + tile = (numExpProgressBarTicks % 8) + baseTile; + } + + vramAddr[i] = tile; + + numExpProgressBarTicks -= 8; + if (numExpProgressBarTicks < 0) + { + numExpProgressBarTicks = 0; + } + } +} -- cgit v1.2.3 From 34a49a726c6c42803950fc993394be8b96492c71 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 14 Nov 2017 22:00:53 -0800 Subject: More pokemon_summary_screen decompilation --- src/pokemon/mon_markings.c | 16 +- src/pokemon/pokemon_summary_screen.c | 1964 ++++++++++++++++++++++++++++++++++ src/strings.c | 2 +- 3 files changed, 1973 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index 29e8c5127..e330fed65 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -45,11 +45,11 @@ extern const union AnimCmd *const gSpriteAnimTable_83E533C[]; static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL; -void sub_80F761C(s16, s16, u16, u16); -void nullsub_65(struct Sprite *); -void sub_80F78CC(struct Sprite *); -void sub_80F7908(struct Sprite *); -struct Sprite *sub_80F7960(u16, u16, u16 *, u16); +static void sub_80F761C(s16, s16, u16, u16); +static void nullsub_65(struct Sprite *); +static void sub_80F78CC(struct Sprite *); +static void sub_80F7908(struct Sprite *); +static struct Sprite *sub_80F7960(u16, u16, const u16 *, u16); void sub_80F727C(struct PokemonMarkMenu *ptr) { @@ -335,21 +335,21 @@ void sub_80F7908(struct Sprite *sprite) sprite->pos1.y = 16 * sMenu->cursorPos + sMenu->cursorBaseY; } -struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, u16 *palette) +struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, const u16 *palette) { if (!palette) palette = gUnknown_083E49F4; return sub_80F7960(tileTag, paletteTag, palette, 16); } -struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, u16 *palette) +struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, const u16 *palette) { if (!palette) palette = gUnknown_083E49F4; return sub_80F7960(tileTag, paletteTag, palette, 1); } -struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, u16 *palette, u16 size) +struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size) { u8 spriteId; struct SpriteTemplate sprTemplate; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 63f9a9b9e..8402bcf16 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -7,29 +7,73 @@ #include "link.h" #include "menu.h" #include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" #include "party_menu.h" +#include "pokeball.h" #include "pokemon.h" #include "region_map.h" +#include "sound.h" #include "species.h" +#include "sprite.h" #include "string_util.h" #include "strings.h" #include "strings2.h" +#include "task.h" #include "tv.h" struct SummaryScreenStruct { /*0x00*/ u8 filler0[9]; /*0x09*/ u8 unk9; + /*0x0A*/ u8 fillerA; + /*0x0B*/ u8 unkB; + /*0x0C*/ u8 fillerC; + /*0x0D*/ u8 unkD; + /*0x0E*/ u8 fillerE[0x2]; + /*0x10*/ struct Pokemon unk10; + /*0x74*/ u8 filler74; + /*0x75*/ u8 unk75; + /*0x76*/ u8 unk76; + /*0x77*/ u8 filler77[0x2]; + /*0x79*/ u8 unk79; + /*0x7A*/ u8 unk7A; + /*0x7B*/ u8 filler7B[0x3]; + /*0x7E*/ u8 unk7E; + /*0x7F*/ u8 unk7F; }; #define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +extern void sub_80A20A8(u8); +extern u8 ball_number_to_ball_processing_index(u16); +extern void sub_809F678(struct Pokemon *); +extern void sub_80A1BC0(struct Sprite *sprite); +extern void sub_80A1888(struct Sprite *); +extern void sub_80A00F4(s16); +extern void sub_80A0428(struct Pokemon *, s16*); +extern void sub_80A18E4(u8); +extern void GetStringCenterAlignXOffset(u8, u8, u8); extern u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); extern void sub_80A1FF8(const u8 *, u8, u8, u8); +extern TaskFunc gUnknown_03005CF0; +extern const u8 gUnknown_083C15BC[]; +extern struct Sprite *gUnknown_020384F4; +extern const u16 gSummaryScreenMonMarkingsPalette[]; +extern struct SpriteTemplate gSpriteTemplate_83C1304; +extern struct SpriteTemplate gSpriteTemplate_83C1280; +extern const u8 gUnknown_083C11D8[]; +extern struct SpriteTemplate gSpriteTemplate_83C11C0; +extern struct SpriteTemplate gUnknown_02024E8C; +extern const u16 gUnknown_08E94510[]; +extern const u16 gUnknown_08E94550[]; +extern const u16 gUnknown_08E94590[]; +extern const u8 gUnknown_08E73E88[]; extern const u8 gUnknown_083C15AE[]; extern const u8 gUnknown_083C15B4[]; +extern const u8 *const gUnknown_083C1068[]; bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { @@ -411,3 +455,1923 @@ void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) } } } + +// Prints the text displayed in the top-left or top-right of the screen. +// Each of the 4 summary screens displays different text. +void PrintSummaryWindowHeaderText(void) +{ + u8 *buffer = gStringVar1; + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x12; + buffer[2] = 0x2; + + buffer += 3; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7E]); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x58; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 0, 0); + + if (ewramSS.unk7F != 0) + { + GetStringCenterAlignXOffset(5, 23, 0); + GetStringCenterAlignXOffset(6, 24, 0); + } + else + { + MenuZeroFillWindowRect(23, 0, 24, 1); + } + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7F]); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x28; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 25, 0); +} + +// If the given pokemon previously had the pokerus virus, a small +// dot will be drawn in between the pokeball and the mon's level. +void DrawPokerusSurvivorDot(struct Pokemon *pokemon) +{ + u16 *vram1 = (u16 *)(VRAM + 0xE444); + u16 *vram2 = (u16 *)(VRAM + 0xEC44); + + if (!CheckPartyPokerus(pokemon, 0) && CheckPartyHasHadPokerus(pokemon, 0)) + { + *vram1 = 0x2C; + *vram2 = 0x2C; + } + else + { + *vram1 = 0x081A; + *vram2 = 0x081A; + } +} + +// Draws the 4 small navigation circles at the top of the pokemon summary screen. +#ifdef NONMATCHING +void DrawSummaryScreenNavigationDots(void) +{ + void *dest; + u16 arr[8]; + u8 i = 0; + struct SummaryScreenStruct *SS = (struct SummaryScreenStruct *)(gSharedMem + 0x18000); + u16 var1 = 0x4040; + u16 var2 = 0x404A; + + for (i = 0; i < 4; i++) + { + if (i < SS->unk75) + { + arr[i * 2] = var1; + arr[(i * 2) + 1] = var1 + 1; + } + else if (i > SS->unk76) + { + arr[i * 2] = var2; + arr[(i * 2) + 1] = var2 + 1; + } + else + { + if (i < SS->unkB) + { + arr[i * 2] = 0x4046; + arr[(i * 2) + 1] = 0x4046 + 1; + } + + if (i == SS->unkB) + { + if (i != SS->unk76) + { + arr[i * 2] = 0x4041; + arr[(i * 2) + 1] = 0x4041 + 1; + } + else + { + arr[i * 2] = 0x404B; + arr[(i * 2) + 1] = 0x404B + 1; + } + } + + if (i > SS->unkB) + { + if (i != SS->unk76) + { + arr[i * 2] = 0x4043; + arr[(i * 2) + 1] = 0x4043 + 1; + } + else + { + arr[i * 2] = 0x4048; + arr[(i * 2) + 1] = 0x4048 + 1; + } + } + } + } + + dest = (void *)(VRAM + 0xE016); + DmaCopy16(3, arr, dest, 16); + + for (i = 0; i < 8; i++) + { + arr[i] += 0x10; + } + + dest = (void *)(VRAM + 0xE056); + DmaCopy16(3, arr, dest, 16); +} +#else +__attribute__((naked)) +void DrawSummaryScreenNavigationDots(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + movs r3, 0\n\ + ldr r6, _080A0F24 @ =gSharedMem + 0x18000\n\ + adds r5, r6, 0\n\ + ldr r1, _080A0F28 @ =0x00004040\n\ + mov r8, r1\n\ + ldr r2, _080A0F2C @ =0x0000404a\n\ + mov r10, r2\n\ +_080A0F02:\n\ + adds r0, r5, 0\n\ + adds r0, 0x75\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bcs _080A0F30\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + add r0, sp\n\ + mov r4, r8\n\ + strh r4, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + mov r7, sp\n\ + adds r0, r7, r1\n\ + strh r4, [r0]\n\ + b _080A0FE2\n\ + .align 2, 0\n\ +_080A0F24: .4byte gSharedMem + 0x18000\n\ +_080A0F28: .4byte 0x00004040\n\ +_080A0F2C: .4byte 0x0000404a\n\ +_080A0F30:\n\ + movs r0, 0x76\n\ + adds r0, r6\n\ + mov r12, r0\n\ + ldrb r1, [r0]\n\ + cmp r3, r1\n\ + bls _080A0F52\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + add r0, sp\n\ + mov r2, r10\n\ + strh r2, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + mov r4, sp\n\ + adds r0, r4, r1\n\ + strh r2, [r0]\n\ + b _080A0FE2\n\ +_080A0F52:\n\ + ldrb r4, [r5, 0xB]\n\ + cmp r3, r4\n\ + bcs _080A0F6E\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r7, sp\n\ + adds r2, r7, r0\n\ + ldr r0, _080A0F88 @ =0x00004046\n\ + strh r0, [r2]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + add r1, sp\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080A0F6E:\n\ + cmp r3, r4\n\ + bne _080A0FA6\n\ + mov r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + beq _080A0F90\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r4, sp\n\ + adds r2, r4, r0\n\ + ldr r0, _080A0F8C @ =0x00004041\n\ + b _080A0F9A\n\ + .align 2, 0\n\ +_080A0F88: .4byte 0x00004046\n\ +_080A0F8C: .4byte 0x00004041\n\ +_080A0F90:\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r7, sp\n\ + adds r2, r7, r0\n\ + ldr r0, _080A0FC4 @ =0x0000404b\n\ +_080A0F9A:\n\ + strh r0, [r2]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + add r1, sp\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080A0FA6:\n\ + ldrb r0, [r5, 0xB]\n\ + cmp r3, r0\n\ + bls _080A0FE2\n\ + adds r0, r6, 0\n\ + adds r0, 0x76\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + beq _080A0FCC\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r4, sp\n\ + adds r2, r4, r0\n\ + ldr r0, _080A0FC8 @ =0x00004043\n\ + b _080A0FD6\n\ + .align 2, 0\n\ +_080A0FC4: .4byte 0x0000404b\n\ +_080A0FC8: .4byte 0x00004043\n\ +_080A0FCC:\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r7, sp\n\ + adds r2, r7, r0\n\ + ldr r0, _080A1034 @ =0x00004048\n\ +_080A0FD6:\n\ + strh r0, [r2]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + add r1, sp\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080A0FE2:\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x3\n\ + bls _080A0F02\n\ + ldr r1, _080A1038 @ =0x0600e016\n\ + ldr r0, _080A103C @ =0x040000d4\n\ + mov r2, sp\n\ + str r2, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _080A1040 @ =0x80000008\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + movs r3, 0\n\ +_080A0FFE:\n\ + lsls r0, r3, 1\n\ + mov r4, sp\n\ + adds r1, r4, r0\n\ + ldrh r0, [r1]\n\ + adds r0, 0x10\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x7\n\ + bls _080A0FFE\n\ + ldr r1, _080A1044 @ =0x0600e056\n\ + ldr r0, _080A103C @ =0x040000d4\n\ + str r4, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _080A1040 @ =0x80000008\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + add sp, 0x10\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\ + .align 2, 0\n\ +_080A1034: .4byte 0x00004048\n\ +_080A1038: .4byte 0x0600e016\n\ +_080A103C: .4byte 0x040000d4\n\ +_080A1040: .4byte 0x80000008\n\ +_080A1044: .4byte 0x0600e056\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +__attribute__((naked)) +void sub_80A1048(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r0, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + ldr r1, _080A10A0 @ =gTasks + 0x8\n\ + adds r6, r0, r1\n\ + ldrh r0, [r6]\n\ + ldrh r1, [r6, 0x2]\n\ + adds r0, r1\n\ + strh r0, [r6, 0x2]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080A106E\n\ + b _080A1224\n\ +_080A106E:\n\ + movs r5, 0x2\n\ + ldrsh r2, [r6, r5]\n\ + ldr r0, _080A10A4 @ =0x0000024a\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + ldr r1, _080A10A8 @ =gUnknown_08E73508\n\ + adds r4, r0, r1\n\ + ldr r5, _080A10AC @ =0x0600e480\n\ + lsls r2, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r7, r1, 0\n\ + cmp r2, r0\n\ + bhi _080A10B4\n\ + ldr r0, _080A10B0 @ =0x040000d4\n\ + str r4, [r0]\n\ + str r5, [r0, 0x4]\n\ + lsrs r1, r2, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A10E0\n\ + .align 2, 0\n\ +_080A10A0: .4byte gTasks + 0x8\n\ +_080A10A4: .4byte 0x0000024a\n\ +_080A10A8: .4byte gUnknown_08E73508\n\ +_080A10AC: .4byte 0x0600e480\n\ +_080A10B0: .4byte 0x040000d4\n\ +_080A10B4:\n\ + ldr r3, _080A110C @ =0x040000d4\n\ + str r4, [r3]\n\ + str r5, [r3, 0x4]\n\ + ldr r0, _080A1110 @ =0x80000800\n\ + str r0, [r3, 0x8]\n\ + ldr r0, [r3, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r4, r0\n\ + adds r5, r0\n\ + ldr r1, _080A1114 @ =0xfffff000\n\ + adds r2, r1\n\ + cmp r2, r0\n\ + bhi _080A10B4\n\ + str r4, [r3]\n\ + str r5, [r3, 0x4]\n\ + lsrs r0, r2, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r3, 0x8]\n\ + ldr r0, [r3, 0x8]\n\ +_080A10E0:\n\ + movs r5, 0x2\n\ + ldrsh r0, [r6, r5]\n\ + ldr r1, _080A1118 @ =0x0000026a\n\ + subs r1, r0\n\ + lsls r1, 1\n\ + adds r3, r1, r7\n\ + ldr r4, _080A111C @ =0x0600e4c0\n\ + lsls r1, r0, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + cmp r1, r0\n\ + bhi _080A1120\n\ + ldr r0, _080A110C @ =0x040000d4\n\ + str r3, [r0]\n\ + str r4, [r0, 0x4]\n\ + lsrs r1, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A114C\n\ + .align 2, 0\n\ +_080A110C: .4byte 0x040000d4\n\ +_080A1110: .4byte 0x80000800\n\ +_080A1114: .4byte 0xfffff000\n\ +_080A1118: .4byte 0x0000026a\n\ +_080A111C: .4byte 0x0600e4c0\n\ +_080A1120:\n\ + ldr r2, _080A1178 @ =0x040000d4\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + ldr r0, _080A117C @ =0x80000800\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r3, r0\n\ + adds r4, r0\n\ + ldr r5, _080A1180 @ =0xfffff000\n\ + adds r1, r5\n\ + cmp r1, r0\n\ + bhi _080A1120\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + lsrs r0, r1, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ +_080A114C:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r6, r1]\n\ + ldr r1, _080A1184 @ =0x0000024a\n\ + subs r1, r0\n\ + lsls r1, 1\n\ + adds r3, r1, r7\n\ + ldr r4, _080A1188 @ =0x0600ec80\n\ + lsls r1, r0, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + cmp r1, r0\n\ + bhi _080A118C\n\ + ldr r0, _080A1178 @ =0x040000d4\n\ + str r3, [r0]\n\ + str r4, [r0, 0x4]\n\ + lsrs r1, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A11B8\n\ + .align 2, 0\n\ +_080A1178: .4byte 0x040000d4\n\ +_080A117C: .4byte 0x80000800\n\ +_080A1180: .4byte 0xfffff000\n\ +_080A1184: .4byte 0x0000024a\n\ +_080A1188: .4byte 0x0600ec80\n\ +_080A118C:\n\ + ldr r2, _080A11E4 @ =0x040000d4\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + ldr r0, _080A11E8 @ =0x80000800\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r3, r0\n\ + adds r4, r0\n\ + ldr r5, _080A11EC @ =0xfffff000\n\ + adds r1, r5\n\ + cmp r1, r0\n\ + bhi _080A118C\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + lsrs r0, r1, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ +_080A11B8:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r6, r1]\n\ + ldr r1, _080A11F0 @ =0x0000026a\n\ + subs r1, r0\n\ + lsls r1, 1\n\ + adds r3, r1, r7\n\ + ldr r4, _080A11F4 @ =0x0600ecc0\n\ + lsls r1, r0, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + cmp r1, r0\n\ + bhi _080A11F8\n\ + ldr r0, _080A11E4 @ =0x040000d4\n\ + str r3, [r0]\n\ + str r4, [r0, 0x4]\n\ + lsrs r1, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A1224\n\ + .align 2, 0\n\ +_080A11E4: .4byte 0x040000d4\n\ +_080A11E8: .4byte 0x80000800\n\ +_080A11EC: .4byte 0xfffff000\n\ +_080A11F0: .4byte 0x0000026a\n\ +_080A11F4: .4byte 0x0600ecc0\n\ +_080A11F8:\n\ + ldr r2, _080A12B0 @ =0x040000d4\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + ldr r0, _080A12B4 @ =0x80000800\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r3, r0\n\ + adds r4, r0\n\ + ldr r5, _080A12B8 @ =0xfffff000\n\ + adds r1, r5\n\ + cmp r1, r0\n\ + bhi _080A11F8\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + lsrs r0, r1, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ +_080A1224:\n\ + ldrb r4, [r6, 0x2]\n\ + ldrh r7, [r6, 0x2]\n\ + ldrh r0, [r6]\n\ + mov r12, r0\n\ + cmp r4, 0x9\n\ + bhi _080A1272\n\ + adds r3, r6, 0x4\n\ + ldr r2, _080A12B0 @ =0x040000d4\n\ + ldr r5, _080A12BC @ =0x80000001\n\ +_080A1236:\n\ + lsls r1, r4, 1\n\ + ldr r6, _080A12C0 @ =0x0600e480\n\ + adds r0, r1, r6\n\ + str r3, [r2]\n\ + str r0, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + adds r6, 0x40\n\ + adds r0, r1, r6\n\ + str r3, [r2]\n\ + str r0, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + ldr r6, _080A12C4 @ =0x0600ec80\n\ + adds r0, r1, r6\n\ + str r3, [r2]\n\ + str r0, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + ldr r0, _080A12C8 @ =0x0600ecc0\n\ + adds r1, r0\n\ + str r3, [r2]\n\ + str r1, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x9\n\ + bls _080A1236\n\ +_080A1272:\n\ + mov r1, r12\n\ + lsls r0, r1, 16\n\ + cmp r0, 0\n\ + beq _080A1286\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0\n\ + ble _080A1286\n\ + cmp r0, 0x9\n\ + ble _080A12A4\n\ +_080A1286:\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9\n\ + ble _080A129A\n\ + ldr r0, _080A12CC @ =gOtherText_Status\n\ + movs r1, 0xD\n\ + movs r2, 0x1\n\ + movs r3, 0x12\n\ + bl sub_80A1FF8\n\ +_080A129A:\n\ + bl sub_80A1D18\n\ + mov r0, r8\n\ + bl DestroyTask\n\ +_080A12A4:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A12B0: .4byte 0x040000d4\n\ +_080A12B4: .4byte 0x80000800\n\ +_080A12B8: .4byte 0xfffff000\n\ +_080A12BC: .4byte 0x80000001\n\ +_080A12C0: .4byte 0x0600e480\n\ +_080A12C4: .4byte 0x0600ec80\n\ +_080A12C8: .4byte 0x0600ecc0\n\ +_080A12CC: .4byte gOtherText_Status\n\ + .syntax divided\n"); +} + +void sub_80A12D0(u8 taskId) +{ + u8 newTaskId; + + MenuZeroFillWindowRect(1, 18, 5, 19); + sub_80A18E4(29); + + newTaskId = CreateTask(sub_80A1048, 0); + gTasks[newTaskId].data[0] = (s8)taskId; + + if ((s8)taskId < 0) + { + gTasks[newTaskId].data[1] = 10; + } + else + { + gTasks[newTaskId].data[1] = 0; + } + + gTasks[newTaskId].data[2] = 1; +} + +// void sub_80A1334(u8 taskId) +// { +// u8 i; +// s16 var1; + +// gTasks[taskId].data[1] += gTasks[taskId].data[0]; + +// var1 = 0; +// if (gTasks[taskId].data[1] >= 0) +// { +// var1 = 10; +// if (gTasks[taskId].data[1] < 10) +// { +// var1 = gTasks[taskId].data[1]; +// } +// } + +// if (var1 > 0) +// { +// u8 *vramAddr = (u8 *)(VRAM + 0x5B40); +// for (i = 0; i < 7; i++) +// { +// CpuSet(&gUnknown_08E73E88[(i + 13) * 64], vramAddr, var1 & 0x1FFFFF); +// vramAddr += 64; +// } +// } + +// if (var1 <= 9) +// { +// u8 *vramAddr = (u8 *)(VRAM + 0x5B40); +// for (i = 0; i < 64; i++) +// { +// u16 val = gTasks[taskId].data[2]; +// CpuSet(&val, vramAddr, ((10 - var1) & 0x1FFFFF) | 0x800000); +// } +// } +// else +// { +// MenuZeroFillWindowRect(0, 19, 9, 19); +// } + +// if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0) +// { +// if (ewramSS.unkB == 2) +// { +// MenuZeroFillWindowRect(0, 14, 9, 18); +// sub_80A0958(ewramSS.unk10); + +// if (GetMonStatusAndPokerus(ewramSS.unk10)) +// { +// sub_80A1FF8(gOtherText_Status, 13, 1, 18); +// } + +// DestroyTask(taskId); +// } +// } + +// if (gTasks[taskId].data[1] > 9) +// { +// if (ewramSS.unkB == 2) +// { +// sub_80A00F4(gTasks[taskId].data[3]); +// } + +// sub_80A0428(ewramSS.unk10, &gTasks[taskId].data[3]); +// DestroyTask(taskId); +// } +// } +__attribute__((naked)) +void sub_80A1334(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + lsls r0, 2\n\ + add r0, r10\n\ + lsls r0, 3\n\ + ldr r1, _080A13E4 @ =gTasks + 0x8\n\ + adds r7, r0, r1\n\ + ldrh r0, [r7]\n\ + ldrh r1, [r7, 0x2]\n\ + adds r0, r1\n\ + strh r0, [r7, 0x2]\n\ + lsls r0, 16\n\ + asrs r1, r0, 16\n\ + movs r0, 0\n\ + cmp r1, 0\n\ + blt _080A136A\n\ + movs r0, 0xA\n\ + cmp r1, 0xA\n\ + bgt _080A136A\n\ + ldrh r0, [r7, 0x2]\n\ +_080A136A:\n\ + lsls r0, 16\n\ + asrs r2, r0, 16\n\ + mov r9, r0\n\ + cmp r2, 0\n\ + ble _080A13A6\n\ + movs r0, 0xA\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + ldr r1, _080A13E8 @ =0x06005b40\n\ + adds r4, r0, r1\n\ + movs r5, 0\n\ + adds r6, r2, 0\n\ + ldr r0, _080A13EC @ =0x001fffff\n\ + mov r8, r0\n\ +_080A1386:\n\ + adds r0, r5, 0\n\ + adds r0, 0xD\n\ + lsls r0, 6\n\ + ldr r1, _080A13F0 @ =gUnknown_08E73E88\n\ + adds r0, r1\n\ + adds r1, r4, 0\n\ + mov r2, r8\n\ + ands r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A1386\n\ +_080A13A6:\n\ + mov r1, r9\n\ + asrs r2, r1, 16\n\ + cmp r2, 0x9\n\ + bgt _080A13F4\n\ + ldr r4, _080A13E8 @ =0x06005b40\n\ + movs r5, 0\n\ + mov r8, sp\n\ + movs r0, 0xA\n\ + subs r6, r0, r2\n\ + ldr r0, _080A13EC @ =0x001fffff\n\ + ands r6, r0\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + mov r9, r0\n\ +_080A13C2:\n\ + ldrh r0, [r7, 0x4]\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + mov r2, r9\n\ + orrs r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A13C2\n\ + b _080A1400\n\ + .align 2, 0\n\ +_080A13E4: .4byte gTasks + 0x8\n\ +_080A13E8: .4byte 0x06005b40\n\ +_080A13EC: .4byte 0x001fffff\n\ +_080A13F0: .4byte gUnknown_08E73E88\n\ +_080A13F4:\n\ + movs r0, 0\n\ + movs r1, 0x13\n\ + movs r2, 0x9\n\ + movs r3, 0x13\n\ + bl MenuZeroFillWindowRect\n\ +_080A1400:\n\ + movs r1, 0\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + beq _080A1410\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + bge _080A144A\n\ +_080A1410:\n\ + ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x2\n\ + bne _080A1444\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ + adds r4, 0x10\n\ + adds r0, r4, 0\n\ + bl sub_80A0958\n\ + adds r0, r4, 0\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080A1444\n\ + ldr r0, _080A1484 @ =gOtherText_Status\n\ + movs r1, 0xD\n\ + movs r2, 0x1\n\ + movs r3, 0x12\n\ + bl sub_80A1FF8\n\ +_080A1444:\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A144A:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0x9\n\ + ble _080A1470\n\ + ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x2\n\ + bne _080A1460\n\ + ldrb r0, [r7, 0x6]\n\ + bl sub_80A00F4\n\ +_080A1460:\n\ + adds r0, r4, 0\n\ + adds r0, 0x10\n\ + adds r1, r7, 0x6\n\ + bl sub_80A0428\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A1470:\n\ + add sp, 0x4\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\ + .align 2, 0\n\ +_080A1480: .4byte gSharedMem + 0x18000\n\ +_080A1484: .4byte gOtherText_Status\n\ + .syntax divided\n"); +} + +// Related to re-drawing the summary area underneath the pokemon's picture +// in all of the summary screen tabs. +void sub_80A1488(u8 a, u8 b) +{ + u8 taskId; + + if (ewramSS.unkB == 2) + { + MenuZeroFillWindowRect(0, 14, 9, 19); + } + + taskId = FindTaskIdByFunc(sub_80A1334); + if (taskId == 0xFF) + { + taskId = CreateTask(sub_80A1334, 0); + } + + gTasks[taskId].data[0] = (s8)a; + + if ((s8)a < 0) + { + gTasks[taskId].data[1] = 10; + } + else + { + gTasks[taskId].data[1] = 0; + } + + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = b; +} + +__attribute__((naked)) +void sub_80A1500(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + lsls r0, 2\n\ + add r0, r10\n\ + lsls r0, 3\n\ + ldr r1, _080A15B0 @ =gTasks + 0x8\n\ + adds r7, r0, r1\n\ + ldrh r0, [r7]\n\ + ldrh r1, [r7, 0x2]\n\ + adds r0, r1\n\ + strh r0, [r7, 0x2]\n\ + lsls r0, 16\n\ + asrs r1, r0, 16\n\ + movs r0, 0\n\ + cmp r1, 0\n\ + blt _080A1536\n\ + movs r0, 0xA\n\ + cmp r1, 0xA\n\ + bgt _080A1536\n\ + ldrh r0, [r7, 0x2]\n\ +_080A1536:\n\ + lsls r0, 16\n\ + asrs r2, r0, 16\n\ + mov r9, r0\n\ + cmp r2, 0\n\ + ble _080A1572\n\ + movs r0, 0xA\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + ldr r1, _080A15B4 @ =0x06006b40\n\ + adds r4, r0, r1\n\ + movs r5, 0\n\ + adds r6, r2, 0\n\ + ldr r0, _080A15B8 @ =0x001fffff\n\ + mov r8, r0\n\ +_080A1552:\n\ + adds r0, r5, 0\n\ + adds r0, 0xD\n\ + lsls r0, 6\n\ + ldr r1, _080A15BC @ =gUnknown_08E74688\n\ + adds r0, r1\n\ + adds r1, r4, 0\n\ + mov r2, r8\n\ + ands r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A1552\n\ +_080A1572:\n\ + mov r1, r9\n\ + asrs r2, r1, 16\n\ + cmp r2, 0x9\n\ + bgt _080A15C0\n\ + ldr r4, _080A15B4 @ =0x06006b40\n\ + movs r5, 0\n\ + mov r8, sp\n\ + movs r0, 0xA\n\ + subs r6, r0, r2\n\ + ldr r0, _080A15B8 @ =0x001fffff\n\ + ands r6, r0\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + mov r9, r0\n\ +_080A158E:\n\ + ldrh r0, [r7, 0x4]\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + mov r2, r9\n\ + orrs r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A158E\n\ + b _080A15CC\n\ + .align 2, 0\n\ +_080A15B0: .4byte gTasks + 0x8\n\ +_080A15B4: .4byte 0x06006b40\n\ +_080A15B8: .4byte 0x001fffff\n\ +_080A15BC: .4byte gUnknown_08E74688\n\ +_080A15C0:\n\ + movs r0, 0\n\ + movs r1, 0x13\n\ + movs r2, 0x9\n\ + movs r3, 0x13\n\ + bl MenuZeroFillWindowRect\n\ +_080A15CC:\n\ + movs r1, 0\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + beq _080A15DC\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + bge _080A1616\n\ +_080A15DC:\n\ + ldr r4, _080A164C @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x3\n\ + bne _080A1610\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ + adds r4, 0x10\n\ + adds r0, r4, 0\n\ + bl sub_80A0958\n\ + adds r0, r4, 0\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080A1610\n\ + ldr r0, _080A1650 @ =gOtherText_Status\n\ + movs r1, 0xD\n\ + movs r2, 0x1\n\ + movs r3, 0x12\n\ + bl sub_80A1FF8\n\ +_080A1610:\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A1616:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0x9\n\ + ble _080A163C\n\ + ldr r4, _080A164C @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x3\n\ + bne _080A162C\n\ + ldrb r0, [r7, 0x6]\n\ + bl sub_80A00F4\n\ +_080A162C:\n\ + adds r0, r4, 0\n\ + adds r0, 0x10\n\ + adds r1, r7, 0x6\n\ + bl sub_80A0428\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A163C:\n\ + add sp, 0x4\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\ + .align 2, 0\n\ +_080A164C: .4byte gSharedMem + 0x18000\n\ +_080A1650: .4byte gOtherText_Status\n\ + .syntax divided\n"); +} + +void sub_80A1654(u8 a, u8 b) +{ + u8 taskId; + + if (ewramSS.unkB == 3) + { + MenuZeroFillWindowRect(0, 14, 9, 19); + } + + taskId = FindTaskIdByFunc(sub_80A1500); + if (taskId == 0xFF) + { + taskId = CreateTask(sub_80A1500, 0); + } + + gTasks[taskId].data[0] = (s8)a; + + if ((s8)a < 0) + { + gTasks[taskId].data[1] = 10; + } + else + { + gTasks[taskId].data[1] = 0; + } + + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = b; +} + +#ifdef NONMATCHING +void sub_80A16CC(u8 a) +{ + u8 i; + u16 *vramAddr = (u16 *)(VRAM + 0x6AD4); + + if (a == 0) + { + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94510[i] + 0x1000; + vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x1000; + vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x1000; + } + } + else + { + i = 0; + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94550[i] + 0x1000; + vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x1000; + vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x1000; + } + } + + vramAddr = (u16 *)(VRAM + 0x5AD4); + + if (a == 0) + { + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94510[i] + 0x3000; + vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x3000; + vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x3000; + } + } + else + { + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94550[i] + 0x3000; + vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x3000; + vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x3000; + } + } +} +#else +__attribute__((naked)) +void sub_80A16CC(u8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + ldr r0, _080A1724 @ =0x06006ad4\n\ + mov r12, r0\n\ + mov r1, r9\n\ + cmp r1, 0\n\ + bne _080A172C\n\ + movs r5, 0\n\ + ldr r7, _080A1728 @ =gUnknown_08E94510\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r6, r0, 0\n\ + movs r1, 0x40\n\ + adds r1, r7\n\ + mov r8, r1\n\ +_080A16F4:\n\ + lsls r2, r5, 1\n\ + mov r0, r12\n\ + adds r3, r2, r0\n\ + adds r4, r2, r7\n\ + ldrh r1, [r4]\n\ + adds r0, r6, r1\n\ + strh r0, [r3]\n\ + adds r1, r3, 0\n\ + adds r1, 0x40\n\ + ldrh r4, [r4]\n\ + adds r0, r6, r4\n\ + strh r0, [r1]\n\ + adds r3, 0x80\n\ + add r2, r8\n\ + ldrh r2, [r2]\n\ + adds r0, r6, r2\n\ + strh r0, [r3]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A16F4\n\ + b _080A1768\n\ + .align 2, 0\n\ +_080A1724: .4byte 0x06006ad4\n\ +_080A1728: .4byte gUnknown_08E94510\n\ +_080A172C:\n\ + movs r5, 0\n\ + ldr r6, _080A17B0 @ =gUnknown_08E94550\n\ + movs r7, 0x80\n\ + lsls r7, 5\n\ + adds r4, r7, 0\n\ + movs r0, 0x40\n\ + adds r0, r6\n\ + mov r8, r0\n\ +_080A173C:\n\ + lsls r1, r5, 1\n\ + mov r7, r12\n\ + adds r2, r1, r7\n\ + adds r0, r1, r6\n\ + ldrh r0, [r0]\n\ + adds r0, r4, r0\n\ + strh r0, [r2]\n\ + adds r3, r2, 0\n\ + adds r3, 0x40\n\ + add r1, r8\n\ + ldrh r7, [r1]\n\ + adds r0, r4, r7\n\ + strh r0, [r3]\n\ + adds r2, 0x80\n\ + ldrh r1, [r1]\n\ + adds r0, r4, r1\n\ + strh r0, [r2]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A173C\n\ +_080A1768:\n\ + ldr r0, _080A17B4 @ =0x06005ad4\n\ + mov r12, r0\n\ + mov r1, r9\n\ + cmp r1, 0\n\ + bne _080A17BC\n\ + movs r5, 0\n\ + ldr r7, _080A17B8 @ =gUnknown_08E94510\n\ + movs r0, 0xC0\n\ + lsls r0, 6\n\ + adds r6, r0, 0\n\ + movs r1, 0x40\n\ + adds r1, r7\n\ + mov r8, r1\n\ +_080A1782:\n\ + lsls r2, r5, 1\n\ + mov r0, r12\n\ + adds r3, r2, r0\n\ + adds r4, r2, r7\n\ + ldrh r1, [r4]\n\ + adds r0, r6, r1\n\ + strh r0, [r3]\n\ + adds r1, r3, 0\n\ + adds r1, 0x40\n\ + ldrh r4, [r4]\n\ + adds r0, r6, r4\n\ + strh r0, [r1]\n\ + adds r3, 0x80\n\ + add r2, r8\n\ + ldrh r2, [r2]\n\ + adds r0, r6, r2\n\ + strh r0, [r3]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A1782\n\ + b _080A17F8\n\ + .align 2, 0\n\ +_080A17B0: .4byte gUnknown_08E94550\n\ +_080A17B4: .4byte 0x06005ad4\n\ +_080A17B8: .4byte gUnknown_08E94510\n\ +_080A17BC:\n\ + movs r5, 0\n\ + ldr r6, _080A1804 @ =gUnknown_08E94550\n\ + movs r7, 0xC0\n\ + lsls r7, 6\n\ + adds r4, r7, 0\n\ + movs r0, 0x40\n\ + adds r0, r6\n\ + mov r8, r0\n\ +_080A17CC:\n\ + lsls r1, r5, 1\n\ + mov r7, r12\n\ + adds r2, r1, r7\n\ + adds r0, r1, r6\n\ + ldrh r0, [r0]\n\ + adds r0, r4, r0\n\ + strh r0, [r2]\n\ + adds r3, r2, 0\n\ + adds r3, 0x40\n\ + add r1, r8\n\ + ldrh r7, [r1]\n\ + adds r0, r4, r7\n\ + strh r0, [r3]\n\ + adds r2, 0x80\n\ + ldrh r1, [r1]\n\ + adds r0, r4, r1\n\ + strh r0, [r2]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A17CC\n\ +_080A17F8:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1804: .4byte gUnknown_08E94550\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +u8 sub_80A1808(struct Pokemon *pokemon) +{ + u16 species; + u8 spriteId; + + species = GetMonData(pokemon, MON_DATA_SPECIES2); + spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5); + + FreeSpriteOamMatrix(&gSprites[spriteId]); + + gSprites[spriteId].data0 = species; + gSprites[spriteId].callback = sub_80A1888; + + if (!IsPokeSpriteNotFlipped(species)) + { + gSprites[spriteId].hFlip = 1; + } + else + { + gSprites[spriteId].hFlip = 0; + } + + return spriteId; +} + +void sub_80A1888(struct Sprite *sprite) +{ + if (!gPaletteFade.active) + { + sprite->callback = SpriteCallbackDummy; + + if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + PlayCry1(sprite->data0, 0); + } + } +} + +void sub_80A18C4(void) +{ + u8 i; + + for (i = 0; i < 30; i++) + { + ewram1A000[i] = 0xFF; + } +} + +void sub_80A18E4(u8 a) +{ + if (ewram1A000[a] != 0xFF) + { + DestroySprite(&gSprites[ewram1A000[a]]); + ewram1A000[a] = 0xFF; + } +} + +void sub_80A1918(u8 a, u8 invisible) +{ + gSprites[ewram1A000[a]].invisible = invisible; +} + +void sub_80A1950(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (ewram1A000[i] == 0xFF) + { + ewram1A000[i] = CreateSprite(&gSpriteTemplate_83C11C0, 0, 0, 2); + } + + sub_80A1918(i, 1); + } +} + +void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) +{ + StartSpriteAnim(&gSprites[ewram1A000[d]], animNum); + + gSprites[ewram1A000[d]].oam.paletteNum = gUnknown_083C11D8[animNum]; + gSprites[ewram1A000[d]].pos1.x = x + 16; + gSprites[ewram1A000[d]].pos1.y = y + 8; + + sub_80A1918(d, 0); +} + +void sub_80A1A30(u8 a) +{ + u8 i; + s16 x; + u8 subPriority = 0; + + if (ewramSS.unkB > 1) + { + if (a == 9) + { + subPriority = 1; + } + + for (i = 0; i < 10; i++) + { + x = (i * 16) + 0x58; + ewram1A000[a + i] = CreateSprite(&gSpriteTemplate_83C1280, x, 40, subPriority); + + if (i == 0) + { + StartSpriteAnim(&gSprites[ewram1A000[a]], 4); + } + else if (i == 9) + { + StartSpriteAnim(&gSprites[ewram1A000[a + i]], 5); + } + else + { + StartSpriteAnim(&gSprites[ewram1A000[a + i]], 6); + } + + gSprites[ewram1A000[a + i]].callback = sub_80A1BC0; + gSprites[ewram1A000[a + i]].data0 = a; + gSprites[ewram1A000[a + i]].data1 = 0; + } + } +} + +void sub_80A1B1C(u8 a) +{ + u8 i; + + for (i = 0; i < 10; i++) + { + sub_80A18E4(a + i); + } +} + +#ifdef NONMATCHING +void sub_80A1B40(u8 a) +{ + u8 i; + u8 var1 = a * 3; + + StartSpriteAnim(&gSprites[ewram1A000[9]], var1 + 4); + + for (i = 0; i < 8; i++) + { + StartSpriteAnim(&gSprites[ewram1A000[10 + i]], var1 + 6); + } + + StartSpriteAnim(&gSprites[ewram1A000[18]], var1 + 5); +} +#else +__attribute__((naked)) +void sub_80A1B40(u8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r1, r7, 1\n\ + adds r1, r7\n\ + lsls r1, 24\n\ + ldr r0, _080A1BB4 @ =gSharedMem + 0x1A009\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + ldr r2, _080A1BB8 @ =gSprites\n\ + adds r0, r2\n\ + lsrs r7, r1, 24\n\ + movs r2, 0x80\n\ + lsls r2, 19\n\ + adds r1, r2\n\ + lsrs r1, 24\n\ + bl StartSpriteAnim\n\ + movs r4, 0\n\ + adds r0, r7, 0x6\n\ + lsls r0, 24\n\ + mov r8, r0\n\ +_080A1B74:\n\ + ldr r6, _080A1BBC @ =gSharedMem + 0x1A00A\n\ + adds r0, r4, r6\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r5, _080A1BB8 @ =gSprites\n\ + adds r0, r5\n\ + mov r2, r8\n\ + lsrs r1, r2, 24\n\ + bl StartSpriteAnim\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x7\n\ + bls _080A1B74\n\ + ldrb r1, [r6, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + adds r1, r7, 0x5\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + bl StartSpriteAnim\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1BB4: .4byte gSharedMem + 0x1A009\n\ +_080A1BB8: .4byte gSprites\n\ +_080A1BBC: .4byte gSharedMem + 0x1A00A\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80A1BC0(struct Sprite *sprite) +{ + u8 animNum = sprite->animNum - 4; + if (animNum < 3) + { + sprite->data1 = (sprite->data1 + 1) & 0x1F; + + if (sprite->data1 > 24) + { + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } + else + { + sprite->data1 = 0; + sprite->invisible = 0; + } + + if (sprite->data0 == 9) + { + sprite->pos2.y = ewramSS.unk79 * 16; + } + else + { + sprite->pos2.y = ewramSS.unk7A * 16; + } +} + +__attribute__((naked)) +void sub_80A1C30(u8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 25\n\ + lsrs r3, r0, 24\n\ + adds r4, r3, 0\n\ + adds r0, r3, 0\n\ + adds r0, 0xA\n\ + cmp r3, r0\n\ + bge _080A1C82\n\ + ldr r5, _080A1C88 @ =gSprites\n\ + movs r7, 0x5\n\ + negs r7, r7\n\ + ldr r6, _080A1C8C @ =gSharedMem + 0x1A009\n\ +_080A1C50:\n\ + adds r2, r3, r6\n\ + ldrb r1, [r2]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + movs r1, 0\n\ + strh r1, [r0, 0x30]\n\ + ldrb r0, [r2]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + adds r1, 0x3E\n\ + ldrb r2, [r1]\n\ + adds r0, r7, 0\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r0, r4, 0\n\ + adds r0, 0xA\n\ + cmp r3, r0\n\ + blt _080A1C50\n\ +_080A1C82:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1C88: .4byte gSprites\n\ +_080A1C8C: .4byte gSharedMem + 0x1A009\n\ + .syntax divided\n"); +} + +u8 pokemon_ailments_get_primary(u32 status) +{ + if (status & 0x88) + return 1; + if (status & 0x40) + return 2; + if (status & 0x7) + return 3; + if (status & 0x20) + return 4; + if (status & 0x10) + return 5; + + return 0; +} + +u8 GetMonStatusAndPokerus(struct Pokemon *mon) +{ + u8 statusAilment; + + if (GetMonData(mon, MON_DATA_HP) == 0) + { + return 7; + } + + statusAilment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)); + if (statusAilment == 0) + { + if (!CheckPartyPokerus(mon, 0)) + { + return 0; + } + else + { + return 6; + } + } + + return statusAilment; +} + +#ifdef NONMATCHING +void sub_80A1D18(void) +{ + struct Pokemon mon; + u8 statusAndPkrs; + u8 statusAndPkrs2; + + sub_809F678(&mon); + statusAndPkrs = GetMonStatusAndPokerus(&mon); + + if (statusAndPkrs) + { + statusAndPkrs2 = statusAndPkrs - 1; + + if (ewram1A000[29] == 0xFF) + { + ewram1A000[29] = CreateSprite(&gSpriteTemplate_83C1304, 64, 152, 0); + } + } + else + { + sub_80A18E4(29); + return; + } + + StartSpriteAnim(&gSprites[ewram1A000[29]], statusAndPkrs2); +} +#else +__attribute__((naked)) +void sub_80A1D18(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + sub sp, 0x64\n\ + mov r0, sp\n\ + bl sub_809F678\n\ + mov r0, sp\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + beq _080A1D58\n\ + subs r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r4, _080A1D50 @ =gSharedMem + 0x1A01D\n\ + ldrb r0, [r4]\n\ + cmp r0, 0xFF\n\ + bne _080A1D60\n\ + ldr r0, _080A1D54 @ =gSpriteTemplate_83C1304\n\ + movs r1, 0x40\n\ + movs r2, 0x98\n\ + movs r3, 0\n\ + bl CreateSprite\n\ + strb r0, [r4]\n\ + b _080A1D60\n\ + .align 2, 0\n\ +_080A1D50: .4byte gSharedMem + 0x1A01D\n\ +_080A1D54: .4byte gSpriteTemplate_83C1304\n\ +_080A1D58:\n\ + movs r0, 0x1D\n\ + bl sub_80A18E4\n\ + b _080A1D74\n\ +_080A1D60:\n\ + ldr r0, _080A1D7C @ =gSharedMem + 0x1A01D\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _080A1D80 @ =gSprites\n\ + adds r0, r1\n\ + adds r1, r5, 0\n\ + bl StartSpriteAnim\n\ +_080A1D74:\n\ + add sp, 0x64\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1D7C: .4byte gSharedMem + 0x1A01D\n\ +_080A1D80: .4byte gSprites\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80A1D84(struct Pokemon *mon) +{ + struct Sprite *sprite; + + sprite = sub_80F7920(0x7533, 0x7533, gSummaryScreenMonMarkingsPalette); + gUnknown_020384F4 = sprite; + + if (sprite != NULL) + { + u8 markings = GetMonData(mon, MON_DATA_MARKINGS); + StartSpriteAnim(sprite, markings); + + gUnknown_020384F4->pos1.x = 60; + gUnknown_020384F4->pos1.y = 26; + } +} + +void sub_80A1DCC(struct Pokemon *mon) +{ + DestroySprite(gUnknown_020384F4); + sub_80A1D84(mon); +} + +void sub_80A1DE8(struct Pokemon *mon) +{ + u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL)); + sub_80478DC(ball); + + ewramSS.unkD = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); + gSprites[ewramSS.unkD].callback = SpriteCallbackDummy; + gSprites[ewramSS.unkD].oam.priority = 3; +} + +u8 *sub_80A1E58(u8 *text, u8 id) +{ + if (id != 0xFF) + { + const u8 *ptr = gUnknown_083C15BC; + while (*ptr != 0xFF && *ptr != id) + { + ptr += 4; + } + + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 4; + text[2] = ptr[1]; + text[3] = ptr[2]; + text[4] = ptr[3]; + + text += 5; + } + + return text; +} + +u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8 id) +{ + u8 arr[3]; + + sub_8072CD4(&arr[0], &arr[1], &arr[2]); + + dest = sub_80A1E58(dest, id); + dest = StringCopy(dest, src); + + if (id != 0xFF) + { + dest[0] = EXT_CTRL_CODE_BEGIN; + dest[1] = 4; + dest[2] = arr[0]; + dest[3] = arr[1]; + dest[4] = arr[2]; + dest[5] = 0xFF; + + dest += 5; + } + + return dest; +} + +void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e) +{ + sub_80A1E9C(gStringVar4, text, id); + MenuPrint_PixelCoords(gStringVar4, left, top, (bool8)e); +} + +void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e) +{ + sub_80A1E9C(gStringVar4, text, id); + sub_8072BD8(gStringVar4, c, d, e); +} + +void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e) +{ + ConvertIntToDecimalStringN(gStringVar1, value, mode, n); + sub_80A1EF8(gStringVar1, id, left, top, e); +} + +void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top) +{ + sub_80A1E9C(gStringVar4, text, id); + MenuPrint(gStringVar4, left, top); +} + +u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level) +{ + u8 buffer[12]; + + dest[0] = 0x34; + dest++; + + if (level == 0) + { + level = 5; + } + + ConvertIntToDecimalString(buffer, level); + dest = sub_80A1E9C(dest, buffer, 14); + dest = StringCopy(dest, gOtherText_Comma); + + return dest; +} + +void sub_80A2078(u32 taskId) +{ + gUnknown_03005CF0 = gTasks[taskId].func; + gTasks[taskId].func = sub_80A20A8; + gTasks[taskId].func((u8)taskId); +} + +void sub_80A20A8(u8 taskId) +{ + if (sub_8055870() != TRUE) + { + gTasks[taskId].func = gUnknown_03005CF0; + } +} diff --git a/src/strings.c b/src/strings.c index 6c8dce9d6..06bbadb8f 100644 --- a/src/strings.c +++ b/src/strings.c @@ -409,7 +409,7 @@ const u8 OtherText_Switch[] = _("SWITCH"); const u8 OtherText_PokeInfo[] = _("POKéMON INFO"); const u8 OtherText_PokeSkills[] = _("POKéMON SKILLS"); const u8 OtherText_BattleMoves[] = _("BATTLE MOVES"); -const u8 OtherText_ContestMoves[] = _("C0NTEST MOVES"); // why the l33t 0, that's stupid +const u8 OtherText_ContestMoves[] = _("C0NTEST MOVES"); // The "O" in "CONTEST" is actually a 0. const u8 OtherText_Info[] = _("INFO"); const u8 gOtherText_EggLongTime[] = _("It looks like this EGG will\ntake a long time to hatch."); -- cgit v1.2.3 From 5a8cd94046983f15eaf6d414d5f431cb296abdc3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 23 Nov 2017 13:47:44 -0800 Subject: Lots more pokemon_summary_screen decompilation --- src/pokemon/learn_move.c | 20 +- src/pokemon/pokemon_summary_screen.c | 1144 +++++++++++++++++++++++++++++++++- 2 files changed, 1141 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index 55aac840f..2ba708a97 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -4,6 +4,7 @@ #include "main.h" #include "menu.h" #include "menu_cursor.h" +#include "learn_move.h" #include "palette.h" #include "pokemon.h" #include "overworld.h" @@ -22,26 +23,11 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u8 gTileBuffer[]; -struct ContestMove -{ - u8 effect; - u8 contestCategory:3; - u8 comboStarterId; - u8 comboMoves[4]; -}; - -struct ContestEffect -{ - u8 effectType; - u8 appeal; - u8 jam; -}; - extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; extern const struct WindowConfig gWindowConfig_81E6CE4; extern const struct WindowConfig gWindowConfig_81E7240; -extern const u8 *const gUnknown_083CADD4[]; +extern const u8 *const gContestEffectStrings[]; extern const u8 *const gMoveDescriptions[]; extern const u8 gTypeNames[][7]; extern const u8 *const gUnknown_083CAF70[]; @@ -1039,7 +1025,7 @@ void sub_8133AEC(bool8 contestInfo, int unused) gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = FALSE; for (i = 0; i < 3; i++) PrintMoveInfo(moveId, gUnknown_08402E24[gUnknown_08402E3D[i]]); - sub_8072AB0(gUnknown_083CADD4[gContestMoves[moveId].effect], 0x58, 0x48, 0x90, 32, 1); + sub_8072AB0(gContestEffectStrings[gContestMoves[moveId].effect], 0x58, 0x48, 0x90, 32, 1); } else { diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 8402bcf16..edbd2998b 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1,10 +1,14 @@ #include "global.h" +#include "battle.h" #include "pokemon_summary_screen.h" #include "data2.h" +#include "decompress.h" #include "ewram.h" #include "item.h" #include "items.h" +#include "learn_move.h" #include "link.h" +#include "main.h" #include "menu.h" #include "menu_helpers.h" #include "overworld.h" @@ -24,7 +28,8 @@ struct SummaryScreenStruct { - /*0x00*/ u8 filler0[9]; + /*0x00*/ u8 filler0[8]; + /*0x08*/ u8 unk8; /*0x09*/ u8 unk9; /*0x0A*/ u8 fillerA; /*0x0B*/ u8 unkB; @@ -38,26 +43,66 @@ struct SummaryScreenStruct /*0x77*/ u8 filler77[0x2]; /*0x79*/ u8 unk79; /*0x7A*/ u8 unk7A; - /*0x7B*/ u8 filler7B[0x3]; + /*0x7B*/ u8 filler7B; + /*0x7C*/ u16 unk7C; /*0x7E*/ u8 unk7E; /*0x7F*/ u8 unk7F; }; #define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +extern u8 sub_80A1808(struct Pokemon *); +extern void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); +static void sub_80A0958(struct Pokemon *); +static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *, u8, u8); +static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *, u8, u8); +static void sub_80A1EF8(const u8 *, u8, u8, u16, s32); +static void sub_80A1F48(const u8 *, u8, u8, u8, u16); +static void PrintHeldItemName(u16, u8, u8); +static void PrintNumRibbons(struct Pokemon *); +static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); + +extern void SummaryScreenHandleLeftRightInput(u8, s8); +extern void sub_809E8F0(u8, s8); +extern void sub_809E260(u8); +extern void sub_809F814(u8); +extern void sub_80A1654(s8, u8); +extern void sub_80A1488(s8, u8); +extern void GetStringCenterAlignXOffsetWithLetterSpacing(u8, u8, u8, u8); +extern bool8 sub_809FA94(struct Pokemon *); +extern void sub_809FC34(struct Pokemon *); +extern void sub_809FC0C(void); +extern void sub_809FF64(struct Pokemon *); +extern void sub_809FEB8(void); +extern void sub_80A1918(u8, u8); +extern void sub_80A198C(u8, u8, u8, u8); +extern u16 GetMonMove(struct Pokemon *, u8); +extern void sub_80A04CC(u16); +extern void sub_80A057C(u16); +extern void sub_80A0498(u16); +extern void sub_80A046C(u16); +extern void sub_80A03F0(struct Pokemon *, u8 *); +extern u16 sub_80A03BC(struct Pokemon *, u8); extern void sub_80A20A8(u8); extern u8 ball_number_to_ball_processing_index(u16); extern void sub_809F678(struct Pokemon *); extern void sub_80A1BC0(struct Sprite *sprite); extern void sub_80A1888(struct Sprite *); -extern void sub_80A00F4(s16); -extern void sub_80A0428(struct Pokemon *, s16*); +extern void sub_80A0428(struct Pokemon *, u8 *); extern void sub_80A18E4(u8); extern void GetStringCenterAlignXOffset(u8, u8, u8); extern u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); extern void sub_80A1FF8(const u8 *, u8, u8, u8); +extern const u16 gUnknown_083C157E[]; +extern const u16 gUnknown_083C157C[]; +extern const u8 gAbilityNames[][13]; +extern const u8 * const gAbilityDescriptions[]; +extern const u8 * const gMoveDescriptions[]; +extern const u8 * const gContestEffectStrings[]; +extern const struct ContestMove gContestMoves[]; +extern const struct ContestEffect gContestEffects[]; extern TaskFunc gUnknown_03005CF0; extern const u8 gUnknown_083C15BC[]; extern struct Sprite *gUnknown_020384F4; @@ -75,6 +120,1093 @@ extern const u8 gUnknown_083C15AE[]; extern const u8 gUnknown_083C15B4[]; extern const u8 *const gUnknown_083C1068[]; + +u8 sub_809F6B4(struct Pokemon *mon, u8 *b) +{ + u16 species; + u32 personality; + u32 otId; + const struct CompressedSpritePalette *palette; + + switch (*b) + { + default: + return sub_80A1808(mon); + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + ewram_addr, + gUnknown_081FAF4C[1], + species, + personality); + *b += 1; + return 0xFF; + case 1: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + otId = GetMonData(mon, MON_DATA_OT_ID); + + palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); + LoadCompressedObjectPalette(palette); + GetMonSpriteTemplate_803C56C(palette->tag, 1); + *b += 1; + return 0xFF; + } +} + +u16 GetMonMove(struct Pokemon *mon, u8 moveId) +{ + switch (moveId) + { + case 0: + return GetMonData(mon, MON_DATA_MOVE1); + case 1: + return GetMonData(mon, MON_DATA_MOVE2); + case 2: + return GetMonData(mon, MON_DATA_MOVE3); + default: + return GetMonData(mon, MON_DATA_MOVE4); + } +} + +static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId) +{ + switch (moveId) + { + case 0: + return GetMonData(mon, MON_DATA_PP1); + case 1: + return GetMonData(mon, MON_DATA_PP2); + case 2: + return GetMonData(mon, MON_DATA_PP3); + default: + return GetMonData(mon, MON_DATA_PP4); + } +} + +bool8 sub_809F7D0() +{ + struct Pokemon mon; + u16 move; + + sub_809F678(&mon); + move = GetMonMove(&mon, ewramSS.unk79); + if (IsHMMove(move) == TRUE && ewramSS.unk8 != 3) + { + return FALSE; + } + + return TRUE; +} + +#ifdef NONMATCHING // The two "ewramSS.unk79 = taskData[15];" lines have small register differences. +void sub_809F814(u8 taskId) +{ + u16 var1; + + s16 *taskData = gTasks[taskId].data; + + var1 = taskData[14]; + if (taskData[14] < 4) + { + taskData[14] = var1 + 1; + } + else if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].func = sub_809E260; + taskData[0] = 4; + taskData[13] = 1; + ewramSS.unk79 = taskData[15]; + sub_809E8F0(taskId, -1); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].func = sub_809E260; + taskData[0] = 4; + taskData[13] = 1; + ewramSS.unk79 = taskData[15]; + sub_809E8F0(taskId, 1); + } + else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) + { + if (ewramSS.unkB != 2) + { + if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + gTasks[taskId].func = sub_809E260; + + SummaryScreenHandleLeftRightInput(taskId, -1); + sub_80A1488(1, taskData[15]); + sub_80A1654(1, taskData[15]); + } + } + else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) + { + if (ewramSS.unkB != ewramSS.unk76) + { + if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + gTasks[taskId].func = sub_809E260; + + SummaryScreenHandleLeftRightInput(taskId, 1); + sub_80A1488(1, taskData[15]); + sub_80A1654(1, taskData[15]); + } + } + else if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + sub_80A1488(2, taskData[15]); + sub_80A1654(2, taskData[15]); + + gTasks[taskId].func = sub_809E260; + } +} +#else +__attribute__((naked)) +void sub_809F814(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r6, r0, 3\n\ + ldr r0, _0809F83C @ =gTasks + 0x8\n\ + mov r8, r0\n\ + adds r4, r6, r0\n\ + ldrh r1, [r4, 0x1C]\n\ + movs r2, 0x1C\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0x3\n\ + bgt _0809F840\n\ + adds r0, r1, 0x1\n\ + strh r0, [r4, 0x1C]\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F83C: .4byte gTasks + 0x8\n\ +_0809F840:\n\ + ldr r7, _0809F874 @ =gMain\n\ + ldrh r1, [r7, 0x2E]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0809F880\n\ + mov r0, r8\n\ + subs r0, 0x8\n\ + adds r0, r6, r0\n\ + ldr r1, _0809F878 @ =sub_809E260\n\ + str r1, [r0]\n\ + movs r0, 0x4\n\ + strh r0, [r4]\n\ + movs r0, 0x1\n\ + strh r0, [r4, 0x1A]\n\ + ldr r2, _0809F87C @ =gSharedMem + 0x18000\n\ + ldrh r0, [r4, 0x1E]\n\ + adds r2, 0x79\n\ + strb r0, [r2]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + adds r0, r5, 0\n\ + bl sub_809E8F0\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F874: .4byte gMain\n\ +_0809F878: .4byte sub_809E260\n\ +_0809F87C: .4byte gSharedMem + 0x18000\n\ +_0809F880:\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0809F8B4\n\ + mov r0, r8\n\ + subs r0, 0x8\n\ + adds r0, r6, r0\n\ + ldr r1, _0809F8AC @ =sub_809E260\n\ + str r1, [r0]\n\ + movs r0, 0x4\n\ + strh r0, [r4]\n\ + movs r0, 0x1\n\ + strh r0, [r4, 0x1A]\n\ + ldr r2, _0809F8B0 @ =gSharedMem + 0x18000\n\ + ldrh r0, [r4, 0x1E]\n\ + adds r2, 0x79\n\ + strb r0, [r2]\n\ + adds r0, r5, 0\n\ + movs r1, 0x1\n\ + bl sub_809E8F0\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F8AC: .4byte sub_809E260\n\ +_0809F8B0: .4byte gSharedMem + 0x18000\n\ +_0809F8B4:\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0809F8C8\n\ + bl sub_80F9284\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0809F918\n\ +_0809F8C8:\n\ + ldr r1, _0809F90C @ =gSharedMem + 0x18000\n\ + ldrb r0, [r1, 0xB]\n\ + cmp r0, 0x2\n\ + beq _0809F9C0\n\ + cmp r0, 0x3\n\ + bne _0809F8F4\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bne _0809F8E8\n\ + adds r0, r1, 0\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _0809F8F4\n\ +_0809F8E8:\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ +_0809F8F4:\n\ + ldr r1, _0809F910 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0809F914 @ =sub_809E260\n\ + str r1, [r0]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + adds r0, r5, 0\n\ + b _0809F972\n\ + .align 2, 0\n\ +_0809F90C: .4byte gSharedMem + 0x18000\n\ +_0809F910: .4byte gTasks\n\ +_0809F914: .4byte sub_809E260\n\ +_0809F918:\n\ + ldrh r1, [r7, 0x2E]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0809F92E\n\ + bl sub_80F9284\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x2\n\ + bne _0809F994\n\ +_0809F92E:\n\ + ldr r1, _0809F988 @ =gSharedMem + 0x18000\n\ + adds r2, r1, 0\n\ + adds r2, 0x76\n\ + ldrb r0, [r1, 0xB]\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + beq _0809F9C0\n\ + cmp r0, 0x2\n\ + bne _0809F960\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bne _0809F954\n\ + adds r0, r1, 0\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _0809F960\n\ +_0809F954:\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ +_0809F960:\n\ + ldr r1, _0809F98C @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0809F990 @ =sub_809E260\n\ + str r1, [r0]\n\ + adds r0, r5, 0\n\ + movs r1, 0x1\n\ +_0809F972:\n\ + bl SummaryScreenHandleLeftRightInput\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x1\n\ + bl sub_80A1488\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x1\n\ + bl sub_80A1654\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F988: .4byte gSharedMem + 0x18000\n\ +_0809F98C: .4byte gTasks\n\ +_0809F990: .4byte sub_809E260\n\ +_0809F994:\n\ + ldrh r1, [r7, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0809F9A6\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0809F9C0\n\ +_0809F9A6:\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x2\n\ + bl sub_80A1488\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x2\n\ + bl sub_80A1654\n\ + mov r0, r8\n\ + subs r0, 0x8\n\ + adds r0, r6, r0\n\ + ldr r1, _0809F9CC @ =sub_809E260\n\ + str r1, [r0]\n\ +_0809F9C0:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809F9CC: .4byte sub_809E260\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_809F9D0(u8 taskId, u8 b) +{ + s16 *taskData = gTasks[taskId].data; + taskData[14] = 0; + taskData[15] = b; + + sub_80A1488(-2, 4); + sub_80A1654(-2, 4); + MenuZeroFillWindowRect(11, 15, 28, 18); + MenuPrint(gOtherText_CantForgetHMs, 11, 15); + + gTasks[taskId].func = sub_809F814; +} + +u8 sub_809FA30(void) +{ + return ewramSS.unk7A; +} + +// void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) +// { +// u16 *vramAddr = (u16 *)(VRAM + 0xF000); + +// vramAddr[(d * 32) + c] = (b * 0x1000) + (a * 2) + 0x200 + 0x80; +// vramAddr[(d * 32) + c + 32] = (b * 0x1000) + (a * 2) + 0x200 + 0x81; +// } +__attribute__((naked)) +void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsls r1, 24\n\ + lsls r2, 24\n\ + lsls r3, 24\n\ + lsrs r2, 23\n\ + lsrs r3, 18\n\ + ldr r4, _0809FA70 @ =0x0600f000\n\ + adds r3, r4\n\ + adds r2, r3\n\ + lsrs r1, 12\n\ + lsrs r0, 23\n\ + movs r4, 0x80\n\ + lsls r4, 2\n\ + adds r3, r4, 0\n\ + adds r0, r3\n\ + adds r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, 0x80\n\ + strh r0, [r2]\n\ + adds r2, 0x40\n\ + adds r1, 0x81\n\ + strh r1, [r2]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809FA70: .4byte 0x0600f000\n\ + .syntax divided\n"); +} + +void GetStringCenterAlignXOffset(u8 a, u8 b, u8 c) +{ + GetStringCenterAlignXOffsetWithLetterSpacing(a, 15, b, c); +} + +bool8 sub_809FA94(struct Pokemon *mon) +{ + if (!IsShiny(mon)) + { + LoadPalette(gUnknown_083C157C, 4, 2); + return FALSE; + } + else + { + LoadPalette(gUnknown_083C157E, 4, 2); + return TRUE; + } +} + +void sub_809FAC8(struct Pokemon *mon) +{ + bool8 shinyDexNum; + u16 dexNum; + u8 *buffer; + + if (GetMonData(mon, MON_DATA_IS_EGG)) + { + MenuZeroFillWindowRect(1, 2, 4, 3); + MenuZeroFillWindowRect(3, 16, 9, 17); + MenuZeroFillWindowRect(0, 12, 11, 15); + GetMonNickname(mon, gStringVar1); + sub_80A1FF8(gStringVar1, 13, 3, 16); + LoadPalette(gUnknown_083C157C, 4, 2); + } + else + { + shinyDexNum = sub_809FA94(mon); + dexNum = SpeciesToPokedexNum(GetMonData(mon, MON_DATA_SPECIES)); + if (dexNum != 0xFFFF) + { + if (!shinyDexNum) + { + GetStringCenterAlignXOffset(2, 1, 2); + sub_80A1F98(dexNum, 13, 3, 2, 17, 16, 1); + } + else + { + GetStringCenterAlignXOffsetWithLetterSpacing(2, 8, 1, 2); + sub_80A1F98(dexNum, 8, 3, 2, 17, 16, 1); + } + } + else + { + MenuZeroFillWindowRect(1, 2, 4, 3); + } + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = GetMonNickname(mon, buffer); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x3C; + buffer[3] = EOS; + MenuPrint(gStringVar1, 1, 12); + + sub_80A0958(mon); + } +} + +void sub_809FBE4() +{ + u8 i; + + for (i = 0; i < 28; i++) + { + sub_80A1918(i, 1); + } + + MenuZeroFillWindowRect(11, 4, 29, 18); +} + +void sub_809FC0C(void) +{ + MenuPrint(gOtherText_Type2, 11, 6); + GetStringCenterAlignXOffset(0, 22, 4); + GetStringCenterAlignXOffset(2, 23, 4); +} + +void sub_809FC34(struct Pokemon *mon) +{ + u8 i; + u8 *buffer; + u16 friendship; + u8 language; + u16 species; + u8 ability; + + for (i = 0; i < 5; i++) + { + sub_80A1918(i, 1); + } + + MenuZeroFillWindowRect(11, 9, 28, 12); + if (GetMonData(mon, MON_DATA_IS_EGG)) + { + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gOtherText_OriginalTrainer); + buffer = StringCopy(buffer, gOtherText_FiveQuestionsAndSlash); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x4E; + buffer[3] = EOS; + MenuPrint(gStringVar1, 11, 4); + + sub_80A1EF8(gOtherText_FiveQuestionsAndSlash, 13, 193, 32, 1); + sub_80A198C(9, 120, 48, 0); + + friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); + if (friendship < 6) + { + MenuPrint(gOtherText_EggAbout, 11, 9); + } + else if (friendship < 11) + { + MenuPrint(gOtherText_EggSoon, 11, 9); + } + else if (friendship < 41) + { + MenuPrint(gOtherText_EggSomeTime, 11, 9); + } + else + { + MenuPrint(gOtherText_EggLongTime, 11, 9); + } + + PokemonSummaryScreen_PrintEggTrainerMemo(mon, 11, 14); + } + else + { + GetMonData(mon, MON_DATA_OT_NAME, gStringVar2); + language = GetMonData(mon, MON_DATA_LANGUAGE); + ConvertInternationalString(gStringVar2, language); + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gOtherText_OriginalTrainer); + + if (GetMonData(mon, MON_DATA_OT_GENDER) == MALE) + { + buffer = sub_80A1E58(buffer, 9); + } + else + { + buffer = sub_80A1E58(buffer, 10); + } + + buffer = StringCopy(buffer, gStringVar2); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x4E; + buffer[3] = EOS; + MenuPrint(gStringVar1, 11, 4); + + sub_80A1F98(GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF, 13, 5, 2, 193, 32, 1); + + species = GetMonData(mon, MON_DATA_SPECIES); + sub_80A198C(gBaseStats[species].type1, 120, 48, 0); + if (gBaseStats[species].type1 != gBaseStats[species].type2) + { + sub_80A198C(gBaseStats[species].type2, 160, 48, 1); + } + + ability = GetAbilityBySpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_ALT_ABILITY)); + sub_80A1FF8(gAbilityNames[ability], 13, 11, 9); + MenuPrint(gAbilityDescriptions[ability], 11, 11); + + PokemonSummaryScreen_PrintTrainerMemo(mon, 11, 14); + } +} + +void sub_809FE6C(struct Pokemon *mon) +{ + sub_809FC0C(); + sub_809FC34(mon); +} + +void sub_809FE80(void) +{ + MenuZeroFillWindowRect(14, 4, 18, 5); + MenuZeroFillWindowRect(25, 4, 30, 5); + MenuZeroFillWindowRect(11, 9, 28, 12); + MenuZeroFillWindowRect(11, 14, 28, 17); +} + +void sub_809FEB8(void) +{ + sub_80A1FF8(gOtherText_ExpPoints, 13, 11, 14); + sub_80A1FF8(gOtherText_NextLv, 13, 11, 16); + MenuPrint(gOtherText_Terminator18, 21, 16); + + sub_80A1F48(gOtherText_HP, 13, 11, 7, 42); + sub_80A1F48(gOtherText_Attack, 13, 11, 9, 42); + sub_80A1F48(gOtherText_Defense, 13, 11, 11, 42); + sub_80A1F48(gOtherText_SpAtk, 13, 22, 7, 36); + sub_80A1F48(gOtherText_SpDef, 13, 22, 9, 36); + sub_80A1F48(gOtherText_Speed, 13, 22, 11, 36); +} + +void sub_809FF64(struct Pokemon *mon) +{ + u8 i; + u16 heldItem; + u8 *buffer; + + for (i = 0; i < 5; i++) + { + sub_80A1918(i, 1); + } + + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM); + PrintHeldItemName(heldItem, 11, 4); + PrintNumRibbons(mon); + + buffer = gStringVar1; + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_EXP)); + MenuPrint_RightAligned(buffer, 29, 14); + DrawExperienceProgressBar(mon, 23, 16); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_ATK)); + sub_8072BD8(buffer, 16, 9, 50); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_DEF)); + sub_8072BD8(buffer, 16, 11, 50); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPATK)); + sub_8072BD8(buffer, 27, 7, 18); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPDEF)); + sub_8072BD8(buffer, 27, 9, 18); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPEED)); + sub_8072BD8(buffer, 27, 11, 18); + + buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_HP), 24, 1); + *buffer++ = CHAR_SLASH; + buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_MAX_HP), 48, 1); + + MenuPrint_PixelCoords(gStringVar1, 126, 56, 1); +} + +void sub_80A0090(struct Pokemon *mon) +{ + sub_809FEB8(); + sub_809FF64(mon); +} + +void sub_80A00A4(void) +{ + MenuZeroFillWindowRect(11, 4, 19, 5); + MenuZeroFillWindowRect(16, 7, 21, 8); + MenuZeroFillWindowRect(17, 9, 21, 12); + MenuZeroFillWindowRect(27, 7, 29, 12); + MenuZeroFillWindowRect(22, 14, 28, 15); + MenuZeroFillWindowRect(23, 16, 28, 17); +} + +void sub_80A00F4(u8 a) +{ + if (ewramSS.unk7C != 0 || a != 4) + { + if (ewramSS.unkB == 2) + { + sub_80A1FF8(gOtherText_Power2, 13, 1, 15); + sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17); + } + else + { + sub_80A1FF8(gOtherText_Appeal2, 13, 1, 15); + sub_80A1FF8(gOtherText_Jam2, 13, 1, 17); + } + } +} + +void sub_80A015C(struct Pokemon *mon) +{ + u8 i; + u16 move; + u16 curPP; + u8 ppBonuses; + u8 maxPP; + u8 *buffer; + + for (i = 0; i < 4; i++) + { + move = GetMonMove(mon, i); + curPP = GetMonMovePP(mon, i); + + if (move == 0) + { + sub_80A1918(i, 1); + sub_80A1FF8(gOtherText_OneDash, 13, 15, (2 * i) + 4); + MenuPrint(gOtherText_TwoDashes, 26, (2 * i) + 4); + } + else + { + if (ewramSS.unkB == 2) + { + sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i); + } + else + { + sub_80A198C(gContestMoves[move].contestCategory + 18, 87, ((2 * i) + 4) * 8, i); + } + + sub_80A1FF8(gMoveNames[move], 13, 15, (2 * i) + 4); + GetStringCenterAlignXOffset(1, 24, (2 * i) + 4); + + ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + maxPP = CalculatePPWithBonus(move, ppBonuses, i); + + buffer = gStringVar1; + buffer = sub_8072C14(buffer, curPP, 14, 1); + *buffer++ = CHAR_SLASH; + sub_8072C14(buffer, maxPP, 32, 1); + MenuPrint(gStringVar1, 25, (2 * i) + 4); + } + } +} + +void sub_80A029C(void) +{ + u8 *buffer; + u16 move; + u8 pp; + + if (ewramSS.unk7C == 0) + { + sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12); + return; + } + + move = ewramSS.unk7C; + + if (ewramSS.unkB == 2) + sub_80A198C(gBattleMoves[move].type, 87, 96, 4); + else + sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4); + + if (ewramSS.unkB == 2) + sub_80A1FF8(gMoveNames[move], 10, 15, 12); + else + sub_80A1FF8(gMoveNames[move], 9, 15, 12); + + GetStringCenterAlignXOffset(1, 24, 12); + + buffer = gStringVar1; + pp = gBattleMoves[move].pp; + buffer = sub_8072C14(buffer, pp, 14, 1); + *buffer++ = CHAR_SLASH; + buffer = sub_8072C14(buffer, pp, 32, 1); + MenuPrint(gStringVar1, 25, 12); +} + +void sub_80A0390(void) +{ + u8 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + MenuZeroFillWindowRect(15, (i * 2) + 4, 28, (i * 2) + 5); + } +} + +u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex) +{ + u16 move; + + if (selectedMoveIndex != MAX_MON_MOVES) + { + move = GetMonMove(mon, selectedMoveIndex); + } + else + { + if (ewramSS.unk7C != 0) + { + move = ewramSS.unk7C; + } + else + { + move = 0xFFFF; + } + } + + return move; +} + +void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) +{ + u16 move = sub_80A03BC(mon, *selectedMoveIndex); + + if (ewramSS.unkB == 2) + { + sub_80A04CC(move); + sub_80A057C(0xFFFF); + } + else + { + sub_80A057C(move); + } +} + +void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) +{ + u16 move = sub_80A03BC(mon, *selectedMoveIndex); + MenuZeroFillWindowRect(11, 15, 28, 18); + + if (ewramSS.unkB == 2) + { + sub_80A046C(move); + } + else + { + sub_80A0498(move); + } + + sub_80A03F0(mon, selectedMoveIndex); +} + +void sub_80A046C(u16 move) +{ + if (move == 0xFFFF) return; + + MenuPrint(gMoveDescriptions[move - 1], 11, 15); +} + +void sub_80A0498(u16 move) +{ + if (move == 0xFFFF) return; + + MenuPrint(gContestEffectStrings[gContestMoves[move].effect], 11, 15); +} + +void sub_80A04CC(u16 move) +{ + u8 *buffer; + + if (move == 0xFFFF) return; + + if (gBattleMoves[move].power <= 1) + { + buffer = gStringVar1; + buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1); + MenuPrint(gStringVar1, 7, 15); + } + else + { + buffer = gStringVar1; + buffer = sub_8072C14(buffer, gBattleMoves[move].power, 21, 1); + MenuPrint(gStringVar1, 7, 15); + } + + if (gBattleMoves[move].accuracy == 0) + { + buffer = gStringVar1; + buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1); + MenuPrint(gStringVar1, 7, 17); + } + else + { + buffer = gStringVar1; + buffer = sub_8072C14(buffer, gBattleMoves[move].accuracy, 21, 1); + MenuPrint(gStringVar1, 7, 17); + } +} + +#ifdef NONMATCHING // The two vramAddr lines are non-matching. +void sub_80A057C(u16 move) +{ + u8 appeal; + u8 jam; + u8 i; + u16 *vramAddr = (u16 *)(VRAM + 0x6800); + + if (move == 0xFFFF) return; + + appeal = gContestEffects[gContestMoves[move].effect].appeal; + if (appeal != 0xFF) + { + appeal = appeal / 10; + } + + for (i = 0; i < 8; i++) + { + u16 tile = 0x1039; + int and = 3; + int offset = 0x3CC / 2; + if (appeal != 0xFF && i < appeal) + { + tile = 0x103A; + } + + *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile; + } + + if (move == 0xFFFF) return; + + jam = gContestEffects[gContestMoves[move].effect].jam; + if (jam != 0xFF) + { + jam = jam / 10; + } + + for (i = 0; i < 8; i++) + { + u16 tile = 0x103D; + int and = 3; + int offset = 0x226; + if (jam != 0xFF && i < jam) + { + tile = 0x103C; + } + + *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile; + } +} +#else +__attribute__((naked)) +void sub_80A057C(u16 move) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldr r0, _080A0648 @ =0x06006800\n\ + mov r8, r0\n\ + ldr r0, _080A064C @ =0x0000ffff\n\ + cmp r5, r0\n\ + beq _080A063A\n\ + ldr r1, _080A0650 @ =gContestEffects\n\ + ldr r2, _080A0654 @ =gContestMoves\n\ + lsls r3, r5, 3\n\ + adds r0, r3, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x1]\n\ + mov r10, r2\n\ + mov r9, r3\n\ + cmp r4, 0xFF\n\ + beq _080A05B8\n\ + adds r0, r4, 0\n\ + movs r1, 0xA\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_080A05B8:\n\ + movs r2, 0\n\ + movs r7, 0x3\n\ + movs r6, 0xF3\n\ + lsls r6, 2\n\ +_080A05C0:\n\ + ldr r3, _080A0658 @ =0x00001039\n\ + cmp r4, 0xFF\n\ + beq _080A05CC\n\ + cmp r2, r4\n\ + bcs _080A05CC\n\ + adds r3, 0x1\n\ +_080A05CC:\n\ + lsrs r0, r2, 2\n\ + lsls r0, 5\n\ + adds r1, r2, 0\n\ + ands r1, r7\n\ + adds r1, r0\n\ + lsls r1, 1\n\ + add r1, r8\n\ + adds r1, r6\n\ + strh r3, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0x7\n\ + bls _080A05C0\n\ + ldr r0, _080A064C @ =0x0000ffff\n\ + cmp r5, r0\n\ + beq _080A063A\n\ + mov r0, r9\n\ + add r0, r10\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + ldr r1, _080A0650 @ =gContestEffects\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x2]\n\ + cmp r4, 0xFF\n\ + beq _080A060C\n\ + adds r0, r4, 0\n\ + movs r1, 0xA\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_080A060C:\n\ + movs r2, 0\n\ + movs r6, 0x3\n\ + ldr r5, _080A065C @ =0x0000044c\n\ +_080A0612:\n\ + ldr r3, _080A0660 @ =0x0000103d\n\ + cmp r4, 0xFF\n\ + beq _080A061E\n\ + cmp r2, r4\n\ + bcs _080A061E\n\ + subs r3, 0x1\n\ +_080A061E:\n\ + lsrs r0, r2, 2\n\ + lsls r0, 5\n\ + adds r1, r2, 0\n\ + ands r1, r6\n\ + adds r1, r0\n\ + lsls r1, 1\n\ + add r1, r8\n\ + adds r1, r5\n\ + strh r3, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0x7\n\ + bls _080A0612\n\ +_080A063A:\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\ + .align 2, 0\n\ +_080A0648: .4byte 0x06006800\n\ +_080A064C: .4byte 0x0000ffff\n\ +_080A0650: .4byte gContestEffects\n\ +_080A0654: .4byte gContestMoves\n\ +_080A0658: .4byte 0x00001039\n\ +_080A065C: .4byte 0x0000044c\n\ +_080A0660: .4byte 0x0000103d\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { u32 trainerId; @@ -1355,7 +2487,7 @@ _080A1484: .4byte gOtherText_Status\n\ // Related to re-drawing the summary area underneath the pokemon's picture // in all of the summary screen tabs. -void sub_80A1488(u8 a, u8 b) +void sub_80A1488(s8 a, u8 b) { u8 taskId; @@ -1557,7 +2689,7 @@ _080A1650: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A1654(u8 a, u8 b) +void sub_80A1654(s8 a, u8 b) { u8 taskId; -- cgit v1.2.3 From 00f85341a6d769cc23c4dfbf5fca8ad02835956c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 14:40:48 -0800 Subject: Mostly done decompiling pokemon_summary_screen --- src/field/choose_party.c | 1 - src/pokemon/pokemon_summary_screen.c | 2117 +++++++++++++++++++++++++++++++++- 2 files changed, 2080 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/field/choose_party.c b/src/field/choose_party.c index c3845e48b..bf4d74c96 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -32,7 +32,6 @@ EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); -extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index edbd2998b..7241b24f0 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1,13 +1,14 @@ #include "global.h" #include "battle.h" -#include "pokemon_summary_screen.h" #include "data2.h" #include "decompress.h" +#include "event_data.h" #include "ewram.h" #include "item.h" #include "items.h" #include "learn_move.h" #include "link.h" +#include "m4a.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" @@ -16,6 +17,7 @@ #include "party_menu.h" #include "pokeball.h" #include "pokemon.h" +#include "pokemon_summary_screen.h" #include "region_map.h" #include "sound.h" #include "species.h" @@ -25,32 +27,24 @@ #include "strings2.h" #include "task.h" #include "tv.h" - -struct SummaryScreenStruct -{ - /*0x00*/ u8 filler0[8]; - /*0x08*/ u8 unk8; - /*0x09*/ u8 unk9; - /*0x0A*/ u8 fillerA; - /*0x0B*/ u8 unkB; - /*0x0C*/ u8 fillerC; - /*0x0D*/ u8 unkD; - /*0x0E*/ u8 fillerE[0x2]; - /*0x10*/ struct Pokemon unk10; - /*0x74*/ u8 filler74; - /*0x75*/ u8 unk75; - /*0x76*/ u8 unk76; - /*0x77*/ u8 filler77[0x2]; - /*0x79*/ u8 unk79; - /*0x7A*/ u8 unk7A; - /*0x7B*/ u8 filler7B; - /*0x7C*/ u16 unk7C; - /*0x7E*/ u8 unk7E; - /*0x7F*/ u8 unk7F; -}; +#include "unknown_task.h" #define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +static void sub_809DE44(void); +static void sub_809EB40(u8); +static void sub_809EBC4(void); +static void sub_809E044(void); +static void sub_80A1D84(struct Pokemon *); +static void sub_80A18C4(void); +static bool8 LoadPokemonSummaryScreenGraphics(void); +static bool8 MonKnowsMultipleMoves(struct Pokemon *); +extern void PrintSummaryWindowHeaderText(void); +static void sub_80A1DCC(struct Pokemon *); +static void sub_809FE80(void); +static void sub_80A00A4(void); +static void sub_80A0390(void); +extern void sub_80A015C(struct Pokemon *); extern u8 sub_80A1808(struct Pokemon *); extern void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); static void sub_80A0958(struct Pokemon *); @@ -61,18 +55,64 @@ static void sub_80A1F48(const u8 *, u8, u8, u8, u16); static void PrintHeldItemName(u16, u8, u8); static void PrintNumRibbons(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); - +static void sub_809E13C(u8 taskId); +static void sub_80A1950(void); +static void sub_809DA1C(void); +static void sub_809D844(void); + +extern void sub_809D85C(void); +extern void sub_809DE64(void); +extern bool8 sub_809DA84(void); +extern void SummaryScreenHandleAButton(u8); +extern void SummaryScreenHandleUpDownInput(u8, s8); +extern bool8 sub_809F7D0(u8); +extern void sub_809F9D0(u8, u8); +extern void sub_809EAC8(u8); +extern void sub_809E534(u8); +extern void sub_809E83C(u8, s8); +extern void sub_809E7F0(u8); +extern void sub_809E6D8(void); +extern void sub_809E5C4(void); +extern void sub_80A1B40(u8); +extern void sub_80A2078(int); +extern void sub_809E3FC(u8); +extern void SummaryScreenHandleKeyInput(u8); +extern void sub_80A1B1C(u8); +extern void sub_80A16CC(u8); +extern void sub_80A1A30(u8); +extern void DrawSummaryScreenNavigationDots(void); +extern void sub_80A00F4(u8); +extern void sub_80A029C(struct Pokemon *); +extern void sub_809EE74(u8); +extern void sub_809EC38(u8); +extern void sub_809FBE4(void); +extern void sub_809F0D0(u8, s8); +extern void sub_80A1500(u8); +extern void sub_80A1334(u8); +extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); +extern void sub_809F43C(u8); +extern s8 sub_809F284(s8); +extern s8 sub_809F3CC(s8); +extern bool8 sub_809F310(struct Pokemon *); +extern s8 sub_809F344(u8); +extern s8 sub_809F388(u8); +extern bool8 sub_809F5F8(void); +extern void sub_80A1DE8(struct Pokemon *); +extern u8 sub_809F6B4(struct Pokemon *, u8 *); +extern void DrawPokerusSurvivorDot(struct Pokemon *); +extern void sub_80A12D0(s8); +extern void sub_809FAC8(struct Pokemon *); extern void SummaryScreenHandleLeftRightInput(u8, s8); -extern void sub_809E8F0(u8, s8); +extern void sub_809E8F0(u8, s8, u8*); extern void sub_809E260(u8); extern void sub_809F814(u8); extern void sub_80A1654(s8, u8); extern void sub_80A1488(s8, u8); extern void GetStringCenterAlignXOffsetWithLetterSpacing(u8, u8, u8, u8); extern bool8 sub_809FA94(struct Pokemon *); -extern void sub_809FC34(struct Pokemon *); +static void sub_809FC34(struct Pokemon *); extern void sub_809FC0C(void); -extern void sub_809FF64(struct Pokemon *); +static void sub_809FF64(struct Pokemon *); extern void sub_809FEB8(void); extern void sub_80A1918(u8, u8); extern void sub_80A198C(u8, u8, u8, u8); @@ -95,6 +135,36 @@ extern u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); extern void sub_80A1FF8(const u8 *, u8, u8, u8); +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gUnknown_020384F0; +extern u8 gUnknown_08208238[]; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030041B0; +extern const u16 gSummaryScreenTextTiles[]; +extern const u16 gSummaryScreenButtonTiles[]; +extern const u8 gMoveTypes_Pal[]; +extern const u8 gStatusScreen_Pal[]; +extern const u8 gStatusScreen_Tilemap[]; +extern const struct CompressedSpritePalette gUnknown_083C1278; +extern const struct CompressedSpritePalette gUnknown_083C12FC; +extern const struct CompressedSpriteSheet gUnknown_083C12F4; +extern const struct CompressedSpriteSheet gUnknown_083C1270; +extern const struct CompressedSpriteSheet gUnknown_083C11B8; +extern const u8 gUnknown_08E74688[]; +extern const u8 gUnknown_08E73E88[]; +extern const u8 gUnknown_08E74E88[]; +extern const u8 gUnknown_08E73508[]; +extern const u8 gStatusScreen_Gfx[]; +extern const u8 gFontDefaultPalette[]; +extern const u8 gUnknownPalette_81E6692[]; +extern const u8 gUnknown_083C15A8[]; +extern const void (*gUnknown_083C1580[])(void); +extern const void (*gUnknown_083C1598[])(struct Pokemon *); +extern const void (*gUnknown_083C1588[])(struct Pokemon *); extern const u16 gUnknown_083C157E[]; extern const u16 gUnknown_083C157C[]; extern const u8 gAbilityNames[][13]; @@ -121,6 +191,1979 @@ extern const u8 gUnknown_083C15B4[]; extern const u8 *const gUnknown_083C1068[]; +void sub_809D844(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_809D85C(void) +{ + REG_BG1HOFS = gUnknown_030042C0; + REG_BG1VOFS = gUnknown_030041B4; + REG_BG2HOFS = gUnknown_03004288; + REG_BG2VOFS = gUnknown_03004280; + REG_BG3HOFS = gUnknown_030041B0; + REG_BG3VOFS = gUnknown_030041B8; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void ShowPokemonSummaryScreen(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u8 e) +{ + gPaletteFade.bufferTransferDisabled = 1; + + ewramSS.unk0.partyMons = party; + ewramSS.unk8 = e; + ewramSS.unk9 = partyIndex; + ewramSS.unkA = partyCount; + ewramSS.unk4 = func; + ewramSS.unk74 = 0; + ewramSS.unk79 = 4; + ewramSS.unk7C = 0; + ewramSS.unk80 = 0; + ewramSS.unk7B = 0; + + if (e > 4) + { + ewramSS.unkE = 1; + } + else + { + ewramSS.unkE = 0; + } + + switch (e) + { + case 0: + case 5: + ewramSS.unk75 = 0; + ewramSS.unk76 = 3; + ewramSS.unk77 = 0; + ewramSS.unk78 = 0; + ewramSS.unk7E = 1; + ewramSS.unk7F = 7; + break; + case 4: + ewramSS.unk75 = 0; + ewramSS.unk76 = 3; + ewramSS.unk77 = 0; + ewramSS.unk78 = 0; + ewramSS.unk7E = 1; + ewramSS.unk7F = 7; + ewramSS.unk7B = 1; + break; + case 2: + ewramSS.unk75 = 2; + ewramSS.unk76 = 3; + ewramSS.unk77 = 1; + ewramSS.unk78 = 1; + ewramSS.unk7E = 3; + ewramSS.unk7F = 0; + ewramSS.unk79 = 0; + break; + case 1: + case 6: + ewramSS.unk75 = 2; + ewramSS.unk76 = 3; + ewramSS.unk77 = 1; + ewramSS.unk78 = 1; + break; + } + + ewramSS.unkB = ewramSS.unk75; + SetMainCallback2(sub_809DE44); +} + +void sub_809D9F0(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u16 e) +{ + ShowPokemonSummaryScreen(party, partyIndex, partyCount, func, 2); + ewramSS.unk7C = e; +} + +void sub_809DA1C(void) +{ + switch (ewramSS.unk8) + { + case 0: + case 5: + ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + break; + case 4: + ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + break; + case 2: + case 3: + ewramSS.unkF = CreateTask(sub_809EB40, 0); + break; + case 1: + case 6: + ewramSS.unkF = CreateTask(sub_809E3FC, 0); + break; + } +} + +bool8 sub_809DA84(void) +{ + const u16 *src; + void *dest; + + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + ResetSpriteData(); + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + dest = (void *)VRAM; + DmaClearLarge(3, dest, 0x10000, 0x1000, 32); + gMain.state++; + break; + case 4: + sub_809DE64(); + gMain.state++; + break; + case 5: + SetUpWindowConfig(&gWindowConfig_81E6E6C); + gMain.state++; + break; + case 6: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E6C); + gMain.state++; + break; + case 7: + if (MultistepInitMenuWindowContinue()) + { + gMain.state++; + } + break; + case 8: + sub_809DA1C(); + gMain.state++; + break; + case 9: + src = gSummaryScreenTextTiles; + dest = (void *)VRAM + 0xD000; + DmaCopy16(3, src, dest, 320); + + src = gSummaryScreenButtonTiles; + dest = (void *)VRAM + 0xD140; + DmaCopy16(3, src, dest, 256); + + ewramSS.unk74 = 0; + gMain.state++; + break; + case 10: + if (LoadPokemonSummaryScreenGraphics()) + { + ewramSS.unk74 = 0; + gMain.state++; + } + break; + case 11: + sub_80A18C4(); + gMain.state++; + break; + case 12: + sub_809F678(&ewramSS.unk10); + if (!GetMonStatusAndPokerus(&ewramSS.unk10)) + { + sub_80A12D0(0); + } + else + { + sub_80A12D0(10); + } + + DrawPokerusSurvivorDot(&ewramSS.unk10); + gMain.state++; + break; + case 13: + sub_80A1950(); + sub_80A1D84(&ewramSS.unk10); + gMain.state++; + break; + case 14: + sub_80A1DE8(&ewramSS.unk10); + ewramSS.unk74 = 0; + gMain.state++; + break; + case 15: + if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + { + ewramSS.unk74 = 0; + gMain.state++; + } + break; + case 16: + sub_809E044(); + DrawSummaryScreenNavigationDots(); + gMain.state++; + break; + case 17: + if (ewramSS.unkB < 2) + { + gUnknown_083C1580[ewramSS.unkB](); + } + + gMain.state++; + break; + case 18: + sub_809FAC8(&ewramSS.unk10); + gMain.state++; + break; + case 19: + gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + gMain.state++; + break; + case 20: + if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + gUnknown_030041B0 = 256; + } + else + { + gUnknown_030041B0 = 0; + } + + gMain.state++; + break; + case 21: + sub_809EBC4(); + if (ewramSS.unk79 != 0) + { + sub_80A1488(0, 0); + sub_80A1654(0, 0); + } + else + { + sub_80A1488(10, 0); + sub_80A1654(10, 0); + } + + PrintSummaryWindowHeaderText(); + gMain.state++; + break; + case 22: + if (sub_8055870() != TRUE) + { + gMain.state++; + } + break; + default: + SetVBlankCallback(sub_809D85C); + BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1); + SetMainCallback2(sub_809D844); + gPaletteFade.bufferTransferDisabled = 0; + return TRUE; + break; + } + + return FALSE; +} + +void sub_809DE44(void) +{ + while (sub_809DA84() != TRUE && sub_80F9344() != TRUE); +} + +void sub_809DE64(void) +{ + REG_BG0CNT = 0x1E08; + REG_BG1CNT = 0x4801; + REG_BG2CNT = 0x4A02; + REG_BG3CNT = 0x5C03; + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + + REG_BLDCNT = 0; + REG_DISPCNT = 0x1F40; +} + +bool8 LoadPokemonSummaryScreenGraphics(void) +{ + switch (ewramSS.unk74) + { + case 0: + LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0); + break; + case 1: + CpuSet(gUnknown_08E73508, (void *)VRAM + 0xE000, 0x400); + break; + case 2: + LZDecompressVram(gUnknown_08E74E88, (void *)VRAM + 0xE800); + break; + case 3: + LZDecompressVram(gStatusScreen_Tilemap, (void *)VRAM + 0x4800); + break; + case 4: + CpuSet(gUnknown_08E73E88, (void *)VRAM + 0x5800, 0x400); + break; + case 5: + CpuSet(gUnknown_08E74688, (void *)VRAM + 0x6800, 0x400); + break; + case 6: + LoadCompressedPalette(gStatusScreen_Pal, 0, 160); + break; + case 7: + LoadCompressedObjectPic(&gUnknown_083C11B8); + break; + case 8: + LoadCompressedObjectPic(&gUnknown_083C1270); + break; + case 9: + LoadCompressedObjectPic(&gUnknown_083C12F4); + break; + case 10: + LoadCompressedObjectPalette(&gUnknown_083C12FC); + break; + case 11: + LoadCompressedObjectPalette(&gUnknown_083C1278); + break; + case 12: + LoadCompressedPalette(gMoveTypes_Pal, 464, 96); + ewramSS.unk74 = 0; + return TRUE; + } + + ewramSS.unk74++; + return FALSE; +} + +void sub_809E044(void) +{ + LoadPalette(&gUnknownPalette_81E6692[28], 129, 2); + LoadPalette(&gUnknownPalette_81E6692[30], 136, 2); + LoadPalette(&gUnknownPalette_81E6692[28], 143, 2); + LoadPalette(&gUnknownPalette_81E6692[30], 137, 2); + LoadPalette(&gUnknownPalette_81E6692[12], 209, 4); + LoadPalette(&gUnknownPalette_81E6692[20], 211, 4); + LoadPalette(&gUnknownPalette_81E6692[28], 213, 4); + LoadPalette(&gUnknownPalette_81E6692[12], 215, 4); + LoadPalette(&gUnknownPalette_81E6692[8], 217, 4); + LoadPalette(&gUnknownPalette_81E6692[16], 219, 4); + LoadPalette(&gUnknownPalette_81E6692[4], 221, 2); + LoadPalette(&gUnknownPalette_81E6692[6], 222, 2); + LoadPalette(&gUnknownPalette_81E6692[2], 223, 2); + LoadPalette(gFontDefaultPalette, 240, 32); + LoadPalette(&gUnknownPalette_81E6692[6], 249, 2); +} + +void SummaryScreenExit(u8 taskId) +{ + PlaySE(5); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_809E13C; +} + +void sub_809E13C(u8 taskId) +{ + if (sub_8055870() != TRUE && !gPaletteFade.active) + { + gUnknown_020384F0 = ewramSS.unk9; + + ResetSpriteData(); + FreeAllSpritePalettes(); + StopCryAndClearCrySongs(); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + SetMainCallback2(ewramSS.unk4); + DestroyTask(taskId); + } +} + +void SummaryScreenHandleKeyInput(u8 taskId) +{ + if (gPaletteFade.active) + return; + + if (gMain.newKeys & DPAD_UP) + { + SummaryScreenHandleUpDownInput(taskId, -1); + } + else if (gMain.newKeys & DPAD_DOWN) + { + SummaryScreenHandleUpDownInput(taskId, 1); + } + else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) + { + SummaryScreenHandleLeftRightInput(taskId, -1); + } + else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) + { + SummaryScreenHandleLeftRightInput(taskId, 1); + } + else if (gMain.newKeys & A_BUTTON) + { + if (ewramSS.unkB > 1) + { + SummaryScreenHandleAButton(taskId); + } + + if (ewramSS.unkB == 0) + { + SummaryScreenExit(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + SummaryScreenExit(taskId); + } +} + +void sub_809E260(u8 taskId) +{ + if (gPaletteFade.active) + return; + + if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, -1, &ewramSS.unk79); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, 1, &ewramSS.unk79); + } + else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) + { + if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + SummaryScreenHandleLeftRightInput(taskId, -1); + } + else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) + { + if (ewramSS.unkB != ewramSS.unk76) + { + if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + SummaryScreenHandleLeftRightInput(taskId, 1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + if (sub_809F7D0(taskId) == 1 || ewramSS.unk79 == 4) + { + ewramSS.unk7A = ewramSS.unk79; + gSpecialVar_0x8005 = ewramSS.unk7A; + SummaryScreenExit(taskId); + } + else + { + PlaySE(32); + sub_809F9D0(taskId, ewramSS.unk79); + } + } + else if (gMain.newKeys & B_BUTTON) + { + ewramSS.unk7A = 4; + gSpecialVar_0x8005 = 4; + SummaryScreenExit(taskId); + } +} + +void sub_809E3FC(u8 taskId) +{ + if (gPaletteFade.active) + return; + + if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, -1, &ewramSS.unk79); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, 1, &ewramSS.unk79); + } + else if (gMain.newKeys & A_BUTTON) + { + if (ewramSS.unk79 != 4 && ewramSS.unk7B == 0) + { + if (!MonKnowsMultipleMoves(&ewramSS.unk10)) + { + PlaySE(32); + } + else + { + PlaySE(5); + + ewramSS.unk7A = ewramSS.unk79; + sub_80A1B40(1); + sub_80A1A30(19); + + gTasks[taskId].func = sub_809E534; + } + } + else + { + PlaySE(5); + sub_809EAC8(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(5); + sub_809EAC8(taskId); + } + +} + +bool8 MonKnowsMultipleMoves(struct Pokemon *mon) +{ + u8 i; + + for (i = 1; i < 4; i++) + { + if (GetMonMove(mon, i)) + { + return TRUE; + } + } + + return FALSE; +} + +void sub_809E534(u8 taskId) +{ + if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].data[0] = 3; + sub_809E8F0(taskId, -1, &ewramSS.unk7A); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].data[0] = 3; + sub_809E8F0(taskId, 1, &ewramSS.unk7A); + } + else if (gMain.newKeys & A_BUTTON) + { + sub_809E83C(taskId, 1); + } + else if (gMain.newKeys & B_BUTTON) + { + sub_809E83C(taskId, -1); + } +} + +__attribute__((naked)) +void sub_809E5C4(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r1, _0809E6D0 @ =gSharedMem + 0x18000\n\ + ldr r5, [r1]\n\ + ldrb r2, [r1, 0x9]\n\ + movs r0, 0x64\n\ + muls r0, r2\n\ + adds r5, r0\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r1, 0x7A\n\ + ldrb r6, [r1]\n\ + adds r0, 0xD\n\ + str r0, [sp, 0x8]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl GetMonData\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x14]\n\ + strh r0, [r1]\n\ + adds r2, r6, 0\n\ + adds r2, 0xD\n\ + str r2, [sp, 0xC]\n\ + adds r0, r5, 0\n\ + adds r1, r2, 0\n\ + bl GetMonData\n\ + mov r1, sp\n\ + strh r0, [r1]\n\ + mov r3, r8\n\ + adds r3, 0x11\n\ + str r3, [sp, 0x10]\n\ + adds r0, r5, 0\n\ + adds r1, r3, 0\n\ + bl GetMonData\n\ + mov r7, sp\n\ + adds r7, 0x5\n\ + str r7, [sp, 0x18]\n\ + strb r0, [r7]\n\ + adds r0, r6, 0\n\ + adds r0, 0x11\n\ + str r0, [sp, 0x1C]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + bl GetMonData\n\ + add r1, sp, 0x4\n\ + mov r10, r1\n\ + strb r0, [r1]\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + bl GetMonData\n\ + mov r4, sp\n\ + adds r4, 0x6\n\ + strb r0, [r4]\n\ + ldr r1, _0809E6D4 @ =gUnknown_08208238\n\ + mov r2, r8\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + mov r9, r0\n\ + ldrb r0, [r4]\n\ + adds r2, r0, 0\n\ + mov r3, r9\n\ + ands r2, r3\n\ + mov r7, r8\n\ + lsls r7, 1\n\ + mov r8, r7\n\ + asrs r2, r7\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r1, r6, r1\n\ + ldrb r3, [r1]\n\ + adds r1, r0, 0\n\ + ands r1, r3\n\ + lsls r6, 1\n\ + asrs r1, r6\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r7, r9\n\ + bics r0, r7\n\ + strb r0, [r4]\n\ + ldrb r0, [r4]\n\ + bics r0, r3\n\ + strb r0, [r4]\n\ + lsls r2, r6\n\ + mov r0, r8\n\ + lsls r1, r0\n\ + adds r2, r1\n\ + ldrb r0, [r4]\n\ + orrs r0, r2\n\ + strb r0, [r4]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + mov r2, sp\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0xC]\n\ + ldr r2, [sp, 0x14]\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x10]\n\ + mov r2, r10\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + ldr r2, [sp, 0x18]\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + adds r2, r4, 0\n\ + bl SetMonData\n\ + add sp, 0x20\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\ + .align 2, 0\n\ +_0809E6D0: .4byte gSharedMem + 0x18000\n\ +_0809E6D4: .4byte gUnknown_08208238\n\ + .syntax divided\n"); +} + +__attribute__((naked)) +void sub_809E6D8(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r2, _0809E7E8 @ =gSharedMem + 0x18000\n\ + ldr r5, [r2]\n\ + ldrb r1, [r2, 0x9]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 4\n\ + adds r5, r0\n\ + adds r0, r2, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r2, 0x7A\n\ + ldrb r6, [r2]\n\ + adds r0, 0xD\n\ + str r0, [sp, 0x8]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl GetBoxMonData\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x14]\n\ + strh r0, [r1]\n\ + adds r2, r6, 0\n\ + adds r2, 0xD\n\ + str r2, [sp, 0xC]\n\ + adds r0, r5, 0\n\ + adds r1, r2, 0\n\ + bl GetBoxMonData\n\ + mov r1, sp\n\ + strh r0, [r1]\n\ + mov r3, r8\n\ + adds r3, 0x11\n\ + str r3, [sp, 0x10]\n\ + adds r0, r5, 0\n\ + adds r1, r3, 0\n\ + bl GetBoxMonData\n\ + mov r7, sp\n\ + adds r7, 0x5\n\ + str r7, [sp, 0x18]\n\ + strb r0, [r7]\n\ + adds r0, r6, 0\n\ + adds r0, 0x11\n\ + str r0, [sp, 0x1C]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + bl GetBoxMonData\n\ + add r1, sp, 0x4\n\ + mov r10, r1\n\ + strb r0, [r1]\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + bl GetBoxMonData\n\ + mov r4, sp\n\ + adds r4, 0x6\n\ + strb r0, [r4]\n\ + ldr r1, _0809E7EC @ =gUnknown_08208238\n\ + mov r2, r8\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + mov r9, r0\n\ + ldrb r0, [r4]\n\ + adds r2, r0, 0\n\ + mov r3, r9\n\ + ands r2, r3\n\ + mov r7, r8\n\ + lsls r7, 1\n\ + mov r8, r7\n\ + asrs r2, r7\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r1, r6, r1\n\ + ldrb r3, [r1]\n\ + adds r1, r0, 0\n\ + ands r1, r3\n\ + lsls r6, 1\n\ + asrs r1, r6\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r7, r9\n\ + bics r0, r7\n\ + strb r0, [r4]\n\ + ldrb r0, [r4]\n\ + bics r0, r3\n\ + strb r0, [r4]\n\ + lsls r2, r6\n\ + mov r0, r8\n\ + lsls r1, r0\n\ + adds r2, r1\n\ + ldrb r0, [r4]\n\ + orrs r0, r2\n\ + strb r0, [r4]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + mov r2, sp\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0xC]\n\ + ldr r2, [sp, 0x14]\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x10]\n\ + mov r2, r10\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + ldr r2, [sp, 0x18]\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + adds r2, r4, 0\n\ + bl SetBoxMonData\n\ + add sp, 0x20\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\ + .align 2, 0\n\ +_0809E7E8: .4byte gSharedMem + 0x18000\n\ +_0809E7EC: .4byte gUnknown_08208238\n\ + .syntax divided\n"); +} + +void sub_809E7F0(u8 taskId) +{ + if (sub_809F5F8()) + { + ewramSS.unk74 = 0; + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + gTasks[taskId].func = sub_809E3FC; + sub_80A2078(taskId); + } +} + +void sub_809E83C(u8 taskId, s8 b) +{ + PlaySE(5); + + sub_80A1B1C(19); + sub_80A1B40(0); + + if (b == 1) + { + if (ewramSS.unk79 != ewramSS.unk7A) + { + if (ewramSS.unkE == 0) + { + sub_809E5C4(); + } + else + { + sub_809E6D8(); + } + + ewramSS.unk79 = ewramSS.unk7A; + sub_809F678(&ewramSS.unk10); + ewramSS.unk74 = 1; + + gTasks[taskId].func = sub_809E7F0; + return; + } + } + else + { + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + } + + gTasks[taskId].func = sub_809E3FC; + sub_80A2078(taskId); +} + +__attribute__((naked)) +void sub_809E8F0(u8 taskId, s8 direction, u8 *c) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r4, r1, 0\n\ + mov r9, r2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + mov r1, r9\n\ + ldrb r6, [r1]\n\ + ldr r1, _0809E944 @ =gTasks\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x8]\n\ + movs r2, 0\n\ + lsls r4, 24\n\ + asrs r4, 24\n\ + mov r10, r4\n\ + lsls r7, r0, 24\n\ +_0809E930:\n\ + lsls r0, r6, 24\n\ + asrs r0, 24\n\ + add r0, r10\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + asrs r1, r0, 24\n\ + cmp r0, r7\n\ + ble _0809E948\n\ + movs r6, 0\n\ + b _0809E94E\n\ + .align 2, 0\n\ +_0809E944: .4byte gTasks\n\ +_0809E948:\n\ + cmp r1, 0\n\ + bge _0809E94E\n\ + lsrs r6, r7, 24\n\ +_0809E94E:\n\ + lsls r4, r6, 24\n\ + lsrs r1, r4, 24\n\ + ldr r0, _0809EA10 @ =gSharedMem + 0x18010\n\ + str r2, [sp, 0x4]\n\ + bl GetMonMove\n\ + lsls r0, 16\n\ + adds r5, r4, 0\n\ + ldr r2, [sp, 0x4]\n\ + cmp r0, 0\n\ + bne _0809E97A\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x4\n\ + beq _0809E97A\n\ + lsls r0, r2, 24\n\ + movs r3, 0x80\n\ + lsls r3, 17\n\ + adds r0, r3\n\ + lsrs r2, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _0809E930\n\ +_0809E97A:\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x4\n\ + bne _0809E996\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x4\n\ + beq _0809E996\n\ + ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + mov r2, r8\n\ + lsls r7, r2, 2\n\ + cmp r0, 0\n\ + beq _0809E9AC\n\ +_0809E996:\n\ + ldr r2, _0809EA18 @ =gTasks\n\ + mov r3, r8\n\ + lsls r1, r3, 2\n\ + adds r0, r1, r3\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + movs r2, 0x22\n\ + ldrsh r0, [r0, r2]\n\ + adds r7, r1, 0\n\ + cmp r0, 0x1\n\ + bne _0809E9D0\n\ +_0809E9AC:\n\ + lsrs r4, r5, 24\n\ + movs r0, 0x2\n\ + adds r1, r4, 0\n\ + bl sub_80A1488\n\ + movs r0, 0x2\n\ + adds r1, r4, 0\n\ + bl sub_80A1654\n\ + ldr r1, _0809EA18 @ =gTasks\n\ + mov r3, r8\n\ + adds r0, r7, r3\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strh r1, [r0, 0x22]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ +_0809E9D0:\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x4\n\ + beq _0809E9FE\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x4\n\ + bne _0809E9FE\n\ + ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _0809E9FE\n\ + movs r4, 0x2\n\ + negs r4, r4\n\ + lsrs r5, 24\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl sub_80A1488\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl sub_80A1654\n\ +_0809E9FE:\n\ + mov r2, r9\n\ + strb r6, [r2]\n\ + ldr r0, _0809EA1C @ =gSharedMem + 0x18079\n\ + cmp r9, r0\n\ + bne _0809EA20\n\ + movs r0, 0\n\ + bl sub_80A1C30\n\ + b _0809EA26\n\ + .align 2, 0\n\ +_0809EA10: .4byte gSharedMem + 0x18010\n\ +_0809EA14: .4byte gSharedMem + 0x18000\n\ +_0809EA18: .4byte gTasks\n\ +_0809EA1C: .4byte gSharedMem + 0x18079\n\ +_0809EA20:\n\ + movs r0, 0x1\n\ + bl sub_80A1C30\n\ +_0809EA26:\n\ + ldr r3, [sp]\n\ + cmp r3, 0\n\ + beq _0809EA34\n\ + ldr r0, _0809EA4C @ =gSharedMem + 0x18010\n\ + mov r1, r9\n\ + bl sub_80A0428\n\ +_0809EA34:\n\ + mov r0, r8\n\ + bl sub_80A2078\n\ + add sp, 0x8\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\ + .align 2, 0\n\ +_0809EA4C: .4byte gSharedMem + 0x18010\n\ + .syntax divided\n"); +} + +void SummaryScreenHandleAButton(u8 taskId) +{ + PlaySE(5); + + ewramSS.unk79 = 0; + sub_80A1488(2, 0); + sub_80A1654(2, 0); + + if (ewramSS.unk7B == 0) + { + ewramSS.unk7F = 5; + PrintSummaryWindowHeaderText(); + } + + sub_80A16CC(0); + sub_80A029C(&ewramSS.unk10); + sub_80A1A30(9); + + gTasks[taskId].func = sub_809E3FC; + sub_80A2078(taskId); +} + +void sub_809EAC8(u8 taskId) +{ + if (ewramSS.unk79 != 4) + { + sub_80A1488(-2, 0); + sub_80A1654(-2, 0); + } + + sub_80A1B1C(9); + sub_80A16CC(1); + + MenuZeroFillWindowRect(15, 12, 28, 13); + MenuZeroFillWindowRect(11, 15, 28, 18); + + ewramSS.unk7F = 6; + PrintSummaryWindowHeaderText(); + + gTasks[taskId].func = SummaryScreenHandleKeyInput; +} + +void sub_809EB40(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 5: + sub_80A1A30(9); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_809E260; + break; + case 0: + ewramSS.unk79 = 0; + if (ewramSS.unk7C != 0) + { + sub_80A1488(10, 0); + sub_80A1654(10, ewramSS.unk79); + } + + sub_80A16CC(0); + sub_80A029C(&ewramSS.unk10); + // fall through + default: + gTasks[taskId].data[0]++; + break; + } +} + +void sub_809EBC4(void) +{ + if (ewramSS.unkB != 0) + { + DrawSummaryScreenNavigationDots(); + gUnknown_030042C0 = 0x100; + + if (ewramSS.unkB == 1) + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; + + if (ewramSS.unkB == 2) + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; + + if (ewramSS.unkB == 3) + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00; + } +} + +void sub_809EC38(u8 taskId) +{ + u8 minus2; + s16 *taskData = gTasks[taskId].data; + + switch (taskData[0]) + { + case 0: + if (ewramSS.unk80 == 0) + { + if (ewramSS.unkB != 0) + { + gUnknown_03004288 = 0x100; + } + + if (ewramSS.unkB == 1) + { + REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800; + } + + if (ewramSS.unkB == 2) + { + REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00; + } + } + else + { + if (ewramSS.unkB != 0) + { + gUnknown_030042C0 = 0x100; + } + + if (ewramSS.unkB == 1) + { + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; + } + + if (ewramSS.unkB == 2) + { + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; + } + } + + taskData[0]++; + break; + case 1: + if (ewramSS.unk80 == 0) + { + int var2 = gUnknown_030042C0 - 0x20; + gUnknown_030042C0 = var2; + if (var2 << 16 == 0) + { + REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; + REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 1; + taskData[0]++; + } + } + else + { + int var2 = gUnknown_03004288 - 0x20; + gUnknown_03004288 = var2; + if (var2 << 16 == 0) + { + REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 1; + REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; + taskData[0]++; + } + } + break; + case 2: + ewramSS.unk7E = ewramSS.unkB + 1; + minus2 = ewramSS.unk8 - 2; + if (minus2 < 2) + { + ewramSS.unk7F = 0; + sub_80A029C(&ewramSS.unk10); + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + sub_80A00F4(ewramSS.unk79); + } + else + { + if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + { + ewramSS.unk7F = 6; + } + else if (ewramSS.unkB == 0) + { + ewramSS.unk7F = 7; + } + else + { + ewramSS.unk7F = 0; + } + } + + taskData[0]++; + break; + case 3: + DrawSummaryScreenNavigationDots(); + PrintSummaryWindowHeaderText(); + taskData[0]++; + break; + case 4: + gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + ewramSS.unk80 ^= 1; + taskData[0]++; + break; + case 5: + if (sub_8055870() != TRUE) + { + gTasks[taskId].func = gUnknown_03005CF0; + } + break; + } +} + +void sub_809EE74(u8 taskId) +{ + int var1; + u8 minus2; + s16 *taskData = gTasks[taskId].data; + + switch (taskData[0]) + { + case 0: + var1 = ewramSS.unk80; + if (var1 == 0) + { + gUnknown_03004288 = ewramSS.unk80; + taskData[0]++; + } + else + { + gUnknown_030042C0 = 0; + taskData[0]++; + } + break; + case 1: + if (ewramSS.unk80 == 0) + { + if (ewramSS.unkB == 1) + REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801; + + if (ewramSS.unkB == 2) + REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01; + + if (ewramSS.unkB == 3) + REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01; + + REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; + } + else + { + if (ewramSS.unkB == 1) + REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801; + + if (ewramSS.unkB == 2) + REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01; + + if (ewramSS.unkB == 3) + REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01; + + REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; + } + + taskData[0]++; + break; + case 2: + if (ewramSS.unk80 == 0) + { + int var2 = gUnknown_03004288 + 0x20; + gUnknown_03004288 = var2; + if ((var2 << 16) == 0x1000000) + { + taskData[0]++; + } + } + else + { + int var2 = gUnknown_030042C0 + 0x20; + gUnknown_030042C0 = var2; + if ((var2 << 16) == 0x1000000) + { + taskData[0]++; + } + } + break; + case 3: + ewramSS.unk7E = ewramSS.unkB + 1; + minus2 = ewramSS.unk8 - 2; + if (minus2 < 2) + { + ewramSS.unk7F = 0; + sub_80A029C(&ewramSS.unk10); + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + sub_80A00F4(ewramSS.unk79); + } + else + { + if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + { + ewramSS.unk7F = 6; + } + else if (ewramSS.unkB == 0) + { + ewramSS.unk7F = 7; + } + else + { + ewramSS.unk7F = 0; + } + } + + taskData[0]++; + break; + case 4: + DrawSummaryScreenNavigationDots(); + PrintSummaryWindowHeaderText(); + taskData[0]++; + break; + case 5: + gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + ewramSS.unk80 ^= 1; + taskData[0]++; + break; + case 6: + if (sub_8055870() != TRUE) + { + gTasks[taskId].func = gUnknown_03005CF0; + } + break; + } +} + +void sub_809F0D0(u8 taskId, s8 direction) +{ + ewramSS.unkB += direction; + gUnknown_03005CF0 = gTasks[taskId].func; + sub_809FBE4(); + gTasks[taskId].data[0] = 0; + + if (direction == -1) + { + gTasks[taskId].func = sub_809EC38; + } + else + { + gTasks[taskId].func = sub_809EE74; + gTasks[taskId].func(taskId); + } +} + +void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) +{ + if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + if (direction == -1 && ewramSS.unkB == ewramSS.unk75) return; + if (direction == 1 && ewramSS.unkB == ewramSS.unk76) return; + + if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) + { + PlaySE(5); + sub_809F0D0(taskId, direction); + } + } +} + +#ifdef NONMATCHING +void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +{ + s8 var3; + u8 var1 = direction; + + if (ewramSS.unkE == 1) + { + if (ewramSS.unkB != 0) + { + var1 = (direction == 1) ? 0 : 1; + } + else + { + var1 = (direction == 1) ? 2 : 3; + } + + var3 = StorageSystemGetNextMonIndex(ewramSS.unk0.boxMons, ewramSS.unk9, ewramSS.unkA, var1); + } + else + { + if (sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE) + { + var3 = sub_809F3CC(var1); + } + else + { + var3 = sub_809F284(var1); + } + } + + if (var3 != -1) + { + PlaySE(5); + if (GetMonStatusAndPokerus(&ewramSS.unk10)) + { + sub_80A12D0(-2); + } + + ewramSS.unk9 = var3; + ewramSS.unk84 = gTasks[taskId].func; + gTasks[taskId].func = sub_809F43C; + } +} +#else +__attribute__((naked)) +void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r4, r1, 24\n\ + ldr r0, _0809F1E4 @ =gSharedMem + 0x18000\n\ + ldrb r1, [r0, 0xE]\n\ + adds r2, r0, 0\n\ + cmp r1, 0x1\n\ + bne _0809F202\n\ + ldrb r0, [r2, 0xB]\n\ + cmp r0, 0\n\ + beq _0809F1E8\n\ + lsls r1, r4, 24\n\ + asrs r1, 24\n\ + movs r4, 0x1\n\ + eors r1, r4\n\ + negs r0, r1\n\ + orrs r0, r1\n\ + lsrs r4, r0, 31\n\ + b _0809F1F4\n\ + .align 2, 0\n\ +_0809F1E4: .4byte gSharedMem + 0x18000\n\ +_0809F1E8:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + movs r4, 0x3\n\ + cmp r0, 0x1\n\ + bne _0809F1F4\n\ + movs r4, 0x2\n\ +_0809F1F4:\n\ + ldr r0, [r2]\n\ + ldrb r1, [r2, 0x9]\n\ + ldrb r2, [r2, 0xA]\n\ + adds r3, r4, 0\n\ + bl StorageSystemGetNextMonIndex\n\ + b _0809F22C\n\ +_0809F202:\n\ + bl sub_80F9344\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0809F224\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0809F224\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + bl sub_809F3CC\n\ + b _0809F22C\n\ +_0809F224:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + bl sub_809F284\n\ +_0809F22C:\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + beq _0809F270\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r5, _0809F278 @ =gSharedMem + 0x18010\n\ + adds r0, r5, 0\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0809F258\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + bl sub_80A12D0\n\ +_0809F258:\n\ + adds r0, r5, 0\n\ + subs r0, 0x10\n\ + strb r4, [r0, 0x9]\n\ + ldr r1, _0809F27C @ =gTasks\n\ + lsls r0, r6, 2\n\ + adds r0, r6\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + str r1, [r5, 0x74]\n\ + ldr r1, _0809F280 @ =sub_809F43C\n\ + str r1, [r0]\n\ +_0809F270:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809F278: .4byte gSharedMem + 0x18010\n\ +_0809F27C: .4byte gTasks\n\ +_0809F280: .4byte sub_809F43C\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +// s8 sub_809F284(s8 a) +// { +// struct Pokemon *mons = ewramSS.unk0.partyMons; +// u8 var1 = 0; + +// if (ewramSS.unkB == 0) +// { +// if ((s8)a == -1 || ewramSS.unk9 != 0) +// { +// if ((s8)a == 1 || ewramSS.unk9 < ewramSS.unkA) +// { +// return ewramSS.unk9 + a; +// } +// } + +// return -1; +// } +// else +// { +// while (1) +// { +// var1 += a; + +// if (ewramSS.unk9 + var1 >= 0 || ewramSS.unk9 + var1 > ewramSS.unkA) +// { +// return -1; +// } + +// if (!GetMonData(&mons[ewramSS.unk9 + var1], MON_DATA_IS_EGG)) +// { +// break; +// } +// } + +// return ewramSS.unk9 + var1; +// } + +// } +__attribute__((naked)) +s8 sub_809F284(s8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + ldr r0, _0809F2C0 @ =gSharedMem + 0x18000\n\ + ldr r7, [r0]\n\ + movs r6, 0\n\ + ldrb r1, [r0, 0xB]\n\ + adds r4, r0, 0\n\ + cmp r1, 0\n\ + bne _0809F2C4\n\ + lsls r0, r3, 24\n\ + asrs r2, r0, 24\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + adds r5, r0, 0\n\ + cmp r2, r1\n\ + bne _0809F2AC\n\ + ldrb r0, [r4, 0x9]\n\ + cmp r0, 0\n\ + beq _0809F2E4\n\ +_0809F2AC:\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x1\n\ + bne _0809F2BA\n\ + ldrb r0, [r4, 0x9]\n\ + ldrb r1, [r4, 0xA]\n\ + cmp r0, r1\n\ + bcs _0809F2E4\n\ +_0809F2BA:\n\ + ldrb r0, [r4, 0x9]\n\ + adds r0, r3\n\ + b _0809F304\n\ + .align 2, 0\n\ +_0809F2C0: .4byte gSharedMem + 0x18000\n\ +_0809F2C4:\n\ + lsls r5, r3, 24\n\ +_0809F2C6:\n\ + lsls r0, r6, 24\n\ + asrs r0, 24\n\ + asrs r1, r5, 24\n\ + adds r0, r1\n\ + lsls r0, 24\n\ + ldr r4, _0809F2EC @ =gSharedMem + 0x18000\n\ + lsrs r6, r0, 24\n\ + asrs r0, 24\n\ + ldrb r2, [r4, 0x9]\n\ + adds r1, r0, r2\n\ + cmp r1, 0\n\ + blt _0809F2E4\n\ + ldrb r0, [r4, 0xA]\n\ + cmp r1, r0\n\ + ble _0809F2F0\n\ +_0809F2E4:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _0809F308\n\ + .align 2, 0\n\ +_0809F2EC: .4byte gSharedMem + 0x18000\n\ +_0809F2F0:\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + adds r0, r7, r0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0809F2C6\n\ + ldrb r0, [r4, 0x9]\n\ + adds r0, r6\n\ +_0809F304:\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ +_0809F308:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +bool8 sub_809F310(struct Pokemon *mon) +{ + if (GetMonData(mon, MON_DATA_SPECIES)) + { + if (ewramSS.unkB != 0 || !GetMonData(mon, MON_DATA_IS_EGG)) + { + return TRUE; + } + } + + return FALSE; +} + +s8 sub_809F344(u8 partyIndex) +{ + while (1) + { + partyIndex++; + if (partyIndex == PARTY_SIZE) + { + return -1; + } + + if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + { + return gUnknown_083C15A8[partyIndex]; + } + } +} + +s8 sub_809F388(u8 partyIndex) +{ + while (1) + { + if (partyIndex == 0) + { + return -1; + } + + partyIndex--; + if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + { + return gUnknown_083C15A8[partyIndex]; + } + } +} + +#ifdef NONMATCHING // The nested if statements at the end are not matching. +s8 sub_809F3CC(s8 a) +{ + u8 var1 = 0; + u8 i = 0; + + for (i = 0; i < 6; i++) + { + if (gUnknown_083C15A8[i] == ewramSS.unk9) + { + var1 = i; + break; + } + } + + if ((s8)a != -1 || var1 != 0) + { + if ((s8)a != 1) + { + return sub_809F388(var1); + } + else if (var1 != 5) + { + return sub_809F344(var1); + } + } + + return -1; +} +#else +__attribute__((naked)) +s8 sub_809F3CC(s8 a) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + movs r2, 0\n\ + movs r1, 0\n\ + ldr r3, _0809F41C @ =gUnknown_083C15A8\n\ + ldr r4, _0809F420 @ =gSharedMem + 0x18000\n\ + ldrb r0, [r3]\n\ + ldrb r5, [r4, 0x9]\n\ + cmp r0, r5\n\ + beq _0809F3FC\n\ + adds r5, r3, 0\n\ + adds r3, r4, 0\n\ +_0809F3E6:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x5\n\ + bhi _0809F3FC\n\ + adds r0, r1, r5\n\ + ldrb r0, [r0]\n\ + ldrb r4, [r3, 0x9]\n\ + cmp r0, r4\n\ + bne _0809F3E6\n\ + adds r2, r1, 0\n\ +_0809F3FC:\n\ + lsls r0, r6, 24\n\ + asrs r1, r0, 24\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r1, r0\n\ + bne _0809F40C\n\ + cmp r2, 0\n\ + beq _0809F414\n\ +_0809F40C:\n\ + cmp r1, 0x1\n\ + bne _0809F424\n\ + cmp r2, 0x5\n\ + bne _0809F42C\n\ +_0809F414:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _0809F436\n\ + .align 2, 0\n\ +_0809F41C: .4byte gUnknown_083C15A8\n\ +_0809F420: .4byte gSharedMem + 0x18000\n\ +_0809F424:\n\ + adds r0, r2, 0\n\ + bl sub_809F388\n\ + b _0809F432\n\ +_0809F42C:\n\ + adds r0, r2, 0\n\ + bl sub_809F344\n\ +_0809F432:\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ +_0809F436:\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_809F43C(u8 taskId) +{ + switch (gMain.state) + { + case 0: + StopCryAndClearCrySongs(); + gMain.state++; + break; + case 1: + DestroySpriteAndFreeResources(&gSprites[ewramSS.unkC]); + gMain.state++; + break; + case 2: + DestroySpriteAndFreeResources(&gSprites[ewramSS.unkD]); + gMain.state++; + break; + case 3: + ewramSS.unk74 = 0; + ewramSS.unk79 = 0; + gMain.state++; + break; + case 4: + sub_809F678(&ewramSS.unk10); + if (GetMonStatusAndPokerus(&ewramSS.unk10)) + { + sub_80A12D0(2); + } + + DrawPokerusSurvivorDot(&ewramSS.unk10); + gMain.state++; + break; + case 5: + if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + { + ewramSS.unk74 = 0; + if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + gUnknown_030041B0 = 256; + } + else + { + gUnknown_030041B0 = 0; + } + + gMain.state++; + } + break; + case 6: + sub_80A1DCC(&ewramSS.unk10); + gMain.state++; + break; + case 7: + sub_80A1DE8(&ewramSS.unk10); + gMain.state++; + break; + case 8: + if (sub_809F5F8()) + { + ewramSS.unk74 = 0; + gMain.state++; + } + break; + default: + if (sub_8055870() != TRUE) + { + gMain.state = 0; + gTasks[taskId].func = ewramSS.unk84; + } + break; + } +} + +bool8 sub_809F5F8(void) +{ + if (ewramSS.unk74 == 0) + { + sub_809FAC8(&ewramSS.unk10); + ewramSS.unk74++; + return FALSE; + } + else + { + gUnknown_083C1588[ewramSS.unkB](&ewramSS.unk10); + return TRUE; + } +} + +void sub_809F63C(struct Pokemon *mon) +{ + sub_809FE80(); + sub_809FC34(mon); +} + +void sub_809F650(struct Pokemon *mon) +{ + sub_80A00A4(); + sub_809FF64(mon); +} + +void sub_809F664(struct Pokemon *mon) +{ + sub_80A0390(); + sub_80A015C(mon); +} + +void sub_809F678(struct Pokemon *mon) +{ + if (ewramSS.unkE == 0) + { + struct Pokemon *mons = ewramSS.unk0.partyMons; + *mon = mons[ewramSS.unk9]; + } + else + { + struct BoxPokemon *mons = ewramSS.unk0.boxMons; + sub_803B4B4(&mons[ewramSS.unk9], mon); + } +} + u8 sub_809F6B4(struct Pokemon *mon, u8 *b) { u16 species; @@ -189,7 +2232,7 @@ static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId) } } -bool8 sub_809F7D0() +bool8 sub_809F7D0(u8 taskId) { struct Pokemon mon; u16 move; @@ -222,7 +2265,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.unk79 = taskData[15]; - sub_809E8F0(taskId, -1); + sub_809E8F0(taskId, -1, NULL); } else if (gMain.newKeys & DPAD_DOWN) { @@ -230,7 +2273,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.unk79 = taskData[15]; - sub_809E8F0(taskId, 1); + sub_809E8F0(taskId, 1, NULL); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { @@ -625,7 +2668,7 @@ void sub_809FAC8(struct Pokemon *mon) } } -void sub_809FBE4() +void sub_809FBE4(void) { u8 i; @@ -887,7 +2930,7 @@ void sub_80A015C(struct Pokemon *mon) } } -void sub_80A029C(void) +void sub_80A029C(struct Pokemon *mon) { u8 *buffer; u16 move; @@ -2223,7 +4266,7 @@ _080A12CC: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A12D0(u8 taskId) +void sub_80A12D0(s8 a) { u8 newTaskId; @@ -2231,9 +4274,9 @@ void sub_80A12D0(u8 taskId) sub_80A18E4(29); newTaskId = CreateTask(sub_80A1048, 0); - gTasks[newTaskId].data[0] = (s8)taskId; + gTasks[newTaskId].data[0] = a; - if ((s8)taskId < 0) + if (a < 0) { gTasks[newTaskId].data[1] = 10; } @@ -3493,7 +5536,7 @@ u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level) return dest; } -void sub_80A2078(u32 taskId) +void sub_80A2078(int taskId) { gUnknown_03005CF0 = gTasks[taskId].func; gTasks[taskId].func = sub_80A20A8; -- cgit v1.2.3 From b81a94c1edb86459187288ac7f005f4cf1a6c051 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 18:26:45 -0800 Subject: Label the PokemonSummaryScreenStruct structs members --- src/battle/battle_party_menu.c | 2 +- src/engine/trade.c | 4 +- src/field/choose_party.c | 4 +- src/pokemon/pokemon_menu.c | 2 +- src/pokemon/pokemon_summary_screen.c | 482 +++++++++++++++++------------------ 5 files changed, 247 insertions(+), 247 deletions(-) (limited to 'src') diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 97e9dc0fc..5531ead4b 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -625,7 +625,7 @@ static void Task_ShowSummaryScreen(u8 taskId) { DestroyTask(taskId); EWRAM_1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, 4); + ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, PSS_MODE_NO_MOVE_ORDER_EDIT); } } diff --git a/src/engine/trade.c b/src/engine/trade.c index 729791aff..e09942589 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -2186,11 +2186,11 @@ static void sub_804997C(void) { if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE) { - ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->partyCounts[0] - 1, sub_80484F4, 4); + ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->partyCounts[0] - 1, sub_80484F4, PSS_MODE_NO_MOVE_ORDER_EDIT); } else { - ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->partyCounts[1] - 1, sub_80484F4, 4); + ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->partyCounts[1] - 1, sub_80484F4, PSS_MODE_NO_MOVE_ORDER_EDIT); } } } diff --git a/src/field/choose_party.c b/src/field/choose_party.c index bf4d74c96..e16da3a58 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -433,7 +433,7 @@ static void sub_81225D4(u8 taskId) DestroyTask(taskId); ewram1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, 0); + ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, PSS_MODE_NORMAL); } } @@ -883,7 +883,7 @@ static void sub_8123034(u8 taskId) DestroyTask(taskId); ewram1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, 0); + ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, PSS_MODE_NORMAL); } } diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 07d7e5322..ae9fcefea 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -350,7 +350,7 @@ static void sub_8089F44(u8 taskID) u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data[0]; DestroyTask(taskID); ewram1B000_alt.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, 0); + ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, PSS_MODE_NORMAL); } } diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 7241b24f0..b7d9e31cb 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -29,7 +29,7 @@ #include "tv.h" #include "unknown_task.h" -#define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +#define ewramSS (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) static void sub_809DE44(void); static void sub_809EB40(u8); @@ -213,96 +213,96 @@ void sub_809D85C(void) TransferPlttBuffer(); } -void ShowPokemonSummaryScreen(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u8 e) +void ShowPokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u8 mode) { gPaletteFade.bufferTransferDisabled = 1; - ewramSS.unk0.partyMons = party; - ewramSS.unk8 = e; - ewramSS.unk9 = partyIndex; - ewramSS.unkA = partyCount; - ewramSS.unk4 = func; - ewramSS.unk74 = 0; - ewramSS.unk79 = 4; - ewramSS.unk7C = 0; - ewramSS.unk80 = 0; - ewramSS.unk7B = 0; + ewramSS.monList.partyMons = party; + ewramSS.mode = mode; + ewramSS.monIndex = monIndex; + ewramSS.maxMonIndex = maxMonIndex; + ewramSS.callback = callback; + ewramSS.loadGfxState = 0; + ewramSS.selectedMoveIndex = 4; + ewramSS.moveToLearn = 0; + ewramSS.bgToggle = 0; + ewramSS.disableMoveOrderEditing = FALSE; - if (e > 4) + if (mode >= PSS_MODE_PC_NORMAL) { - ewramSS.unkE = 1; + ewramSS.usingPC = TRUE; } else { - ewramSS.unkE = 0; + ewramSS.usingPC = FALSE; } - switch (e) + switch (mode) { - case 0: - case 5: - ewramSS.unk75 = 0; - ewramSS.unk76 = 3; + case PSS_MODE_NORMAL: + case PSS_MODE_PC_NORMAL: + ewramSS.firstPage = PSS_PAGE_INFO; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 0; ewramSS.unk78 = 0; - ewramSS.unk7E = 1; - ewramSS.unk7F = 7; + ewramSS.headerTextId = 1; + ewramSS.headerActionTextId = 7; break; - case 4: - ewramSS.unk75 = 0; - ewramSS.unk76 = 3; + case PSS_MODE_NO_MOVE_ORDER_EDIT: + ewramSS.firstPage = PSS_PAGE_INFO; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 0; ewramSS.unk78 = 0; - ewramSS.unk7E = 1; - ewramSS.unk7F = 7; - ewramSS.unk7B = 1; + ewramSS.headerTextId = 1; + ewramSS.headerActionTextId = 7; + ewramSS.disableMoveOrderEditing = TRUE; break; - case 2: - ewramSS.unk75 = 2; - ewramSS.unk76 = 3; + case PSS_MODE_SELECT_MOVE: + ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 1; ewramSS.unk78 = 1; - ewramSS.unk7E = 3; - ewramSS.unk7F = 0; - ewramSS.unk79 = 0; + ewramSS.headerTextId = 3; + ewramSS.headerActionTextId = 0; + ewramSS.selectedMoveIndex = 0; break; - case 1: - case 6: - ewramSS.unk75 = 2; - ewramSS.unk76 = 3; + case PSS_MODE_MOVES_ONLY: + case PSS_MODE_PC_MOVES_ONLY: + ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 1; ewramSS.unk78 = 1; break; } - ewramSS.unkB = ewramSS.unk75; + ewramSS.page = ewramSS.firstPage; SetMainCallback2(sub_809DE44); } -void sub_809D9F0(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u16 e) +void sub_809D9F0(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move) { - ShowPokemonSummaryScreen(party, partyIndex, partyCount, func, 2); - ewramSS.unk7C = e; + ShowPokemonSummaryScreen(party, monIndex, maxMonIndex, callback, PSS_MODE_SELECT_MOVE); + ewramSS.moveToLearn = move; } void sub_809DA1C(void) { - switch (ewramSS.unk8) + switch (ewramSS.mode) { - case 0: - case 5: - ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + case PSS_MODE_NORMAL: + case PSS_MODE_PC_NORMAL: + ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; - case 4: - ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + case PSS_MODE_NO_MOVE_ORDER_EDIT: + ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; - case 2: - case 3: - ewramSS.unkF = CreateTask(sub_809EB40, 0); + case PSS_MODE_SELECT_MOVE: + case PSS_MODE_UNKNOWN: + ewramSS.inputHandlingTaskId = CreateTask(sub_809EB40, 0); break; - case 1: - case 6: - ewramSS.unkF = CreateTask(sub_809E3FC, 0); + case PSS_MODE_MOVES_ONLY: + case PSS_MODE_PC_MOVES_ONLY: + ewramSS.inputHandlingTaskId = CreateTask(sub_809E3FC, 0); break; } } @@ -363,13 +363,13 @@ bool8 sub_809DA84(void) dest = (void *)VRAM + 0xD140; DmaCopy16(3, src, dest, 256); - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; break; case 10: if (LoadPokemonSummaryScreenGraphics()) { - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; } break; @@ -378,8 +378,8 @@ bool8 sub_809DA84(void) gMain.state++; break; case 12: - sub_809F678(&ewramSS.unk10); - if (!GetMonStatusAndPokerus(&ewramSS.unk10)) + sub_809F678(&ewramSS.loadedMon); + if (!GetMonStatusAndPokerus(&ewramSS.loadedMon)) { sub_80A12D0(0); } @@ -388,23 +388,23 @@ bool8 sub_809DA84(void) sub_80A12D0(10); } - DrawPokerusSurvivorDot(&ewramSS.unk10); + DrawPokerusSurvivorDot(&ewramSS.loadedMon); gMain.state++; break; case 13: sub_80A1950(); - sub_80A1D84(&ewramSS.unk10); + sub_80A1D84(&ewramSS.loadedMon); gMain.state++; break; case 14: - sub_80A1DE8(&ewramSS.unk10); - ewramSS.unk74 = 0; + sub_80A1DE8(&ewramSS.loadedMon); + ewramSS.loadGfxState = 0; gMain.state++; break; case 15: - if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) { - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; } break; @@ -414,23 +414,23 @@ bool8 sub_809DA84(void) gMain.state++; break; case 17: - if (ewramSS.unkB < 2) + if (ewramSS.page <= PSS_PAGE_SKILLS) { - gUnknown_083C1580[ewramSS.unkB](); + gUnknown_083C1580[ewramSS.page](); } gMain.state++; break; case 18: - sub_809FAC8(&ewramSS.unk10); + sub_809FAC8(&ewramSS.loadedMon); gMain.state++; break; case 19: - gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); gMain.state++; break; case 20: - if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -443,7 +443,7 @@ bool8 sub_809DA84(void) break; case 21: sub_809EBC4(); - if (ewramSS.unk79 != 0) + if (ewramSS.selectedMoveIndex != 0) { sub_80A1488(0, 0); sub_80A1654(0, 0); @@ -509,7 +509,7 @@ void sub_809DE64(void) bool8 LoadPokemonSummaryScreenGraphics(void) { - switch (ewramSS.unk74) + switch (ewramSS.loadGfxState) { case 0: LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0); @@ -549,11 +549,11 @@ bool8 LoadPokemonSummaryScreenGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 464, 96); - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; return TRUE; } - ewramSS.unk74++; + ewramSS.loadGfxState++; return FALSE; } @@ -587,13 +587,13 @@ void sub_809E13C(u8 taskId) { if (sub_8055870() != TRUE && !gPaletteFade.active) { - gUnknown_020384F0 = ewramSS.unk9; + gUnknown_020384F0 = ewramSS.monIndex; ResetSpriteData(); FreeAllSpritePalettes(); StopCryAndClearCrySongs(); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - SetMainCallback2(ewramSS.unk4); + SetMainCallback2(ewramSS.callback); DestroyTask(taskId); } } @@ -621,12 +621,12 @@ void SummaryScreenHandleKeyInput(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.unkB > 1) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) { SummaryScreenHandleAButton(taskId); } - if (ewramSS.unkB == 0) + if (ewramSS.page == PSS_PAGE_INFO) { SummaryScreenExit(taskId); } @@ -645,16 +645,16 @@ void sub_809E260(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.unk79); + sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.unk79); + sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -663,9 +663,9 @@ void sub_809E260(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.unkB != ewramSS.unk76) + if (ewramSS.page != ewramSS.lastPage) { - if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -675,21 +675,21 @@ void sub_809E260(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (sub_809F7D0(taskId) == 1 || ewramSS.unk79 == 4) + if (sub_809F7D0(taskId) == TRUE || ewramSS.selectedMoveIndex == 4) { - ewramSS.unk7A = ewramSS.unk79; - gSpecialVar_0x8005 = ewramSS.unk7A; + ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; + gSpecialVar_0x8005 = ewramSS.switchMoveIndex; SummaryScreenExit(taskId); } else { PlaySE(32); - sub_809F9D0(taskId, ewramSS.unk79); + sub_809F9D0(taskId, ewramSS.selectedMoveIndex); } } else if (gMain.newKeys & B_BUTTON) { - ewramSS.unk7A = 4; + ewramSS.switchMoveIndex = 4; gSpecialVar_0x8005 = 4; SummaryScreenExit(taskId); } @@ -703,18 +703,18 @@ void sub_809E3FC(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.unk79); + sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.unk79); + sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.unk79 != 4 && ewramSS.unk7B == 0) + if (ewramSS.selectedMoveIndex != 4 && !ewramSS.disableMoveOrderEditing) { - if (!MonKnowsMultipleMoves(&ewramSS.unk10)) + if (!MonKnowsMultipleMoves(&ewramSS.loadedMon)) { PlaySE(32); } @@ -722,7 +722,7 @@ void sub_809E3FC(u8 taskId) { PlaySE(5); - ewramSS.unk7A = ewramSS.unk79; + ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; sub_80A1B40(1); sub_80A1A30(19); @@ -763,12 +763,12 @@ void sub_809E534(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, -1, &ewramSS.unk7A); + sub_809E8F0(taskId, -1, &ewramSS.switchMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, 1, &ewramSS.unk7A); + sub_809E8F0(taskId, 1, &ewramSS.switchMoveIndex); } else if (gMain.newKeys & A_BUTTON) { @@ -1053,8 +1053,8 @@ void sub_809E7F0(u8 taskId) { if (sub_809F5F8()) { - ewramSS.unk74 = 0; - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + ewramSS.loadGfxState = 0; + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); gTasks[taskId].func = sub_809E3FC; sub_80A2078(taskId); } @@ -1069,9 +1069,9 @@ void sub_809E83C(u8 taskId, s8 b) if (b == 1) { - if (ewramSS.unk79 != ewramSS.unk7A) + if (ewramSS.selectedMoveIndex != ewramSS.switchMoveIndex) { - if (ewramSS.unkE == 0) + if (ewramSS.usingPC == FALSE) { sub_809E5C4(); } @@ -1080,9 +1080,9 @@ void sub_809E83C(u8 taskId, s8 b) sub_809E6D8(); } - ewramSS.unk79 = ewramSS.unk7A; - sub_809F678(&ewramSS.unk10); - ewramSS.unk74 = 1; + ewramSS.selectedMoveIndex = ewramSS.switchMoveIndex; + sub_809F678(&ewramSS.loadedMon); + ewramSS.loadGfxState = 1; gTasks[taskId].func = sub_809E7F0; return; @@ -1090,7 +1090,7 @@ void sub_809E83C(u8 taskId, s8 b) } else { - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); } gTasks[taskId].func = sub_809E3FC; @@ -1281,18 +1281,18 @@ void SummaryScreenHandleAButton(u8 taskId) { PlaySE(5); - ewramSS.unk79 = 0; + ewramSS.selectedMoveIndex = 0; sub_80A1488(2, 0); sub_80A1654(2, 0); - if (ewramSS.unk7B == 0) + if (!ewramSS.disableMoveOrderEditing) { - ewramSS.unk7F = 5; + ewramSS.headerActionTextId = 5; PrintSummaryWindowHeaderText(); } sub_80A16CC(0); - sub_80A029C(&ewramSS.unk10); + sub_80A029C(&ewramSS.loadedMon); sub_80A1A30(9); gTasks[taskId].func = sub_809E3FC; @@ -1301,7 +1301,7 @@ void SummaryScreenHandleAButton(u8 taskId) void sub_809EAC8(u8 taskId) { - if (ewramSS.unk79 != 4) + if (ewramSS.selectedMoveIndex != 4) { sub_80A1488(-2, 0); sub_80A1654(-2, 0); @@ -1313,7 +1313,7 @@ void sub_809EAC8(u8 taskId) MenuZeroFillWindowRect(15, 12, 28, 13); MenuZeroFillWindowRect(11, 15, 28, 18); - ewramSS.unk7F = 6; + ewramSS.headerActionTextId = 6; PrintSummaryWindowHeaderText(); gTasks[taskId].func = SummaryScreenHandleKeyInput; @@ -1329,15 +1329,15 @@ void sub_809EB40(u8 taskId) gTasks[taskId].func = sub_809E260; break; case 0: - ewramSS.unk79 = 0; - if (ewramSS.unk7C != 0) + ewramSS.selectedMoveIndex = 0; + if (ewramSS.moveToLearn != 0) { sub_80A1488(10, 0); - sub_80A1654(10, ewramSS.unk79); + sub_80A1654(10, ewramSS.selectedMoveIndex); } sub_80A16CC(0); - sub_80A029C(&ewramSS.unk10); + sub_80A029C(&ewramSS.loadedMon); // fall through default: gTasks[taskId].data[0]++; @@ -1347,18 +1347,18 @@ void sub_809EB40(u8 taskId) void sub_809EBC4(void) { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { DrawSummaryScreenNavigationDots(); gUnknown_030042C0 = 0x100; - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00; } } @@ -1371,36 +1371,36 @@ void sub_809EC38(u8 taskId) switch (taskData[0]) { case 0: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { gUnknown_03004288 = 0x100; } - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800; } - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00; } } else { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { gUnknown_030042C0 = 0x100; } - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; } - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; } @@ -1409,7 +1409,7 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 1: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { int var2 = gUnknown_030042C0 - 0x20; gUnknown_030042C0 = var2; @@ -1433,28 +1433,28 @@ void sub_809EC38(u8 taskId) } break; case 2: - ewramSS.unk7E = ewramSS.unkB + 1; - minus2 = ewramSS.unk8 - 2; + ewramSS.headerTextId = ewramSS.page + 1; + minus2 = ewramSS.mode - 2; if (minus2 < 2) { - ewramSS.unk7F = 0; - sub_80A029C(&ewramSS.unk10); - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); - sub_80A00F4(ewramSS.unk79); + ewramSS.headerActionTextId = 0; + sub_80A029C(&ewramSS.loadedMon); + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + sub_80A00F4(ewramSS.selectedMoveIndex); } else { - if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.unk7F = 6; + ewramSS.headerActionTextId = 6; } - else if (ewramSS.unkB == 0) + else if (ewramSS.page == PSS_PAGE_INFO) { - ewramSS.unk7F = 7; + ewramSS.headerActionTextId = 7; } else { - ewramSS.unk7F = 0; + ewramSS.headerActionTextId = 0; } } @@ -1466,8 +1466,8 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 4: - gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); - ewramSS.unk80 ^= 1; + gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + ewramSS.bgToggle ^= 1; taskData[0]++; break; case 5: @@ -1488,10 +1488,10 @@ void sub_809EE74(u8 taskId) switch (taskData[0]) { case 0: - var1 = ewramSS.unk80; + var1 = ewramSS.bgToggle; if (var1 == 0) { - gUnknown_03004288 = ewramSS.unk80; + gUnknown_03004288 = ewramSS.bgToggle; taskData[0]++; } else @@ -1501,28 +1501,28 @@ void sub_809EE74(u8 taskId) } break; case 1: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01; REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; } else { - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01; REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; @@ -1531,7 +1531,7 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 2: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { int var2 = gUnknown_03004288 + 0x20; gUnknown_03004288 = var2; @@ -1551,28 +1551,28 @@ void sub_809EE74(u8 taskId) } break; case 3: - ewramSS.unk7E = ewramSS.unkB + 1; - minus2 = ewramSS.unk8 - 2; + ewramSS.headerTextId = ewramSS.page + 1; + minus2 = ewramSS.mode - 2; if (minus2 < 2) { - ewramSS.unk7F = 0; - sub_80A029C(&ewramSS.unk10); - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); - sub_80A00F4(ewramSS.unk79); + ewramSS.headerActionTextId = 0; + sub_80A029C(&ewramSS.loadedMon); + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + sub_80A00F4(ewramSS.selectedMoveIndex); } else { - if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.unk7F = 6; + ewramSS.headerActionTextId = 6; } - else if (ewramSS.unkB == 0) + else if (ewramSS.page == PSS_PAGE_INFO) { - ewramSS.unk7F = 7; + ewramSS.headerActionTextId = 7; } else { - ewramSS.unk7F = 0; + ewramSS.headerActionTextId = 0; } } @@ -1584,8 +1584,8 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 5: - gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); - ewramSS.unk80 ^= 1; + gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + ewramSS.bgToggle ^= 1; taskData[0]++; break; case 6: @@ -1599,7 +1599,7 @@ void sub_809EE74(u8 taskId) void sub_809F0D0(u8 taskId, s8 direction) { - ewramSS.unkB += direction; + ewramSS.page += direction; gUnknown_03005CF0 = gTasks[taskId].func; sub_809FBE4(); gTasks[taskId].data[0] = 0; @@ -1617,10 +1617,10 @@ void sub_809F0D0(u8 taskId, s8 direction) void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) { - if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { - if (direction == -1 && ewramSS.unkB == ewramSS.unk75) return; - if (direction == 1 && ewramSS.unkB == ewramSS.unk76) return; + if (direction == -1 && ewramSS.page == ewramSS.firstPage) return; + if (direction == 1 && ewramSS.page == ewramSS.lastPage) return; if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) { @@ -1636,9 +1636,9 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) s8 var3; u8 var1 = direction; - if (ewramSS.unkE == 1) + if (ewramSS.usingPC == TRUE) { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { var1 = (direction == 1) ? 0 : 1; } @@ -1647,7 +1647,7 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) var1 = (direction == 1) ? 2 : 3; } - var3 = StorageSystemGetNextMonIndex(ewramSS.unk0.boxMons, ewramSS.unk9, ewramSS.unkA, var1); + var3 = StorageSystemGetNextMonIndex(ewramSS.monList.boxMons, ewramSS.monIndex, ewramSS.maxMonIndex, var1); } else { @@ -1664,12 +1664,12 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) if (var3 != -1) { PlaySE(5); - if (GetMonStatusAndPokerus(&ewramSS.unk10)) + if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) { sub_80A12D0(-2); } - ewramSS.unk9 = var3; + ewramSS.monIndex = var3; ewramSS.unk84 = gTasks[taskId].func; gTasks[taskId].func = sub_809F43C; } @@ -1782,16 +1782,16 @@ _0809F280: .4byte sub_809F43C\n\ // s8 sub_809F284(s8 a) // { -// struct Pokemon *mons = ewramSS.unk0.partyMons; +// struct Pokemon *mons = ewramSS.monList.partyMons; // u8 var1 = 0; -// if (ewramSS.unkB == 0) +// if (ewramSS.page == PSS_PAGE_INFO) // { -// if ((s8)a == -1 || ewramSS.unk9 != 0) +// if ((s8)a == -1 || ewramSS.monIndex != 0) // { -// if ((s8)a == 1 || ewramSS.unk9 < ewramSS.unkA) +// if ((s8)a == 1 || ewramSS.monIndex < ewramSS.maxMonIndex) // { -// return ewramSS.unk9 + a; +// return ewramSS.monIndex + a; // } // } @@ -1803,18 +1803,18 @@ _0809F280: .4byte sub_809F43C\n\ // { // var1 += a; -// if (ewramSS.unk9 + var1 >= 0 || ewramSS.unk9 + var1 > ewramSS.unkA) +// if (ewramSS.monIndex + var1 >= 0 || ewramSS.monIndex + var1 > ewramSS.maxMonIndex) // { // return -1; // } -// if (!GetMonData(&mons[ewramSS.unk9 + var1], MON_DATA_IS_EGG)) +// if (!GetMonData(&mons[ewramSS.monIndex + var1], MON_DATA_IS_EGG)) // { // break; // } // } -// return ewramSS.unk9 + var1; +// return ewramSS.monIndex + var1; // } // } @@ -1904,7 +1904,7 @@ bool8 sub_809F310(struct Pokemon *mon) { if (GetMonData(mon, MON_DATA_SPECIES)) { - if (ewramSS.unkB != 0 || !GetMonData(mon, MON_DATA_IS_EGG)) + if (ewramSS.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG)) { return TRUE; } @@ -1955,7 +1955,7 @@ s8 sub_809F3CC(s8 a) for (i = 0; i < 6; i++) { - if (gUnknown_083C15A8[i] == ewramSS.unk9) + if (gUnknown_083C15A8[i] == ewramSS.monIndex) { var1 = i; break; @@ -2054,33 +2054,33 @@ void sub_809F43C(u8 taskId) gMain.state++; break; case 1: - DestroySpriteAndFreeResources(&gSprites[ewramSS.unkC]); + DestroySpriteAndFreeResources(&gSprites[ewramSS.monSpriteId]); gMain.state++; break; case 2: - DestroySpriteAndFreeResources(&gSprites[ewramSS.unkD]); + DestroySpriteAndFreeResources(&gSprites[ewramSS.ballSpriteId]); gMain.state++; break; case 3: - ewramSS.unk74 = 0; - ewramSS.unk79 = 0; + ewramSS.loadGfxState = 0; + ewramSS.selectedMoveIndex = 0; gMain.state++; break; case 4: - sub_809F678(&ewramSS.unk10); - if (GetMonStatusAndPokerus(&ewramSS.unk10)) + sub_809F678(&ewramSS.loadedMon); + if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) { sub_80A12D0(2); } - DrawPokerusSurvivorDot(&ewramSS.unk10); + DrawPokerusSurvivorDot(&ewramSS.loadedMon); gMain.state++; break; case 5: - if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) { - ewramSS.unk74 = 0; - if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + ewramSS.loadGfxState = 0; + if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -2093,17 +2093,17 @@ void sub_809F43C(u8 taskId) } break; case 6: - sub_80A1DCC(&ewramSS.unk10); + sub_80A1DCC(&ewramSS.loadedMon); gMain.state++; break; case 7: - sub_80A1DE8(&ewramSS.unk10); + sub_80A1DE8(&ewramSS.loadedMon); gMain.state++; break; case 8: if (sub_809F5F8()) { - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; } break; @@ -2119,15 +2119,15 @@ void sub_809F43C(u8 taskId) bool8 sub_809F5F8(void) { - if (ewramSS.unk74 == 0) + if (ewramSS.loadGfxState == 0) { - sub_809FAC8(&ewramSS.unk10); - ewramSS.unk74++; + sub_809FAC8(&ewramSS.loadedMon); + ewramSS.loadGfxState++; return FALSE; } else { - gUnknown_083C1588[ewramSS.unkB](&ewramSS.unk10); + gUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); return TRUE; } } @@ -2152,15 +2152,15 @@ void sub_809F664(struct Pokemon *mon) void sub_809F678(struct Pokemon *mon) { - if (ewramSS.unkE == 0) + if (ewramSS.usingPC == FALSE) { - struct Pokemon *mons = ewramSS.unk0.partyMons; - *mon = mons[ewramSS.unk9]; + struct Pokemon *mons = ewramSS.monList.partyMons; + *mon = mons[ewramSS.monIndex]; } else { - struct BoxPokemon *mons = ewramSS.unk0.boxMons; - sub_803B4B4(&mons[ewramSS.unk9], mon); + struct BoxPokemon *mons = ewramSS.monList.boxMons; + sub_803B4B4(&mons[ewramSS.monIndex], mon); } } @@ -2238,8 +2238,8 @@ bool8 sub_809F7D0(u8 taskId) u16 move; sub_809F678(&mon); - move = GetMonMove(&mon, ewramSS.unk79); - if (IsHMMove(move) == TRUE && ewramSS.unk8 != 3) + move = GetMonMove(&mon, ewramSS.selectedMoveIndex); + if (IsHMMove(move) == TRUE && ewramSS.mode != PSS_MODE_UNKNOWN) { return FALSE; } @@ -2247,7 +2247,7 @@ bool8 sub_809F7D0(u8 taskId) return TRUE; } -#ifdef NONMATCHING // The two "ewramSS.unk79 = taskData[15];" lines have small register differences. +#ifdef NONMATCHING // The two "ewramSS.selectedMoveIndex = taskData[15];" lines have small register differences. void sub_809F814(u8 taskId) { u16 var1; @@ -2264,7 +2264,7 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.unk79 = taskData[15]; + ewramSS.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, -1, NULL); } else if (gMain.newKeys & DPAD_DOWN) @@ -2272,14 +2272,14 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.unk79 = taskData[15]; + ewramSS.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, 1, NULL); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.unkB != 2) + if (ewramSS.page != PSS_PAGE_BATTLE_MOVES) { - if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2293,9 +2293,9 @@ void sub_809F814(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.unkB != ewramSS.unk76) + if (ewramSS.page != ewramSS.lastPage) { - if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2554,7 +2554,7 @@ void sub_809F9D0(u8 taskId, u8 b) u8 sub_809FA30(void) { - return ewramSS.unk7A; + return ewramSS.switchMoveIndex; } // void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) @@ -2869,9 +2869,9 @@ void sub_80A00A4(void) void sub_80A00F4(u8 a) { - if (ewramSS.unk7C != 0 || a != 4) + if (ewramSS.moveToLearn != 0 || a != 4) { - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A1FF8(gOtherText_Power2, 13, 1, 15); sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17); @@ -2906,7 +2906,7 @@ void sub_80A015C(struct Pokemon *mon) } else { - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i); } @@ -2936,20 +2936,20 @@ void sub_80A029C(struct Pokemon *mon) u16 move; u8 pp; - if (ewramSS.unk7C == 0) + if (ewramSS.moveToLearn == 0) { sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12); return; } - move = ewramSS.unk7C; + move = ewramSS.moveToLearn; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) sub_80A198C(gBattleMoves[move].type, 87, 96, 4); else sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4); - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) sub_80A1FF8(gMoveNames[move], 10, 15, 12); else sub_80A1FF8(gMoveNames[move], 9, 15, 12); @@ -2984,9 +2984,9 @@ u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex) } else { - if (ewramSS.unk7C != 0) + if (ewramSS.moveToLearn != 0) { - move = ewramSS.unk7C; + move = ewramSS.moveToLearn; } else { @@ -3001,7 +3001,7 @@ void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) { u16 move = sub_80A03BC(mon, *selectedMoveIndex); - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A04CC(move); sub_80A057C(0xFFFF); @@ -3017,7 +3017,7 @@ void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) u16 move = sub_80A03BC(mon, *selectedMoveIndex); MenuZeroFillWindowRect(11, 15, 28, 18); - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A046C(move); } @@ -3546,7 +3546,7 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) if (itemId == ITEM_ENIGMA_BERRY && sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE - && (ewramSS.unk9 == 1 || ewramSS.unk9 == 4 || ewramSS.unk9 == 5)) + && (ewramSS.monIndex == 1 || ewramSS.monIndex == 4 || ewramSS.monIndex == 5)) { StringCopy(gStringVar1, ItemId_GetItem(itemId)->name); } @@ -3643,7 +3643,7 @@ void PrintSummaryWindowHeaderText(void) buffer += 3; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7E]); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3652,7 +3652,7 @@ void PrintSummaryWindowHeaderText(void) MenuPrint(gStringVar1, 0, 0); - if (ewramSS.unk7F != 0) + if (ewramSS.headerActionTextId != 0) { GetStringCenterAlignXOffset(5, 23, 0); GetStringCenterAlignXOffset(6, 24, 0); @@ -3664,7 +3664,7 @@ void PrintSummaryWindowHeaderText(void) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7F]); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerActionTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3700,7 +3700,7 @@ void DrawSummaryScreenNavigationDots(void) void *dest; u16 arr[8]; u8 i = 0; - struct SummaryScreenStruct *SS = (struct SummaryScreenStruct *)(gSharedMem + 0x18000); + struct PokemonSummaryScreenStruct *SS = (struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000); u16 var1 = 0x4040; u16 var2 = 0x404A; @@ -4331,12 +4331,12 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0) // { -// if (ewramSS.unkB == 2) +// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) // { // MenuZeroFillWindowRect(0, 14, 9, 18); -// sub_80A0958(ewramSS.unk10); +// sub_80A0958(ewramSS.loadedMon); -// if (GetMonStatusAndPokerus(ewramSS.unk10)) +// if (GetMonStatusAndPokerus(ewramSS.loadedMon)) // { // sub_80A1FF8(gOtherText_Status, 13, 1, 18); // } @@ -4347,12 +4347,12 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[1] > 9) // { -// if (ewramSS.unkB == 2) +// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) // { // sub_80A00F4(gTasks[taskId].data[3]); // } -// sub_80A0428(ewramSS.unk10, &gTasks[taskId].data[3]); +// sub_80A0428(ewramSS.loadedMon, &gTasks[taskId].data[3]); // DestroyTask(taskId); // } // } @@ -4534,7 +4534,7 @@ void sub_80A1488(s8 a, u8 b) { u8 taskId; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -4736,7 +4736,7 @@ void sub_80A1654(s8 a, u8 b) { u8 taskId; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -5011,7 +5011,7 @@ void sub_80A1888(struct Sprite *sprite) { sprite->callback = SpriteCallbackDummy; - if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { PlayCry1(sprite->data0, 0); } @@ -5074,7 +5074,7 @@ void sub_80A1A30(u8 a) s16 x; u8 subPriority = 0; - if (ewramSS.unkB > 1) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) { if (a == 9) { @@ -5224,11 +5224,11 @@ void sub_80A1BC0(struct Sprite *sprite) if (sprite->data0 == 9) { - sprite->pos2.y = ewramSS.unk79 * 16; + sprite->pos2.y = ewramSS.selectedMoveIndex * 16; } else { - sprite->pos2.y = ewramSS.unk7A * 16; + sprite->pos2.y = ewramSS.switchMoveIndex * 16; } } @@ -5442,9 +5442,9 @@ void sub_80A1DE8(struct Pokemon *mon) u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL)); sub_80478DC(ball); - ewramSS.unkD = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); - gSprites[ewramSS.unkD].callback = SpriteCallbackDummy; - gSprites[ewramSS.unkD].oam.priority = 3; + ewramSS.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); + gSprites[ewramSS.ballSpriteId].callback = SpriteCallbackDummy; + gSprites[ewramSS.ballSpriteId].oam.priority = 3; } u8 *sub_80A1E58(u8 *text, u8 id) -- cgit v1.2.3 From 85ab103fa6940af7355117f2197d67eb1ce10dc4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 19:33:32 -0800 Subject: Fix some non-matchings and organize header --- src/pokemon/pokemon_summary_screen.c | 330 ++++++++++------------------------- 1 file changed, 89 insertions(+), 241 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index b7d9e31cb..9f8021eb5 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -39,7 +39,7 @@ static void sub_80A1D84(struct Pokemon *); static void sub_80A18C4(void); static bool8 LoadPokemonSummaryScreenGraphics(void); static bool8 MonKnowsMultipleMoves(struct Pokemon *); -extern void PrintSummaryWindowHeaderText(void); +static void PrintSummaryWindowHeaderText(void); static void sub_80A1DCC(struct Pokemon *); static void sub_809FE80(void); static void sub_80A00A4(void); @@ -59,81 +59,63 @@ static void sub_809E13C(u8 taskId); static void sub_80A1950(void); static void sub_809DA1C(void); static void sub_809D844(void); - -extern void sub_809D85C(void); -extern void sub_809DE64(void); -extern bool8 sub_809DA84(void); -extern void SummaryScreenHandleAButton(u8); -extern void SummaryScreenHandleUpDownInput(u8, s8); -extern bool8 sub_809F7D0(u8); -extern void sub_809F9D0(u8, u8); -extern void sub_809EAC8(u8); -extern void sub_809E534(u8); -extern void sub_809E83C(u8, s8); -extern void sub_809E7F0(u8); -extern void sub_809E6D8(void); -extern void sub_809E5C4(void); -extern void sub_80A1B40(u8); -extern void sub_80A2078(int); -extern void sub_809E3FC(u8); -extern void SummaryScreenHandleKeyInput(u8); -extern void sub_80A1B1C(u8); -extern void sub_80A16CC(u8); -extern void sub_80A1A30(u8); -extern void DrawSummaryScreenNavigationDots(void); -extern void sub_80A00F4(u8); -extern void sub_80A029C(struct Pokemon *); -extern void sub_809EE74(u8); -extern void sub_809EC38(u8); -extern void sub_809FBE4(void); -extern void sub_809F0D0(u8, s8); -extern void sub_80A1500(u8); -extern void sub_80A1334(u8); -extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); +static void sub_809D85C(void); +static void sub_809DE64(void); +static void SummaryScreenHandleAButton(u8); +static void SummaryScreenHandleUpDownInput(u8, s8); +static bool8 sub_809F7D0(u8); +static void sub_809F9D0(u8, u8); +static void sub_809EAC8(u8); +static void sub_809E534(u8); +static void sub_809E83C(u8, s8); +static void sub_809E5C4(void); +static void sub_80A1B40(u8); +static void sub_80A2078(int); +static void sub_809E3FC(u8); +static void SummaryScreenHandleKeyInput(u8); +static void sub_80A1B1C(u8); +static void sub_80A16CC(u8); +static void sub_80A1A30(u8); +static void DrawSummaryScreenNavigationDots(void); +static void sub_80A00F4(u8); +static void sub_80A029C(struct Pokemon *); +static void sub_809FBE4(void); +static void sub_80A1500(u8); +static void sub_80A1334(u8); extern void sub_809F43C(u8); extern s8 sub_809F284(s8); extern s8 sub_809F3CC(s8); -extern bool8 sub_809F310(struct Pokemon *); -extern s8 sub_809F344(u8); -extern s8 sub_809F388(u8); -extern bool8 sub_809F5F8(void); -extern void sub_80A1DE8(struct Pokemon *); -extern u8 sub_809F6B4(struct Pokemon *, u8 *); -extern void DrawPokerusSurvivorDot(struct Pokemon *); -extern void sub_80A12D0(s8); -extern void sub_809FAC8(struct Pokemon *); -extern void SummaryScreenHandleLeftRightInput(u8, s8); -extern void sub_809E8F0(u8, s8, u8*); -extern void sub_809E260(u8); -extern void sub_809F814(u8); -extern void sub_80A1654(s8, u8); -extern void sub_80A1488(s8, u8); -extern void GetStringCenterAlignXOffsetWithLetterSpacing(u8, u8, u8, u8); -extern bool8 sub_809FA94(struct Pokemon *); +static bool8 sub_809F5F8(void); +static void sub_80A1DE8(struct Pokemon *); +static u8 sub_809F6B4(struct Pokemon *, u8 *); +static void DrawPokerusSurvivorDot(struct Pokemon *); +static void sub_80A12D0(s8); +static void sub_809FAC8(struct Pokemon *); +static void SummaryScreenHandleLeftRightInput(u8, s8); +static void sub_809E8F0(); +static void sub_80A1654(s8, u8); +static void sub_80A1488(s8, u8); static void sub_809FC34(struct Pokemon *); -extern void sub_809FC0C(void); static void sub_809FF64(struct Pokemon *); -extern void sub_809FEB8(void); -extern void sub_80A1918(u8, u8); -extern void sub_80A198C(u8, u8, u8, u8); -extern u16 GetMonMove(struct Pokemon *, u8); -extern void sub_80A04CC(u16); -extern void sub_80A057C(u16); -extern void sub_80A0498(u16); -extern void sub_80A046C(u16); -extern void sub_80A03F0(struct Pokemon *, u8 *); -extern u16 sub_80A03BC(struct Pokemon *, u8); -extern void sub_80A20A8(u8); -extern u8 ball_number_to_ball_processing_index(u16); -extern void sub_809F678(struct Pokemon *); -extern void sub_80A1BC0(struct Sprite *sprite); -extern void sub_80A1888(struct Sprite *); -extern void sub_80A0428(struct Pokemon *, u8 *); -extern void sub_80A18E4(u8); -extern void GetStringCenterAlignXOffset(u8, u8, u8); -extern u8 *sub_80A1E58(u8 *, u8); +static void sub_80A1918(u8, u8); +static void sub_80A198C(u8, u8, u8, u8); +static u16 GetMonMove(struct Pokemon *, u8); +static void sub_80A04CC(u16); +static void sub_80A057C(u16); +static void sub_80A0498(u16); +static void sub_80A046C(u16); +static void sub_80A20A8(u8); +static void sub_809F678(struct Pokemon *); +static void sub_80A1BC0(struct Sprite *sprite); +static void sub_80A1888(struct Sprite *); +static void sub_80A0428(struct Pokemon *, u8 *); +static void sub_80A18E4(u8); +static u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); -extern void sub_80A1FF8(const u8 *, u8, u8, u8); +static void sub_80A1FF8(const u8 *, u8, u8, u8); + +extern u8 ball_number_to_ball_processing_index(u16); +extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gUnknown_020384F0; @@ -144,6 +126,13 @@ extern u16 gUnknown_030041B4; extern u16 gUnknown_030042C0; extern u16 gUnknown_03004288; extern u16 gUnknown_030041B0; +extern TaskFunc gUnknown_03005CF0; +extern struct Sprite *gUnknown_020384F4; +extern struct SpriteTemplate gSpriteTemplate_83C1304; +extern struct SpriteTemplate gSpriteTemplate_83C1280; +extern struct SpriteTemplate gSpriteTemplate_83C11C0; +extern struct SpriteTemplate gUnknown_02024E8C; + extern const u16 gSummaryScreenTextTiles[]; extern const u16 gSummaryScreenButtonTiles[]; extern const u8 gMoveTypes_Pal[]; @@ -161,7 +150,7 @@ extern const u8 gUnknown_08E73508[]; extern const u8 gStatusScreen_Gfx[]; extern const u8 gFontDefaultPalette[]; extern const u8 gUnknownPalette_81E6692[]; -extern const u8 gUnknown_083C15A8[]; +extern const u8 gDoubleBattlePartyOrder[]; extern const void (*gUnknown_083C1580[])(void); extern const void (*gUnknown_083C1598[])(struct Pokemon *); extern const void (*gUnknown_083C1588[])(struct Pokemon *); @@ -173,15 +162,9 @@ extern const u8 * const gMoveDescriptions[]; extern const u8 * const gContestEffectStrings[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; -extern TaskFunc gUnknown_03005CF0; extern const u8 gUnknown_083C15BC[]; -extern struct Sprite *gUnknown_020384F4; extern const u16 gSummaryScreenMonMarkingsPalette[]; -extern struct SpriteTemplate gSpriteTemplate_83C1304; -extern struct SpriteTemplate gSpriteTemplate_83C1280; extern const u8 gUnknown_083C11D8[]; -extern struct SpriteTemplate gSpriteTemplate_83C11C0; -extern struct SpriteTemplate gUnknown_02024E8C; extern const u16 gUnknown_08E94510[]; extern const u16 gUnknown_08E94550[]; extern const u16 gUnknown_08E94590[]; @@ -1098,7 +1081,7 @@ void sub_809E83C(u8 taskId, s8 b) } __attribute__((naked)) -void sub_809E8F0(u8 taskId, s8 direction, u8 *c) +void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1923,9 +1906,9 @@ s8 sub_809F344(u8 partyIndex) return -1; } - if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gUnknown_083C15A8[partyIndex]; + return gDoubleBattlePartyOrder[partyIndex]; } } } @@ -1940,110 +1923,43 @@ s8 sub_809F388(u8 partyIndex) } partyIndex--; - if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gUnknown_083C15A8[partyIndex]; + return gDoubleBattlePartyOrder[partyIndex]; } } } -#ifdef NONMATCHING // The nested if statements at the end are not matching. -s8 sub_809F3CC(s8 a) +s8 sub_809F3CC(s8 direction) { - u8 var1 = 0; - u8 i = 0; + u8 i; + u8 monIndex = 0; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { - if (gUnknown_083C15A8[i] == ewramSS.monIndex) + if (gDoubleBattlePartyOrder[i] == ewramSS.monIndex) { - var1 = i; + monIndex = i; break; } } - if ((s8)a != -1 || var1 != 0) + if ((direction == -1 && monIndex == 0) || (direction == 1 && monIndex == 5)) { - if ((s8)a != 1) - { - return sub_809F388(var1); - } - else if (var1 != 5) - { - return sub_809F344(var1); - } + return -1; + } + + if (direction != 1) + { + return sub_809F388(monIndex); + } + else if (monIndex != 5) + { + return sub_809F344(monIndex); } return -1; } -#else -__attribute__((naked)) -s8 sub_809F3CC(s8 a) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - movs r2, 0\n\ - movs r1, 0\n\ - ldr r3, _0809F41C @ =gUnknown_083C15A8\n\ - ldr r4, _0809F420 @ =gSharedMem + 0x18000\n\ - ldrb r0, [r3]\n\ - ldrb r5, [r4, 0x9]\n\ - cmp r0, r5\n\ - beq _0809F3FC\n\ - adds r5, r3, 0\n\ - adds r3, r4, 0\n\ -_0809F3E6:\n\ - adds r0, r1, 0x1\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x5\n\ - bhi _0809F3FC\n\ - adds r0, r1, r5\n\ - ldrb r0, [r0]\n\ - ldrb r4, [r3, 0x9]\n\ - cmp r0, r4\n\ - bne _0809F3E6\n\ - adds r2, r1, 0\n\ -_0809F3FC:\n\ - lsls r0, r6, 24\n\ - asrs r1, r0, 24\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - bne _0809F40C\n\ - cmp r2, 0\n\ - beq _0809F414\n\ -_0809F40C:\n\ - cmp r1, 0x1\n\ - bne _0809F424\n\ - cmp r2, 0x5\n\ - bne _0809F42C\n\ -_0809F414:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - b _0809F436\n\ - .align 2, 0\n\ -_0809F41C: .4byte gUnknown_083C15A8\n\ -_0809F420: .4byte gSharedMem + 0x18000\n\ -_0809F424:\n\ - adds r0, r2, 0\n\ - bl sub_809F388\n\ - b _0809F432\n\ -_0809F42C:\n\ - adds r0, r2, 0\n\ - bl sub_809F344\n\ -_0809F432:\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ -_0809F436:\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_809F43C(u8 taskId) { @@ -2265,7 +2181,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, -1, NULL); + sub_809E8F0(taskId, -1); } else if (gMain.newKeys & DPAD_DOWN) { @@ -2273,7 +2189,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, 1, NULL); + sub_809E8F0(taskId, 1); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { @@ -2315,6 +2231,7 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; } } + #else __attribute__((naked)) void sub_809F814(u8 taskId) @@ -5116,89 +5033,20 @@ void sub_80A1B1C(u8 a) } } -#ifdef NONMATCHING void sub_80A1B40(u8 a) { u8 i; - u8 var1 = a * 3; + a *= 3; - StartSpriteAnim(&gSprites[ewram1A000[9]], var1 + 4); + StartSpriteAnim(&gSprites[ewram1A000[9]], a + 4); for (i = 0; i < 8; i++) { - StartSpriteAnim(&gSprites[ewram1A000[10 + i]], var1 + 6); + StartSpriteAnim(&gSprites[ewram1A000[10 + i]], a + 6); } - StartSpriteAnim(&gSprites[ewram1A000[18]], var1 + 5); + StartSpriteAnim(&gSprites[ewram1A000[18]], a + 5); } -#else -__attribute__((naked)) -void sub_80A1B40(u8 a) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r1, r7, 1\n\ - adds r1, r7\n\ - lsls r1, 24\n\ - ldr r0, _080A1BB4 @ =gSharedMem + 0x1A009\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - ldr r2, _080A1BB8 @ =gSprites\n\ - adds r0, r2\n\ - lsrs r7, r1, 24\n\ - movs r2, 0x80\n\ - lsls r2, 19\n\ - adds r1, r2\n\ - lsrs r1, 24\n\ - bl StartSpriteAnim\n\ - movs r4, 0\n\ - adds r0, r7, 0x6\n\ - lsls r0, 24\n\ - mov r8, r0\n\ -_080A1B74:\n\ - ldr r6, _080A1BBC @ =gSharedMem + 0x1A00A\n\ - adds r0, r4, r6\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r5, _080A1BB8 @ =gSprites\n\ - adds r0, r5\n\ - mov r2, r8\n\ - lsrs r1, r2, 24\n\ - bl StartSpriteAnim\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x7\n\ - bls _080A1B74\n\ - ldrb r1, [r6, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - adds r1, r7, 0x5\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - bl StartSpriteAnim\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080A1BB4: .4byte gSharedMem + 0x1A009\n\ -_080A1BB8: .4byte gSprites\n\ -_080A1BBC: .4byte gSharedMem + 0x1A00A\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_80A1BC0(struct Sprite *sprite) { -- cgit v1.2.3 From 90dcfa4f1c53d6bab795fd1514868dc25e7f5f76 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 20:58:46 -0800 Subject: Migrate move_descriptions to src/data/text --- src/data/text/move_descriptions_de.h | 1769 +++++++++++++++++++++++++++++++++ src/data/text/move_descriptions_en.h | 1772 ++++++++++++++++++++++++++++++++++ src/pokemon/pokemon_summary_screen.c | 7 +- 3 files changed, 3547 insertions(+), 1 deletion(-) create mode 100644 src/data/text/move_descriptions_de.h create mode 100644 src/data/text/move_descriptions_en.h (limited to 'src') diff --git a/src/data/text/move_descriptions_de.h b/src/data/text/move_descriptions_de.h new file mode 100644 index 000000000..cb681f6d7 --- /dev/null +++ b/src/data/text/move_descriptions_de.h @@ -0,0 +1,1769 @@ +static const u8 gMoveDescription_Pound[] = _( + "Ein Hieb mit den Vorder-\n" + "beinen oder dem Schweif."); + +static const u8 gMoveDescription_KarateChop[] = _( + "Gute Möglichkeit, einen\n" + "Volltreffer zu landen."); + +static const u8 gMoveDescription_DoubleSlap[] = _( + "Trifft den Gegner 2 - 5-mal\n" + "hintereinander."); + +static const u8 gMoveDescription_CometPunch[] = _( + "Trifft den Gegner 2 - 5-mal\n" + "hintereinander."); + +static const u8 gMoveDescription_MegaPunch[] = _( + "Ein unglaublich kräftiger\n" + "Hieb."); + +static const u8 gMoveDescription_PayDay[] = _( + "Wirft Münzen auf Gegner.\n" + "Geld wird erstattet."); + +static const u8 gMoveDescription_FirePunch[] = _( + "Schlag, der dem Gegner evtl.\n" + "Verbrennungen zufügt."); + +static const u8 gMoveDescription_IcePunch[] = _( + "Ein Schlag, der den Gegner\n" + "evtl. einfriert."); + +static const u8 gMoveDescription_ThunderPunch[] = _( + "Schlag, der den Gegner evtl.\n" + "paralysiert."); + +static const u8 gMoveDescription_Scratch[] = _( + "Der Gegner wird mit\n" + "scharfen Klauen zerkratzt."); + +static const u8 gMoveDescription_ViceGrip[] = _( + "Umklammert den Gegner mit\n" + "großen, kräftigen Zangen."); + +static const u8 gMoveDescription_Guillotine[] = _( + "Kräftige Scheren-Attacke.\n" + "Führt evtl. zum K.O."); + +static const u8 gMoveDescription_RazorWind[] = _( + "Eine Attacke, die auf 2\n" + "Runden basiert."); + +static const u8 gMoveDescription_SwordsDance[] = _( + "Erhöht den Angriffs-Wert\n" + "drastisch."); + +static const u8 gMoveDescription_Cut[] = _( + "Trifft den Gegner mit\n" + "Klauen, Scheren o. ä."); + +static const u8 gMoveDescription_Gust[] = _( + "Trifft den Gegner mit Wind-\n" + "stoß durch Flügelschlag."); + +static const u8 gMoveDescription_WingAttack[] = _( + "Trifft den Gegner mit weit\n" + "gespreizten Flügeln."); + +static const u8 gMoveDescription_Whirlwind[] = _( + "Weht Gegner weg und be-\n" + "endet den Kampf in Wildnis."); + +static const u8 gMoveDescription_Fly[] = _( + "Steigt empor in der 1. Runde\n" + "und trifft Gegner in der 2."); + +static const u8 gMoveDescription_Bind[] = _( + "Umklammert und trifft den\n" + "Gegner 2 - 5-mal."); + +static const u8 gMoveDescription_Slam[] = _( + "Schlag mit einem langen\n" + "Schweif, einer Ranke o. ä."); + +static const u8 gMoveDescription_VineWhip[] = _( + "Peitschenähnlicher Schlag\n" + "mit Ranken."); + +static const u8 gMoveDescription_Stomp[] = _( + "Stampfen mit Fuß. Gegner\n" + "schreckt evtl. zurück."); + +static const u8 gMoveDescription_DoubleKick[] = _( + "Doppeltritt. Der Gegner\n" + "wird zweimal getroffen."); + +static const u8 gMoveDescription_MegaKick[] = _( + "Ein extrem heftiger Tritt.$"static const u8 gMoveDescription_JumpKick[] = (); + "Sprung-Tritt. Selbstschä-\n" + "digung bei Misserfolg."); + +static const u8 gMoveDescription_RollingKick[] = _( + "Schneller Tritt aus der\n" + "Drehung."); + +static const u8 gMoveDescription_SandAttack[] = _( + "Senkt Genauigkeit des Geg-\n" + "ners durch Sand."); + +static const u8 gMoveDescription_Headbutt[] = _( + "Rammt den Gegner und lässt\n" + "ihn evtl. zurückschrecken."); + +static const u8 gMoveDescription_HornAttack[] = _( + "Spießt den Gegner mit\n" + "spitzen Hörnern auf."); + +static const u8 gMoveDescription_FuryAttack[] = _( + "Spießt den Gegner 2 - 5-mal\n" + "mit spitzen Hörnern auf."); + +static const u8 gMoveDescription_HornDrill[] = _( + "K.O.-Attacke, die ein Horn\n" + "als Bohrer einsetzt."); + +static const u8 gMoveDescription_Tackle[] = _( + "Trifft den Gegner mit vollem\n" + "Körpereinsatz."); + +static const u8 gMoveDescription_BodySlam[] = _( + "Körper-Ramme, kann\n" + "Paralyse hervorrufen."); + +static const u8 gMoveDescription_Wrap[] = _( + "Umwickelt Gegner 2 - 5-mal\n" + "mit Ranken o. ä."); + +static const u8 gMoveDescription_TakeDown[] = _( + "Rücksichtslose Attacke,\n" + "mit Selbstschädigung."); + +static const u8 gMoveDescription_Thrash[] = _( + "Attacke in 2 bis 3 Runden,\n" + "die Anwender verwirrt."); + +static const u8 gMoveDescription_DoubleEdge[] = _( + "Lebensgefährlicher Angriff\n" + "mit Selbstschädigung."); + +static const u8 gMoveDescription_TailWhip[] = _( + "Hieb mit dem Schweif, senkt\n" + "die VERT. des Gegners."); + +static const u8 gMoveDescription_PoisonSting[] = _( + "Angriff mit Widerhaken,\n" + "kann Gegner vergiften."); + +static const u8 gMoveDescription_Twineedle[] = _( + "Stacheln an den Vorderbei-\n" + "nen treffen Gegner 2-mal."); + +static const u8 gMoveDescription_PinMissile[] = _( + "Spitze Nadeln treffen den\n" + "Gegner 2 - 5-mal."); + +static const u8 gMoveDescription_Leer[] = _( + "Gegners VERT.-Wert wird\n" + "durch Blick gesenkt."); + +static const u8 gMoveDescription_Bite[] = _( + "Beißt zu und lässt den Geg-\n" + "ner evtl. zurückschrecken."); + +static const u8 gMoveDescription_Growl[] = _( + "Knurren, das den ANGR.-Wert\n" + "des Gegners senkt."); + +static const u8 gMoveDescription_Roar[] = _( + "Verjagt den Gegner und be-\n" + "endet den Kampf in Wildnis."); + +static const u8 gMoveDescription_Sing[] = _( + "Ein Lied, das den Gegner\n" + "in tiefen Schlaf versetzt."); + +static const u8 gMoveDescription_Supersonic[] = _( + "Ausstoß bizarrer Schallwel-\n" + "len. Verwirrt Gegner evtl."); + +static const u8 gMoveDescription_SonicBoom[] = _( + "Schockwellen. Richten immer\n" + "20 KP Schaden an."); + +static const u8 gMoveDescription_Disable[] = _( + "Psycho-Attacke. Blockiert\n" + "eine Attacke des Gegners."); + +static const u8 gMoveDescription_Acid[] = _( + "Versprüht ätzende Flüssig-\n" + "keit, senkt evtl. VERT."); + +static const u8 gMoveDescription_Ember[] = _( + "Schwache Feuer-Attacke.\n" + "Verbrennt Gegner evtl."); + +static const u8 gMoveDescription_Flamethrower[] = _( + "Starke Feuer-Attacke.\n" + "Verbrennt Gegner evtl."); + +static const u8 gMoveDescription_Mist[] = _( + "Nebel, der die Änderung der\n" + "Werte verhindert."); + +static const u8 gMoveDescription_WaterGun[] = _( + "Der Gegner wird mit Wasser\n" + "bespritzt."); + +static const u8 gMoveDescription_HydroPump[] = _( + "Spritzt Wasser mit\n" + "Hochdruck auf den Gegner."); + +static const u8 gMoveDescription_Surf[] = _( + "Eine riesige Welle bricht\n" + "über den Gegner herein."); + +static const u8 gMoveDescription_IceBeam[] = _( + "Gegner wird von Eisstrahl\n" + "getroffen, friert evtl. ein."); + +static const u8 gMoveDescription_Blizzard[] = _( + "Ein Schneesturm, der den\n" + "Gegner einfrieren kann."); + +static const u8 gMoveDescription_Psybeam[] = _( + "Feuert einen Strahl ab, der\n" + "Gegner verwirren kann."); + +static const u8 gMoveDescription_BubbleBeam[] = _( + "Versprüht Blasen, die den\n" + "INIT.-Wert evtl. senken."); + +static const u8 gMoveDescription_AuroraBeam[] = _( + "Regenbogenfarbener Strahl,\n" + "senkt evtl. ANGR.-Wert."); + +static const u8 gMoveDescription_HyperBeam[] = _( + "Starke Attacke. Angreifer\n" + "setzt eine Runde aus."); + +static const u8 gMoveDescription_Peck[] = _( + "Greift Gegner mit dem\n" + "Schnabel an."); + +static const u8 gMoveDescription_DrillPeck[] = _( + "Attacke, bei der der Schna-\n" + "bel als Bohrer dient."); + +static const u8 gMoveDescription_Submission[] = _( + "Rücksichtsloser Rempler. \n" + "Schädigt auch Angreifer."); + +static const u8 gMoveDescription_LowKick[] = _( + "Tritt, der massigen Gegnern\n" + "mehr Schaden zufügt."); + +static const u8 gMoveDescription_Counter[] = _( + "Kontert physischen Tref-\n" + "fer mit doppelter Kraft."); + +static const u8 gMoveDescription_SeismicToss[] = _( + "Richtet Schaden gemäß\n" + "Level d. Angreifers an."); + +static const u8 gMoveDescription_Strength[] = _( + "Erzeugt enorme Kraft und\n" + "rammt den Gegner."); + +static const u8 gMoveDescription_Absorb[] = _( + "Attacke, die die Hälfte des\n" + "Schadens absorbiert."); + +static const u8 gMoveDescription_MegaDrain[] = _( + "Attacke, die die Hälfte des\n" + "Schadens absorbiert."); + +static const u8 gMoveDescription_LeechSeed[] = _( + "Gegner wird bepflanzt und\n" + "verliert jede Runde KP."); + +static const u8 gMoveDescription_Growth[] = _( + "Der Körper wächst und\n" + "SPEZ. ANGR. wird erhöht."); + +static const u8 gMoveDescription_RazorLeaf[] = _( + "Trifft Gegner mit Blättern.\n" + "Hohe Volltrefferquote."); + +static const u8 gMoveDescription_SolarBeam[] = _( + "Absorbiert Licht in der 1.\n" + "Runde, 2. Runde Angriff."); + +static const u8 gMoveDescription_PoisonPowder[] = _( + "Verstreut giftigen Puder,\n" + "der Gegner vergiften kann."); + +static const u8 gMoveDescription_StunSpore[] = _( + "Verstreut Puder, der den\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_SleepPowder[] = _( + "Verstreut Puder, der Geg.\n" + "evtl. in Schlaf versetzt."); + +static const u8 gMoveDescription_PetalDance[] = _( + "Angriff in 2-3 Runden.\n" + "Angreifer wird verwirrt."); + +static const u8 gMoveDescription_StringShot[] = _( + "Umwickelt Gegner mit Faden\n" + "und senkt INIT.-Wert."); + +static const u8 gMoveDescription_DragonRage[] = _( + "Stößt Schockwellen aus, die\n" + "40 KP Schaden anrichten."); + +static const u8 gMoveDescription_FireSpin[] = _( + "Schließt Gegner für 2-5\n" + "Runden in Feuerkreis ein."); + +static const u8 gMoveDescription_ThunderShock[] = _( + "Elektro-Attacke. Gegner\n" + "evtl. paralysiert."); + +static const u8 gMoveDescription_Thunderbolt[] = _( + "Starke Elektro-Attacke,\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_ThunderWave[] = _( + "Ein schwacher Stromstoß,\n" + "der den Gegner paralysiert."); + +static const u8 gMoveDescription_Thunder[] = _( + "Elektro-Attacke, die den\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_RockThrow[] = _( + "Wirft kleine Steine auf den\n" + "Gegner."); + +static const u8 gMoveDescription_Earthquake[] = _( + "Mächtiges Beben. Ist bei\n" + "fliegenden Feinden nutzlos."); + +static const u8 gMoveDescription_Fissure[] = _( + "Sofort-K.O. Wirft Gegner\n" + "in Gebirgsspalte."); + +static const u8 gMoveDescription_Dig[] = _( + "Gräbt sich in der 1. Runde\n" + "ein und trifft in der 2."); + +static const u8 gMoveDescription_Toxic[] = _( + "Vergiftet den Gegner mit \n" + "einem starken Toxin."); + +static const u8 gMoveDescription_Confusion[] = _( + "Psycho-Attacke, die den\n" + "Gegner evtl. verwirrt."); + +static const u8 gMoveDescription_Psychic[] = _( + "Starke Psycho-Attacke, die\n" + "evtl. SPEZ. VERT. senkt."); + +static const u8 gMoveDescription_Hypnosis[] = _( + "Hypno-Attacke, die Gegner\n" + "evtl. in Schlaf versetzt."); + +static const u8 gMoveDescription_Meditate[] = _( + "Friedliche Meditation, um\n" + "ANGR.-Wert zu steigern."); + +static const u8 gMoveDescription_Agility[] = _( + "Entspannt den Körper, um\n" + "INIT.-Wert. zu steigern."); + +static const u8 gMoveDescription_QuickAttack[] = _( + "Sehr schneller Angriff mit\n" + "Erstschlaggarantie."); + +static const u8 gMoveDescription_Rage[] = _( + "Erhöht ANGR. des Anwenders\n" + "bei jedem gegn. Treffer."); + +static const u8 gMoveDescription_Teleport[] = _( + "Psycho-Angriff, um sofort\n" + "aus einem Kampf zu fliehen."); + +static const u8 gMoveDescription_NightShade[] = _( + "Richtet Schaden gemäß\n" + "Level d. Angreifers an."); + +static const u8 gMoveDescription_Mimic[] = _( + "Kopiert eine zuvor ausge-\n" + "führte Attacke d. Gegners."); + +static const u8 gMoveDescription_Screech[] = _( + "Stößt einen Schrei aus, um\n" + "gegn. VERT. zu senken."); + +static const u8 gMoveDescription_DoubleTeam[] = _( + "Erzeugt Ebenbilder, um \n" + "Fluchtwert zu erhöhen."); + +static const u8 gMoveDescription_Recover[] = _( + "Max. KP des Anwenders w.\n" + "bis zur Hälfte aufgefüllt."); + +static const u8 gMoveDescription_Harden[] = _( + "Stärkt die Muskulatur und\n" + "erhöht VERT.-Wert."); + +static const u8 gMoveDescription_Minimize[] = _( + "Anwender schrumpft, um\n" + "Fluchtwert zu erhöhen."); + +static const u8 gMoveDescription_Smokescreen[] = _( + "Senkt Genauigkeit d. Geg-\n" + "ners mit Rauch, Tinte o. ä."); + +static const u8 gMoveDescription_ConfuseRay[] = _( + "Ein fieser Strahl, der den\n" + "Gegner verwirrt."); + +static const u8 gMoveDescription_Withdraw[] = _( + "Rückzug in den harten\n" + "Panzer. Erhöht VERT.-Wert."); + +static const u8 gMoveDescription_DefenseCurl[] = _( + "Verbirgt Schwächen durch\n" + "Einrollen, VERT.-Wert hoch."); + +static const u8 gMoveDescription_Barrier[] = _( + "Erzeugt Barriere, die den\n" + "VERT.-Wert stark erhöht."); + +static const u8 gMoveDescription_LightScreen[] = _( + "Erzeugt Lichtwand u. senkt\n" + "SPEZ. ANGR.-Schaden."); + +static const u8 gMoveDescription_Haze[] = _( + "Erzeugt dunklen Dunst.\n" + "Löscht alle Statusänder."); + +static const u8 gMoveDescription_Reflect[] = _( + "Erzeugt Lichtwand, schützt\n" + "teilweise vor phys. Angr."); + +static const u8 gMoveDescription_FocusEnergy[] = _( + "Bündelt Kraft. Volltreffer-\n" + "chance wird erhöht."); + +static const u8 gMoveDescription_Bide[] = _( + "Erträgt 2 Runden Angriffe,\n" + "schlägt doppelt zurück."); + +static const u8 gMoveDescription_Metronome[] = _( + "Bewegt Finger und wählt\n" + "PKMN-Attacke zufällig aus."); + +static const u8 gMoveDescription_MirrorMove[] = _( + "Erwidert gegn. Angriff mit\n" + "derselben Attacke."); + +static const u8 gMoveDescription_SelfDestruct[] = _( + "Richtet großen Schaden an.\n" + "Anwender wird besiegt."); + +static const u8 gMoveDescription_EggBomb[] = _( + "Ein Ei wird auf den Gegner\n" + "abgefeuert."); + +static const u8 gMoveDescription_Lick[] = _( + "Leck-Attacke mit Zunge.\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_Smog[] = _( + "Angriff mit Gas. Gegner wird\n" + "evtl. vergiftet."); + +static const u8 gMoveDescription_Sludge[] = _( + "Wirft Schlamm auf Gegner.\n" + "Evtl. Vergiftung."); + +static const u8 gMoveDescription_BoneClub[] = _( + "Schlägt Gegner mit Keule\n" + "und verschreckt ihn evtl."); + +static const u8 gMoveDescription_FireBlast[] = _( + "Feuersbrunst, die alles ver-\n" + "sengt. Verbrennt Geg. evtl."); + +static const u8 gMoveDescription_Waterfall[] = _( + "Attacke basiert auf Tempo.\n" + "Erklimmt Wasserfälle."); + +static const u8 gMoveDescription_Clamp[] = _( + "Fängt und drückt Gegner\n" + "für 2-5 Runden."); + +static const u8 gMoveDescription_Swift[] = _( + "Verschießt sternförmige\n" + "Strahlen. Treffergarantie!"); + +static const u8 gMoveDescription_SkullBash[] = _( + "Zieht Kopf ein und greift in\n" + "der nächsten Runde an."); + +static const u8 gMoveDescription_SpikeCannon[] = _( + "Verschießt spitze Stacheln\n" + "und trifft 2 - 5-mal."); + +static const u8 gMoveDescription_Constrict[] = _( + "Schmerzvoller Klammergriff.\n" + "Senkt evtl. INIT.-Wert."); + +static const u8 gMoveDescription_Amnesia[] = _( + "Gedächtnisverlust, der\n" + "SPEZ. VERT. deutlich erhöht."); + +static const u8 gMoveDescription_Kinesis[] = _( + "Lenkt Gegner ab und senkt\n" + "evtl. seine Genauigkeit."); + +static const u8 gMoveDescription_SoftBoiled[] = _( + "Max. KP des Anwenders w.\n" + "bis zur Hälfte aufgefüllt."); + +static const u8 gMoveDescription_HiJumpKick[] = _( + "Sprung-Tritt mit Knie. Miss-\n" + "erfolg verletzt Anwender."); + +static const u8 gMoveDescription_Glare[] = _( + "Schüchtert Gegner ein, so\n" + "dass er paralysiert ist."); + +static const u8 gMoveDescription_DreamEater[] = _( + "Schlafendem Gegner wird\n" + "halber Schaden abgezogen."); + +static const u8 gMoveDescription_PoisonGas[] = _( + "Hüllt Gegner in giftiges Gas\n" + "ein, kann vergiften."); + +static const u8 gMoveDescription_Barrage[] = _( + "Wirft 2 - 5-mal runde Gegen-\n" + "stände auf den Gegner."); + +static const u8 gMoveDescription_LeechLife[] = _( + "Ein Angriff, der die Hälfte\n" + "des Schadens saugt."); + +static const u8 gMoveDescription_LovelyKiss[] = _( + "Fordert Kuss mit bösem\n" + "Blick. Evtl. Schlaf."); + +static const u8 gMoveDescription_SkyAttack[] = _( + "Sucht nach Schwächen,\n" + "Treffer nächste Runde."); + +static const u8 gMoveDescription_Transform[] = _( + "Ändert die Anwenderzellen\n" + "für ein Ebenbild d. Gegners."); + +static const u8 gMoveDescription_Bubble[] = _( + "Angriff mit Blasen. INIT.-\n" + "Wert wird evtl. gesenkt."); + +static const u8 gMoveDescription_DizzyPunch[] = _( + "Rhythmischer Schlag, der\n" + "den Gegner verwirren kann."); + +static const u8 gMoveDescription_Spore[] = _( + "Erzeugt eine Wolke aus ein-\n" + "schläfernden Sporen."); + +static const u8 gMoveDescription_Flash[] = _( + "Erzeugt helles Licht, das\n" + "gegn. Genauigkeit senkt."); + +static const u8 gMoveDescription_Psywave[] = _( + "Psycho-Welle mit unter-\n" + "schiedlicher Intensität."); + +static const u8 gMoveDescription_Splash[] = _( + "Nur ein Platscher..., der\n" + "überhaupt nichts bewirkt."); + +static const u8 gMoveDescription_AcidArmor[] = _( + "Verflüssigt Körper d. An-\n" + "wenders. Erhört VERT."); + +static const u8 gMoveDescription_Crabhammer[] = _( + "Schlägt mit Schere zu.\n" + "Volltrefferchance hoch."); + +static const u8 gMoveDescription_Explosion[] = _( + "Richtet großen Schaden an.\n" + "Anwender wird besiegt."); + +static const u8 gMoveDescription_FurySwipes[] = _( + "Beharkt Gegner 2 - 5-mal\n" + "mit scharfen Klauen o. ä."); + +static const u8 gMoveDescription_Bonemerang[] = _( + "Ein Bumerang aus Knochen,\n" + "der zweimal trifft."); + +static const u8 gMoveDescription_Rest[] = _( + "Anwender schläft 2 Runden,\n" + "KP und Status erneuert."); + +static const u8 gMoveDescription_RockSlide[] = _( + "Schleudert riesige Felsen.\n" + "Verschreckt evtl. Gegner."); + +static const u8 gMoveDescription_HyperFang[] = _( + "Angriff mit Zähnen.\n" + "Verschreckt evtl. Gegner."); + +static const u8 gMoveDescription_Sharpen[] = _( + "Reduziert Polygonzahl und\n" + "erhöht ANGR.-Wert."); + +static const u8 gMoveDescription_Conversion[] = _( + "Wandelt Typ d. Anwenders in\n" + "eigenen Attacken-Typ."); + +static const u8 gMoveDescription_TriAttack[] = _( + "Feuert 3 Arten von Strahlen\n" + "gleichzeitig ab."); + +static const u8 gMoveDescription_SuperFang[] = _( + "Greift mit scharfen Zähnen\n" + "an. Halbiert gegnerische KP."); + +static const u8 gMoveDescription_Slash[] = _( + "Hieb mit Klauen o. ä. Hohe\n" + "Volltrefferquote."); + +static const u8 gMoveDescription_Substitute[] = _( + "Lockvogel, der 1/4 der max.\n" + "KP des Anwenders besitzt."); + +static const u8 gMoveDescription_Struggle[] = _( + "Einsatz nur bei verbrauch-\n" + "ten AP. Selbstschädigung!"); + +static const u8 gMoveDescription_Sketch[] = _( + "Kopiert stets den zuletzt\n" + "erlittenen Angriff."); + +static const u8 gMoveDescription_TripleKick[] = _( + "Tritt Gegner 3-mal nach-\n" + "einander. Härte nimmt zu."); + +static const u8 gMoveDescription_Thief[] = _( + "Kann das vom Gegner\n" + "gehaltene Item stehlen."); + +static const u8 gMoveDescription_SpiderWeb[] = _( + "Wickelt Gegner ein. Flucht \n" + "oder Tausch unmöglich."); + +static const u8 gMoveDescription_MindReader[] = _( + "Ahnt gegnerische Aktion.\n" + "Nächste Attacke trifft."); + +static const u8 gMoveDescription_Nightmare[] = _( + "Bewirkt 1/4 Schaden pro\n" + "Zug bei schlafendem Gegner."); + +static const u8 gMoveDescription_FlameWheel[] = _( + "Feuer-Attacke, die Gegner\n" + "evtl. verbrennt."); + +static const u8 gMoveDescription_Snore[] = _( + "Laute Attacke. Kann nur im\n" + "Schlaf benutzt werden."); + +static const u8 gMoveDescription_Curse[] = _( + "Ein Angriff, der bei GEIST-\n" + "PKMN anders funktioniert."); + +static const u8 gMoveDescription_Flail[] = _( + "Richtet mehr Schaden an,\n" + "wenn eigene KP niedrig sind."); + +static const u8 gMoveDescription_Conversion2[] = _( + "Anwender wird resistent\n" + "gegen letzten Angr.-Typ."); + +static const u8 gMoveDescription_Aeroblast[] = _( + "Erzeugt ein Vakuum.\n" + "Hohe Volltrefferquote."); + +static const u8 gMoveDescription_CottonSpore[] = _( + "Sporen heften sich an den\n" + "Gegner. Senkt INIT.-Wert."); + +static const u8 gMoveDescription_Reversal[] = _( + "Richtet mehr Schaden an,\n" + "wenn eigene KP niedrig sind."); + +static const u8 gMoveDescription_Spite[] = _( + "AP des letzten gegner.\n" + "Angriffs werden gesenkt."); + +static const u8 gMoveDescription_PowderSnow[] = _( + "Schnee auf Gegner, der\n" + "evtl. eingefroren wird."); + +static const u8 gMoveDescription_Protect[] = _( + "Weicht Angriff aus.\n" + "Scheitert evtl. bei Wdh."); + +static const u8 gMoveDescription_MachPunch[] = _( + "Schneller Hieb, der stets\n" + "zuerst trifft."); + +static const u8 gMoveDescription_ScaryFace[] = _( + "Erschreckt mit Grimasse. \n" + "INIT.-Wert sinkt deutlich."); + +static const u8 gMoveDescription_FaintAttack[] = _( + "Zieht Gegner heran und\n" + "trifft mit Sicherheit."); + +static const u8 gMoveDescription_SweetKiss[] = _( + "Fordert Kuss mit süßem\n" + "Blick. Verwirrt Gegner evtl."); + +static const u8 gMoveDescription_BellyDrum[] = _( + "Erhöht ANGR.-Wert,\n" + "opfert jedoch KP."); + +static const u8 gMoveDescription_SludgeBomb[] = _( + "Wirft Schlamm auf Gegner\n" + "und vergiftet ihn evtl."); + +static const u8 gMoveDescription_MudSlap[] = _( + "Wirft Gegner Matsch ins Ge-\n" + "sicht. Genauigkeit sinkt."); + +static const u8 gMoveDescription_Octazooka[] = _( + "Verschießt Tinte und senkt\n" + "dadurch Genauigkeit."); + +static const u8 gMoveDescription_Spikes[] = _( + "Richtet bei Tausch Schaden\n" + "mit Stacheln an."); + +static const u8 gMoveDescription_ZapCannon[] = _( + "Kräftige, ungenaue At-\n" + "tacke, die evtl. paralysiert."); + +static const u8 gMoveDescription_Foresight[] = _( + "Verhindert Anstieg von\n" + "gegnerischem Fluchtwert."); + +static const u8 gMoveDescription_DestinyBond[] = _( + "Wird der Angreifer besiegt,\n" + "gilt das auch für d. Gegner."); + +static const u8 gMoveDescription_PerishSong[] = _( + "Wer dieses Lied hört, wird\n" + "nach 3 Runden besiegt."); + +static const u8 gMoveDescription_IcyWind[] = _( + "Eis-Attacke, die den INIT.-\n" + "Wert des Gegners senkt."); + +static const u8 gMoveDescription_Detect[] = _( + "Wendet Attacken ab, Erfolg\n" + "sinkt bei Wiederholung."); + +static const u8 gMoveDescription_BoneRush[] = _( + "Greift Gegner 2 - 5-mal in\n" + "Folge mit einem Knochen an."); + +static const u8 gMoveDescription_LockOn[] = _( + "Visiert Gegner an u. trifft\n" + "in der nächsten Runde."); + +static const u8 gMoveDescription_Outrage[] = _( + "Wiederholt Angriff 2-3 Run-\n" + "den lang. Verwirrt Anwender."); + +static const u8 gMoveDescription_Sandstorm[] = _( + "Erzeugt einen Sandsturm,\n" + "der mehrere Runden wütet."); + +static const u8 gMoveDescription_GigaDrain[] = _( + "Absorbiert die Hälfte des\n" + "angerichteten Schadens."); + +static const u8 gMoveDescription_Endure[] = _( + "Hält jeder Attacke 1 Runde\n" + "stand. 1 KP bleibt stets."); + +static const u8 gMoveDescription_Charm[] = _( + "Betört den Gegner u. redu-\n" + "ziert seinen ANGR. deutlich."); + +static const u8 gMoveDescription_Rollout[] = _( + "Attacke, die 5 Runden\n" + "dauert. Die Härte nimmt zu."); + +static const u8 gMoveDescription_FalseSwipe[] = _( + "Ein Angriff, der dem Gegner\n" + "zumindest 1 KP lässt."); + +static const u8 gMoveDescription_Swagger[] = _( + "Verwirrt den Gegner und\n" + "erhöht ANGR.-Wert deutlich."); + +static const u8 gMoveDescription_MilkDrink[] = _( + "Füllt bis zur Hälfte der max.\n" + "KP des Benutzers auf."); + +static const u8 gMoveDescription_Spark[] = _( + "Elektro-Hieb, der Gegner\n" + "paralysieren kann."); + +static const u8 gMoveDescription_FuryCutter[] = _( + "Eine Attacke, deren Härte\n" + "bei jedem Treffer zunimmt."); + +static const u8 gMoveDescription_SteelWing[] = _( + "Trifft den Gegner hart mit\n" + "ausgebreiteten Flügeln."); + +static const u8 gMoveDescription_MeanLook[] = _( + "Böser Blick, der die Flucht\n" + "des Gegners vereitelt."); + +static const u8 gMoveDescription_Attract[] = _( + "Angriff des anderen Ge-\n" + "schlechts unwahrscheinl."); + +static const u8 gMoveDescription_SleepTalk[] = _( + "Benutzt per Zufall eine\n" + "Attacke im Schlaf."); + +static const u8 gMoveDescription_HealBell[] = _( + "Läutet beruhigend, heilt\n" + "alle Status-Veränderungen."); + +static const u8 gMoveDescription_Return[] = _( + "Angriff, dessen Kraft bei \n" + "Freundschaft größer wird."); + +static const u8 gMoveDescription_Present[] = _( + "Eine Bombe als Geschenk. Es\n" + "kann KP wiederherstellen."); + +static const u8 gMoveDescription_Frustration[] = _( + "Die Attacke ist stärker bei\n" + "verhassten TRAINERn."); + +static const u8 gMoveDescription_Safeguard[] = _( + "Mystische Kraft, die alle\n" + "Statusprobleme verhindert."); + +static const u8 gMoveDescription_PainSplit[] = _( + "Addiert KP v. Anwender u.\n" + "Gegner, teilt gerecht auf."); + +static const u8 gMoveDescription_SacredFire[] = _( + "Mystische Feuer-Attacke, \n" + "die d. Geg. evtl. verbrennt."); + +static const u8 gMoveDescription_Magnitude[] = _( + "Ein erdbebenartiger An-\n" + "griff von zufälliger Stärke."); + +static const u8 gMoveDescription_DynamicPunch[] = _( + "Kräftige Attacke, die ver-\n" + "wirrt, aber ungenau ist."); + +static const u8 gMoveDescription_Megahorn[] = _( + "Brutaler Frontalangriff\n" + "mit spitzen Hörnern."); + +static const u8 gMoveDescription_DragonBreath[] = _( + "Fegt den Gegner mit zer-\n" + "störerisch heißem Atem weg."); + +static const u8 gMoveDescription_BatonPass[] = _( + "Tauscht PKMN aus. Alle Än-\n" + "derungen bleiben bestehen."); + +static const u8 gMoveDescription_Encore[] = _( + "Gegner wiederholt letzten\n" + "Angriff 2 - 6-mal."); + +static const u8 gMoveDescription_Pursuit[] = _( + "Richtet großen Schaden bei\n" + "Austausch des Gegners an."); + +static const u8 gMoveDescription_RapidSpin[] = _( + "Trifft den Gegner durch\n" + "Drehen mit max. Tempo."); + +static const u8 gMoveDescription_SweetScent[] = _( + "Lockt Gegner an und senkt\n" + "seinen Fluchtwert."); + +static const u8 gMoveDescription_IronTail[] = _( + "Att. mit hartem Schweif. \n" + "Senkt evtl. VERT.-Wert."); + +static const u8 gMoveDescription_MetalClaw[] = _( + "Klauen-Attacke. Evtl. Er-\n" + "höhung d. ANGR.-Wert d. Anw."); + +static const u8 gMoveDescription_VitalThrow[] = _( + "Attacke stets gleich, aber\n" + "mit Treffergarantie."); + +static const u8 gMoveDescription_MorningSun[] = _( + "Füllt KP auf. Die Menge\n" + "hängt vom Wetter ab."); + +static const u8 gMoveDescription_Synthesis[] = _( + "Füllt KP auf. Die Menge\n" + "hängt vom Wetter ab."); + +static const u8 gMoveDescription_Moonlight[] = _( + "Füllt KP auf. Die Menge\n" + "hängt vom Wetter ab."); + +static const u8 gMoveDescription_HiddenPower[] = _( + "Die Wirkung dieser Attacke\n" + "hängt vom Benutzer ab."); + +static const u8 gMoveDescription_CrossChop[] = _( + "Doppelter Hieb. Hohe \n" + "Volltrefferquote."); + +static const u8 gMoveDescription_Twister[] = _( + "Trifft Gegner mit\n" + "heftigem Wirbelsturm."); + +static const u8 gMoveDescription_RainDance[] = _( + "Erhöht Stärke von WASSER-\n" + "Attacken 5 Runden lang."); + +static const u8 gMoveDescription_SunnyDay[] = _( + "Erhöht Stärke von FEUER-\n" + "Attacken 5 Runden lang."); + +static const u8 gMoveDescription_Crunch[] = _( + "Beißt mit Reißzähnen zu und\n" + "senkt evtl. SPEZ. VERT."); + +static const u8 gMoveDescription_MirrorCoat[] = _( + "Kontert d. Spezial-Attacke\n" + "d. Geg. mit 2-facher Kraft."); + +static const u8 gMoveDescription_PsychUp[] = _( + "Kopiert Effekte d. Gegners\n" + "u. gibt sie dem Angreifer."); + +static const u8 gMoveDescription_ExtremeSpeed[] = _( + "Extrem schnelle und kraft-\n" + "volle Attacke."); + +static const u8 gMoveDescription_AncientPower[] = _( + "Ein Angriff, der alle\n" + "Status-Werte erhöhen kann."); + +static const u8 gMoveDescription_ShadowBall[] = _( + "Bewirft Gegner und senkt\n" + "evtl. SPEZ. VERT."); + +static const u8 gMoveDescription_FutureSight[] = _( + "Stärkt innere Kraft. Trifft\n" + "2 Runden später."); + +static const u8 gMoveDescription_RockSmash[] = _( + "Zertrümmernder Angriff, \n" + "der evtl. VERT.-Wert senkt."); + +static const u8 gMoveDescription_Whirlpool[] = _( + "Hält Gegner 2-5 Züge in\n" + "einem Strudel gefangen."); + +static const u8 gMoveDescription_BeatUp[] = _( + "Ruft POKéMON hinzu, um an\n" + "dem Angriff teilzuhaben."); + +static const u8 gMoveDescription_FakeOut[] = _( + "Trifft schon mit dem ersten\n" + "Schlag. Verjagt Gegner evtl."); + +static const u8 gMoveDescription_Uproar[] = _( + "Erzeugt für 2-5 Züge einen\n" + "Aufruhr. Verhindert Schlaf."); + +static const u8 gMoveDescription_Stockpile[] = _( + "Lädt Kraft für bis zu 3\n" + "Runden auf."); + +static const u8 gMoveDescription_SpitUp[] = _( + "Entlädt gehortete Kraft.\n" + "Je mehr, desto besser."); + +static const u8 gMoveDescription_Swallow[] = _( + "Absorbiert gehortete\n" + "Kraft. Stellt KP wieder her."); + +static const u8 gMoveDescription_HeatWave[] = _( + "Gegner wird von heißem Atem\n" + "getroffen. Verbrennt evtl."); + +static const u8 gMoveDescription_Hail[] = _( + "Erzeugt Hagelsturm, der in\n" + "jeder Runde trifft."); + +static const u8 gMoveDescription_Torment[] = _( + "Quält Gegner u. verhindert\n" + "Wdh. eines Angriffs."); + +static const u8 gMoveDescription_Flatter[] = _( + "Verwirrt den Gegner, erhöht\n" + "aber dessen SPEZ. ANGR."); + +static const u8 gMoveDescription_WillOWisp[] = _( + "Fügt dem Gegner \n" + "Verbrennungen zu."); + +static const u8 gMoveDescription_Memento[] = _( + "Der Benutzer ist besiegt\n" + "und senkt die gegn. Werte."); + +static const u8 gMoveDescription_Facade[] = _( + "Erhöht ANGR. nach Verbren-\n" + "nung, Paralyse o. Vergift."); + +static const u8 gMoveDescription_FocusPunch[] = _( + "Angriff, der später trifft.\n" + "Ben. schreckt evtl. zurück."); + +static const u8 gMoveDescription_SmellingSalt[] = _( + "Effektiv geg. paralysierte\n" + "Gegner. Heilt sie aber auch."); + +static const u8 gMoveDescription_FollowMe[] = _( + "Zieht Aufmerksamkeit an.\n" + "Gegner greift nur Anw. an."); + +static const u8 gMoveDescription_NaturePower[] = _( + "Die Elementklasse des\n" + "Angriffs hängt vom Ort ab."); + +static const u8 gMoveDescription_Charge[] = _( + "Lädt Energie für den kom-\n" + "menden Elektro-Angr. auf."); + +static const u8 gMoveDescription_Taunt[] = _( + "Legt den Gegner rein. Er\n" + "benutzt nur noch Angriffe."); + +static const u8 gMoveDescription_HelpingHand[] = _( + "Steigert die Kraft der An-\n" + "griffe des Getroffenen."); + +static const u8 gMoveDescription_Trick[] = _( + "Betrügt beim Handel\n" + "mit Gegenständen."); + +static const u8 gMoveDescription_RolePlay[] = _( + "Parodiert Gegner u. kopiert\n" + "seine Spezialfähigkeiten."); + +static const u8 gMoveDescription_Wish[] = _( + "Ein Wunsch, der KP auffüllt.\n" + "Die Erfüllung braucht Zeit."); + +static const u8 gMoveDescription_Assist[] = _( + "Greift zufällig mit einem\n" + "Angriff d. Partners an."); + +static const u8 gMoveDescription_Ingrain[] = _( + "Verwurzelung füllt KP auf.\n" + "Austausch unmöglich."); + +static const u8 gMoveDescription_Superpower[] = _( + "Steigert Stärke deutlich,\n" + "senkt aber Status-Werte."); + +static const u8 gMoveDescription_MagicCoat[] = _( + "Gibt Spezialeffekte zurück\n" + "an Benutzer."); + +static const u8 gMoveDescription_Recycle[] = _( + "Recycling eines\n" + "verwendeten Items."); + +static const u8 gMoveDescription_Revenge[] = _( + "Attacke wird stärker, wenn\n" + "Anwender Schaden nimmt."); + +static const u8 gMoveDescription_BrickBreak[] = _( + "Durchbricht Barrieren und\n" + "verursacht Schaden."); + +static const u8 gMoveDescription_Yawn[] = _( + "Gegner gähnt und schläft\n" + "in der nächsten Runde ein."); + +static const u8 gMoveDescription_KnockOff[] = _( + "Schlägt Gegner Item weg.\n" + "Vereitelt so den Gebrauch."); + +static const u8 gMoveDescription_Endeavor[] = _( + "Wird stärker, wenn Anw.-KP\n" + "geringer als Gegner-KP ist."); + +static const u8 gMoveDescription_Eruption[] = _( + "Je höher KP des Benutzers,\n" + "desto mehr Schaden."); + +static const u8 gMoveDescription_SkillSwap[] = _( + "Anw. tauscht Spezial-\n" + "fähigkeit mit POKéMON."); + +static const u8 gMoveDescription_Imprison[] = _( + "Hindert Gegner an Atta-\n" + "cken, die d. Benutzer kennt."); + +static const u8 gMoveDescription_Refresh[] = _( + "Kuriert Vergiftungen, Para-\n" + "lyse und Verbrennung."); + +static const u8 gMoveDescription_Grudge[] = _( + "Wenn Anw. bes., werden AP\n" + "der Finalattacke gelöscht."); + +static const u8 gMoveDescription_Snatch[] = _( + "Immunität geg. den Effekt\n" + "d. nächsten gegn. Angriffs."); + +static const u8 gMoveDescription_SecretPower[] = _( + "Angriff, dessen Auswirkung\n" + "abhängig vom Ort ist."); + +static const u8 gMoveDescription_Dive[] = _( + "Taucht in der 1. Runde\n" + "unter u. trifft in der 2."); + +static const u8 gMoveDescription_ArmThrust[] = _( + "Schläge mit geradem Arm, die\n" + "Gegner 2 - 5-mal treffen."); + +static const u8 gMoveDescription_Camouflage[] = _( + "Die Elementklasse des\n" + "POKéMON hängt vom Ort ab."); + +static const u8 gMoveDescription_TailGlow[] = _( + "Ein blinkendes Licht. SPEZ.\n" + "ANGR. wird deutlich erhöht."); + +static const u8 gMoveDescription_LusterPurge[] = _( + "Angriff mit grellem Licht.\n" + "Senkt evtl. SPEZ. VERT."); + +static const u8 gMoveDescription_MistBall[] = _( + "Angriff m. Daunengestöber,\n" + "Senkt evtl. SPEZ. ANGR."); + +static const u8 gMoveDescription_FeatherDance[] = _( + "Hüllt Gegner in Daunen und\n" + "senkt ANGR.-Wert deutlich."); + +static const u8 gMoveDescription_TeeterDance[] = _( + "Verwirrt alle POKéMON im \n" + "Kampf."); + +static const u8 gMoveDescription_BlazeKick[] = _( + "Hohe Volltrefferquote. Ver-\n" + "ursacht evtl. Verbrennung."); + +static const u8 gMoveDescription_MudSport[] = _( + "Bedeckt Anw. mit Lehm u. er-\n" + "höht Schutz geg. Elek.-Att."); + +static const u8 gMoveDescription_IceBall[] = _( + "Angriff für 5 Runden. \n" + "Stärker, wenn Treffer."); + +static const u8 gMoveDescription_NeedleArm[] = _( + "Angriff mit dornigen Armen. \n" + "Geg. schreckt evtl. zurück."); + +static const u8 gMoveDescription_SlackOff[] = _( + "Durch Müßiggang wird die\n" + "Hälfte d. max. KP aufgefüllt."); + +static const u8 gMoveDescription_HyperVoice[] = _( + "Laute Attacke mit Schall-\n" + "wellen."); + +static const u8 gMoveDescription_PoisonFang[] = _( + "Angriff mit Reißzähnen. \n" + "Gegner wird evtl. vergiftet."); + +static const u8 gMoveDescription_CrushClaw[] = _( + "Angriff mit scharfen Klau-\n" + "en. Senkt evtl. VERT.-Wert."); + +static const u8 gMoveDescription_BlastBurn[] = _( + "Starker Angriff. Angreifer\n" + "muss eine Runde aussetzen."); + +static const u8 gMoveDescription_HydroCannon[] = _( + "Starker Angriff. Angreifer\n" + "muss eine Runde aussetzen."); + +static const u8 gMoveDescription_MeteorMash[] = _( + "Ein Schlag wie ein Meteor.\n" + "Erhöht evtl. ANGR.-Wert."); + +static const u8 gMoveDescription_Astonish[] = _( + "Angriff, der Gegner evtl.\n" + "zurückschrecken lässt."); + +static const u8 gMoveDescription_WeatherBall[] = _( + "Elementkl. u. Stärke der At-\n" + "tacke sind wetterabhängig."); + +static const u8 gMoveDescription_Aromatherapy[] = _( + "Heilt alle Status-Probleme\n" + "mit beruhigendem Duft."); + +static const u8 gMoveDescription_FakeTears[] = _( + "Täuscht Weinen vor, um\n" + "gegn. SPEZ. VERT. zu senken."); + +static const u8 gMoveDescription_AirCutter[] = _( + "Greift mit heftigem Wind an.\n" + "Hohe Volltrefferquote."); + +static const u8 gMoveDescription_Overheat[] = _( + "Angriff mit voller Kraft.\n" + "SPEZ. ANGR. sinkt deutlich."); + +static const u8 gMoveDescription_OdorSleuth[] = _( + "Hindert Gegner daran, ihren\n" + "Fluchtwert zu erhöhen."); + +static const u8 gMoveDescription_RockTomb[] = _( + "Hält den Feind mit Steinen\n" + "auf u. senkt INIT.-Wert."); + +static const u8 gMoveDescription_SilverWind[] = _( + "Pulver-Attacke, die evtl.\n" + "die Werte erhöht."); + +static const u8 gMoveDescription_MetalSound[] = _( + "Stößt einen spitzen Schrei\n" + "aus. Senkt SPEZ. VERT."); + +static const u8 gMoveDescription_GrassWhistle[] = _( + "Versetzt Gegner mit schö-\n" + "ner Melodie in den Schlaf."); + +static const u8 gMoveDescription_Tickle[] = _( + "Bringt Gegner zum Lachen.\n" + "ANGR. u. VERT. sinken."); + +static const u8 gMoveDescription_CosmicPower[] = _( + "Erhöht VERT. u. SPEZ. VERT.\n" + "durch mystische Kraft."); + +static const u8 gMoveDescription_WaterSpout[] = _( + "Ist wirkungsvoller, wenn KP\n" + "des Benutzers hoch sind."); + +static const u8 gMoveDescription_SignalBeam[] = _( + "Seltsame Strahlenattacke.\n" + "Verwirrt evtl. den Gegner."); + +static const u8 gMoveDescription_ShadowPunch[] = _( + "Schattenhieb. Ausweichen\n" + "unmöglich."); + +static const u8 gMoveDescription_Extrasensory[] = _( + "Besonderer Angriff. Gegner\n" + "schreckt evtl. zurück."); + +static const u8 gMoveDescription_SkyUppercut[] = _( + "Kinnhaken, als würde man in\n" + "die Luft springen."); + +static const u8 gMoveDescription_SandTomb[] = _( + "Gegner leidet für 2-5\n" + "Runden in Sandhose."); + +static const u8 gMoveDescription_SheerCold[] = _( + "Eis-Attacke. Besiegt den\n" + "Gegner, wenn sie trifft."); + +static const u8 gMoveDescription_MuddyWater[] = _( + "Greift mit Matsch an und\n" + "senkt evtl. Genauigkeit."); + +static const u8 gMoveDescription_BulletSeed[] = _( + "Verschießt 2 bis 5 Samen\n" + "gleichzeitig auf Gegner."); + +static const u8 gMoveDescription_AerialAce[] = _( + "Eine extrem schnelle und\n" + "unausweichbare Attacke."); + +static const u8 gMoveDescription_IcicleSpear[] = _( + "Feuert 2-5 Eiszapfen auf\n" + "den Gegner."); + +static const u8 gMoveDescription_IronDefense[] = _( + "Stärkt den Körper.\n" + "Erhöht VERT.-Wert deutlich."); + +static const u8 gMoveDescription_Block[] = _( + "Versperrt den Fluchtweg\n" + "des Gegners."); + +static const u8 gMoveDescription_Howl[] = _( + "Jault, um in sich zu gehen.\n" + "Erhöht ANGR.-Wert."); + +static const u8 gMoveDescription_DragonClaw[] = _( + "Der Gegner wird mit\n" + "scharfen Klauen verletzt."); + +static const u8 gMoveDescription_FrenzyPlant[] = _( + "Starker Angriff. Angreifer\n" + "muss eine Runde aussetzen."); + +static const u8 gMoveDescription_BulkUp[] = _( + "Pumpt den Körper auf. ANGR.\n" + "u. VERT. werden erhöht."); + +static const u8 gMoveDescription_Bounce[] = _( + "Springt hoch u. landet in\n" + "nächstem Zug. Evtl. Para."); + +static const u8 gMoveDescription_MudShot[] = _( + "Bewirft den Gegner mit Lehm\n" + "und senkt INIT.-Wert."); + +static const u8 gMoveDescription_PoisonTail[] = _( + "Hohe Volltrefferquote.\n" + "Gegner evtl. vergiftet."); + +static const u8 gMoveDescription_Covet[] = _( + "Bittet charmant um das ge-\n" + "haltene Item des Gegners."); + +static const u8 gMoveDescription_VoltTackle[] = _( + "Lebensgefährliche Attacke,\n" + "leichte Selbstschädigung."); + +static const u8 gMoveDescription_MagicalLeaf[] = _( + "Magischer Blattangriff.\n" + "Ausweichen unmöglich."); + +static const u8 gMoveDescription_WaterSport[] = _( + "Benutzer wird nass, so dass\n" + "er Feuer besser standhält."); + +static const u8 gMoveDescription_CalmMind[] = _( + "Erhöht SPEZ. ANGR. u. SPEZ.\n" + "VERT. durch Konzentration."); + +static const u8 gMoveDescription_LeafBlade[] = _( + "Hieb mit scharfkantigem\n" + "Blatt. Hohe Volltrefferqu."); + +static const u8 gMoveDescription_DragonDance[] = _( + "Ein mystischer Tanz, der\n" + "ANGR.- u. INIT.-Wert erhöht."); + +static const u8 gMoveDescription_RockBlast[] = _( + "Wirft 2 - 5-mal in Folge\n" + "Felsblöcke auf den Gegner."); + +static const u8 gMoveDescription_ShockWave[] = _( + "Schnelle Elektro-Attacke\n" + "mit Treffergarantie."); + +static const u8 gMoveDescription_WaterPulse[] = _( + "Ultraschallwellen, die den\n" + "Gegner verwirren können."); + +static const u8 gMoveDescription_DoomDesire[] = _( + "Speichert Sonnenenergie.\n" + "Angriff 2 Runden später."); + +static const u8 gMoveDescription_PsychoBoost[] = _( + "Angriff mit voller Kraft.\n" + "SPEZ. ANGR. sinkt deutlich."); + +const u8 * const gMoveDescriptions[] = { + gMoveDescription_Pound, + gMoveDescription_KarateChop, + gMoveDescription_DoubleSlap, + gMoveDescription_CometPunch, + gMoveDescription_MegaPunch, + gMoveDescription_PayDay, + gMoveDescription_FirePunch, + gMoveDescription_IcePunch, + gMoveDescription_ThunderPunch, + gMoveDescription_Scratch, + gMoveDescription_ViceGrip, + gMoveDescription_Guillotine, + gMoveDescription_RazorWind, + gMoveDescription_SwordsDance, + gMoveDescription_Cut, + gMoveDescription_Gust, + gMoveDescription_WingAttack, + gMoveDescription_Whirlwind, + gMoveDescription_Fly, + gMoveDescription_Bind, + gMoveDescription_Slam, + gMoveDescription_VineWhip, + gMoveDescription_Stomp, + gMoveDescription_DoubleKick, + gMoveDescription_MegaKick, + gMoveDescription_JumpKick, + gMoveDescription_RollingKick, + gMoveDescription_SandAttack, + gMoveDescription_Headbutt, + gMoveDescription_HornAttack, + gMoveDescription_FuryAttack, + gMoveDescription_HornDrill, + gMoveDescription_Tackle, + gMoveDescription_BodySlam, + gMoveDescription_Wrap, + gMoveDescription_TakeDown, + gMoveDescription_Thrash, + gMoveDescription_DoubleEdge, + gMoveDescription_TailWhip, + gMoveDescription_PoisonSting, + gMoveDescription_Twineedle, + gMoveDescription_PinMissile, + gMoveDescription_Leer, + gMoveDescription_Bite, + gMoveDescription_Growl, + gMoveDescription_Roar, + gMoveDescription_Sing, + gMoveDescription_Supersonic, + gMoveDescription_SonicBoom, + gMoveDescription_Disable, + gMoveDescription_Acid, + gMoveDescription_Ember, + gMoveDescription_Flamethrower, + gMoveDescription_Mist, + gMoveDescription_WaterGun, + gMoveDescription_HydroPump, + gMoveDescription_Surf, + gMoveDescription_IceBeam, + gMoveDescription_Blizzard, + gMoveDescription_Psybeam, + gMoveDescription_BubbleBeam, + gMoveDescription_AuroraBeam, + gMoveDescription_HyperBeam, + gMoveDescription_Peck, + gMoveDescription_DrillPeck, + gMoveDescription_Submission, + gMoveDescription_LowKick, + gMoveDescription_Counter, + gMoveDescription_SeismicToss, + gMoveDescription_Strength, + gMoveDescription_Absorb, + gMoveDescription_MegaDrain, + gMoveDescription_LeechSeed, + gMoveDescription_Growth, + gMoveDescription_RazorLeaf, + gMoveDescription_SolarBeam, + gMoveDescription_PoisonPowder, + gMoveDescription_StunSpore, + gMoveDescription_SleepPowder, + gMoveDescription_PetalDance, + gMoveDescription_StringShot, + gMoveDescription_DragonRage, + gMoveDescription_FireSpin, + gMoveDescription_ThunderShock, + gMoveDescription_Thunderbolt, + gMoveDescription_ThunderWave, + gMoveDescription_Thunder, + gMoveDescription_RockThrow, + gMoveDescription_Earthquake, + gMoveDescription_Fissure, + gMoveDescription_Dig, + gMoveDescription_Toxic, + gMoveDescription_Confusion, + gMoveDescription_Psychic, + gMoveDescription_Hypnosis, + gMoveDescription_Meditate, + gMoveDescription_Agility, + gMoveDescription_QuickAttack, + gMoveDescription_Rage, + gMoveDescription_Teleport, + gMoveDescription_NightShade, + gMoveDescription_Mimic, + gMoveDescription_Screech, + gMoveDescription_DoubleTeam, + gMoveDescription_Recover, + gMoveDescription_Harden, + gMoveDescription_Minimize, + gMoveDescription_Smokescreen, + gMoveDescription_ConfuseRay, + gMoveDescription_Withdraw, + gMoveDescription_DefenseCurl, + gMoveDescription_Barrier, + gMoveDescription_LightScreen, + gMoveDescription_Haze, + gMoveDescription_Reflect, + gMoveDescription_FocusEnergy, + gMoveDescription_Bide, + gMoveDescription_Metronome, + gMoveDescription_MirrorMove, + gMoveDescription_SelfDestruct, + gMoveDescription_EggBomb, + gMoveDescription_Lick, + gMoveDescription_Smog, + gMoveDescription_Sludge, + gMoveDescription_BoneClub, + gMoveDescription_FireBlast, + gMoveDescription_Waterfall, + gMoveDescription_Clamp, + gMoveDescription_Swift, + gMoveDescription_SkullBash, + gMoveDescription_SpikeCannon, + gMoveDescription_Constrict, + gMoveDescription_Amnesia, + gMoveDescription_Kinesis, + gMoveDescription_SoftBoiled, + gMoveDescription_HiJumpKick, + gMoveDescription_Glare, + gMoveDescription_DreamEater, + gMoveDescription_PoisonGas, + gMoveDescription_Barrage, + gMoveDescription_LeechLife, + gMoveDescription_LovelyKiss, + gMoveDescription_SkyAttack, + gMoveDescription_Transform, + gMoveDescription_Bubble, + gMoveDescription_DizzyPunch, + gMoveDescription_Spore, + gMoveDescription_Flash, + gMoveDescription_Psywave, + gMoveDescription_Splash, + gMoveDescription_AcidArmor, + gMoveDescription_Crabhammer, + gMoveDescription_Explosion, + gMoveDescription_FurySwipes, + gMoveDescription_Bonemerang, + gMoveDescription_Rest, + gMoveDescription_RockSlide, + gMoveDescription_HyperFang, + gMoveDescription_Sharpen, + gMoveDescription_Conversion, + gMoveDescription_TriAttack, + gMoveDescription_SuperFang, + gMoveDescription_Slash, + gMoveDescription_Substitute, + gMoveDescription_Struggle, + gMoveDescription_Sketch, + gMoveDescription_TripleKick, + gMoveDescription_Thief, + gMoveDescription_SpiderWeb, + gMoveDescription_MindReader, + gMoveDescription_Nightmare, + gMoveDescription_FlameWheel, + gMoveDescription_Snore, + gMoveDescription_Curse, + gMoveDescription_Flail, + gMoveDescription_Conversion2, + gMoveDescription_Aeroblast, + gMoveDescription_CottonSpore, + gMoveDescription_Reversal, + gMoveDescription_Spite, + gMoveDescription_PowderSnow, + gMoveDescription_Protect, + gMoveDescription_MachPunch, + gMoveDescription_ScaryFace, + gMoveDescription_FaintAttack, + gMoveDescription_SweetKiss, + gMoveDescription_BellyDrum, + gMoveDescription_SludgeBomb, + gMoveDescription_MudSlap, + gMoveDescription_Octazooka, + gMoveDescription_Spikes, + gMoveDescription_ZapCannon, + gMoveDescription_Foresight, + gMoveDescription_DestinyBond, + gMoveDescription_PerishSong, + gMoveDescription_IcyWind, + gMoveDescription_Detect, + gMoveDescription_BoneRush, + gMoveDescription_LockOn, + gMoveDescription_Outrage, + gMoveDescription_Sandstorm, + gMoveDescription_GigaDrain, + gMoveDescription_Endure, + gMoveDescription_Charm, + gMoveDescription_Rollout, + gMoveDescription_FalseSwipe, + gMoveDescription_Swagger, + gMoveDescription_MilkDrink, + gMoveDescription_Spark, + gMoveDescription_FuryCutter, + gMoveDescription_SteelWing, + gMoveDescription_MeanLook, + gMoveDescription_Attract, + gMoveDescription_SleepTalk, + gMoveDescription_HealBell, + gMoveDescription_Return, + gMoveDescription_Present, + gMoveDescription_Frustration, + gMoveDescription_Safeguard, + gMoveDescription_PainSplit, + gMoveDescription_SacredFire, + gMoveDescription_Magnitude, + gMoveDescription_DynamicPunch, + gMoveDescription_Megahorn, + gMoveDescription_DragonBreath, + gMoveDescription_BatonPass, + gMoveDescription_Encore, + gMoveDescription_Pursuit, + gMoveDescription_RapidSpin, + gMoveDescription_SweetScent, + gMoveDescription_IronTail, + gMoveDescription_MetalClaw, + gMoveDescription_VitalThrow, + gMoveDescription_MorningSun, + gMoveDescription_Synthesis, + gMoveDescription_Moonlight, + gMoveDescription_HiddenPower, + gMoveDescription_CrossChop, + gMoveDescription_Twister, + gMoveDescription_RainDance, + gMoveDescription_SunnyDay, + gMoveDescription_Crunch, + gMoveDescription_MirrorCoat, + gMoveDescription_PsychUp, + gMoveDescription_ExtremeSpeed, + gMoveDescription_AncientPower, + gMoveDescription_ShadowBall, + gMoveDescription_FutureSight, + gMoveDescription_RockSmash, + gMoveDescription_Whirlpool, + gMoveDescription_BeatUp, + gMoveDescription_FakeOut, + gMoveDescription_Uproar, + gMoveDescription_Stockpile, + gMoveDescription_SpitUp, + gMoveDescription_Swallow, + gMoveDescription_HeatWave, + gMoveDescription_Hail, + gMoveDescription_Torment, + gMoveDescription_Flatter, + gMoveDescription_WillOWisp, + gMoveDescription_Memento, + gMoveDescription_Facade, + gMoveDescription_FocusPunch, + gMoveDescription_SmellingSalt, + gMoveDescription_FollowMe, + gMoveDescription_NaturePower, + gMoveDescription_Charge, + gMoveDescription_Taunt, + gMoveDescription_HelpingHand, + gMoveDescription_Trick, + gMoveDescription_RolePlay, + gMoveDescription_Wish, + gMoveDescription_Assist, + gMoveDescription_Ingrain, + gMoveDescription_Superpower, + gMoveDescription_MagicCoat, + gMoveDescription_Recycle, + gMoveDescription_Revenge, + gMoveDescription_BrickBreak, + gMoveDescription_Yawn, + gMoveDescription_KnockOff, + gMoveDescription_Endeavor, + gMoveDescription_Eruption, + gMoveDescription_SkillSwap, + gMoveDescription_Imprison, + gMoveDescription_Refresh, + gMoveDescription_Grudge, + gMoveDescription_Snatch, + gMoveDescription_SecretPower, + gMoveDescription_Dive, + gMoveDescription_ArmThrust, + gMoveDescription_Camouflage, + gMoveDescription_TailGlow, + gMoveDescription_LusterPurge, + gMoveDescription_MistBall, + gMoveDescription_FeatherDance, + gMoveDescription_TeeterDance, + gMoveDescription_BlazeKick, + gMoveDescription_MudSport, + gMoveDescription_IceBall, + gMoveDescription_NeedleArm, + gMoveDescription_SlackOff, + gMoveDescription_HyperVoice, + gMoveDescription_PoisonFang, + gMoveDescription_CrushClaw, + gMoveDescription_BlastBurn, + gMoveDescription_HydroCannon, + gMoveDescription_MeteorMash, + gMoveDescription_Astonish, + gMoveDescription_WeatherBall, + gMoveDescription_Aromatherapy, + gMoveDescription_FakeTears, + gMoveDescription_AirCutter, + gMoveDescription_Overheat, + gMoveDescription_OdorSleuth, + gMoveDescription_RockTomb, + gMoveDescription_SilverWind, + gMoveDescription_MetalSound, + gMoveDescription_GrassWhistle, + gMoveDescription_Tickle, + gMoveDescription_CosmicPower, + gMoveDescription_WaterSpout, + gMoveDescription_SignalBeam, + gMoveDescription_ShadowPunch, + gMoveDescription_Extrasensory, + gMoveDescription_SkyUppercut, + gMoveDescription_SandTomb, + gMoveDescription_SheerCold, + gMoveDescription_MuddyWater, + gMoveDescription_BulletSeed, + gMoveDescription_AerialAce, + gMoveDescription_IcicleSpear, + gMoveDescription_IronDefense, + gMoveDescription_Block, + gMoveDescription_Howl, + gMoveDescription_DragonClaw, + gMoveDescription_FrenzyPlant, + gMoveDescription_BulkUp, + gMoveDescription_Bounce, + gMoveDescription_MudShot, + gMoveDescription_PoisonTail, + gMoveDescription_Covet, + gMoveDescription_VoltTackle, + gMoveDescription_MagicalLeaf, + gMoveDescription_WaterSport, + gMoveDescription_CalmMind, + gMoveDescription_LeafBlade, + gMoveDescription_DragonDance, + gMoveDescription_RockBlast, + gMoveDescription_ShockWave, + gMoveDescription_WaterPulse, + gMoveDescription_DoomDesire, + gMoveDescription_PsychoBoost, +]; diff --git a/src/data/text/move_descriptions_en.h b/src/data/text/move_descriptions_en.h new file mode 100644 index 000000000..0bfb31ff1 --- /dev/null +++ b/src/data/text/move_descriptions_en.h @@ -0,0 +1,1772 @@ +static const u8 gMoveDescription_Pound[] = _( + "Pounds the foe with\n" + "forelegs or tail."); + +static const u8 gMoveDescription_KarateChop[] = _( + "A chopping attack with a\n" + "high critical-hit ratio."); + +static const u8 gMoveDescription_DoubleSlap[] = _( + "Repeatedly slaps the foe\n" + "2 to 5 times."); + +static const u8 gMoveDescription_CometPunch[] = _( + "Repeatedly punches the foe\n" + "2 to 5 times."); + +static const u8 gMoveDescription_MegaPunch[] = _( + "A strong punch thrown with\n" + "incredible power."); + +static const u8 gMoveDescription_PayDay[] = _( + "Throws coins at the foe.\n" + "Money is recovered after."); + +static const u8 gMoveDescription_FirePunch[] = _( + "A fiery punch that may burn\n" + "the foe."); + +static const u8 gMoveDescription_IcePunch[] = _( + "An icy punch that may\n" + "freeze the foe."); + +static const u8 gMoveDescription_ThunderPunch[] = _( + "An electrified punch that\n" + "may paralyze the foe."); + +static const u8 gMoveDescription_Scratch[] = _( + "Scratches the foe with\n" + "sharp claws."); + +static const u8 gMoveDescription_ViceGrip[] = _( + "Grips the foe with large and\n" + "powerful pincers."); + +static const u8 gMoveDescription_Guillotine[] = _( + "A powerful pincer attack\n" + "that may cause fainting."); + +static const u8 gMoveDescription_RazorWind[] = _( + "A 2-turn move that strikes\n" + "the foe on the 2nd turn."); + +static const u8 gMoveDescription_SwordsDance[] = _( + "A fighting dance that\n" + "sharply raises ATTACK."); + +static const u8 gMoveDescription_Cut[] = _( + "Cuts the foe with sharp\n" + "scythes, claws, etc."); + +static const u8 gMoveDescription_Gust[] = _( + "Strikes the foe with a gust\n" + "of wind whipped up by wings."); + +static const u8 gMoveDescription_WingAttack[] = _( + "Strikes the foe with wings\n" + "spread wide."); + +static const u8 gMoveDescription_Whirlwind[] = _( + "Blows away the foe with\n" + "wind and ends the battle."); + +static const u8 gMoveDescription_Fly[] = _( + "Flies up on the first turn,\n" + "then strikes the next turn."); + +static const u8 gMoveDescription_Bind[] = _( + "Binds and squeezes the foe\n" + "for 2 to 5 turns."); + +static const u8 gMoveDescription_Slam[] = _( + "Slams the foe with a long\n" + "tail, vine, etc."); + +static const u8 gMoveDescription_VineWhip[] = _( + "Strikes the foe with\n" + "slender, whiplike vines."); + +static const u8 gMoveDescription_Stomp[] = _( + "Stomps the enemy with a big\n" + "foot. May cause flinching."); + +static const u8 gMoveDescription_DoubleKick[] = _( + "A double-kicking attack\n" + "that strikes the foe twice."); + +static const u8 gMoveDescription_MegaKick[] = _( + "An extremely powerful kick\n" + "with intense force."); + +static const u8 gMoveDescription_JumpKick[] = _( + "A strong jumping kick. May\n" + "miss and hurt the kicker."); + +static const u8 gMoveDescription_RollingKick[] = _( + "A fast kick delivered from\n" + "a rapid spin."); + +static const u8 gMoveDescription_SandAttack[] = _( + "Reduces the foe’s accuracy\n" + "by hurling sand in its face."); + +static const u8 gMoveDescription_Headbutt[] = _( + "A ramming attack that may\n" + "cause flinching."); + +static const u8 gMoveDescription_HornAttack[] = _( + "Jabs the foe with sharp\n" + "horns."); + +static const u8 gMoveDescription_FuryAttack[] = _( + "Jabs the foe 2 to 5 times\n" + "with sharp horns, etc."); + +static const u8 gMoveDescription_HornDrill[] = _( + "A one-hit KO attack that\n" + "uses a horn like a drill."); + +static const u8 gMoveDescription_Tackle[] = _( + "Charges the foe with a full-\n" + "body tackle."); + +static const u8 gMoveDescription_BodySlam[] = _( + "A full-body slam that may\n" + "cause paralysis."); + +static const u8 gMoveDescription_Wrap[] = _( + "Wraps and squeezes the foe\n" + "2 to 5 times with vines, etc."); + +static const u8 gMoveDescription_TakeDown[] = _( + "A reckless charge attack\n" + "that also hurts the user."); + +static const u8 gMoveDescription_Thrash[] = _( + "A rampage of 2 to 3 turns\n" + "that confuses the user."); + +static const u8 gMoveDescription_DoubleEdge[] = _( + "A life-risking tackle that\n" + "also hurts the user."); + +static const u8 gMoveDescription_TailWhip[] = _( + "Wags the tail to lower the\n" + "foe’s DEFENSE."); + +static const u8 gMoveDescription_PoisonSting[] = _( + "A toxic attack with barbs,\n" + "etc., that may poison."); + +static const u8 gMoveDescription_Twineedle[] = _( + "Stingers on the forelegs\n" + "jab the foe twice."); + +static const u8 gMoveDescription_PinMissile[] = _( + "Sharp pins are fired to\n" + "strike 2 to 5 times."); + +static const u8 gMoveDescription_Leer[] = _( + "Frightens the foe with a\n" + "leer to lower DEFENSE."); + +static const u8 gMoveDescription_Bite[] = _( + "Bites with vicious fangs.\n" + "May cause flinching."); + +static const u8 gMoveDescription_Growl[] = _( + "Growls cutely to reduce the\n" + "foe’s ATTACK."); + +static const u8 gMoveDescription_Roar[] = _( + "Makes the foe flee to end\n" + "the battle."); + +static const u8 gMoveDescription_Sing[] = _( + "A soothing song lulls the\n" + "foe into a deep slumber."); + +static const u8 gMoveDescription_Supersonic[] = _( + "Emits bizarre sound waves\n" + "that may confuse the foe."); + +static const u8 gMoveDescription_SonicBoom[] = _( + "Launches shock waves that\n" + "always inflict 20 HP damage."); + +static const u8 gMoveDescription_Disable[] = _( + "Psychically disables one of\n" + "the foe’s moves."); + +static const u8 gMoveDescription_Acid[] = _( + "Sprays a hide-melting acid.\n" + "May lower DEFENSE."); + +static const u8 gMoveDescription_Ember[] = _( + "A weak fire attack that may\n" + "inflict a burn."); + +static const u8 gMoveDescription_Flamethrower[] = _( + "A powerful fire attack that\n" + "may inflict a burn."); + +static const u8 gMoveDescription_Mist[] = _( + "Creates a mist that stops\n" + "reduction of abilities."); + +static const u8 gMoveDescription_WaterGun[] = _( + "Squirts water to attack\n" + "the foe."); + +static const u8 gMoveDescription_HydroPump[] = _( + "Blasts water at high power\n" + "to strike the foe."); + +static const u8 gMoveDescription_Surf[] = _( + "Creates a huge wave, then\n" + "crashes it down on the foe."); + +static const u8 gMoveDescription_IceBeam[] = _( + "Blasts the foe with an icy\n" + "beam that may freeze it."); + +static const u8 gMoveDescription_Blizzard[] = _( + "Hits the foe with an icy\n" + "storm that may freeze it."); + +static const u8 gMoveDescription_Psybeam[] = _( + "Fires a peculiar ray that\n" + "may confuse the foe."); + +static const u8 gMoveDescription_BubbleBeam[] = _( + "Forcefully sprays bubbles\n" + "that may lower SPEED."); + +static const u8 gMoveDescription_AuroraBeam[] = _( + "Fires a rainbow-colored\n" + "beam that may lower ATTACK."); + +static const u8 gMoveDescription_HyperBeam[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_Peck[] = _( + "Attacks the foe with a\n" + "jabbing beak, etc."); + +static const u8 gMoveDescription_DrillPeck[] = _( + "A corkscrewing attack with\n" + "the beak acting as a drill."); + +static const u8 gMoveDescription_Submission[] = _( + "A reckless body slam that\n" + "also hurts the user."); + +static const u8 gMoveDescription_LowKick[] = _( + "A kick that inflicts more\n" + "damage on heavier foes."); + +static const u8 gMoveDescription_Counter[] = _( + "Retaliates any physical hit\n" + "with double the power."); + +static const u8 gMoveDescription_SeismicToss[] = _( + "Inflicts damage identical\n" + "to the user’s level."); + +static const u8 gMoveDescription_Strength[] = _( + "Builds enormous power,\n" + "then slams the foe."); + +static const u8 gMoveDescription_Absorb[] = _( + "An attack that absorbs\n" + "half the damage inflicted."); + +static const u8 gMoveDescription_MegaDrain[] = _( + "An attack that absorbs\n" + "half the damage inflicted."); + +static const u8 gMoveDescription_LeechSeed[] = _( + "Plants a seed on the foe to\n" + "steal HP on every turn."); + +static const u8 gMoveDescription_Growth[] = _( + "Forces the body to grow\n" + "and heightens SP. ATK."); + +static const u8 gMoveDescription_RazorLeaf[] = _( + "Cuts the enemy with leaves.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_SolarBeam[] = _( + "Absorbs light in one turn,\n" + "then attacks next turn."); + +static const u8 gMoveDescription_PoisonPowder[] = _( + "Scatters a toxic powder\n" + "that may poison the foe."); + +static const u8 gMoveDescription_StunSpore[] = _( + "Scatters a powder that may\n" + "paralyze the foe."); + +static const u8 gMoveDescription_SleepPowder[] = _( + "Scatters a powder that may\n" + "cause the foe to sleep."); + +static const u8 gMoveDescription_PetalDance[] = _( + "A rampage of 2 to 3 turns\n" + "that confuses the user."); + +static const u8 gMoveDescription_StringShot[] = _( + "Binds the foe with string\n" + "to reduce its SPEED."); + +static const u8 gMoveDescription_DragonRage[] = _( + "Launches shock waves that\n" + "always inflict 40 HP damage."); + +static const u8 gMoveDescription_FireSpin[] = _( + "Traps the foe in a ring of\n" + "fire for 2 to 5 turns."); + +static const u8 gMoveDescription_ThunderShock[] = _( + "An electrical attack that\n" + "may paralyze the foe."); + +static const u8 gMoveDescription_Thunderbolt[] = _( + "A strong electrical attack\n" + "that may paralyze the foe."); + +static const u8 gMoveDescription_ThunderWave[] = _( + "A weak jolt of electricity\n" + "that paralyzes the foe."); + +static const u8 gMoveDescription_Thunder[] = _( + "A lightning attack that may\n" + "cause paralysis."); + +static const u8 gMoveDescription_RockThrow[] = _( + "Throws small rocks to\n" + "strike the foe."); + +static const u8 gMoveDescription_Earthquake[] = _( + "A powerful quake, but has\n" + "no effect on flying foes."); + +static const u8 gMoveDescription_Fissure[] = _( + "A one-hit KO move that\n" + "drops the foe in a fissure."); + +static const u8 gMoveDescription_Dig[] = _( + "Digs underground the first\n" + "turn and strikes next turn."); + +static const u8 gMoveDescription_Toxic[] = _( + "Poisons the foe with an\n" + "intensifying toxin."); + +static const u8 gMoveDescription_Confusion[] = _( + "A psychic attack that may\n" + "cause confusion."); + +static const u8 gMoveDescription_Psychic[] = _( + "A powerful psychic attack\n" + "that may lower SP. DEF."); + +static const u8 gMoveDescription_Hypnosis[] = _( + "A hypnotizing move that\n" + "may induce sleep."); + +static const u8 gMoveDescription_Meditate[] = _( + "Meditates in a peaceful\n" + "fashion to raise ATTACK."); + +static const u8 gMoveDescription_Agility[] = _( + "Relaxes the body to sharply\n" + "boost SPEED."); + +static const u8 gMoveDescription_QuickAttack[] = _( + "An extremely fast attack\n" + "that always strikes first."); + +static const u8 gMoveDescription_Rage[] = _( + "Raises the user’s ATTACK\n" + "every time it is hit."); + +static const u8 gMoveDescription_Teleport[] = _( + "A psychic move for fleeing\n" + "from battle instantly."); + +static const u8 gMoveDescription_NightShade[] = _( + "Inflicts damage identical\n" + "to the user’s level."); + +static const u8 gMoveDescription_Mimic[] = _( + "Copies a move used by the\n" + "foe during one battle."); + +static const u8 gMoveDescription_Screech[] = _( + "Emits a screech to sharply\n" + "reduce the foe’s DEFENSE."); + +static const u8 gMoveDescription_DoubleTeam[] = _( + "Creates illusory copies to\n" + "raise evasiveness."); + +static const u8 gMoveDescription_Recover[] = _( + "Recovers up to half the\n" + "user’s maximum HP."); + +static const u8 gMoveDescription_Harden[] = _( + "Stiffens the body’s \n" + "muscles to raise DEFENSE."); + +static const u8 gMoveDescription_Minimize[] = _( + "Minimizes the user’s size\n" + "to raise evasiveness."); + +static const u8 gMoveDescription_Smokescreen[] = _( + "Lowers the foe’s accuracy\n" + "using smoke, ink, etc."); + +static const u8 gMoveDescription_ConfuseRay[] = _( + "A sinister ray that\n" + "confuses the foe."); + +static const u8 gMoveDescription_Withdraw[] = _( + "Withdraws the body into its\n" + "hard shell to raise DEFENSE."); + +static const u8 gMoveDescription_DefenseCurl[] = _( + "Curls up to conceal weak\n" + "spots and raise DEFENSE."); + +static const u8 gMoveDescription_Barrier[] = _( + "Creates a barrier that\n" + "sharply raises DEFENSE."); + +static const u8 gMoveDescription_LightScreen[] = _( + "Creates a wall of light that\n" + "lowers SP. ATK damage."); + +static const u8 gMoveDescription_Haze[] = _( + "Creates a black haze that\n" + "eliminates all stat changes."); + +static const u8 gMoveDescription_Reflect[] = _( + "Creates a wall of light that\n" + "weakens physical attacks."); + +static const u8 gMoveDescription_FocusEnergy[] = _( + "Focuses power to raise the\n" + "critical-hit ratio."); + +static const u8 gMoveDescription_Bide[] = _( + "Endures attack for 2\n" + "turns to retaliate double."); + +static const u8 gMoveDescription_Metronome[] = _( + "Waggles a finger to use any\n" + "POKéMON move at random."); + +static const u8 gMoveDescription_MirrorMove[] = _( + "Counters the foe’s attack\n" + "with the same move."); + +static const u8 gMoveDescription_SelfDestruct[] = _( + "Inflicts severe damage but\n" + "makes the user faint."); + +static const u8 gMoveDescription_EggBomb[] = _( + "An egg is forcibly hurled at\n" + "the foe."); + +static const u8 gMoveDescription_Lick[] = _( + "Licks with a long tongue to\n" + "injure. May also paralyze."); + +static const u8 gMoveDescription_Smog[] = _( + "An exhaust-gas attack\n" + "that may also poison."); + +static const u8 gMoveDescription_Sludge[] = _( + "Sludge is hurled to inflict\n" + "damage. May also poison."); + +static const u8 gMoveDescription_BoneClub[] = _( + "Clubs the foe with a bone.\n" + "May cause flinching."); + +static const u8 gMoveDescription_FireBlast[] = _( + "A fiery blast that scorches\n" + "all. May cause a burn."); + +static const u8 gMoveDescription_Waterfall[] = _( + "Charges the foe with speed\n" + "to climb waterfalls."); + +static const u8 gMoveDescription_Clamp[] = _( + "Traps and squeezes the\n" + "foe for 2 to 5 turns."); + +static const u8 gMoveDescription_Swift[] = _( + "Sprays star-shaped rays\n" + "that never miss."); + +static const u8 gMoveDescription_SkullBash[] = _( + "Tucks in the head, then\n" + "attacks on the next turn."); + +static const u8 gMoveDescription_SpikeCannon[] = _( + "Launches sharp spikes that\n" + "strike 2 to 5 times."); + +static const u8 gMoveDescription_Constrict[] = _( + "Constricts to inflict pain.\n" + "May lower SPEED."); + +static const u8 gMoveDescription_Amnesia[] = _( + "Forgets about something\n" + "and sharply raises SP. DEF."); + +static const u8 gMoveDescription_Kinesis[] = _( + "Distracts the foe.\n" + "May lower accuracy."); + +static const u8 gMoveDescription_SoftBoiled[] = _( + "Recovers up to half the\n" + "user’s maximum HP."); + +static const u8 gMoveDescription_HiJumpKick[] = _( + "A jumping knee kick. If it\n" + "misses, the user is hurt."); + +static const u8 gMoveDescription_Glare[] = _( + "Intimidates and frightens\n" + "the foe into paralysis."); + +static const u8 gMoveDescription_DreamEater[] = _( + "Takes one half the damage\n" + "inflicted on a sleeping foe."); + +static const u8 gMoveDescription_PoisonGas[] = _( + "Envelops the foe in a toxic\n" + "gas that may poison."); + +static const u8 gMoveDescription_Barrage[] = _( + "Hurls round objects at the\n" + "foe 2 to 5 times."); + +static const u8 gMoveDescription_LeechLife[] = _( + "An attack that steals half\n" + "the damage inflicted."); + +static const u8 gMoveDescription_LovelyKiss[] = _( + "Demands a kiss with a scary\n" + "face that induces sleep."); + +static const u8 gMoveDescription_SkyAttack[] = _( + "Searches out weak spots,\n" + "then strikes the next turn."); + +static const u8 gMoveDescription_Transform[] = _( + "Alters the user’s cells to\n" + "become a copy of the foe."); + +static const u8 gMoveDescription_Bubble[] = _( + "An attack using bubbles.\n" + "May lower the foe’s SPEED."); + +static const u8 gMoveDescription_DizzyPunch[] = _( + "A rhythmic punch that may\n" + "confuse the foe."); + +static const u8 gMoveDescription_Spore[] = _( + "Scatters a cloud of spores\n" + "that always induce sleep."); + +static const u8 gMoveDescription_Flash[] = _( + "Looses a powerful blast of\n" + "light that cuts accuracy."); + +static const u8 gMoveDescription_Psywave[] = _( + "Attacks with a psychic\n" + "wave of varying intensity."); + +static const u8 gMoveDescription_Splash[] = _( + "It’s just a splash...\n" + "Has no effect whatsoever."); + +static const u8 gMoveDescription_AcidArmor[] = _( + "Liquifies the user’s body\n" + "to sharply raise DEFENSE."); + +static const u8 gMoveDescription_Crabhammer[] = _( + "Hammers with a pincer. Has a\n" + "high critical-hit ratio."); + +static const u8 gMoveDescription_Explosion[] = _( + "Inflicts severe damage but\n" + "makes the user faint."); + +static const u8 gMoveDescription_FurySwipes[] = _( + "Rakes the foe with sharp\n" + "claws, etc., 2 to 5 times."); + +static const u8 gMoveDescription_Bonemerang[] = _( + "Throws a bone boomerang\n" + "that strikes twice."); + +static const u8 gMoveDescription_Rest[] = _( + "The user sleeps for 2 turns,\n" + "restoring HP and status."); + +static const u8 gMoveDescription_RockSlide[] = _( + "Large boulders are hurled.\n" + "May cause flinching."); + +static const u8 gMoveDescription_HyperFang[] = _( + "Attacks with sharp fangs.\n" + "May cause flinching."); + +static const u8 gMoveDescription_Sharpen[] = _( + "Reduces the polygon count\n" + "and raises ATTACK."); + +static const u8 gMoveDescription_Conversion[] = _( + "Changes the user’s type\n" + "into an own move’s type."); + +static const u8 gMoveDescription_TriAttack[] = _( + "Fires three types of beams\n" + "at the same time."); + +static const u8 gMoveDescription_SuperFang[] = _( + "Attacks with sharp fangs\n" + "and cuts half the foe’s HP."); + +static const u8 gMoveDescription_Slash[] = _( + "Slashes with claws, etc. Has\n" + "a high critical-hit ratio."); + +static const u8 gMoveDescription_Substitute[] = _( + "Creates a decoy using 1/4\n" + "of the user’s maximum HP."); + +static const u8 gMoveDescription_Struggle[] = _( + "Used only if all PP are gone.\n" + "Also hurts the user a little."); + +static const u8 gMoveDescription_Sketch[] = _( + "Copies the foe’s last move\n" + "permanently."); + +static const u8 gMoveDescription_TripleKick[] = _( + "Kicks the foe 3 times in a\n" + "row with rising intensity."); + +static const u8 gMoveDescription_Thief[] = _( + "While attacking, it may\n" + "steal the foe’s held item."); + +static const u8 gMoveDescription_SpiderWeb[] = _( + "Ensnares the foe to stop it\n" + "from fleeing or switching."); + +static const u8 gMoveDescription_MindReader[] = _( + "Senses the foe’s action to\n" + "ensure the next move’s hit."); + +static const u8 gMoveDescription_Nightmare[] = _( + "Inflicts 1/4 damage on a\n" + "sleeping foe every turn."); + +static const u8 gMoveDescription_FlameWheel[] = _( + "A fiery charge attack that\n" + "may inflict a burn."); + +static const u8 gMoveDescription_Snore[] = _( + "A loud attack that can be\n" + "used only while asleep."); + +static const u8 gMoveDescription_Curse[] = _( + "A move that functions\n" + "differently for GHOSTS."); + +static const u8 gMoveDescription_Flail[] = _( + "Inflicts more damage when\n" + "the user’s HP is down."); + +static const u8 gMoveDescription_Conversion2[] = _( + "Makes the user resistant\n" + "to the last attack’s type."); + +static const u8 gMoveDescription_Aeroblast[] = _( + "Launches a vacuumed blast.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_CottonSpore[] = _( + "Spores cling to the foe,\n" + "sharply reducing SPEED."); + +static const u8 gMoveDescription_Reversal[] = _( + "Inflicts more damage when\n" + "the user’s HP is down."); + +static const u8 gMoveDescription_Spite[] = _( + "Spitefully cuts the PP\n" + "of the foe’s last move."); + +static const u8 gMoveDescription_PowderSnow[] = _( + "Blasts the foe with a snowy\n" + "gust. May cause freezing."); + +static const u8 gMoveDescription_Protect[] = _( + "Evades attack, but may fail\n" + "if used in succession."); + +static const u8 gMoveDescription_MachPunch[] = _( + "A punch is thrown at wicked\n" + "speed to strike first."); + +static const u8 gMoveDescription_ScaryFace[] = _( + "Frightens with a scary face\n" + "to sharply reduce SPEED."); + +static const u8 gMoveDescription_FaintAttack[] = _( + "Draws the foe close, then\n" + "strikes without fail."); + +static const u8 gMoveDescription_SweetKiss[] = _( + "Demands a kiss with a cute\n" + "look. May cause confusion."); + +static const u8 gMoveDescription_BellyDrum[] = _( + "Maximizes ATTACK while\n" + "sacrificing HP."); + +static const u8 gMoveDescription_SludgeBomb[] = _( + "Sludge is hurled to inflict\n" + "damage. May also poison."); + +static const u8 gMoveDescription_MudSlap[] = _( + "Hurls mud in the foe’s face\n" + "to reduce its accuracy."); + +static const u8 gMoveDescription_Octazooka[] = _( + "Fires a lump of ink to\n" + "damage and cut accuracy."); + +static const u8 gMoveDescription_Spikes[] = _( + "Sets spikes that hurt a \n" + "foe switching out."); + +static const u8 gMoveDescription_ZapCannon[] = _( + "Powerful and sure to cause\n" + "paralysis, but inaccurate."); + +static const u8 gMoveDescription_Foresight[] = _( + "Negates the foe’s efforts\n" + "to heighten evasiveness."); + +static const u8 gMoveDescription_DestinyBond[] = _( + "If the user faints, the foe\n" + "is also made to faint."); + +static const u8 gMoveDescription_PerishSong[] = _( + "Any POKéMON hearing this\n" + "song faints in 3 turns."); + +static const u8 gMoveDescription_IcyWind[] = _( + "A chilling attack that\n" + "lowers the foe’s SPEED."); + +static const u8 gMoveDescription_Detect[] = _( + "Evades attack, but may fail\n" + "if used in succession."); + +static const u8 gMoveDescription_BoneRush[] = _( + "Strikes the foe with a bone\n" + "in hand 2 to 5 times."); + +static const u8 gMoveDescription_LockOn[] = _( + "Locks on to the foe to\n" + "ensure the next move hits."); + +static const u8 gMoveDescription_Outrage[] = _( + "A rampage of 2 to 3 turns\n" + "that confuses the user."); + +static const u8 gMoveDescription_Sandstorm[] = _( + "Causes a sandstorm that\n" + "rages for several turns."); + +static const u8 gMoveDescription_GigaDrain[] = _( + "An attack that steals half\n" + "the damage inflicted."); + +static const u8 gMoveDescription_Endure[] = _( + "Endures any attack for\n" + "1 turn, leaving at least 1HP."); + +static const u8 gMoveDescription_Charm[] = _( + "Charms the foe and sharply\n" + "reduces its ATTACK."); + +static const u8 gMoveDescription_Rollout[] = _( + "An attack lasting 5 turns\n" + "with rising intensity."); + +static const u8 gMoveDescription_FalseSwipe[] = _( + "An attack that leaves the\n" + "foe with at least 1 HP."); + +static const u8 gMoveDescription_Swagger[] = _( + "Confuses the foe, but also\n" + "sharply raises ATTACK."); + +static const u8 gMoveDescription_MilkDrink[] = _( + "Recovers up to half the\n" + "user’s maximum HP."); + +static const u8 gMoveDescription_Spark[] = _( + "An electrified tackle that\n" + "may paralyze the foe."); + +static const u8 gMoveDescription_FuryCutter[] = _( + "An attack that intensifies\n" + "on each successive hit."); + +static const u8 gMoveDescription_SteelWing[] = _( + "Strikes the foe with hard\n" + "wings spread wide."); + +static const u8 gMoveDescription_MeanLook[] = _( + "Fixes the foe with a mean\n" + "look that prevents escape."); + +static const u8 gMoveDescription_Attract[] = _( + "Makes the opposite gender\n" + "less likely to attack."); + +static const u8 gMoveDescription_SleepTalk[] = _( + "Uses an own move randomly\n" + "while asleep."); + +static const u8 gMoveDescription_HealBell[] = _( + "Chimes soothingly to heal\n" + "all status abnormalities."); + +static const u8 gMoveDescription_Return[] = _( + "An attack that increases\n" + "in power with friendship."); + +static const u8 gMoveDescription_Present[] = _( + "A gift in the form of a\n" + "bomb. May restore HP."); + +static const u8 gMoveDescription_Frustration[] = _( + "An attack that is stronger\n" + "if the TRAINER is disliked."); + +static const u8 gMoveDescription_Safeguard[] = _( + "A mystical force prevents\n" + "all status problems."); + +static const u8 gMoveDescription_PainSplit[] = _( + "Adds the user and foe’s HP,\n" + "then shares them equally."); + +static const u8 gMoveDescription_SacredFire[] = _( + "A mystical fire attack that\n" + "may inflict a burn."); + +static const u8 gMoveDescription_Magnitude[] = _( + "A ground-shaking attack\n" + "of random intensity."); + +static const u8 gMoveDescription_DynamicPunch[] = _( + "Powerful and sure to cause\n" + "confusion, but inaccurate."); + +static const u8 gMoveDescription_Megahorn[] = _( + "A brutal ramming attack\n" + "using out-thrust horns."); + +static const u8 gMoveDescription_DragonBreath[] = _( + "Strikes the foe with an\n" + "incredible blast of breath."); + +static const u8 gMoveDescription_BatonPass[] = _( + "Switches out the user while\n" + "keeping effects in play."); + +static const u8 gMoveDescription_Encore[] = _( + "Makes the foe repeat its\n" + "last move over 2 to 6 turns."); + +static const u8 gMoveDescription_Pursuit[] = _( + "Inflicts bad damage if used\n" + "on a foe switching out."); + +static const u8 gMoveDescription_RapidSpin[] = _( + "Spins the body at high\n" + "speed to strike the foe."); + +static const u8 gMoveDescription_SweetScent[] = _( + "Allures the foe to reduce\n" + "evasiveness."); + +static const u8 gMoveDescription_IronTail[] = _( + "Attacks with a rock-hard\n" + "tail. May lower DEFENSE."); + +static const u8 gMoveDescription_MetalClaw[] = _( + "A claw attack that may\n" + "raise the user’s ATTACK."); + +static const u8 gMoveDescription_VitalThrow[] = _( + "Makes the user’s move last,\n" + "but it never misses."); + +static const u8 gMoveDescription_MorningSun[] = _( + "Restores HP. The amount\n" + "varies with the weather."); + +static const u8 gMoveDescription_Synthesis[] = _( + "Restores HP. The amount\n" + "varies with the weather."); + +static const u8 gMoveDescription_Moonlight[] = _( + "Restores HP. The amount\n" + "varies with the weather."); + +static const u8 gMoveDescription_HiddenPower[] = _( + "The effectiveness varies\n" + "with the user."); + +static const u8 gMoveDescription_CrossChop[] = _( + "A double-chopping attack.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_Twister[] = _( + "Whips up a vicious twister\n" + "to tear at the foe."); + +static const u8 gMoveDescription_RainDance[] = _( + "Boosts the power of WATER-\n" + "type moves for 5 turns."); + +static const u8 gMoveDescription_SunnyDay[] = _( + "Boosts the power of FIRE-\n" + "type moves for 5 turns."); + +static const u8 gMoveDescription_Crunch[] = _( + "Crunches with sharp fangs.\n" + "May lower SP. DEF."); + +static const u8 gMoveDescription_MirrorCoat[] = _( + "Counters the foe’s special\n" + "attack at double the power."); + +static const u8 gMoveDescription_PsychUp[] = _( + "Copies the foe’s effect(s)\n" + "and gives to the user."); + +static const u8 gMoveDescription_ExtremeSpeed[] = _( + "An extremely fast and\n" + "powerful attack."); + +static const u8 gMoveDescription_AncientPower[] = _( + "An attack that may raise\n" + "all stats."); + +static const u8 gMoveDescription_ShadowBall[] = _( + "Hurls a black blob that may\n" + "lower the foe’s SP. DEF."); + +static const u8 gMoveDescription_FutureSight[] = _( + "Heightens inner power to\n" + "strike 2 turns later."); + +static const u8 gMoveDescription_RockSmash[] = _( + "A rock-crushing attack\n" + "that may lower DEFENSE."); + +static const u8 gMoveDescription_Whirlpool[] = _( + "Traps and hurts the foe in\n" + "a whirlpool for 2 to 5 turns."); + +static const u8 gMoveDescription_BeatUp[] = _( + "Summons party POKéMON to\n" + "join in the attack."); + +static const u8 gMoveDescription_FakeOut[] = _( + "A 1st-turn, 1st-strike move\n" + "that causes flinching."); + +static const u8 gMoveDescription_Uproar[] = _( + "Causes an uproar for 2 to 5\n" + "turns and prevents sleep."); + +static const u8 gMoveDescription_Stockpile[] = _( + "Charges up power for up to\n" + "3 turns."); + +static const u8 gMoveDescription_SpitUp[] = _( + "Releases stockpiled power\n" + "(the more the better)."); + +static const u8 gMoveDescription_Swallow[] = _( + "Absorbs stockpiled power\n" + "and restores HP."); + +static const u8 gMoveDescription_HeatWave[] = _( + "Exhales a hot breath on the\n" + "foe. May inflict a burn."); + +static const u8 gMoveDescription_Hail[] = _( + "Summons a hailstorm that\n" + "strikes every turn."); + +static const u8 gMoveDescription_Torment[] = _( + "Torments the foe and stops\n" + "successive use of a move."); + +static const u8 gMoveDescription_Flatter[] = _( + "Confuses the foe, but\n" + "raises its SP. ATK."); + +static const u8 gMoveDescription_WillOWisp[] = _( + "Inflicts a burn on the foe\n" + "with intense fire."); + +static const u8 gMoveDescription_Memento[] = _( + "The user faints and lowers\n" + "the foe’s abilities."); + +static const u8 gMoveDescription_Facade[] = _( + "Boosts ATTACK when burned,\n" + "paralyzed, or poisoned."); + +static const u8 gMoveDescription_FocusPunch[] = _( + "A powerful loyalty attack.\n" + "The user flinches if hit."); + +static const u8 gMoveDescription_SmellingSalt[] = _( + "Powerful against paralyzed\n" + "foes, but also heals them."); + +static const u8 gMoveDescription_FollowMe[] = _( + "Draws attention to make\n" + "foes attack only the user."); + +static const u8 gMoveDescription_NaturePower[] = _( + "The type of attack varies\n" + "depending on the location."); + +static const u8 gMoveDescription_Charge[] = _( + "Charges power to boost the\n" + "electric move used next."); + +static const u8 gMoveDescription_Taunt[] = _( + "Taunts the foe into only\n" + "using attack moves."); + +static const u8 gMoveDescription_HelpingHand[] = _( + "Boosts the power of the\n" + "recipient’s moves."); + +static const u8 gMoveDescription_Trick[] = _( + "Tricks the foe into trading\n" + "held items."); + +static const u8 gMoveDescription_RolePlay[] = _( + "Mimics the target and\n" + "copies its special ability."); + +static const u8 gMoveDescription_Wish[] = _( + "A wish that restores HP.\n" + "It takes time to work."); + +static const u8 gMoveDescription_Assist[] = _( + "Attacks randomly with one\n" + "of the partner’s moves."); + +static const u8 gMoveDescription_Ingrain[] = _( + "Lays roots that restore HP.\n" + "The user can’t switch out."); + +static const u8 gMoveDescription_Superpower[] = _( + "Boosts strength sharply,\n" + "but lowers abilities."); + +static const u8 gMoveDescription_MagicCoat[] = _( + "Reflects special effects\n" + "back to the attacker."); + +static const u8 gMoveDescription_Recycle[] = _( + "Recycles a used item for\n" + "one more use."); + +static const u8 gMoveDescription_Revenge[] = _( + "An attack that gains power\n" + "if injured by the foe."); + +static const u8 gMoveDescription_BrickBreak[] = _( + "Destroys barriers such as\n" + "REFLECT and causes damage."); + +static const u8 gMoveDescription_Yawn[] = _( + "Lulls the foe into yawning,\n" + "then sleeping next turn."); + +static const u8 gMoveDescription_KnockOff[] = _( + "Knocks down the foe’s held\n" + "item to prevent its use."); + +static const u8 gMoveDescription_Endeavor[] = _( + "Gains power if the user’s HP\n" + "is lower than the foe’s HP."); + +static const u8 gMoveDescription_Eruption[] = _( + "The higher the user’s HP,\n" + "the more damage caused."); + +static const u8 gMoveDescription_SkillSwap[] = _( + "The user swaps special\n" + "abilities with the target."); + +static const u8 gMoveDescription_Imprison[] = _( + "Prevents foes from using\n" + "moves known by the user."); + +static const u8 gMoveDescription_Refresh[] = _( + "Heals poisoning, paralysis,\n" + "or a burn."); + +static const u8 gMoveDescription_Grudge[] = _( + "If the user faints, deletes\n" + "the PP of the final move."); + +static const u8 gMoveDescription_Snatch[] = _( + "Steals the effects of the\n" + "move the foe uses next."); + +static const u8 gMoveDescription_SecretPower[] = _( + "An attack with effects\n" + "that vary by location."); + +static const u8 gMoveDescription_Dive[] = _( + "Dives underwater the first\n" + "turn and strikes next turn."); + +static const u8 gMoveDescription_ArmThrust[] = _( + "Straight-arm punches that\n" + "strike the foe 2 to 5 times."); + +static const u8 gMoveDescription_Camouflage[] = _( + "Alters the POKéMON’s type\n" + "depending on the location."); + +static const u8 gMoveDescription_TailGlow[] = _( + "Flashes a light that sharply\n" + "raises SP. ATK."); + +static const u8 gMoveDescription_LusterPurge[] = _( + "Attacks with a burst of\n" + "light. May lower SP. DEF."); + +static const u8 gMoveDescription_MistBall[] = _( + "Attacks with a flurry of\n" + "down. May lower SP. ATK."); + +static const u8 gMoveDescription_FeatherDance[] = _( + "Envelops the foe with down\n" + "to sharply reduce ATTACK."); + +static const u8 gMoveDescription_TeeterDance[] = _( + "Confuses all POKéMON on\n" + "the scene."); + +static const u8 gMoveDescription_BlazeKick[] = _( + "A kick with a high critical-\n" + "hit ratio. May cause a burn."); + +static const u8 gMoveDescription_MudSport[] = _( + "Covers the user in mud to\n" + "raise electrical resistance."); + +static const u8 gMoveDescription_IceBall[] = _( + "A 5-turn attack that gains\n" + "power on successive hits."); + +static const u8 gMoveDescription_NeedleArm[] = _( + "Attacks with thorny arms.\n" + "May cause flinching."); + +static const u8 gMoveDescription_SlackOff[] = _( + "Slacks off and restores\n" + "half the maximum HP."); + +static const u8 gMoveDescription_HyperVoice[] = _( + "A loud attack that uses\n" + "sound waves to injure."); + +static const u8 gMoveDescription_PoisonFang[] = _( + "A sharp-fanged attack.\n" + "May badly poison the foe."); + +static const u8 gMoveDescription_CrushClaw[] = _( + "Tears at the foe with sharp\n" + "claws. May lower DEFENSE."); + +static const u8 gMoveDescription_BlastBurn[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_HydroCannon[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_MeteorMash[] = _( + "Fires a meteor-like punch.\n" + "May raise ATTACK."); + +static const u8 gMoveDescription_Astonish[] = _( + "An attack that may shock\n" + "the foe into flinching."); + +static const u8 gMoveDescription_WeatherBall[] = _( + "The move’s type and power\n" + "change with the weather."); + +static const u8 gMoveDescription_Aromatherapy[] = _( + "Heals all status problems\n" + "with a soothing scent."); + +static const u8 gMoveDescription_FakeTears[] = _( + "Feigns crying to sharply\n" + "lower the foe’s SP. DEF."); + +static const u8 gMoveDescription_AirCutter[] = _( + "Hacks with razorlike wind.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_Overheat[] = _( + "Allows a full-power attack,\n" + "but sharply lowers SP. ATK."); + +static const u8 gMoveDescription_OdorSleuth[] = _( + "Negates the foe’s efforts\n" + "to heighten evasiveness."); + +static const u8 gMoveDescription_RockTomb[] = _( + "Stops the foe from moving\n" + "with rocks and cuts SPEED."); + +static const u8 gMoveDescription_SilverWind[] = _( + "A powdery attack that may\n" + "raise abilities."); + +static const u8 gMoveDescription_MetalSound[] = _( + "Emits a horrible screech\n" + "that sharply lowers SP. DEF."); + +static const u8 gMoveDescription_GrassWhistle[] = _( + "Lulls the foe into sleep\n" + "with a pleasant melody."); + +static const u8 gMoveDescription_Tickle[] = _( + "Makes the foe laugh to\n" + "lower ATTACK and DEFENSE."); + +static const u8 gMoveDescription_CosmicPower[] = _( + "Raises DEFENSE and SP. DEF\n" + "with a mystic power."); + +static const u8 gMoveDescription_WaterSpout[] = _( + "Inflicts more damage if the\n" + "user’s HP is high."); + +static const u8 gMoveDescription_SignalBeam[] = _( + "A strange beam attack that\n" + "may confuse the foe."); + +static const u8 gMoveDescription_ShadowPunch[] = _( + "An unavoidable punch that\n" + "is thrown from shadows."); + +static const u8 gMoveDescription_Extrasensory[] = _( + "Attacks with a peculiar\n" + "power. May cause flinching."); + +static const u8 gMoveDescription_SkyUppercut[] = _( + "An uppercut thrown as if\n" + "leaping into the sky."); + +static const u8 gMoveDescription_SandTomb[] = _( + "Traps and hurts the foe in\n" + "quicksand for 2 to 5 turns."); + +static const u8 gMoveDescription_SheerCold[] = _( + "A chilling attack that\n" + "causes fainting if it hits."); + +static const u8 gMoveDescription_MuddyWater[] = _( + "Attacks with muddy water.\n" + "May lower accuracy."); + +static const u8 gMoveDescription_BulletSeed[] = _( + "Shoots 2 to 5 seeds in a row\n" + "to strike the foe."); + +static const u8 gMoveDescription_AerialAce[] = _( + "An extremely speedy and\n" + "unavoidable attack."); + +static const u8 gMoveDescription_IcicleSpear[] = _( + "Attacks the foe by firing\n" + "2 to 5 icicles in a row."); + +static const u8 gMoveDescription_IronDefense[] = _( + "Hardens the body’s surface\n" + "to sharply raise DEFENSE."); + +static const u8 gMoveDescription_Block[] = _( + "Blocks the foe’s way to\n" + "prevent escape."); + +static const u8 gMoveDescription_Howl[] = _( + "Howls to raise the spirit\n" + "and boosts ATTACK."); + +static const u8 gMoveDescription_DragonClaw[] = _( + "Slashes the foe with sharp\n" + "claws."); + +static const u8 gMoveDescription_FrenzyPlant[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_BulkUp[] = _( + "Bulks up the body to boost\n" + "both ATTACK and DEFENSE."); + +static const u8 gMoveDescription_Bounce[] = _( + "Bounces up, then down the\n" + "next turn. May paralyze."); + +static const u8 gMoveDescription_MudShot[] = _( + "Hurls mud at the foe and\n" + "reduces SPEED."); + +static const u8 gMoveDescription_PoisonTail[] = _( + "Has a high critical-hit\n" + "ratio. May also poison."); + +static const u8 gMoveDescription_Covet[] = _( + "Cutely begs to obtain an\n" + "item held by the foe."); + +static const u8 gMoveDescription_VoltTackle[] = _( + "A life-risking tackle that\n" + "slightly hurts the user."); + +static const u8 gMoveDescription_MagicalLeaf[] = _( + "Attacks with a strange leaf\n" + "that cannot be evaded."); + +static const u8 gMoveDescription_WaterSport[] = _( + "The user becomes soaked to\n" + "raise resistance to fire."); + +static const u8 gMoveDescription_CalmMind[] = _( + "Raises SP. ATK and SP. DEF\n" + "by focusing the mind."); + +static const u8 gMoveDescription_LeafBlade[] = _( + "Slashes with a sharp leaf.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_DragonDance[] = _( + "A mystical dance that ups\n" + "ATTACK and SPEED."); + +static const u8 gMoveDescription_RockBlast[] = _( + "Hurls boulders at the foe\n" + "2 to 5 times in a row."); + +static const u8 gMoveDescription_ShockWave[] = _( + "A fast and unavoidable\n" + "electric attack."); + +static const u8 gMoveDescription_WaterPulse[] = _( + "Attacks with ultrasonic\n" + "waves. May confuse the foe"); + +static const u8 gMoveDescription_DoomDesire[] = _( + "Summons strong sunlight to\n" + "attack 2 turns later."); + +static const u8 gMoveDescription_PsychoBoost[] = _( + "Allows a full-power attack,\n" + "but sharply lowers SP. ATK."); + +const u8 * const gMoveDescriptions[] = { + gMoveDescription_Pound, + gMoveDescription_KarateChop, + gMoveDescription_DoubleSlap, + gMoveDescription_CometPunch, + gMoveDescription_MegaPunch, + gMoveDescription_PayDay, + gMoveDescription_FirePunch, + gMoveDescription_IcePunch, + gMoveDescription_ThunderPunch, + gMoveDescription_Scratch, + gMoveDescription_ViceGrip, + gMoveDescription_Guillotine, + gMoveDescription_RazorWind, + gMoveDescription_SwordsDance, + gMoveDescription_Cut, + gMoveDescription_Gust, + gMoveDescription_WingAttack, + gMoveDescription_Whirlwind, + gMoveDescription_Fly, + gMoveDescription_Bind, + gMoveDescription_Slam, + gMoveDescription_VineWhip, + gMoveDescription_Stomp, + gMoveDescription_DoubleKick, + gMoveDescription_MegaKick, + gMoveDescription_JumpKick, + gMoveDescription_RollingKick, + gMoveDescription_SandAttack, + gMoveDescription_Headbutt, + gMoveDescription_HornAttack, + gMoveDescription_FuryAttack, + gMoveDescription_HornDrill, + gMoveDescription_Tackle, + gMoveDescription_BodySlam, + gMoveDescription_Wrap, + gMoveDescription_TakeDown, + gMoveDescription_Thrash, + gMoveDescription_DoubleEdge, + gMoveDescription_TailWhip, + gMoveDescription_PoisonSting, + gMoveDescription_Twineedle, + gMoveDescription_PinMissile, + gMoveDescription_Leer, + gMoveDescription_Bite, + gMoveDescription_Growl, + gMoveDescription_Roar, + gMoveDescription_Sing, + gMoveDescription_Supersonic, + gMoveDescription_SonicBoom, + gMoveDescription_Disable, + gMoveDescription_Acid, + gMoveDescription_Ember, + gMoveDescription_Flamethrower, + gMoveDescription_Mist, + gMoveDescription_WaterGun, + gMoveDescription_HydroPump, + gMoveDescription_Surf, + gMoveDescription_IceBeam, + gMoveDescription_Blizzard, + gMoveDescription_Psybeam, + gMoveDescription_BubbleBeam, + gMoveDescription_AuroraBeam, + gMoveDescription_HyperBeam, + gMoveDescription_Peck, + gMoveDescription_DrillPeck, + gMoveDescription_Submission, + gMoveDescription_LowKick, + gMoveDescription_Counter, + gMoveDescription_SeismicToss, + gMoveDescription_Strength, + gMoveDescription_Absorb, + gMoveDescription_MegaDrain, + gMoveDescription_LeechSeed, + gMoveDescription_Growth, + gMoveDescription_RazorLeaf, + gMoveDescription_SolarBeam, + gMoveDescription_PoisonPowder, + gMoveDescription_StunSpore, + gMoveDescription_SleepPowder, + gMoveDescription_PetalDance, + gMoveDescription_StringShot, + gMoveDescription_DragonRage, + gMoveDescription_FireSpin, + gMoveDescription_ThunderShock, + gMoveDescription_Thunderbolt, + gMoveDescription_ThunderWave, + gMoveDescription_Thunder, + gMoveDescription_RockThrow, + gMoveDescription_Earthquake, + gMoveDescription_Fissure, + gMoveDescription_Dig, + gMoveDescription_Toxic, + gMoveDescription_Confusion, + gMoveDescription_Psychic, + gMoveDescription_Hypnosis, + gMoveDescription_Meditate, + gMoveDescription_Agility, + gMoveDescription_QuickAttack, + gMoveDescription_Rage, + gMoveDescription_Teleport, + gMoveDescription_NightShade, + gMoveDescription_Mimic, + gMoveDescription_Screech, + gMoveDescription_DoubleTeam, + gMoveDescription_Recover, + gMoveDescription_Harden, + gMoveDescription_Minimize, + gMoveDescription_Smokescreen, + gMoveDescription_ConfuseRay, + gMoveDescription_Withdraw, + gMoveDescription_DefenseCurl, + gMoveDescription_Barrier, + gMoveDescription_LightScreen, + gMoveDescription_Haze, + gMoveDescription_Reflect, + gMoveDescription_FocusEnergy, + gMoveDescription_Bide, + gMoveDescription_Metronome, + gMoveDescription_MirrorMove, + gMoveDescription_SelfDestruct, + gMoveDescription_EggBomb, + gMoveDescription_Lick, + gMoveDescription_Smog, + gMoveDescription_Sludge, + gMoveDescription_BoneClub, + gMoveDescription_FireBlast, + gMoveDescription_Waterfall, + gMoveDescription_Clamp, + gMoveDescription_Swift, + gMoveDescription_SkullBash, + gMoveDescription_SpikeCannon, + gMoveDescription_Constrict, + gMoveDescription_Amnesia, + gMoveDescription_Kinesis, + gMoveDescription_SoftBoiled, + gMoveDescription_HiJumpKick, + gMoveDescription_Glare, + gMoveDescription_DreamEater, + gMoveDescription_PoisonGas, + gMoveDescription_Barrage, + gMoveDescription_LeechLife, + gMoveDescription_LovelyKiss, + gMoveDescription_SkyAttack, + gMoveDescription_Transform, + gMoveDescription_Bubble, + gMoveDescription_DizzyPunch, + gMoveDescription_Spore, + gMoveDescription_Flash, + gMoveDescription_Psywave, + gMoveDescription_Splash, + gMoveDescription_AcidArmor, + gMoveDescription_Crabhammer, + gMoveDescription_Explosion, + gMoveDescription_FurySwipes, + gMoveDescription_Bonemerang, + gMoveDescription_Rest, + gMoveDescription_RockSlide, + gMoveDescription_HyperFang, + gMoveDescription_Sharpen, + gMoveDescription_Conversion, + gMoveDescription_TriAttack, + gMoveDescription_SuperFang, + gMoveDescription_Slash, + gMoveDescription_Substitute, + gMoveDescription_Struggle, + gMoveDescription_Sketch, + gMoveDescription_TripleKick, + gMoveDescription_Thief, + gMoveDescription_SpiderWeb, + gMoveDescription_MindReader, + gMoveDescription_Nightmare, + gMoveDescription_FlameWheel, + gMoveDescription_Snore, + gMoveDescription_Curse, + gMoveDescription_Flail, + gMoveDescription_Conversion2, + gMoveDescription_Aeroblast, + gMoveDescription_CottonSpore, + gMoveDescription_Reversal, + gMoveDescription_Spite, + gMoveDescription_PowderSnow, + gMoveDescription_Protect, + gMoveDescription_MachPunch, + gMoveDescription_ScaryFace, + gMoveDescription_FaintAttack, + gMoveDescription_SweetKiss, + gMoveDescription_BellyDrum, + gMoveDescription_SludgeBomb, + gMoveDescription_MudSlap, + gMoveDescription_Octazooka, + gMoveDescription_Spikes, + gMoveDescription_ZapCannon, + gMoveDescription_Foresight, + gMoveDescription_DestinyBond, + gMoveDescription_PerishSong, + gMoveDescription_IcyWind, + gMoveDescription_Detect, + gMoveDescription_BoneRush, + gMoveDescription_LockOn, + gMoveDescription_Outrage, + gMoveDescription_Sandstorm, + gMoveDescription_GigaDrain, + gMoveDescription_Endure, + gMoveDescription_Charm, + gMoveDescription_Rollout, + gMoveDescription_FalseSwipe, + gMoveDescription_Swagger, + gMoveDescription_MilkDrink, + gMoveDescription_Spark, + gMoveDescription_FuryCutter, + gMoveDescription_SteelWing, + gMoveDescription_MeanLook, + gMoveDescription_Attract, + gMoveDescription_SleepTalk, + gMoveDescription_HealBell, + gMoveDescription_Return, + gMoveDescription_Present, + gMoveDescription_Frustration, + gMoveDescription_Safeguard, + gMoveDescription_PainSplit, + gMoveDescription_SacredFire, + gMoveDescription_Magnitude, + gMoveDescription_DynamicPunch, + gMoveDescription_Megahorn, + gMoveDescription_DragonBreath, + gMoveDescription_BatonPass, + gMoveDescription_Encore, + gMoveDescription_Pursuit, + gMoveDescription_RapidSpin, + gMoveDescription_SweetScent, + gMoveDescription_IronTail, + gMoveDescription_MetalClaw, + gMoveDescription_VitalThrow, + gMoveDescription_MorningSun, + gMoveDescription_Synthesis, + gMoveDescription_Moonlight, + gMoveDescription_HiddenPower, + gMoveDescription_CrossChop, + gMoveDescription_Twister, + gMoveDescription_RainDance, + gMoveDescription_SunnyDay, + gMoveDescription_Crunch, + gMoveDescription_MirrorCoat, + gMoveDescription_PsychUp, + gMoveDescription_ExtremeSpeed, + gMoveDescription_AncientPower, + gMoveDescription_ShadowBall, + gMoveDescription_FutureSight, + gMoveDescription_RockSmash, + gMoveDescription_Whirlpool, + gMoveDescription_BeatUp, + gMoveDescription_FakeOut, + gMoveDescription_Uproar, + gMoveDescription_Stockpile, + gMoveDescription_SpitUp, + gMoveDescription_Swallow, + gMoveDescription_HeatWave, + gMoveDescription_Hail, + gMoveDescription_Torment, + gMoveDescription_Flatter, + gMoveDescription_WillOWisp, + gMoveDescription_Memento, + gMoveDescription_Facade, + gMoveDescription_FocusPunch, + gMoveDescription_SmellingSalt, + gMoveDescription_FollowMe, + gMoveDescription_NaturePower, + gMoveDescription_Charge, + gMoveDescription_Taunt, + gMoveDescription_HelpingHand, + gMoveDescription_Trick, + gMoveDescription_RolePlay, + gMoveDescription_Wish, + gMoveDescription_Assist, + gMoveDescription_Ingrain, + gMoveDescription_Superpower, + gMoveDescription_MagicCoat, + gMoveDescription_Recycle, + gMoveDescription_Revenge, + gMoveDescription_BrickBreak, + gMoveDescription_Yawn, + gMoveDescription_KnockOff, + gMoveDescription_Endeavor, + gMoveDescription_Eruption, + gMoveDescription_SkillSwap, + gMoveDescription_Imprison, + gMoveDescription_Refresh, + gMoveDescription_Grudge, + gMoveDescription_Snatch, + gMoveDescription_SecretPower, + gMoveDescription_Dive, + gMoveDescription_ArmThrust, + gMoveDescription_Camouflage, + gMoveDescription_TailGlow, + gMoveDescription_LusterPurge, + gMoveDescription_MistBall, + gMoveDescription_FeatherDance, + gMoveDescription_TeeterDance, + gMoveDescription_BlazeKick, + gMoveDescription_MudSport, + gMoveDescription_IceBall, + gMoveDescription_NeedleArm, + gMoveDescription_SlackOff, + gMoveDescription_HyperVoice, + gMoveDescription_PoisonFang, + gMoveDescription_CrushClaw, + gMoveDescription_BlastBurn, + gMoveDescription_HydroCannon, + gMoveDescription_MeteorMash, + gMoveDescription_Astonish, + gMoveDescription_WeatherBall, + gMoveDescription_Aromatherapy, + gMoveDescription_FakeTears, + gMoveDescription_AirCutter, + gMoveDescription_Overheat, + gMoveDescription_OdorSleuth, + gMoveDescription_RockTomb, + gMoveDescription_SilverWind, + gMoveDescription_MetalSound, + gMoveDescription_GrassWhistle, + gMoveDescription_Tickle, + gMoveDescription_CosmicPower, + gMoveDescription_WaterSpout, + gMoveDescription_SignalBeam, + gMoveDescription_ShadowPunch, + gMoveDescription_Extrasensory, + gMoveDescription_SkyUppercut, + gMoveDescription_SandTomb, + gMoveDescription_SheerCold, + gMoveDescription_MuddyWater, + gMoveDescription_BulletSeed, + gMoveDescription_AerialAce, + gMoveDescription_IcicleSpear, + gMoveDescription_IronDefense, + gMoveDescription_Block, + gMoveDescription_Howl, + gMoveDescription_DragonClaw, + gMoveDescription_FrenzyPlant, + gMoveDescription_BulkUp, + gMoveDescription_Bounce, + gMoveDescription_MudShot, + gMoveDescription_PoisonTail, + gMoveDescription_Covet, + gMoveDescription_VoltTackle, + gMoveDescription_MagicalLeaf, + gMoveDescription_WaterSport, + gMoveDescription_CalmMind, + gMoveDescription_LeafBlade, + gMoveDescription_DragonDance, + gMoveDescription_RockBlast, + gMoveDescription_ShockWave, + gMoveDescription_WaterPulse, + gMoveDescription_DoomDesire, + gMoveDescription_PsychoBoost, +}; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 9f8021eb5..33034afa4 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -158,7 +158,6 @@ extern const u16 gUnknown_083C157E[]; extern const u16 gUnknown_083C157C[]; extern const u8 gAbilityNames[][13]; extern const u8 * const gAbilityDescriptions[]; -extern const u8 * const gMoveDescriptions[]; extern const u8 * const gContestEffectStrings[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; @@ -173,6 +172,12 @@ extern const u8 gUnknown_083C15AE[]; extern const u8 gUnknown_083C15B4[]; extern const u8 *const gUnknown_083C1068[]; +#if ENGLISH +#include "../data/text/move_descriptions_en.h" +#elif GERMAN +#include "../data/text/move_descriptions_de.h" +#endif + void sub_809D844(void) { -- cgit v1.2.3 From fee28d4e554d229ddf2585bd103a52953f7cc566 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 21:17:39 -0800 Subject: Migrate nature_names to src/data/text --- src/data/text/move_descriptions_de.h | 1418 +++++++++++++++++----------------- src/data/text/move_descriptions_en.h | 1416 ++++++++++++++++----------------- src/data/text/nature_names_de.h | 53 ++ src/data/text/nature_names_en.h | 53 ++ src/pokemon/pokemon_summary_screen.c | 2 + 5 files changed, 1525 insertions(+), 1417 deletions(-) create mode 100644 src/data/text/nature_names_de.h create mode 100644 src/data/text/nature_names_en.h (limited to 'src') diff --git a/src/data/text/move_descriptions_de.h b/src/data/text/move_descriptions_de.h index cb681f6d7..37f1ea410 100644 --- a/src/data/text/move_descriptions_de.h +++ b/src/data/text/move_descriptions_de.h @@ -1,1769 +1,1769 @@ -static const u8 gMoveDescription_Pound[] = _( +static const u8 MoveDescription_Pound[] = _( "Ein Hieb mit den Vorder-\n" "beinen oder dem Schweif."); -static const u8 gMoveDescription_KarateChop[] = _( +static const u8 MoveDescription_KarateChop[] = _( "Gute Möglichkeit, einen\n" "Volltreffer zu landen."); -static const u8 gMoveDescription_DoubleSlap[] = _( +static const u8 MoveDescription_DoubleSlap[] = _( "Trifft den Gegner 2 - 5-mal\n" "hintereinander."); -static const u8 gMoveDescription_CometPunch[] = _( +static const u8 MoveDescription_CometPunch[] = _( "Trifft den Gegner 2 - 5-mal\n" "hintereinander."); -static const u8 gMoveDescription_MegaPunch[] = _( +static const u8 MoveDescription_MegaPunch[] = _( "Ein unglaublich kräftiger\n" "Hieb."); -static const u8 gMoveDescription_PayDay[] = _( +static const u8 MoveDescription_PayDay[] = _( "Wirft Münzen auf Gegner.\n" "Geld wird erstattet."); -static const u8 gMoveDescription_FirePunch[] = _( +static const u8 MoveDescription_FirePunch[] = _( "Schlag, der dem Gegner evtl.\n" "Verbrennungen zufügt."); -static const u8 gMoveDescription_IcePunch[] = _( +static const u8 MoveDescription_IcePunch[] = _( "Ein Schlag, der den Gegner\n" "evtl. einfriert."); -static const u8 gMoveDescription_ThunderPunch[] = _( +static const u8 MoveDescription_ThunderPunch[] = _( "Schlag, der den Gegner evtl.\n" "paralysiert."); -static const u8 gMoveDescription_Scratch[] = _( +static const u8 MoveDescription_Scratch[] = _( "Der Gegner wird mit\n" "scharfen Klauen zerkratzt."); -static const u8 gMoveDescription_ViceGrip[] = _( +static const u8 MoveDescription_ViceGrip[] = _( "Umklammert den Gegner mit\n" "großen, kräftigen Zangen."); -static const u8 gMoveDescription_Guillotine[] = _( +static const u8 MoveDescription_Guillotine[] = _( "Kräftige Scheren-Attacke.\n" "Führt evtl. zum K.O."); -static const u8 gMoveDescription_RazorWind[] = _( +static const u8 MoveDescription_RazorWind[] = _( "Eine Attacke, die auf 2\n" "Runden basiert."); -static const u8 gMoveDescription_SwordsDance[] = _( +static const u8 MoveDescription_SwordsDance[] = _( "Erhöht den Angriffs-Wert\n" "drastisch."); -static const u8 gMoveDescription_Cut[] = _( +static const u8 MoveDescription_Cut[] = _( "Trifft den Gegner mit\n" "Klauen, Scheren o. ä."); -static const u8 gMoveDescription_Gust[] = _( +static const u8 MoveDescription_Gust[] = _( "Trifft den Gegner mit Wind-\n" "stoß durch Flügelschlag."); -static const u8 gMoveDescription_WingAttack[] = _( +static const u8 MoveDescription_WingAttack[] = _( "Trifft den Gegner mit weit\n" "gespreizten Flügeln."); -static const u8 gMoveDescription_Whirlwind[] = _( +static const u8 MoveDescription_Whirlwind[] = _( "Weht Gegner weg und be-\n" "endet den Kampf in Wildnis."); -static const u8 gMoveDescription_Fly[] = _( +static const u8 MoveDescription_Fly[] = _( "Steigt empor in der 1. Runde\n" "und trifft Gegner in der 2."); -static const u8 gMoveDescription_Bind[] = _( +static const u8 MoveDescription_Bind[] = _( "Umklammert und trifft den\n" "Gegner 2 - 5-mal."); -static const u8 gMoveDescription_Slam[] = _( +static const u8 MoveDescription_Slam[] = _( "Schlag mit einem langen\n" "Schweif, einer Ranke o. ä."); -static const u8 gMoveDescription_VineWhip[] = _( +static const u8 MoveDescription_VineWhip[] = _( "Peitschenähnlicher Schlag\n" "mit Ranken."); -static const u8 gMoveDescription_Stomp[] = _( +static const u8 MoveDescription_Stomp[] = _( "Stampfen mit Fuß. Gegner\n" "schreckt evtl. zurück."); -static const u8 gMoveDescription_DoubleKick[] = _( +static const u8 MoveDescription_DoubleKick[] = _( "Doppeltritt. Der Gegner\n" "wird zweimal getroffen."); -static const u8 gMoveDescription_MegaKick[] = _( - "Ein extrem heftiger Tritt.$"static const u8 gMoveDescription_JumpKick[] = (); +static const u8 MoveDescription_MegaKick[] = _( + "Ein extrem heftiger Tritt.$"static const u8 MoveDescription_JumpKick[] = (); "Sprung-Tritt. Selbstschä-\n" "digung bei Misserfolg."); -static const u8 gMoveDescription_RollingKick[] = _( +static const u8 MoveDescription_RollingKick[] = _( "Schneller Tritt aus der\n" "Drehung."); -static const u8 gMoveDescription_SandAttack[] = _( +static const u8 MoveDescription_SandAttack[] = _( "Senkt Genauigkeit des Geg-\n" "ners durch Sand."); -static const u8 gMoveDescription_Headbutt[] = _( +static const u8 MoveDescription_Headbutt[] = _( "Rammt den Gegner und lässt\n" "ihn evtl. zurückschrecken."); -static const u8 gMoveDescription_HornAttack[] = _( +static const u8 MoveDescription_HornAttack[] = _( "Spießt den Gegner mit\n" "spitzen Hörnern auf."); -static const u8 gMoveDescription_FuryAttack[] = _( +static const u8 MoveDescription_FuryAttack[] = _( "Spießt den Gegner 2 - 5-mal\n" "mit spitzen Hörnern auf."); -static const u8 gMoveDescription_HornDrill[] = _( +static const u8 MoveDescription_HornDrill[] = _( "K.O.-Attacke, die ein Horn\n" "als Bohrer einsetzt."); -static const u8 gMoveDescription_Tackle[] = _( +static const u8 MoveDescription_Tackle[] = _( "Trifft den Gegner mit vollem\n" "Körpereinsatz."); -static const u8 gMoveDescription_BodySlam[] = _( +static const u8 MoveDescription_BodySlam[] = _( "Körper-Ramme, kann\n" "Paralyse hervorrufen."); -static const u8 gMoveDescription_Wrap[] = _( +static const u8 MoveDescription_Wrap[] = _( "Umwickelt Gegner 2 - 5-mal\n" "mit Ranken o. ä."); -static const u8 gMoveDescription_TakeDown[] = _( +static const u8 MoveDescription_TakeDown[] = _( "Rücksichtslose Attacke,\n" "mit Selbstschädigung."); -static const u8 gMoveDescription_Thrash[] = _( +static const u8 MoveDescription_Thrash[] = _( "Attacke in 2 bis 3 Runden,\n" "die Anwender verwirrt."); -static const u8 gMoveDescription_DoubleEdge[] = _( +static const u8 MoveDescription_DoubleEdge[] = _( "Lebensgefährlicher Angriff\n" "mit Selbstschädigung."); -static const u8 gMoveDescription_TailWhip[] = _( +static const u8 MoveDescription_TailWhip[] = _( "Hieb mit dem Schweif, senkt\n" "die VERT. des Gegners."); -static const u8 gMoveDescription_PoisonSting[] = _( +static const u8 MoveDescription_PoisonSting[] = _( "Angriff mit Widerhaken,\n" "kann Gegner vergiften."); -static const u8 gMoveDescription_Twineedle[] = _( +static const u8 MoveDescription_Twineedle[] = _( "Stacheln an den Vorderbei-\n" "nen treffen Gegner 2-mal."); -static const u8 gMoveDescription_PinMissile[] = _( +static const u8 MoveDescription_PinMissile[] = _( "Spitze Nadeln treffen den\n" "Gegner 2 - 5-mal."); -static const u8 gMoveDescription_Leer[] = _( +static const u8 MoveDescription_Leer[] = _( "Gegners VERT.-Wert wird\n" "durch Blick gesenkt."); -static const u8 gMoveDescription_Bite[] = _( +static const u8 MoveDescription_Bite[] = _( "Beißt zu und lässt den Geg-\n" "ner evtl. zurückschrecken."); -static const u8 gMoveDescription_Growl[] = _( +static const u8 MoveDescription_Growl[] = _( "Knurren, das den ANGR.-Wert\n" "des Gegners senkt."); -static const u8 gMoveDescription_Roar[] = _( +static const u8 MoveDescription_Roar[] = _( "Verjagt den Gegner und be-\n" "endet den Kampf in Wildnis."); -static const u8 gMoveDescription_Sing[] = _( +static const u8 MoveDescription_Sing[] = _( "Ein Lied, das den Gegner\n" "in tiefen Schlaf versetzt."); -static const u8 gMoveDescription_Supersonic[] = _( +static const u8 MoveDescription_Supersonic[] = _( "Ausstoß bizarrer Schallwel-\n" "len. Verwirrt Gegner evtl."); -static const u8 gMoveDescription_SonicBoom[] = _( +static const u8 MoveDescription_SonicBoom[] = _( "Schockwellen. Richten immer\n" "20 KP Schaden an."); -static const u8 gMoveDescription_Disable[] = _( +static const u8 MoveDescription_Disable[] = _( "Psycho-Attacke. Blockiert\n" "eine Attacke des Gegners."); -static const u8 gMoveDescription_Acid[] = _( +static const u8 MoveDescription_Acid[] = _( "Versprüht ätzende Flüssig-\n" "keit, senkt evtl. VERT."); -static const u8 gMoveDescription_Ember[] = _( +static const u8 MoveDescription_Ember[] = _( "Schwache Feuer-Attacke.\n" "Verbrennt Gegner evtl."); -static const u8 gMoveDescription_Flamethrower[] = _( +static const u8 MoveDescription_Flamethrower[] = _( "Starke Feuer-Attacke.\n" "Verbrennt Gegner evtl."); -static const u8 gMoveDescription_Mist[] = _( +static const u8 MoveDescription_Mist[] = _( "Nebel, der die Änderung der\n" "Werte verhindert."); -static const u8 gMoveDescription_WaterGun[] = _( +static const u8 MoveDescription_WaterGun[] = _( "Der Gegner wird mit Wasser\n" "bespritzt."); -static const u8 gMoveDescription_HydroPump[] = _( +static const u8 MoveDescription_HydroPump[] = _( "Spritzt Wasser mit\n" "Hochdruck auf den Gegner."); -static const u8 gMoveDescription_Surf[] = _( +static const u8 MoveDescription_Surf[] = _( "Eine riesige Welle bricht\n" "über den Gegner herein."); -static const u8 gMoveDescription_IceBeam[] = _( +static const u8 MoveDescription_IceBeam[] = _( "Gegner wird von Eisstrahl\n" "getroffen, friert evtl. ein."); -static const u8 gMoveDescription_Blizzard[] = _( +static const u8 MoveDescription_Blizzard[] = _( "Ein Schneesturm, der den\n" "Gegner einfrieren kann."); -static const u8 gMoveDescription_Psybeam[] = _( +static const u8 MoveDescription_Psybeam[] = _( "Feuert einen Strahl ab, der\n" "Gegner verwirren kann."); -static const u8 gMoveDescription_BubbleBeam[] = _( +static const u8 MoveDescription_BubbleBeam[] = _( "Versprüht Blasen, die den\n" "INIT.-Wert evtl. senken."); -static const u8 gMoveDescription_AuroraBeam[] = _( +static const u8 MoveDescription_AuroraBeam[] = _( "Regenbogenfarbener Strahl,\n" "senkt evtl. ANGR.-Wert."); -static const u8 gMoveDescription_HyperBeam[] = _( +static const u8 MoveDescription_HyperBeam[] = _( "Starke Attacke. Angreifer\n" "setzt eine Runde aus."); -static const u8 gMoveDescription_Peck[] = _( +static const u8 MoveDescription_Peck[] = _( "Greift Gegner mit dem\n" "Schnabel an."); -static const u8 gMoveDescription_DrillPeck[] = _( +static const u8 MoveDescription_DrillPeck[] = _( "Attacke, bei der der Schna-\n" "bel als Bohrer dient."); -static const u8 gMoveDescription_Submission[] = _( +static const u8 MoveDescription_Submission[] = _( "Rücksichtsloser Rempler. \n" "Schädigt auch Angreifer."); -static const u8 gMoveDescription_LowKick[] = _( +static const u8 MoveDescription_LowKick[] = _( "Tritt, der massigen Gegnern\n" "mehr Schaden zufügt."); -static const u8 gMoveDescription_Counter[] = _( +static const u8 MoveDescription_Counter[] = _( "Kontert physischen Tref-\n" "fer mit doppelter Kraft."); -static const u8 gMoveDescription_SeismicToss[] = _( +static const u8 MoveDescription_SeismicToss[] = _( "Richtet Schaden gemäß\n" "Level d. Angreifers an."); -static const u8 gMoveDescription_Strength[] = _( +static const u8 MoveDescription_Strength[] = _( "Erzeugt enorme Kraft und\n" "rammt den Gegner."); -static const u8 gMoveDescription_Absorb[] = _( +static const u8 MoveDescription_Absorb[] = _( "Attacke, die die Hälfte des\n" "Schadens absorbiert."); -static const u8 gMoveDescription_MegaDrain[] = _( +static const u8 MoveDescription_MegaDrain[] = _( "Attacke, die die Hälfte des\n" "Schadens absorbiert."); -static const u8 gMoveDescription_LeechSeed[] = _( +static const u8 MoveDescription_LeechSeed[] = _( "Gegner wird bepflanzt und\n" "verliert jede Runde KP."); -static const u8 gMoveDescription_Growth[] = _( +static const u8 MoveDescription_Growth[] = _( "Der Körper wächst und\n" "SPEZ. ANGR. wird erhöht."); -static const u8 gMoveDescription_RazorLeaf[] = _( +static const u8 MoveDescription_RazorLeaf[] = _( "Trifft Gegner mit Blättern.\n" "Hohe Volltrefferquote."); -static const u8 gMoveDescription_SolarBeam[] = _( +static const u8 MoveDescription_SolarBeam[] = _( "Absorbiert Licht in der 1.\n" "Runde, 2. Runde Angriff."); -static const u8 gMoveDescription_PoisonPowder[] = _( +static const u8 MoveDescription_PoisonPowder[] = _( "Verstreut giftigen Puder,\n" "der Gegner vergiften kann."); -static const u8 gMoveDescription_StunSpore[] = _( +static const u8 MoveDescription_StunSpore[] = _( "Verstreut Puder, der den\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_SleepPowder[] = _( +static const u8 MoveDescription_SleepPowder[] = _( "Verstreut Puder, der Geg.\n" "evtl. in Schlaf versetzt."); -static const u8 gMoveDescription_PetalDance[] = _( +static const u8 MoveDescription_PetalDance[] = _( "Angriff in 2-3 Runden.\n" "Angreifer wird verwirrt."); -static const u8 gMoveDescription_StringShot[] = _( +static const u8 MoveDescription_StringShot[] = _( "Umwickelt Gegner mit Faden\n" "und senkt INIT.-Wert."); -static const u8 gMoveDescription_DragonRage[] = _( +static const u8 MoveDescription_DragonRage[] = _( "Stößt Schockwellen aus, die\n" "40 KP Schaden anrichten."); -static const u8 gMoveDescription_FireSpin[] = _( +static const u8 MoveDescription_FireSpin[] = _( "Schließt Gegner für 2-5\n" "Runden in Feuerkreis ein."); -static const u8 gMoveDescription_ThunderShock[] = _( +static const u8 MoveDescription_ThunderShock[] = _( "Elektro-Attacke. Gegner\n" "evtl. paralysiert."); -static const u8 gMoveDescription_Thunderbolt[] = _( +static const u8 MoveDescription_Thunderbolt[] = _( "Starke Elektro-Attacke,\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_ThunderWave[] = _( +static const u8 MoveDescription_ThunderWave[] = _( "Ein schwacher Stromstoß,\n" "der den Gegner paralysiert."); -static const u8 gMoveDescription_Thunder[] = _( +static const u8 MoveDescription_Thunder[] = _( "Elektro-Attacke, die den\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_RockThrow[] = _( +static const u8 MoveDescription_RockThrow[] = _( "Wirft kleine Steine auf den\n" "Gegner."); -static const u8 gMoveDescription_Earthquake[] = _( +static const u8 MoveDescription_Earthquake[] = _( "Mächtiges Beben. Ist bei\n" "fliegenden Feinden nutzlos."); -static const u8 gMoveDescription_Fissure[] = _( +static const u8 MoveDescription_Fissure[] = _( "Sofort-K.O. Wirft Gegner\n" "in Gebirgsspalte."); -static const u8 gMoveDescription_Dig[] = _( +static const u8 MoveDescription_Dig[] = _( "Gräbt sich in der 1. Runde\n" "ein und trifft in der 2."); -static const u8 gMoveDescription_Toxic[] = _( +static const u8 MoveDescription_Toxic[] = _( "Vergiftet den Gegner mit \n" "einem starken Toxin."); -static const u8 gMoveDescription_Confusion[] = _( +static const u8 MoveDescription_Confusion[] = _( "Psycho-Attacke, die den\n" "Gegner evtl. verwirrt."); -static const u8 gMoveDescription_Psychic[] = _( +static const u8 MoveDescription_Psychic[] = _( "Starke Psycho-Attacke, die\n" "evtl. SPEZ. VERT. senkt."); -static const u8 gMoveDescription_Hypnosis[] = _( +static const u8 MoveDescription_Hypnosis[] = _( "Hypno-Attacke, die Gegner\n" "evtl. in Schlaf versetzt."); -static const u8 gMoveDescription_Meditate[] = _( +static const u8 MoveDescription_Meditate[] = _( "Friedliche Meditation, um\n" "ANGR.-Wert zu steigern."); -static const u8 gMoveDescription_Agility[] = _( +static const u8 MoveDescription_Agility[] = _( "Entspannt den Körper, um\n" "INIT.-Wert. zu steigern."); -static const u8 gMoveDescription_QuickAttack[] = _( +static const u8 MoveDescription_QuickAttack[] = _( "Sehr schneller Angriff mit\n" "Erstschlaggarantie."); -static const u8 gMoveDescription_Rage[] = _( +static const u8 MoveDescription_Rage[] = _( "Erhöht ANGR. des Anwenders\n" "bei jedem gegn. Treffer."); -static const u8 gMoveDescription_Teleport[] = _( +static const u8 MoveDescription_Teleport[] = _( "Psycho-Angriff, um sofort\n" "aus einem Kampf zu fliehen."); -static const u8 gMoveDescription_NightShade[] = _( +static const u8 MoveDescription_NightShade[] = _( "Richtet Schaden gemäß\n" "Level d. Angreifers an."); -static const u8 gMoveDescription_Mimic[] = _( +static const u8 MoveDescription_Mimic[] = _( "Kopiert eine zuvor ausge-\n" "führte Attacke d. Gegners."); -static const u8 gMoveDescription_Screech[] = _( +static const u8 MoveDescription_Screech[] = _( "Stößt einen Schrei aus, um\n" "gegn. VERT. zu senken."); -static const u8 gMoveDescription_DoubleTeam[] = _( +static const u8 MoveDescription_DoubleTeam[] = _( "Erzeugt Ebenbilder, um \n" "Fluchtwert zu erhöhen."); -static const u8 gMoveDescription_Recover[] = _( +static const u8 MoveDescription_Recover[] = _( "Max. KP des Anwenders w.\n" "bis zur Hälfte aufgefüllt."); -static const u8 gMoveDescription_Harden[] = _( +static const u8 MoveDescription_Harden[] = _( "Stärkt die Muskulatur und\n" "erhöht VERT.-Wert."); -static const u8 gMoveDescription_Minimize[] = _( +static const u8 MoveDescription_Minimize[] = _( "Anwender schrumpft, um\n" "Fluchtwert zu erhöhen."); -static const u8 gMoveDescription_Smokescreen[] = _( +static const u8 MoveDescription_Smokescreen[] = _( "Senkt Genauigkeit d. Geg-\n" "ners mit Rauch, Tinte o. ä."); -static const u8 gMoveDescription_ConfuseRay[] = _( +static const u8 MoveDescription_ConfuseRay[] = _( "Ein fieser Strahl, der den\n" "Gegner verwirrt."); -static const u8 gMoveDescription_Withdraw[] = _( +static const u8 MoveDescription_Withdraw[] = _( "Rückzug in den harten\n" "Panzer. Erhöht VERT.-Wert."); -static const u8 gMoveDescription_DefenseCurl[] = _( +static const u8 MoveDescription_DefenseCurl[] = _( "Verbirgt Schwächen durch\n" "Einrollen, VERT.-Wert hoch."); -static const u8 gMoveDescription_Barrier[] = _( +static const u8 MoveDescription_Barrier[] = _( "Erzeugt Barriere, die den\n" "VERT.-Wert stark erhöht."); -static const u8 gMoveDescription_LightScreen[] = _( +static const u8 MoveDescription_LightScreen[] = _( "Erzeugt Lichtwand u. senkt\n" "SPEZ. ANGR.-Schaden."); -static const u8 gMoveDescription_Haze[] = _( +static const u8 MoveDescription_Haze[] = _( "Erzeugt dunklen Dunst.\n" "Löscht alle Statusänder."); -static const u8 gMoveDescription_Reflect[] = _( +static const u8 MoveDescription_Reflect[] = _( "Erzeugt Lichtwand, schützt\n" "teilweise vor phys. Angr."); -static const u8 gMoveDescription_FocusEnergy[] = _( +static const u8 MoveDescription_FocusEnergy[] = _( "Bündelt Kraft. Volltreffer-\n" "chance wird erhöht."); -static const u8 gMoveDescription_Bide[] = _( +static const u8 MoveDescription_Bide[] = _( "Erträgt 2 Runden Angriffe,\n" "schlägt doppelt zurück."); -static const u8 gMoveDescription_Metronome[] = _( +static const u8 MoveDescription_Metronome[] = _( "Bewegt Finger und wählt\n" "PKMN-Attacke zufällig aus."); -static const u8 gMoveDescription_MirrorMove[] = _( +static const u8 MoveDescription_MirrorMove[] = _( "Erwidert gegn. Angriff mit\n" "derselben Attacke."); -static const u8 gMoveDescription_SelfDestruct[] = _( +static const u8 MoveDescription_SelfDestruct[] = _( "Richtet großen Schaden an.\n" "Anwender wird besiegt."); -static const u8 gMoveDescription_EggBomb[] = _( +static const u8 MoveDescription_EggBomb[] = _( "Ein Ei wird auf den Gegner\n" "abgefeuert."); -static const u8 gMoveDescription_Lick[] = _( +static const u8 MoveDescription_Lick[] = _( "Leck-Attacke mit Zunge.\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_Smog[] = _( +static const u8 MoveDescription_Smog[] = _( "Angriff mit Gas. Gegner wird\n" "evtl. vergiftet."); -static const u8 gMoveDescription_Sludge[] = _( +static const u8 MoveDescription_Sludge[] = _( "Wirft Schlamm auf Gegner.\n" "Evtl. Vergiftung."); -static const u8 gMoveDescription_BoneClub[] = _( +static const u8 MoveDescription_BoneClub[] = _( "Schlägt Gegner mit Keule\n" "und verschreckt ihn evtl."); -static const u8 gMoveDescription_FireBlast[] = _( +static const u8 MoveDescription_FireBlast[] = _( "Feuersbrunst, die alles ver-\n" "sengt. Verbrennt Geg. evtl."); -static const u8 gMoveDescription_Waterfall[] = _( +static const u8 MoveDescription_Waterfall[] = _( "Attacke basiert auf Tempo.\n" "Erklimmt Wasserfälle."); -static const u8 gMoveDescription_Clamp[] = _( +static const u8 MoveDescription_Clamp[] = _( "Fängt und drückt Gegner\n" "für 2-5 Runden."); -static const u8 gMoveDescription_Swift[] = _( +static const u8 MoveDescription_Swift[] = _( "Verschießt sternförmige\n" "Strahlen. Treffergarantie!"); -static const u8 gMoveDescription_SkullBash[] = _( +static const u8 MoveDescription_SkullBash[] = _( "Zieht Kopf ein und greift in\n" "der nächsten Runde an."); -static const u8 gMoveDescription_SpikeCannon[] = _( +static const u8 MoveDescription_SpikeCannon[] = _( "Verschießt spitze Stacheln\n" "und trifft 2 - 5-mal."); -static const u8 gMoveDescription_Constrict[] = _( +static const u8 MoveDescription_Constrict[] = _( "Schmerzvoller Klammergriff.\n" "Senkt evtl. INIT.-Wert."); -static const u8 gMoveDescription_Amnesia[] = _( +static const u8 MoveDescription_Amnesia[] = _( "Gedächtnisverlust, der\n" "SPEZ. VERT. deutlich erhöht."); -static const u8 gMoveDescription_Kinesis[] = _( +static const u8 MoveDescription_Kinesis[] = _( "Lenkt Gegner ab und senkt\n" "evtl. seine Genauigkeit."); -static const u8 gMoveDescription_SoftBoiled[] = _( +static const u8 MoveDescription_SoftBoiled[] = _( "Max. KP des Anwenders w.\n" "bis zur Hälfte aufgefüllt."); -static const u8 gMoveDescription_HiJumpKick[] = _( +static const u8 MoveDescription_HiJumpKick[] = _( "Sprung-Tritt mit Knie. Miss-\n" "erfolg verletzt Anwender."); -static const u8 gMoveDescription_Glare[] = _( +static const u8 MoveDescription_Glare[] = _( "Schüchtert Gegner ein, so\n" "dass er paralysiert ist."); -static const u8 gMoveDescription_DreamEater[] = _( +static const u8 MoveDescription_DreamEater[] = _( "Schlafendem Gegner wird\n" "halber Schaden abgezogen."); -static const u8 gMoveDescription_PoisonGas[] = _( +static const u8 MoveDescription_PoisonGas[] = _( "Hüllt Gegner in giftiges Gas\n" "ein, kann vergiften."); -static const u8 gMoveDescription_Barrage[] = _( +static const u8 MoveDescription_Barrage[] = _( "Wirft 2 - 5-mal runde Gegen-\n" "stände auf den Gegner."); -static const u8 gMoveDescription_LeechLife[] = _( +static const u8 MoveDescription_LeechLife[] = _( "Ein Angriff, der die Hälfte\n" "des Schadens saugt."); -static const u8 gMoveDescription_LovelyKiss[] = _( +static const u8 MoveDescription_LovelyKiss[] = _( "Fordert Kuss mit bösem\n" "Blick. Evtl. Schlaf."); -static const u8 gMoveDescription_SkyAttack[] = _( +static const u8 MoveDescription_SkyAttack[] = _( "Sucht nach Schwächen,\n" "Treffer nächste Runde."); -static const u8 gMoveDescription_Transform[] = _( +static const u8 MoveDescription_Transform[] = _( "Ändert die Anwenderzellen\n" "für ein Ebenbild d. Gegners."); -static const u8 gMoveDescription_Bubble[] = _( +static const u8 MoveDescription_Bubble[] = _( "Angriff mit Blasen. INIT.-\n" "Wert wird evtl. gesenkt."); -static const u8 gMoveDescription_DizzyPunch[] = _( +static const u8 MoveDescription_DizzyPunch[] = _( "Rhythmischer Schlag, der\n" "den Gegner verwirren kann."); -static const u8 gMoveDescription_Spore[] = _( +static const u8 MoveDescription_Spore[] = _( "Erzeugt eine Wolke aus ein-\n" "schläfernden Sporen."); -static const u8 gMoveDescription_Flash[] = _( +static const u8 MoveDescription_Flash[] = _( "Erzeugt helles Licht, das\n" "gegn. Genauigkeit senkt."); -static const u8 gMoveDescription_Psywave[] = _( +static const u8 MoveDescription_Psywave[] = _( "Psycho-Welle mit unter-\n" "schiedlicher Intensität."); -static const u8 gMoveDescription_Splash[] = _( +static const u8 MoveDescription_Splash[] = _( "Nur ein Platscher..., der\n" "überhaupt nichts bewirkt."); -static const u8 gMoveDescription_AcidArmor[] = _( +static const u8 MoveDescription_AcidArmor[] = _( "Verflüssigt Körper d. An-\n" "wenders. Erhört VERT."); -static const u8 gMoveDescription_Crabhammer[] = _( +static const u8 MoveDescription_Crabhammer[] = _( "Schlägt mit Schere zu.\n" "Volltrefferchance hoch."); -static const u8 gMoveDescription_Explosion[] = _( +static const u8 MoveDescription_Explosion[] = _( "Richtet großen Schaden an.\n" "Anwender wird besiegt."); -static const u8 gMoveDescription_FurySwipes[] = _( +static const u8 MoveDescription_FurySwipes[] = _( "Beharkt Gegner 2 - 5-mal\n" "mit scharfen Klauen o. ä."); -static const u8 gMoveDescription_Bonemerang[] = _( +static const u8 MoveDescription_Bonemerang[] = _( "Ein Bumerang aus Knochen,\n" "der zweimal trifft."); -static const u8 gMoveDescription_Rest[] = _( +static const u8 MoveDescription_Rest[] = _( "Anwender schläft 2 Runden,\n" "KP und Status erneuert."); -static const u8 gMoveDescription_RockSlide[] = _( +static const u8 MoveDescription_RockSlide[] = _( "Schleudert riesige Felsen.\n" "Verschreckt evtl. Gegner."); -static const u8 gMoveDescription_HyperFang[] = _( +static const u8 MoveDescription_HyperFang[] = _( "Angriff mit Zähnen.\n" "Verschreckt evtl. Gegner."); -static const u8 gMoveDescription_Sharpen[] = _( +static const u8 MoveDescription_Sharpen[] = _( "Reduziert Polygonzahl und\n" "erhöht ANGR.-Wert."); -static const u8 gMoveDescription_Conversion[] = _( +static const u8 MoveDescription_Conversion[] = _( "Wandelt Typ d. Anwenders in\n" "eigenen Attacken-Typ."); -static const u8 gMoveDescription_TriAttack[] = _( +static const u8 MoveDescription_TriAttack[] = _( "Feuert 3 Arten von Strahlen\n" "gleichzeitig ab."); -static const u8 gMoveDescription_SuperFang[] = _( +static const u8 MoveDescription_SuperFang[] = _( "Greift mit scharfen Zähnen\n" "an. Halbiert gegnerische KP."); -static const u8 gMoveDescription_Slash[] = _( +static const u8 MoveDescription_Slash[] = _( "Hieb mit Klauen o. ä. Hohe\n" "Volltrefferquote."); -static const u8 gMoveDescription_Substitute[] = _( +static const u8 MoveDescription_Substitute[] = _( "Lockvogel, der 1/4 der max.\n" "KP des Anwenders besitzt."); -static const u8 gMoveDescription_Struggle[] = _( +static const u8 MoveDescription_Struggle[] = _( "Einsatz nur bei verbrauch-\n" "ten AP. Selbstschädigung!"); -static const u8 gMoveDescription_Sketch[] = _( +static const u8 MoveDescription_Sketch[] = _( "Kopiert stets den zuletzt\n" "erlittenen Angriff."); -static const u8 gMoveDescription_TripleKick[] = _( +static const u8 MoveDescription_TripleKick[] = _( "Tritt Gegner 3-mal nach-\n" "einander. Härte nimmt zu."); -static const u8 gMoveDescription_Thief[] = _( +static const u8 MoveDescription_Thief[] = _( "Kann das vom Gegner\n" "gehaltene Item stehlen."); -static const u8 gMoveDescription_SpiderWeb[] = _( +static const u8 MoveDescription_SpiderWeb[] = _( "Wickelt Gegner ein. Flucht \n" "oder Tausch unmöglich."); -static const u8 gMoveDescription_MindReader[] = _( +static const u8 MoveDescription_MindReader[] = _( "Ahnt gegnerische Aktion.\n" "Nächste Attacke trifft."); -static const u8 gMoveDescription_Nightmare[] = _( +static const u8 MoveDescription_Nightmare[] = _( "Bewirkt 1/4 Schaden pro\n" "Zug bei schlafendem Gegner."); -static const u8 gMoveDescription_FlameWheel[] = _( +static const u8 MoveDescription_FlameWheel[] = _( "Feuer-Attacke, die Gegner\n" "evtl. verbrennt."); -static const u8 gMoveDescription_Snore[] = _( +static const u8 MoveDescription_Snore[] = _( "Laute Attacke. Kann nur im\n" "Schlaf benutzt werden."); -static const u8 gMoveDescription_Curse[] = _( +static const u8 MoveDescription_Curse[] = _( "Ein Angriff, der bei GEIST-\n" "PKMN anders funktioniert."); -static const u8 gMoveDescription_Flail[] = _( +static const u8 MoveDescription_Flail[] = _( "Richtet mehr Schaden an,\n" "wenn eigene KP niedrig sind."); -static const u8 gMoveDescription_Conversion2[] = _( +static const u8 MoveDescription_Conversion2[] = _( "Anwender wird resistent\n" "gegen letzten Angr.-Typ."); -static const u8 gMoveDescription_Aeroblast[] = _( +static const u8 MoveDescription_Aeroblast[] = _( "Erzeugt ein Vakuum.\n" "Hohe Volltrefferquote."); -static const u8 gMoveDescription_CottonSpore[] = _( +static const u8 MoveDescription_CottonSpore[] = _( "Sporen heften sich an den\n" "Gegner. Senkt INIT.-Wert."); -static const u8 gMoveDescription_Reversal[] = _( +static const u8 MoveDescription_Reversal[] = _( "Richtet mehr Schaden an,\n" "wenn eigene KP niedrig sind."); -static const u8 gMoveDescription_Spite[] = _( +static const u8 MoveDescription_Spite[] = _( "AP des letzten gegner.\n" "Angriffs werden gesenkt."); -static const u8 gMoveDescription_PowderSnow[] = _( +static const u8 MoveDescription_PowderSnow[] = _( "Schnee auf Gegner, der\n" "evtl. eingefroren wird."); -static const u8 gMoveDescription_Protect[] = _( +static const u8 MoveDescription_Protect[] = _( "Weicht Angriff aus.\n" "Scheitert evtl. bei Wdh."); -static const u8 gMoveDescription_MachPunch[] = _( +static const u8 MoveDescription_MachPunch[] = _( "Schneller Hieb, der stets\n" "zuerst trifft."); -static const u8 gMoveDescription_ScaryFace[] = _( +static const u8 MoveDescription_ScaryFace[] = _( "Erschreckt mit Grimasse. \n" "INIT.-Wert sinkt deutlich."); -static const u8 gMoveDescription_FaintAttack[] = _( +static const u8 MoveDescription_FaintAttack[] = _( "Zieht Gegner heran und\n" "trifft mit Sicherheit."); -static const u8 gMoveDescription_SweetKiss[] = _( +static const u8 MoveDescription_SweetKiss[] = _( "Fordert Kuss mit süßem\n" "Blick. Verwirrt Gegner evtl."); -static const u8 gMoveDescription_BellyDrum[] = _( +static const u8 MoveDescription_BellyDrum[] = _( "Erhöht ANGR.-Wert,\n" "opfert jedoch KP."); -static const u8 gMoveDescription_SludgeBomb[] = _( +static const u8 MoveDescription_SludgeBomb[] = _( "Wirft Schlamm auf Gegner\n" "und vergiftet ihn evtl."); -static const u8 gMoveDescription_MudSlap[] = _( +static const u8 MoveDescription_MudSlap[] = _( "Wirft Gegner Matsch ins Ge-\n" "sicht. Genauigkeit sinkt."); -static const u8 gMoveDescription_Octazooka[] = _( +static const u8 MoveDescription_Octazooka[] = _( "Verschießt Tinte und senkt\n" "dadurch Genauigkeit."); -static const u8 gMoveDescription_Spikes[] = _( +static const u8 MoveDescription_Spikes[] = _( "Richtet bei Tausch Schaden\n" "mit Stacheln an."); -static const u8 gMoveDescription_ZapCannon[] = _( +static const u8 MoveDescription_ZapCannon[] = _( "Kräftige, ungenaue At-\n" "tacke, die evtl. paralysiert."); -static const u8 gMoveDescription_Foresight[] = _( +static const u8 MoveDescription_Foresight[] = _( "Verhindert Anstieg von\n" "gegnerischem Fluchtwert."); -static const u8 gMoveDescription_DestinyBond[] = _( +static const u8 MoveDescription_DestinyBond[] = _( "Wird der Angreifer besiegt,\n" "gilt das auch für d. Gegner."); -static const u8 gMoveDescription_PerishSong[] = _( +static const u8 MoveDescription_PerishSong[] = _( "Wer dieses Lied hört, wird\n" "nach 3 Runden besiegt."); -static const u8 gMoveDescription_IcyWind[] = _( +static const u8 MoveDescription_IcyWind[] = _( "Eis-Attacke, die den INIT.-\n" "Wert des Gegners senkt."); -static const u8 gMoveDescription_Detect[] = _( +static const u8 MoveDescription_Detect[] = _( "Wendet Attacken ab, Erfolg\n" "sinkt bei Wiederholung."); -static const u8 gMoveDescription_BoneRush[] = _( +static const u8 MoveDescription_BoneRush[] = _( "Greift Gegner 2 - 5-mal in\n" "Folge mit einem Knochen an."); -static const u8 gMoveDescription_LockOn[] = _( +static const u8 MoveDescription_LockOn[] = _( "Visiert Gegner an u. trifft\n" "in der nächsten Runde."); -static const u8 gMoveDescription_Outrage[] = _( +static const u8 MoveDescription_Outrage[] = _( "Wiederholt Angriff 2-3 Run-\n" "den lang. Verwirrt Anwender."); -static const u8 gMoveDescription_Sandstorm[] = _( +static const u8 MoveDescription_Sandstorm[] = _( "Erzeugt einen Sandsturm,\n" "der mehrere Runden wütet."); -static const u8 gMoveDescription_GigaDrain[] = _( +static const u8 MoveDescription_GigaDrain[] = _( "Absorbiert die Hälfte des\n" "angerichteten Schadens."); -static const u8 gMoveDescription_Endure[] = _( +static const u8 MoveDescription_Endure[] = _( "Hält jeder Attacke 1 Runde\n" "stand. 1 KP bleibt stets."); -static const u8 gMoveDescription_Charm[] = _( +static const u8 MoveDescription_Charm[] = _( "Betört den Gegner u. redu-\n" "ziert seinen ANGR. deutlich."); -static const u8 gMoveDescription_Rollout[] = _( +static const u8 MoveDescription_Rollout[] = _( "Attacke, die 5 Runden\n" "dauert. Die Härte nimmt zu."); -static const u8 gMoveDescription_FalseSwipe[] = _( +static const u8 MoveDescription_FalseSwipe[] = _( "Ein Angriff, der dem Gegner\n" "zumindest 1 KP lässt."); -static const u8 gMoveDescription_Swagger[] = _( +static const u8 MoveDescription_Swagger[] = _( "Verwirrt den Gegner und\n" "erhöht ANGR.-Wert deutlich."); -static const u8 gMoveDescription_MilkDrink[] = _( +static const u8 MoveDescription_MilkDrink[] = _( "Füllt bis zur Hälfte der max.\n" "KP des Benutzers auf."); -static const u8 gMoveDescription_Spark[] = _( +static const u8 MoveDescription_Spark[] = _( "Elektro-Hieb, der Gegner\n" "paralysieren kann."); -static const u8 gMoveDescription_FuryCutter[] = _( +static const u8 MoveDescription_FuryCutter[] = _( "Eine Attacke, deren Härte\n" "bei jedem Treffer zunimmt."); -static const u8 gMoveDescription_SteelWing[] = _( +static const u8 MoveDescription_SteelWing[] = _( "Trifft den Gegner hart mit\n" "ausgebreiteten Flügeln."); -static const u8 gMoveDescription_MeanLook[] = _( +static const u8 MoveDescription_MeanLook[] = _( "Böser Blick, der die Flucht\n" "des Gegners vereitelt."); -static const u8 gMoveDescription_Attract[] = _( +static const u8 MoveDescription_Attract[] = _( "Angriff des anderen Ge-\n" "schlechts unwahrscheinl."); -static const u8 gMoveDescription_SleepTalk[] = _( +static const u8 MoveDescription_SleepTalk[] = _( "Benutzt per Zufall eine\n" "Attacke im Schlaf."); -static const u8 gMoveDescription_HealBell[] = _( +static const u8 MoveDescription_HealBell[] = _( "Läutet beruhigend, heilt\n" "alle Status-Veränderungen."); -static const u8 gMoveDescription_Return[] = _( +static const u8 MoveDescription_Return[] = _( "Angriff, dessen Kraft bei \n" "Freundschaft größer wird."); -static const u8 gMoveDescription_Present[] = _( +static const u8 MoveDescription_Present[] = _( "Eine Bombe als Geschenk. Es\n" "kann KP wiederherstellen."); -static const u8 gMoveDescription_Frustration[] = _( +static const u8 MoveDescription_Frustration[] = _( "Die Attacke ist stärker bei\n" "verhassten TRAINERn."); -static const u8 gMoveDescription_Safeguard[] = _( +static const u8 MoveDescription_Safeguard[] = _( "Mystische Kraft, die alle\n" "Statusprobleme verhindert."); -static const u8 gMoveDescription_PainSplit[] = _( +static const u8 MoveDescription_PainSplit[] = _( "Addiert KP v. Anwender u.\n" "Gegner, teilt gerecht auf."); -static const u8 gMoveDescription_SacredFire[] = _( +static const u8 MoveDescription_SacredFire[] = _( "Mystische Feuer-Attacke, \n" "die d. Geg. evtl. verbrennt."); -static const u8 gMoveDescription_Magnitude[] = _( +static const u8 MoveDescription_Magnitude[] = _( "Ein erdbebenartiger An-\n" "griff von zufälliger Stärke."); -static const u8 gMoveDescription_DynamicPunch[] = _( +static const u8 MoveDescription_DynamicPunch[] = _( "Kräftige Attacke, die ver-\n" "wirrt, aber ungenau ist."); -static const u8 gMoveDescription_Megahorn[] = _( +static const u8 MoveDescription_Megahorn[] = _( "Brutaler Frontalangriff\n" "mit spitzen Hörnern."); -static const u8 gMoveDescription_DragonBreath[] = _( +static const u8 MoveDescription_DragonBreath[] = _( "Fegt den Gegner mit zer-\n" "störerisch heißem Atem weg."); -static const u8 gMoveDescription_BatonPass[] = _( +static const u8 MoveDescription_BatonPass[] = _( "Tauscht PKMN aus. Alle Än-\n" "derungen bleiben bestehen."); -static const u8 gMoveDescription_Encore[] = _( +static const u8 MoveDescription_Encore[] = _( "Gegner wiederholt letzten\n" "Angriff 2 - 6-mal."); -static const u8 gMoveDescription_Pursuit[] = _( +static const u8 MoveDescription_Pursuit[] = _( "Richtet großen Schaden bei\n" "Austausch des Gegners an."); -static const u8 gMoveDescription_RapidSpin[] = _( +static const u8 MoveDescription_RapidSpin[] = _( "Trifft den Gegner durch\n" "Drehen mit max. Tempo."); -static const u8 gMoveDescription_SweetScent[] = _( +static const u8 MoveDescription_SweetScent[] = _( "Lockt Gegner an und senkt\n" "seinen Fluchtwert."); -static const u8 gMoveDescription_IronTail[] = _( +static const u8 MoveDescription_IronTail[] = _( "Att. mit hartem Schweif. \n" "Senkt evtl. VERT.-Wert."); -static const u8 gMoveDescription_MetalClaw[] = _( +static const u8 MoveDescription_MetalClaw[] = _( "Klauen-Attacke. Evtl. Er-\n" "höhung d. ANGR.-Wert d. Anw."); -static const u8 gMoveDescription_VitalThrow[] = _( +static const u8 MoveDescription_VitalThrow[] = _( "Attacke stets gleich, aber\n" "mit Treffergarantie."); -static const u8 gMoveDescription_MorningSun[] = _( +static const u8 MoveDescription_MorningSun[] = _( "Füllt KP auf. Die Menge\n" "hängt vom Wetter ab."); -static const u8 gMoveDescription_Synthesis[] = _( +static const u8 MoveDescription_Synthesis[] = _( "Füllt KP auf. Die Menge\n" "hängt vom Wetter ab."); -static const u8 gMoveDescription_Moonlight[] = _( +static const u8 MoveDescription_Moonlight[] = _( "Füllt KP auf. Die Menge\n" "hängt vom Wetter ab."); -static const u8 gMoveDescription_HiddenPower[] = _( +static const u8 MoveDescription_HiddenPower[] = _( "Die Wirkung dieser Attacke\n" "hängt vom Benutzer ab."); -static const u8 gMoveDescription_CrossChop[] = _( +static const u8 MoveDescription_CrossChop[] = _( "Doppelter Hieb. Hohe \n" "Volltrefferquote."); -static const u8 gMoveDescription_Twister[] = _( +static const u8 MoveDescription_Twister[] = _( "Trifft Gegner mit\n" "heftigem Wirbelsturm."); -static const u8 gMoveDescription_RainDance[] = _( +static const u8 MoveDescription_RainDance[] = _( "Erhöht Stärke von WASSER-\n" "Attacken 5 Runden lang."); -static const u8 gMoveDescription_SunnyDay[] = _( +static const u8 MoveDescription_SunnyDay[] = _( "Erhöht Stärke von FEUER-\n" "Attacken 5 Runden lang."); -static const u8 gMoveDescription_Crunch[] = _( +static const u8 MoveDescription_Crunch[] = _( "Beißt mit Reißzähnen zu und\n" "senkt evtl. SPEZ. VERT."); -static const u8 gMoveDescription_MirrorCoat[] = _( +static const u8 MoveDescription_MirrorCoat[] = _( "Kontert d. Spezial-Attacke\n" "d. Geg. mit 2-facher Kraft."); -static const u8 gMoveDescription_PsychUp[] = _( +static const u8 MoveDescription_PsychUp[] = _( "Kopiert Effekte d. Gegners\n" "u. gibt sie dem Angreifer."); -static const u8 gMoveDescription_ExtremeSpeed[] = _( +static const u8 MoveDescription_ExtremeSpeed[] = _( "Extrem schnelle und kraft-\n" "volle Attacke."); -static const u8 gMoveDescription_AncientPower[] = _( +static const u8 MoveDescription_AncientPower[] = _( "Ein Angriff, der alle\n" "Status-Werte erhöhen kann."); -static const u8 gMoveDescription_ShadowBall[] = _( +static const u8 MoveDescription_ShadowBall[] = _( "Bewirft Gegner und senkt\n" "evtl. SPEZ. VERT."); -static const u8 gMoveDescription_FutureSight[] = _( +static const u8 MoveDescription_FutureSight[] = _( "Stärkt innere Kraft. Trifft\n" "2 Runden später."); -static const u8 gMoveDescription_RockSmash[] = _( +static const u8 MoveDescription_RockSmash[] = _( "Zertrümmernder Angriff, \n" "der evtl. VERT.-Wert senkt."); -static const u8 gMoveDescription_Whirlpool[] = _( +static const u8 MoveDescription_Whirlpool[] = _( "Hält Gegner 2-5 Züge in\n" "einem Strudel gefangen."); -static const u8 gMoveDescription_BeatUp[] = _( +static const u8 MoveDescription_BeatUp[] = _( "Ruft POKéMON hinzu, um an\n" "dem Angriff teilzuhaben."); -static const u8 gMoveDescription_FakeOut[] = _( +static const u8 MoveDescription_FakeOut[] = _( "Trifft schon mit dem ersten\n" "Schlag. Verjagt Gegner evtl."); -static const u8 gMoveDescription_Uproar[] = _( +static const u8 MoveDescription_Uproar[] = _( "Erzeugt für 2-5 Züge einen\n" "Aufruhr. Verhindert Schlaf."); -static const u8 gMoveDescription_Stockpile[] = _( +static const u8 MoveDescription_Stockpile[] = _( "Lädt Kraft für bis zu 3\n" "Runden auf."); -static const u8 gMoveDescription_SpitUp[] = _( +static const u8 MoveDescription_SpitUp[] = _( "Entlädt gehortete Kraft.\n" "Je mehr, desto besser."); -static const u8 gMoveDescription_Swallow[] = _( +static const u8 MoveDescription_Swallow[] = _( "Absorbiert gehortete\n" "Kraft. Stellt KP wieder her."); -static const u8 gMoveDescription_HeatWave[] = _( +static const u8 MoveDescription_HeatWave[] = _( "Gegner wird von heißem Atem\n" "getroffen. Verbrennt evtl."); -static const u8 gMoveDescription_Hail[] = _( +static const u8 MoveDescription_Hail[] = _( "Erzeugt Hagelsturm, der in\n" "jeder Runde trifft."); -static const u8 gMoveDescription_Torment[] = _( +static const u8 MoveDescription_Torment[] = _( "Quält Gegner u. verhindert\n" "Wdh. eines Angriffs."); -static const u8 gMoveDescription_Flatter[] = _( +static const u8 MoveDescription_Flatter[] = _( "Verwirrt den Gegner, erhöht\n" "aber dessen SPEZ. ANGR."); -static const u8 gMoveDescription_WillOWisp[] = _( +static const u8 MoveDescription_WillOWisp[] = _( "Fügt dem Gegner \n" "Verbrennungen zu."); -static const u8 gMoveDescription_Memento[] = _( +static const u8 MoveDescription_Memento[] = _( "Der Benutzer ist besiegt\n" "und senkt die gegn. Werte."); -static const u8 gMoveDescription_Facade[] = _( +static const u8 MoveDescription_Facade[] = _( "Erhöht ANGR. nach Verbren-\n" "nung, Paralyse o. Vergift."); -static const u8 gMoveDescription_FocusPunch[] = _( +static const u8 MoveDescription_FocusPunch[] = _( "Angriff, der später trifft.\n" "Ben. schreckt evtl. zurück."); -static const u8 gMoveDescription_SmellingSalt[] = _( +static const u8 MoveDescription_SmellingSalt[] = _( "Effektiv geg. paralysierte\n" "Gegner. Heilt sie aber auch."); -static const u8 gMoveDescription_FollowMe[] = _( +static const u8 MoveDescription_FollowMe[] = _( "Zieht Aufmerksamkeit an.\n" "Gegner greift nur Anw. an."); -static const u8 gMoveDescription_NaturePower[] = _( +static const u8 MoveDescription_NaturePower[] = _( "Die Elementklasse des\n" "Angriffs hängt vom Ort ab."); -static const u8 gMoveDescription_Charge[] = _( +static const u8 MoveDescription_Charge[] = _( "Lädt Energie für den kom-\n" "menden Elektro-Angr. auf."); -static const u8 gMoveDescription_Taunt[] = _( +static const u8 MoveDescription_Taunt[] = _( "Legt den Gegner rein. Er\n" "benutzt nur noch Angriffe."); -static const u8 gMoveDescription_HelpingHand[] = _( +static const u8 MoveDescription_HelpingHand[] = _( "Steigert die Kraft der An-\n" "griffe des Getroffenen."); -static const u8 gMoveDescription_Trick[] = _( +static const u8 MoveDescription_Trick[] = _( "Betrügt beim Handel\n" "mit Gegenständen."); -static const u8 gMoveDescription_RolePlay[] = _( +static const u8 MoveDescription_RolePlay[] = _( "Parodiert Gegner u. kopiert\n" "seine Spezialfähigkeiten."); -static const u8 gMoveDescription_Wish[] = _( +static const u8 MoveDescription_Wish[] = _( "Ein Wunsch, der KP auffüllt.\n" "Die Erfüllung braucht Zeit."); -static const u8 gMoveDescription_Assist[] = _( +static const u8 MoveDescription_Assist[] = _( "Greift zufällig mit einem\n" "Angriff d. Partners an."); -static const u8 gMoveDescription_Ingrain[] = _( +static const u8 MoveDescription_Ingrain[] = _( "Verwurzelung füllt KP auf.\n" "Austausch unmöglich."); -static const u8 gMoveDescription_Superpower[] = _( +static const u8 MoveDescription_Superpower[] = _( "Steigert Stärke deutlich,\n" "senkt aber Status-Werte."); -static const u8 gMoveDescription_MagicCoat[] = _( +static const u8 MoveDescription_MagicCoat[] = _( "Gibt Spezialeffekte zurück\n" "an Benutzer."); -static const u8 gMoveDescription_Recycle[] = _( +static const u8 MoveDescription_Recycle[] = _( "Recycling eines\n" "verwendeten Items."); -static const u8 gMoveDescription_Revenge[] = _( +static const u8 MoveDescription_Revenge[] = _( "Attacke wird stärker, wenn\n" "Anwender Schaden nimmt."); -static const u8 gMoveDescription_BrickBreak[] = _( +static const u8 MoveDescription_BrickBreak[] = _( "Durchbricht Barrieren und\n" "verursacht Schaden."); -static const u8 gMoveDescription_Yawn[] = _( +static const u8 MoveDescription_Yawn[] = _( "Gegner gähnt und schläft\n" "in der nächsten Runde ein."); -static const u8 gMoveDescription_KnockOff[] = _( +static const u8 MoveDescription_KnockOff[] = _( "Schlägt Gegner Item weg.\n" "Vereitelt so den Gebrauch."); -static const u8 gMoveDescription_Endeavor[] = _( +static const u8 MoveDescription_Endeavor[] = _( "Wird stärker, wenn Anw.-KP\n" "geringer als Gegner-KP ist."); -static const u8 gMoveDescription_Eruption[] = _( +static const u8 MoveDescription_Eruption[] = _( "Je höher KP des Benutzers,\n" "desto mehr Schaden."); -static const u8 gMoveDescription_SkillSwap[] = _( +static const u8 MoveDescription_SkillSwap[] = _( "Anw. tauscht Spezial-\n" "fähigkeit mit POKéMON."); -static const u8 gMoveDescription_Imprison[] = _( +static const u8 MoveDescription_Imprison[] = _( "Hindert Gegner an Atta-\n" "cken, die d. Benutzer kennt."); -static const u8 gMoveDescription_Refresh[] = _( +static const u8 MoveDescription_Refresh[] = _( "Kuriert Vergiftungen, Para-\n" "lyse und Verbrennung."); -static const u8 gMoveDescription_Grudge[] = _( +static const u8 MoveDescription_Grudge[] = _( "Wenn Anw. bes., werden AP\n" "der Finalattacke gelöscht."); -static const u8 gMoveDescription_Snatch[] = _( +static const u8 MoveDescription_Snatch[] = _( "Immunität geg. den Effekt\n" "d. nächsten gegn. Angriffs."); -static const u8 gMoveDescription_SecretPower[] = _( +static const u8 MoveDescription_SecretPower[] = _( "Angriff, dessen Auswirkung\n" "abhängig vom Ort ist."); -static const u8 gMoveDescription_Dive[] = _( +static const u8 MoveDescription_Dive[] = _( "Taucht in der 1. Runde\n" "unter u. trifft in der 2."); -static const u8 gMoveDescription_ArmThrust[] = _( +static const u8 MoveDescription_ArmThrust[] = _( "Schläge mit geradem Arm, die\n" "Gegner 2 - 5-mal treffen."); -static const u8 gMoveDescription_Camouflage[] = _( +static const u8 MoveDescription_Camouflage[] = _( "Die Elementklasse des\n" "POKéMON hängt vom Ort ab."); -static const u8 gMoveDescription_TailGlow[] = _( +static const u8 MoveDescription_TailGlow[] = _( "Ein blinkendes Licht. SPEZ.\n" "ANGR. wird deutlich erhöht."); -static const u8 gMoveDescription_LusterPurge[] = _( +static const u8 MoveDescription_LusterPurge[] = _( "Angriff mit grellem Licht.\n" "Senkt evtl. SPEZ. VERT."); -static const u8 gMoveDescription_MistBall[] = _( +static const u8 MoveDescription_MistBall[] = _( "Angriff m. Daunengestöber,\n" "Senkt evtl. SPEZ. ANGR."); -static const u8 gMoveDescription_FeatherDance[] = _( +static const u8 MoveDescription_FeatherDance[] = _( "Hüllt Gegner in Daunen und\n" "senkt ANGR.-Wert deutlich."); -static const u8 gMoveDescription_TeeterDance[] = _( +static const u8 MoveDescription_TeeterDance[] = _( "Verwirrt alle POKéMON im \n" "Kampf."); -static const u8 gMoveDescription_BlazeKick[] = _( +static const u8 MoveDescription_BlazeKick[] = _( "Hohe Volltrefferquote. Ver-\n" "ursacht evtl. Verbrennung."); -static const u8 gMoveDescription_MudSport[] = _( +static const u8 MoveDescription_MudSport[] = _( "Bedeckt Anw. mit Lehm u. er-\n" "höht Schutz geg. Elek.-Att."); -static const u8 gMoveDescription_IceBall[] = _( +static const u8 MoveDescription_IceBall[] = _( "Angriff für 5 Runden. \n" "Stärker, wenn Treffer."); -static const u8 gMoveDescription_NeedleArm[] = _( +static const u8 MoveDescription_NeedleArm[] = _( "Angriff mit dornigen Armen. \n" "Geg. schreckt evtl. zurück."); -static const u8 gMoveDescription_SlackOff[] = _( +static const u8 MoveDescription_SlackOff[] = _( "Durch Müßiggang wird die\n" "Hälfte d. max. KP aufgefüllt."); -static const u8 gMoveDescription_HyperVoice[] = _( +static const u8 MoveDescription_HyperVoice[] = _( "Laute Attacke mit Schall-\n" "wellen."); -static const u8 gMoveDescription_PoisonFang[] = _( +static const u8 MoveDescription_PoisonFang[] = _( "Angriff mit Reißzähnen. \n" "Gegner wird evtl. vergiftet."); -static const u8 gMoveDescription_CrushClaw[] = _( +static const u8 MoveDescription_CrushClaw[] = _( "Angriff mit scharfen Klau-\n" "en. Senkt evtl. VERT.-Wert."); -static const u8 gMoveDescription_BlastBurn[] = _( +static const u8 MoveDescription_BlastBurn[] = _( "Starker Angriff. Angreifer\n" "muss eine Runde aussetzen."); -static const u8 gMoveDescription_HydroCannon[] = _( +static const u8 MoveDescription_HydroCannon[] = _( "Starker Angriff. Angreifer\n" "muss eine Runde aussetzen."); -static const u8 gMoveDescription_MeteorMash[] = _( +static const u8 MoveDescription_MeteorMash[] = _( "Ein Schlag wie ein Meteor.\n" "Erhöht evtl. ANGR.-Wert."); -static const u8 gMoveDescription_Astonish[] = _( +static const u8 MoveDescription_Astonish[] = _( "Angriff, der Gegner evtl.\n" "zurückschrecken lässt."); -static const u8 gMoveDescription_WeatherBall[] = _( +static const u8 MoveDescription_WeatherBall[] = _( "Elementkl. u. Stärke der At-\n" "tacke sind wetterabhängig."); -static const u8 gMoveDescription_Aromatherapy[] = _( +static const u8 MoveDescription_Aromatherapy[] = _( "Heilt alle Status-Probleme\n" "mit beruhigendem Duft."); -static const u8 gMoveDescription_FakeTears[] = _( +static const u8 MoveDescription_FakeTears[] = _( "Täuscht Weinen vor, um\n" "gegn. SPEZ. VERT. zu senken."); -static const u8 gMoveDescription_AirCutter[] = _( +static const u8 MoveDescription_AirCutter[] = _( "Greift mit heftigem Wind an.\n" "Hohe Volltrefferquote."); -static const u8 gMoveDescription_Overheat[] = _( +static const u8 MoveDescription_Overheat[] = _( "Angriff mit voller Kraft.\n" "SPEZ. ANGR. sinkt deutlich."); -static const u8 gMoveDescription_OdorSleuth[] = _( +static const u8 MoveDescription_OdorSleuth[] = _( "Hindert Gegner daran, ihren\n" "Fluchtwert zu erhöhen."); -static const u8 gMoveDescription_RockTomb[] = _( +static const u8 MoveDescription_RockTomb[] = _( "Hält den Feind mit Steinen\n" "auf u. senkt INIT.-Wert."); -static const u8 gMoveDescription_SilverWind[] = _( +static const u8 MoveDescription_SilverWind[] = _( "Pulver-Attacke, die evtl.\n" "die Werte erhöht."); -static const u8 gMoveDescription_MetalSound[] = _( +static const u8 MoveDescription_MetalSound[] = _( "Stößt einen spitzen Schrei\n" "aus. Senkt SPEZ. VERT."); -static const u8 gMoveDescription_GrassWhistle[] = _( +static const u8 MoveDescription_GrassWhistle[] = _( "Versetzt Gegner mit schö-\n" "ner Melodie in den Schlaf."); -static const u8 gMoveDescription_Tickle[] = _( +static const u8 MoveDescription_Tickle[] = _( "Bringt Gegner zum Lachen.\n" "ANGR. u. VERT. sinken."); -static const u8 gMoveDescription_CosmicPower[] = _( +static const u8 MoveDescription_CosmicPower[] = _( "Erhöht VERT. u. SPEZ. VERT.\n" "durch mystische Kraft."); -static const u8 gMoveDescription_WaterSpout[] = _( +static const u8 MoveDescription_WaterSpout[] = _( "Ist wirkungsvoller, wenn KP\n" "des Benutzers hoch sind."); -static const u8 gMoveDescription_SignalBeam[] = _( +static const u8 MoveDescription_SignalBeam[] = _( "Seltsame Strahlenattacke.\n" "Verwirrt evtl. den Gegner."); -static const u8 gMoveDescription_ShadowPunch[] = _( +static const u8 MoveDescription_ShadowPunch[] = _( "Schattenhieb. Ausweichen\n" "unmöglich."); -static const u8 gMoveDescription_Extrasensory[] = _( +static const u8 MoveDescription_Extrasensory[] = _( "Besonderer Angriff. Gegner\n" "schreckt evtl. zurück."); -static const u8 gMoveDescription_SkyUppercut[] = _( +static const u8 MoveDescription_SkyUppercut[] = _( "Kinnhaken, als würde man in\n" "die Luft springen."); -static const u8 gMoveDescription_SandTomb[] = _( +static const u8 MoveDescription_SandTomb[] = _( "Gegner leidet für 2-5\n" "Runden in Sandhose."); -static const u8 gMoveDescription_SheerCold[] = _( +static const u8 MoveDescription_SheerCold[] = _( "Eis-Attacke. Besiegt den\n" "Gegner, wenn sie trifft."); -static const u8 gMoveDescription_MuddyWater[] = _( +static const u8 MoveDescription_MuddyWater[] = _( "Greift mit Matsch an und\n" "senkt evtl. Genauigkeit."); -static const u8 gMoveDescription_BulletSeed[] = _( +static const u8 MoveDescription_BulletSeed[] = _( "Verschießt 2 bis 5 Samen\n" "gleichzeitig auf Gegner."); -static const u8 gMoveDescription_AerialAce[] = _( +static const u8 MoveDescription_AerialAce[] = _( "Eine extrem schnelle und\n" "unausweichbare Attacke."); -static const u8 gMoveDescription_IcicleSpear[] = _( +static const u8 MoveDescription_IcicleSpear[] = _( "Feuert 2-5 Eiszapfen auf\n" "den Gegner."); -static const u8 gMoveDescription_IronDefense[] = _( +static const u8 MoveDescription_IronDefense[] = _( "Stärkt den Körper.\n" "Erhöht VERT.-Wert deutlich."); -static const u8 gMoveDescription_Block[] = _( +static const u8 MoveDescription_Block[] = _( "Versperrt den Fluchtweg\n" "des Gegners."); -static const u8 gMoveDescription_Howl[] = _( +static const u8 MoveDescription_Howl[] = _( "Jault, um in sich zu gehen.\n" "Erhöht ANGR.-Wert."); -static const u8 gMoveDescription_DragonClaw[] = _( +static const u8 MoveDescription_DragonClaw[] = _( "Der Gegner wird mit\n" "scharfen Klauen verletzt."); -static const u8 gMoveDescription_FrenzyPlant[] = _( +static const u8 MoveDescription_FrenzyPlant[] = _( "Starker Angriff. Angreifer\n" "muss eine Runde aussetzen."); -static const u8 gMoveDescription_BulkUp[] = _( +static const u8 MoveDescription_BulkUp[] = _( "Pumpt den Körper auf. ANGR.\n" "u. VERT. werden erhöht."); -static const u8 gMoveDescription_Bounce[] = _( +static const u8 MoveDescription_Bounce[] = _( "Springt hoch u. landet in\n" "nächstem Zug. Evtl. Para."); -static const u8 gMoveDescription_MudShot[] = _( +static const u8 MoveDescription_MudShot[] = _( "Bewirft den Gegner mit Lehm\n" "und senkt INIT.-Wert."); -static const u8 gMoveDescription_PoisonTail[] = _( +static const u8 MoveDescription_PoisonTail[] = _( "Hohe Volltrefferquote.\n" "Gegner evtl. vergiftet."); -static const u8 gMoveDescription_Covet[] = _( +static const u8 MoveDescription_Covet[] = _( "Bittet charmant um das ge-\n" "haltene Item des Gegners."); -static const u8 gMoveDescription_VoltTackle[] = _( +static const u8 MoveDescription_VoltTackle[] = _( "Lebensgefährliche Attacke,\n" "leichte Selbstschädigung."); -static const u8 gMoveDescription_MagicalLeaf[] = _( +static const u8 MoveDescription_MagicalLeaf[] = _( "Magischer Blattangriff.\n" "Ausweichen unmöglich."); -static const u8 gMoveDescription_WaterSport[] = _( +static const u8 MoveDescription_WaterSport[] = _( "Benutzer wird nass, so dass\n" "er Feuer besser standhält."); -static const u8 gMoveDescription_CalmMind[] = _( +static const u8 MoveDescription_CalmMind[] = _( "Erhöht SPEZ. ANGR. u. SPEZ.\n" "VERT. durch Konzentration."); -static const u8 gMoveDescription_LeafBlade[] = _( +static const u8 MoveDescription_LeafBlade[] = _( "Hieb mit scharfkantigem\n" "Blatt. Hohe Volltrefferqu."); -static const u8 gMoveDescription_DragonDance[] = _( +static const u8 MoveDescription_DragonDance[] = _( "Ein mystischer Tanz, der\n" "ANGR.- u. INIT.-Wert erhöht."); -static const u8 gMoveDescription_RockBlast[] = _( +static const u8 MoveDescription_RockBlast[] = _( "Wirft 2 - 5-mal in Folge\n" "Felsblöcke auf den Gegner."); -static const u8 gMoveDescription_ShockWave[] = _( +static const u8 MoveDescription_ShockWave[] = _( "Schnelle Elektro-Attacke\n" "mit Treffergarantie."); -static const u8 gMoveDescription_WaterPulse[] = _( +static const u8 MoveDescription_WaterPulse[] = _( "Ultraschallwellen, die den\n" "Gegner verwirren können."); -static const u8 gMoveDescription_DoomDesire[] = _( +static const u8 MoveDescription_DoomDesire[] = _( "Speichert Sonnenenergie.\n" "Angriff 2 Runden später."); -static const u8 gMoveDescription_PsychoBoost[] = _( +static const u8 MoveDescription_PsychoBoost[] = _( "Angriff mit voller Kraft.\n" "SPEZ. ANGR. sinkt deutlich."); -const u8 * const gMoveDescriptions[] = { - gMoveDescription_Pound, - gMoveDescription_KarateChop, - gMoveDescription_DoubleSlap, - gMoveDescription_CometPunch, - gMoveDescription_MegaPunch, - gMoveDescription_PayDay, - gMoveDescription_FirePunch, - gMoveDescription_IcePunch, - gMoveDescription_ThunderPunch, - gMoveDescription_Scratch, - gMoveDescription_ViceGrip, - gMoveDescription_Guillotine, - gMoveDescription_RazorWind, - gMoveDescription_SwordsDance, - gMoveDescription_Cut, - gMoveDescription_Gust, - gMoveDescription_WingAttack, - gMoveDescription_Whirlwind, - gMoveDescription_Fly, - gMoveDescription_Bind, - gMoveDescription_Slam, - gMoveDescription_VineWhip, - gMoveDescription_Stomp, - gMoveDescription_DoubleKick, - gMoveDescription_MegaKick, - gMoveDescription_JumpKick, - gMoveDescription_RollingKick, - gMoveDescription_SandAttack, - gMoveDescription_Headbutt, - gMoveDescription_HornAttack, - gMoveDescription_FuryAttack, - gMoveDescription_HornDrill, - gMoveDescription_Tackle, - gMoveDescription_BodySlam, - gMoveDescription_Wrap, - gMoveDescription_TakeDown, - gMoveDescription_Thrash, - gMoveDescription_DoubleEdge, - gMoveDescription_TailWhip, - gMoveDescription_PoisonSting, - gMoveDescription_Twineedle, - gMoveDescription_PinMissile, - gMoveDescription_Leer, - gMoveDescription_Bite, - gMoveDescription_Growl, - gMoveDescription_Roar, - gMoveDescription_Sing, - gMoveDescription_Supersonic, - gMoveDescription_SonicBoom, - gMoveDescription_Disable, - gMoveDescription_Acid, - gMoveDescription_Ember, - gMoveDescription_Flamethrower, - gMoveDescription_Mist, - gMoveDescription_WaterGun, - gMoveDescription_HydroPump, - gMoveDescription_Surf, - gMoveDescription_IceBeam, - gMoveDescription_Blizzard, - gMoveDescription_Psybeam, - gMoveDescription_BubbleBeam, - gMoveDescription_AuroraBeam, - gMoveDescription_HyperBeam, - gMoveDescription_Peck, - gMoveDescription_DrillPeck, - gMoveDescription_Submission, - gMoveDescription_LowKick, - gMoveDescription_Counter, - gMoveDescription_SeismicToss, - gMoveDescription_Strength, - gMoveDescription_Absorb, - gMoveDescription_MegaDrain, - gMoveDescription_LeechSeed, - gMoveDescription_Growth, - gMoveDescription_RazorLeaf, - gMoveDescription_SolarBeam, - gMoveDescription_PoisonPowder, - gMoveDescription_StunSpore, - gMoveDescription_SleepPowder, - gMoveDescription_PetalDance, - gMoveDescription_StringShot, - gMoveDescription_DragonRage, - gMoveDescription_FireSpin, - gMoveDescription_ThunderShock, - gMoveDescription_Thunderbolt, - gMoveDescription_ThunderWave, - gMoveDescription_Thunder, - gMoveDescription_RockThrow, - gMoveDescription_Earthquake, - gMoveDescription_Fissure, - gMoveDescription_Dig, - gMoveDescription_Toxic, - gMoveDescription_Confusion, - gMoveDescription_Psychic, - gMoveDescription_Hypnosis, - gMoveDescription_Meditate, - gMoveDescription_Agility, - gMoveDescription_QuickAttack, - gMoveDescription_Rage, - gMoveDescription_Teleport, - gMoveDescription_NightShade, - gMoveDescription_Mimic, - gMoveDescription_Screech, - gMoveDescription_DoubleTeam, - gMoveDescription_Recover, - gMoveDescription_Harden, - gMoveDescription_Minimize, - gMoveDescription_Smokescreen, - gMoveDescription_ConfuseRay, - gMoveDescription_Withdraw, - gMoveDescription_DefenseCurl, - gMoveDescription_Barrier, - gMoveDescription_LightScreen, - gMoveDescription_Haze, - gMoveDescription_Reflect, - gMoveDescription_FocusEnergy, - gMoveDescription_Bide, - gMoveDescription_Metronome, - gMoveDescription_MirrorMove, - gMoveDescription_SelfDestruct, - gMoveDescription_EggBomb, - gMoveDescription_Lick, - gMoveDescription_Smog, - gMoveDescription_Sludge, - gMoveDescription_BoneClub, - gMoveDescription_FireBlast, - gMoveDescription_Waterfall, - gMoveDescription_Clamp, - gMoveDescription_Swift, - gMoveDescription_SkullBash, - gMoveDescription_SpikeCannon, - gMoveDescription_Constrict, - gMoveDescription_Amnesia, - gMoveDescription_Kinesis, - gMoveDescription_SoftBoiled, - gMoveDescription_HiJumpKick, - gMoveDescription_Glare, - gMoveDescription_DreamEater, - gMoveDescription_PoisonGas, - gMoveDescription_Barrage, - gMoveDescription_LeechLife, - gMoveDescription_LovelyKiss, - gMoveDescription_SkyAttack, - gMoveDescription_Transform, - gMoveDescription_Bubble, - gMoveDescription_DizzyPunch, - gMoveDescription_Spore, - gMoveDescription_Flash, - gMoveDescription_Psywave, - gMoveDescription_Splash, - gMoveDescription_AcidArmor, - gMoveDescription_Crabhammer, - gMoveDescription_Explosion, - gMoveDescription_FurySwipes, - gMoveDescription_Bonemerang, - gMoveDescription_Rest, - gMoveDescription_RockSlide, - gMoveDescription_HyperFang, - gMoveDescription_Sharpen, - gMoveDescription_Conversion, - gMoveDescription_TriAttack, - gMoveDescription_SuperFang, - gMoveDescription_Slash, - gMoveDescription_Substitute, - gMoveDescription_Struggle, - gMoveDescription_Sketch, - gMoveDescription_TripleKick, - gMoveDescription_Thief, - gMoveDescription_SpiderWeb, - gMoveDescription_MindReader, - gMoveDescription_Nightmare, - gMoveDescription_FlameWheel, - gMoveDescription_Snore, - gMoveDescription_Curse, - gMoveDescription_Flail, - gMoveDescription_Conversion2, - gMoveDescription_Aeroblast, - gMoveDescription_CottonSpore, - gMoveDescription_Reversal, - gMoveDescription_Spite, - gMoveDescription_PowderSnow, - gMoveDescription_Protect, - gMoveDescription_MachPunch, - gMoveDescription_ScaryFace, - gMoveDescription_FaintAttack, - gMoveDescription_SweetKiss, - gMoveDescription_BellyDrum, - gMoveDescription_SludgeBomb, - gMoveDescription_MudSlap, - gMoveDescription_Octazooka, - gMoveDescription_Spikes, - gMoveDescription_ZapCannon, - gMoveDescription_Foresight, - gMoveDescription_DestinyBond, - gMoveDescription_PerishSong, - gMoveDescription_IcyWind, - gMoveDescription_Detect, - gMoveDescription_BoneRush, - gMoveDescription_LockOn, - gMoveDescription_Outrage, - gMoveDescription_Sandstorm, - gMoveDescription_GigaDrain, - gMoveDescription_Endure, - gMoveDescription_Charm, - gMoveDescription_Rollout, - gMoveDescription_FalseSwipe, - gMoveDescription_Swagger, - gMoveDescription_MilkDrink, - gMoveDescription_Spark, - gMoveDescription_FuryCutter, - gMoveDescription_SteelWing, - gMoveDescription_MeanLook, - gMoveDescription_Attract, - gMoveDescription_SleepTalk, - gMoveDescription_HealBell, - gMoveDescription_Return, - gMoveDescription_Present, - gMoveDescription_Frustration, - gMoveDescription_Safeguard, - gMoveDescription_PainSplit, - gMoveDescription_SacredFire, - gMoveDescription_Magnitude, - gMoveDescription_DynamicPunch, - gMoveDescription_Megahorn, - gMoveDescription_DragonBreath, - gMoveDescription_BatonPass, - gMoveDescription_Encore, - gMoveDescription_Pursuit, - gMoveDescription_RapidSpin, - gMoveDescription_SweetScent, - gMoveDescription_IronTail, - gMoveDescription_MetalClaw, - gMoveDescription_VitalThrow, - gMoveDescription_MorningSun, - gMoveDescription_Synthesis, - gMoveDescription_Moonlight, - gMoveDescription_HiddenPower, - gMoveDescription_CrossChop, - gMoveDescription_Twister, - gMoveDescription_RainDance, - gMoveDescription_SunnyDay, - gMoveDescription_Crunch, - gMoveDescription_MirrorCoat, - gMoveDescription_PsychUp, - gMoveDescription_ExtremeSpeed, - gMoveDescription_AncientPower, - gMoveDescription_ShadowBall, - gMoveDescription_FutureSight, - gMoveDescription_RockSmash, - gMoveDescription_Whirlpool, - gMoveDescription_BeatUp, - gMoveDescription_FakeOut, - gMoveDescription_Uproar, - gMoveDescription_Stockpile, - gMoveDescription_SpitUp, - gMoveDescription_Swallow, - gMoveDescription_HeatWave, - gMoveDescription_Hail, - gMoveDescription_Torment, - gMoveDescription_Flatter, - gMoveDescription_WillOWisp, - gMoveDescription_Memento, - gMoveDescription_Facade, - gMoveDescription_FocusPunch, - gMoveDescription_SmellingSalt, - gMoveDescription_FollowMe, - gMoveDescription_NaturePower, - gMoveDescription_Charge, - gMoveDescription_Taunt, - gMoveDescription_HelpingHand, - gMoveDescription_Trick, - gMoveDescription_RolePlay, - gMoveDescription_Wish, - gMoveDescription_Assist, - gMoveDescription_Ingrain, - gMoveDescription_Superpower, - gMoveDescription_MagicCoat, - gMoveDescription_Recycle, - gMoveDescription_Revenge, - gMoveDescription_BrickBreak, - gMoveDescription_Yawn, - gMoveDescription_KnockOff, - gMoveDescription_Endeavor, - gMoveDescription_Eruption, - gMoveDescription_SkillSwap, - gMoveDescription_Imprison, - gMoveDescription_Refresh, - gMoveDescription_Grudge, - gMoveDescription_Snatch, - gMoveDescription_SecretPower, - gMoveDescription_Dive, - gMoveDescription_ArmThrust, - gMoveDescription_Camouflage, - gMoveDescription_TailGlow, - gMoveDescription_LusterPurge, - gMoveDescription_MistBall, - gMoveDescription_FeatherDance, - gMoveDescription_TeeterDance, - gMoveDescription_BlazeKick, - gMoveDescription_MudSport, - gMoveDescription_IceBall, - gMoveDescription_NeedleArm, - gMoveDescription_SlackOff, - gMoveDescription_HyperVoice, - gMoveDescription_PoisonFang, - gMoveDescription_CrushClaw, - gMoveDescription_BlastBurn, - gMoveDescription_HydroCannon, - gMoveDescription_MeteorMash, - gMoveDescription_Astonish, - gMoveDescription_WeatherBall, - gMoveDescription_Aromatherapy, - gMoveDescription_FakeTears, - gMoveDescription_AirCutter, - gMoveDescription_Overheat, - gMoveDescription_OdorSleuth, - gMoveDescription_RockTomb, - gMoveDescription_SilverWind, - gMoveDescription_MetalSound, - gMoveDescription_GrassWhistle, - gMoveDescription_Tickle, - gMoveDescription_CosmicPower, - gMoveDescription_WaterSpout, - gMoveDescription_SignalBeam, - gMoveDescription_ShadowPunch, - gMoveDescription_Extrasensory, - gMoveDescription_SkyUppercut, - gMoveDescription_SandTomb, - gMoveDescription_SheerCold, - gMoveDescription_MuddyWater, - gMoveDescription_BulletSeed, - gMoveDescription_AerialAce, - gMoveDescription_IcicleSpear, - gMoveDescription_IronDefense, - gMoveDescription_Block, - gMoveDescription_Howl, - gMoveDescription_DragonClaw, - gMoveDescription_FrenzyPlant, - gMoveDescription_BulkUp, - gMoveDescription_Bounce, - gMoveDescription_MudShot, - gMoveDescription_PoisonTail, - gMoveDescription_Covet, - gMoveDescription_VoltTackle, - gMoveDescription_MagicalLeaf, - gMoveDescription_WaterSport, - gMoveDescription_CalmMind, - gMoveDescription_LeafBlade, - gMoveDescription_DragonDance, - gMoveDescription_RockBlast, - gMoveDescription_ShockWave, - gMoveDescription_WaterPulse, - gMoveDescription_DoomDesire, - gMoveDescription_PsychoBoost, +const u8 * const MoveDescriptions[] = { + MoveDescription_Pound, + MoveDescription_KarateChop, + MoveDescription_DoubleSlap, + MoveDescription_CometPunch, + MoveDescription_MegaPunch, + MoveDescription_PayDay, + MoveDescription_FirePunch, + MoveDescription_IcePunch, + MoveDescription_ThunderPunch, + MoveDescription_Scratch, + MoveDescription_ViceGrip, + MoveDescription_Guillotine, + MoveDescription_RazorWind, + MoveDescription_SwordsDance, + MoveDescription_Cut, + MoveDescription_Gust, + MoveDescription_WingAttack, + MoveDescription_Whirlwind, + MoveDescription_Fly, + MoveDescription_Bind, + MoveDescription_Slam, + MoveDescription_VineWhip, + MoveDescription_Stomp, + MoveDescription_DoubleKick, + MoveDescription_MegaKick, + MoveDescription_JumpKick, + MoveDescription_RollingKick, + MoveDescription_SandAttack, + MoveDescription_Headbutt, + MoveDescription_HornAttack, + MoveDescription_FuryAttack, + MoveDescription_HornDrill, + MoveDescription_Tackle, + MoveDescription_BodySlam, + MoveDescription_Wrap, + MoveDescription_TakeDown, + MoveDescription_Thrash, + MoveDescription_DoubleEdge, + MoveDescription_TailWhip, + MoveDescription_PoisonSting, + MoveDescription_Twineedle, + MoveDescription_PinMissile, + MoveDescription_Leer, + MoveDescription_Bite, + MoveDescription_Growl, + MoveDescription_Roar, + MoveDescription_Sing, + MoveDescription_Supersonic, + MoveDescription_SonicBoom, + MoveDescription_Disable, + MoveDescription_Acid, + MoveDescription_Ember, + MoveDescription_Flamethrower, + MoveDescription_Mist, + MoveDescription_WaterGun, + MoveDescription_HydroPump, + MoveDescription_Surf, + MoveDescription_IceBeam, + MoveDescription_Blizzard, + MoveDescription_Psybeam, + MoveDescription_BubbleBeam, + MoveDescription_AuroraBeam, + MoveDescription_HyperBeam, + MoveDescription_Peck, + MoveDescription_DrillPeck, + MoveDescription_Submission, + MoveDescription_LowKick, + MoveDescription_Counter, + MoveDescription_SeismicToss, + MoveDescription_Strength, + MoveDescription_Absorb, + MoveDescription_MegaDrain, + MoveDescription_LeechSeed, + MoveDescription_Growth, + MoveDescription_RazorLeaf, + MoveDescription_SolarBeam, + MoveDescription_PoisonPowder, + MoveDescription_StunSpore, + MoveDescription_SleepPowder, + MoveDescription_PetalDance, + MoveDescription_StringShot, + MoveDescription_DragonRage, + MoveDescription_FireSpin, + MoveDescription_ThunderShock, + MoveDescription_Thunderbolt, + MoveDescription_ThunderWave, + MoveDescription_Thunder, + MoveDescription_RockThrow, + MoveDescription_Earthquake, + MoveDescription_Fissure, + MoveDescription_Dig, + MoveDescription_Toxic, + MoveDescription_Confusion, + MoveDescription_Psychic, + MoveDescription_Hypnosis, + MoveDescription_Meditate, + MoveDescription_Agility, + MoveDescription_QuickAttack, + MoveDescription_Rage, + MoveDescription_Teleport, + MoveDescription_NightShade, + MoveDescription_Mimic, + MoveDescription_Screech, + MoveDescription_DoubleTeam, + MoveDescription_Recover, + MoveDescription_Harden, + MoveDescription_Minimize, + MoveDescription_Smokescreen, + MoveDescription_ConfuseRay, + MoveDescription_Withdraw, + MoveDescription_DefenseCurl, + MoveDescription_Barrier, + MoveDescription_LightScreen, + MoveDescription_Haze, + MoveDescription_Reflect, + MoveDescription_FocusEnergy, + MoveDescription_Bide, + MoveDescription_Metronome, + MoveDescription_MirrorMove, + MoveDescription_SelfDestruct, + MoveDescription_EggBomb, + MoveDescription_Lick, + MoveDescription_Smog, + MoveDescription_Sludge, + MoveDescription_BoneClub, + MoveDescription_FireBlast, + MoveDescription_Waterfall, + MoveDescription_Clamp, + MoveDescription_Swift, + MoveDescription_SkullBash, + MoveDescription_SpikeCannon, + MoveDescription_Constrict, + MoveDescription_Amnesia, + MoveDescription_Kinesis, + MoveDescription_SoftBoiled, + MoveDescription_HiJumpKick, + MoveDescription_Glare, + MoveDescription_DreamEater, + MoveDescription_PoisonGas, + MoveDescription_Barrage, + MoveDescription_LeechLife, + MoveDescription_LovelyKiss, + MoveDescription_SkyAttack, + MoveDescription_Transform, + MoveDescription_Bubble, + MoveDescription_DizzyPunch, + MoveDescription_Spore, + MoveDescription_Flash, + MoveDescription_Psywave, + MoveDescription_Splash, + MoveDescription_AcidArmor, + MoveDescription_Crabhammer, + MoveDescription_Explosion, + MoveDescription_FurySwipes, + MoveDescription_Bonemerang, + MoveDescription_Rest, + MoveDescription_RockSlide, + MoveDescription_HyperFang, + MoveDescription_Sharpen, + MoveDescription_Conversion, + MoveDescription_TriAttack, + MoveDescription_SuperFang, + MoveDescription_Slash, + MoveDescription_Substitute, + MoveDescription_Struggle, + MoveDescription_Sketch, + MoveDescription_TripleKick, + MoveDescription_Thief, + MoveDescription_SpiderWeb, + MoveDescription_MindReader, + MoveDescription_Nightmare, + MoveDescription_FlameWheel, + MoveDescription_Snore, + MoveDescription_Curse, + MoveDescription_Flail, + MoveDescription_Conversion2, + MoveDescription_Aeroblast, + MoveDescription_CottonSpore, + MoveDescription_Reversal, + MoveDescription_Spite, + MoveDescription_PowderSnow, + MoveDescription_Protect, + MoveDescription_MachPunch, + MoveDescription_ScaryFace, + MoveDescription_FaintAttack, + MoveDescription_SweetKiss, + MoveDescription_BellyDrum, + MoveDescription_SludgeBomb, + MoveDescription_MudSlap, + MoveDescription_Octazooka, + MoveDescription_Spikes, + MoveDescription_ZapCannon, + MoveDescription_Foresight, + MoveDescription_DestinyBond, + MoveDescription_PerishSong, + MoveDescription_IcyWind, + MoveDescription_Detect, + MoveDescription_BoneRush, + MoveDescription_LockOn, + MoveDescription_Outrage, + MoveDescription_Sandstorm, + MoveDescription_GigaDrain, + MoveDescription_Endure, + MoveDescription_Charm, + MoveDescription_Rollout, + MoveDescription_FalseSwipe, + MoveDescription_Swagger, + MoveDescription_MilkDrink, + MoveDescription_Spark, + MoveDescription_FuryCutter, + MoveDescription_SteelWing, + MoveDescription_MeanLook, + MoveDescription_Attract, + MoveDescription_SleepTalk, + MoveDescription_HealBell, + MoveDescription_Return, + MoveDescription_Present, + MoveDescription_Frustration, + MoveDescription_Safeguard, + MoveDescription_PainSplit, + MoveDescription_SacredFire, + MoveDescription_Magnitude, + MoveDescription_DynamicPunch, + MoveDescription_Megahorn, + MoveDescription_DragonBreath, + MoveDescription_BatonPass, + MoveDescription_Encore, + MoveDescription_Pursuit, + MoveDescription_RapidSpin, + MoveDescription_SweetScent, + MoveDescription_IronTail, + MoveDescription_MetalClaw, + MoveDescription_VitalThrow, + MoveDescription_MorningSun, + MoveDescription_Synthesis, + MoveDescription_Moonlight, + MoveDescription_HiddenPower, + MoveDescription_CrossChop, + MoveDescription_Twister, + MoveDescription_RainDance, + MoveDescription_SunnyDay, + MoveDescription_Crunch, + MoveDescription_MirrorCoat, + MoveDescription_PsychUp, + MoveDescription_ExtremeSpeed, + MoveDescription_AncientPower, + MoveDescription_ShadowBall, + MoveDescription_FutureSight, + MoveDescription_RockSmash, + MoveDescription_Whirlpool, + MoveDescription_BeatUp, + MoveDescription_FakeOut, + MoveDescription_Uproar, + MoveDescription_Stockpile, + MoveDescription_SpitUp, + MoveDescription_Swallow, + MoveDescription_HeatWave, + MoveDescription_Hail, + MoveDescription_Torment, + MoveDescription_Flatter, + MoveDescription_WillOWisp, + MoveDescription_Memento, + MoveDescription_Facade, + MoveDescription_FocusPunch, + MoveDescription_SmellingSalt, + MoveDescription_FollowMe, + MoveDescription_NaturePower, + MoveDescription_Charge, + MoveDescription_Taunt, + MoveDescription_HelpingHand, + MoveDescription_Trick, + MoveDescription_RolePlay, + MoveDescription_Wish, + MoveDescription_Assist, + MoveDescription_Ingrain, + MoveDescription_Superpower, + MoveDescription_MagicCoat, + MoveDescription_Recycle, + MoveDescription_Revenge, + MoveDescription_BrickBreak, + MoveDescription_Yawn, + MoveDescription_KnockOff, + MoveDescription_Endeavor, + MoveDescription_Eruption, + MoveDescription_SkillSwap, + MoveDescription_Imprison, + MoveDescription_Refresh, + MoveDescription_Grudge, + MoveDescription_Snatch, + MoveDescription_SecretPower, + MoveDescription_Dive, + MoveDescription_ArmThrust, + MoveDescription_Camouflage, + MoveDescription_TailGlow, + MoveDescription_LusterPurge, + MoveDescription_MistBall, + MoveDescription_FeatherDance, + MoveDescription_TeeterDance, + MoveDescription_BlazeKick, + MoveDescription_MudSport, + MoveDescription_IceBall, + MoveDescription_NeedleArm, + MoveDescription_SlackOff, + MoveDescription_HyperVoice, + MoveDescription_PoisonFang, + MoveDescription_CrushClaw, + MoveDescription_BlastBurn, + MoveDescription_HydroCannon, + MoveDescription_MeteorMash, + MoveDescription_Astonish, + MoveDescription_WeatherBall, + MoveDescription_Aromatherapy, + MoveDescription_FakeTears, + MoveDescription_AirCutter, + MoveDescription_Overheat, + MoveDescription_OdorSleuth, + MoveDescription_RockTomb, + MoveDescription_SilverWind, + MoveDescription_MetalSound, + MoveDescription_GrassWhistle, + MoveDescription_Tickle, + MoveDescription_CosmicPower, + MoveDescription_WaterSpout, + MoveDescription_SignalBeam, + MoveDescription_ShadowPunch, + MoveDescription_Extrasensory, + MoveDescription_SkyUppercut, + MoveDescription_SandTomb, + MoveDescription_SheerCold, + MoveDescription_MuddyWater, + MoveDescription_BulletSeed, + MoveDescription_AerialAce, + MoveDescription_IcicleSpear, + MoveDescription_IronDefense, + MoveDescription_Block, + MoveDescription_Howl, + MoveDescription_DragonClaw, + MoveDescription_FrenzyPlant, + MoveDescription_BulkUp, + MoveDescription_Bounce, + MoveDescription_MudShot, + MoveDescription_PoisonTail, + MoveDescription_Covet, + MoveDescription_VoltTackle, + MoveDescription_MagicalLeaf, + MoveDescription_WaterSport, + MoveDescription_CalmMind, + MoveDescription_LeafBlade, + MoveDescription_DragonDance, + MoveDescription_RockBlast, + MoveDescription_ShockWave, + MoveDescription_WaterPulse, + MoveDescription_DoomDesire, + MoveDescription_PsychoBoost, ]; diff --git a/src/data/text/move_descriptions_en.h b/src/data/text/move_descriptions_en.h index 0bfb31ff1..3c3a961d1 100644 --- a/src/data/text/move_descriptions_en.h +++ b/src/data/text/move_descriptions_en.h @@ -1,1772 +1,1772 @@ -static const u8 gMoveDescription_Pound[] = _( +static const u8 MoveDescription_Pound[] = _( "Pounds the foe with\n" "forelegs or tail."); -static const u8 gMoveDescription_KarateChop[] = _( +static const u8 MoveDescription_KarateChop[] = _( "A chopping attack with a\n" "high critical-hit ratio."); -static const u8 gMoveDescription_DoubleSlap[] = _( +static const u8 MoveDescription_DoubleSlap[] = _( "Repeatedly slaps the foe\n" "2 to 5 times."); -static const u8 gMoveDescription_CometPunch[] = _( +static const u8 MoveDescription_CometPunch[] = _( "Repeatedly punches the foe\n" "2 to 5 times."); -static const u8 gMoveDescription_MegaPunch[] = _( +static const u8 MoveDescription_MegaPunch[] = _( "A strong punch thrown with\n" "incredible power."); -static const u8 gMoveDescription_PayDay[] = _( +static const u8 MoveDescription_PayDay[] = _( "Throws coins at the foe.\n" "Money is recovered after."); -static const u8 gMoveDescription_FirePunch[] = _( +static const u8 MoveDescription_FirePunch[] = _( "A fiery punch that may burn\n" "the foe."); -static const u8 gMoveDescription_IcePunch[] = _( +static const u8 MoveDescription_IcePunch[] = _( "An icy punch that may\n" "freeze the foe."); -static const u8 gMoveDescription_ThunderPunch[] = _( +static const u8 MoveDescription_ThunderPunch[] = _( "An electrified punch that\n" "may paralyze the foe."); -static const u8 gMoveDescription_Scratch[] = _( +static const u8 MoveDescription_Scratch[] = _( "Scratches the foe with\n" "sharp claws."); -static const u8 gMoveDescription_ViceGrip[] = _( +static const u8 MoveDescription_ViceGrip[] = _( "Grips the foe with large and\n" "powerful pincers."); -static const u8 gMoveDescription_Guillotine[] = _( +static const u8 MoveDescription_Guillotine[] = _( "A powerful pincer attack\n" "that may cause fainting."); -static const u8 gMoveDescription_RazorWind[] = _( +static const u8 MoveDescription_RazorWind[] = _( "A 2-turn move that strikes\n" "the foe on the 2nd turn."); -static const u8 gMoveDescription_SwordsDance[] = _( +static const u8 MoveDescription_SwordsDance[] = _( "A fighting dance that\n" "sharply raises ATTACK."); -static const u8 gMoveDescription_Cut[] = _( +static const u8 MoveDescription_Cut[] = _( "Cuts the foe with sharp\n" "scythes, claws, etc."); -static const u8 gMoveDescription_Gust[] = _( +static const u8 MoveDescription_Gust[] = _( "Strikes the foe with a gust\n" "of wind whipped up by wings."); -static const u8 gMoveDescription_WingAttack[] = _( +static const u8 MoveDescription_WingAttack[] = _( "Strikes the foe with wings\n" "spread wide."); -static const u8 gMoveDescription_Whirlwind[] = _( +static const u8 MoveDescription_Whirlwind[] = _( "Blows away the foe with\n" "wind and ends the battle."); -static const u8 gMoveDescription_Fly[] = _( +static const u8 MoveDescription_Fly[] = _( "Flies up on the first turn,\n" "then strikes the next turn."); -static const u8 gMoveDescription_Bind[] = _( +static const u8 MoveDescription_Bind[] = _( "Binds and squeezes the foe\n" "for 2 to 5 turns."); -static const u8 gMoveDescription_Slam[] = _( +static const u8 MoveDescription_Slam[] = _( "Slams the foe with a long\n" "tail, vine, etc."); -static const u8 gMoveDescription_VineWhip[] = _( +static const u8 MoveDescription_VineWhip[] = _( "Strikes the foe with\n" "slender, whiplike vines."); -static const u8 gMoveDescription_Stomp[] = _( +static const u8 MoveDescription_Stomp[] = _( "Stomps the enemy with a big\n" "foot. May cause flinching."); -static const u8 gMoveDescription_DoubleKick[] = _( +static const u8 MoveDescription_DoubleKick[] = _( "A double-kicking attack\n" "that strikes the foe twice."); -static const u8 gMoveDescription_MegaKick[] = _( +static const u8 MoveDescription_MegaKick[] = _( "An extremely powerful kick\n" "with intense force."); -static const u8 gMoveDescription_JumpKick[] = _( +static const u8 MoveDescription_JumpKick[] = _( "A strong jumping kick. May\n" "miss and hurt the kicker."); -static const u8 gMoveDescription_RollingKick[] = _( +static const u8 MoveDescription_RollingKick[] = _( "A fast kick delivered from\n" "a rapid spin."); -static const u8 gMoveDescription_SandAttack[] = _( +static const u8 MoveDescription_SandAttack[] = _( "Reduces the foe’s accuracy\n" "by hurling sand in its face."); -static const u8 gMoveDescription_Headbutt[] = _( +static const u8 MoveDescription_Headbutt[] = _( "A ramming attack that may\n" "cause flinching."); -static const u8 gMoveDescription_HornAttack[] = _( +static const u8 MoveDescription_HornAttack[] = _( "Jabs the foe with sharp\n" "horns."); -static const u8 gMoveDescription_FuryAttack[] = _( +static const u8 MoveDescription_FuryAttack[] = _( "Jabs the foe 2 to 5 times\n" "with sharp horns, etc."); -static const u8 gMoveDescription_HornDrill[] = _( +static const u8 MoveDescription_HornDrill[] = _( "A one-hit KO attack that\n" "uses a horn like a drill."); -static const u8 gMoveDescription_Tackle[] = _( +static const u8 MoveDescription_Tackle[] = _( "Charges the foe with a full-\n" "body tackle."); -static const u8 gMoveDescription_BodySlam[] = _( +static const u8 MoveDescription_BodySlam[] = _( "A full-body slam that may\n" "cause paralysis."); -static const u8 gMoveDescription_Wrap[] = _( +static const u8 MoveDescription_Wrap[] = _( "Wraps and squeezes the foe\n" "2 to 5 times with vines, etc."); -static const u8 gMoveDescription_TakeDown[] = _( +static const u8 MoveDescription_TakeDown[] = _( "A reckless charge attack\n" "that also hurts the user."); -static const u8 gMoveDescription_Thrash[] = _( +static const u8 MoveDescription_Thrash[] = _( "A rampage of 2 to 3 turns\n" "that confuses the user."); -static const u8 gMoveDescription_DoubleEdge[] = _( +static const u8 MoveDescription_DoubleEdge[] = _( "A life-risking tackle that\n" "also hurts the user."); -static const u8 gMoveDescription_TailWhip[] = _( +static const u8 MoveDescription_TailWhip[] = _( "Wags the tail to lower the\n" "foe’s DEFENSE."); -static const u8 gMoveDescription_PoisonSting[] = _( +static const u8 MoveDescription_PoisonSting[] = _( "A toxic attack with barbs,\n" "etc., that may poison."); -static const u8 gMoveDescription_Twineedle[] = _( +static const u8 MoveDescription_Twineedle[] = _( "Stingers on the forelegs\n" "jab the foe twice."); -static const u8 gMoveDescription_PinMissile[] = _( +static const u8 MoveDescription_PinMissile[] = _( "Sharp pins are fired to\n" "strike 2 to 5 times."); -static const u8 gMoveDescription_Leer[] = _( +static const u8 MoveDescription_Leer[] = _( "Frightens the foe with a\n" "leer to lower DEFENSE."); -static const u8 gMoveDescription_Bite[] = _( +static const u8 MoveDescription_Bite[] = _( "Bites with vicious fangs.\n" "May cause flinching."); -static const u8 gMoveDescription_Growl[] = _( +static const u8 MoveDescription_Growl[] = _( "Growls cutely to reduce the\n" "foe’s ATTACK."); -static const u8 gMoveDescription_Roar[] = _( +static const u8 MoveDescription_Roar[] = _( "Makes the foe flee to end\n" "the battle."); -static const u8 gMoveDescription_Sing[] = _( +static const u8 MoveDescription_Sing[] = _( "A soothing song lulls the\n" "foe into a deep slumber."); -static const u8 gMoveDescription_Supersonic[] = _( +static const u8 MoveDescription_Supersonic[] = _( "Emits bizarre sound waves\n" "that may confuse the foe."); -static const u8 gMoveDescription_SonicBoom[] = _( +static const u8 MoveDescription_SonicBoom[] = _( "Launches shock waves that\n" "always inflict 20 HP damage."); -static const u8 gMoveDescription_Disable[] = _( +static const u8 MoveDescription_Disable[] = _( "Psychically disables one of\n" "the foe’s moves."); -static const u8 gMoveDescription_Acid[] = _( +static const u8 MoveDescription_Acid[] = _( "Sprays a hide-melting acid.\n" "May lower DEFENSE."); -static const u8 gMoveDescription_Ember[] = _( +static const u8 MoveDescription_Ember[] = _( "A weak fire attack that may\n" "inflict a burn."); -static const u8 gMoveDescription_Flamethrower[] = _( +static const u8 MoveDescription_Flamethrower[] = _( "A powerful fire attack that\n" "may inflict a burn."); -static const u8 gMoveDescription_Mist[] = _( +static const u8 MoveDescription_Mist[] = _( "Creates a mist that stops\n" "reduction of abilities."); -static const u8 gMoveDescription_WaterGun[] = _( +static const u8 MoveDescription_WaterGun[] = _( "Squirts water to attack\n" "the foe."); -static const u8 gMoveDescription_HydroPump[] = _( +static const u8 MoveDescription_HydroPump[] = _( "Blasts water at high power\n" "to strike the foe."); -static const u8 gMoveDescription_Surf[] = _( +static const u8 MoveDescription_Surf[] = _( "Creates a huge wave, then\n" "crashes it down on the foe."); -static const u8 gMoveDescription_IceBeam[] = _( +static const u8 MoveDescription_IceBeam[] = _( "Blasts the foe with an icy\n" "beam that may freeze it."); -static const u8 gMoveDescription_Blizzard[] = _( +static const u8 MoveDescription_Blizzard[] = _( "Hits the foe with an icy\n" "storm that may freeze it."); -static const u8 gMoveDescription_Psybeam[] = _( +static const u8 MoveDescription_Psybeam[] = _( "Fires a peculiar ray that\n" "may confuse the foe."); -static const u8 gMoveDescription_BubbleBeam[] = _( +static const u8 MoveDescription_BubbleBeam[] = _( "Forcefully sprays bubbles\n" "that may lower SPEED."); -static const u8 gMoveDescription_AuroraBeam[] = _( +static const u8 MoveDescription_AuroraBeam[] = _( "Fires a rainbow-colored\n" "beam that may lower ATTACK."); -static const u8 gMoveDescription_HyperBeam[] = _( +static const u8 MoveDescription_HyperBeam[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_Peck[] = _( +static const u8 MoveDescription_Peck[] = _( "Attacks the foe with a\n" "jabbing beak, etc."); -static const u8 gMoveDescription_DrillPeck[] = _( +static const u8 MoveDescription_DrillPeck[] = _( "A corkscrewing attack with\n" "the beak acting as a drill."); -static const u8 gMoveDescription_Submission[] = _( +static const u8 MoveDescription_Submission[] = _( "A reckless body slam that\n" "also hurts the user."); -static const u8 gMoveDescription_LowKick[] = _( +static const u8 MoveDescription_LowKick[] = _( "A kick that inflicts more\n" "damage on heavier foes."); -static const u8 gMoveDescription_Counter[] = _( +static const u8 MoveDescription_Counter[] = _( "Retaliates any physical hit\n" "with double the power."); -static const u8 gMoveDescription_SeismicToss[] = _( +static const u8 MoveDescription_SeismicToss[] = _( "Inflicts damage identical\n" "to the user’s level."); -static const u8 gMoveDescription_Strength[] = _( +static const u8 MoveDescription_Strength[] = _( "Builds enormous power,\n" "then slams the foe."); -static const u8 gMoveDescription_Absorb[] = _( +static const u8 MoveDescription_Absorb[] = _( "An attack that absorbs\n" "half the damage inflicted."); -static const u8 gMoveDescription_MegaDrain[] = _( +static const u8 MoveDescription_MegaDrain[] = _( "An attack that absorbs\n" "half the damage inflicted."); -static const u8 gMoveDescription_LeechSeed[] = _( +static const u8 MoveDescription_LeechSeed[] = _( "Plants a seed on the foe to\n" "steal HP on every turn."); -static const u8 gMoveDescription_Growth[] = _( +static const u8 MoveDescription_Growth[] = _( "Forces the body to grow\n" "and heightens SP. ATK."); -static const u8 gMoveDescription_RazorLeaf[] = _( +static const u8 MoveDescription_RazorLeaf[] = _( "Cuts the enemy with leaves.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_SolarBeam[] = _( +static const u8 MoveDescription_SolarBeam[] = _( "Absorbs light in one turn,\n" "then attacks next turn."); -static const u8 gMoveDescription_PoisonPowder[] = _( +static const u8 MoveDescription_PoisonPowder[] = _( "Scatters a toxic powder\n" "that may poison the foe."); -static const u8 gMoveDescription_StunSpore[] = _( +static const u8 MoveDescription_StunSpore[] = _( "Scatters a powder that may\n" "paralyze the foe."); -static const u8 gMoveDescription_SleepPowder[] = _( +static const u8 MoveDescription_SleepPowder[] = _( "Scatters a powder that may\n" "cause the foe to sleep."); -static const u8 gMoveDescription_PetalDance[] = _( +static const u8 MoveDescription_PetalDance[] = _( "A rampage of 2 to 3 turns\n" "that confuses the user."); -static const u8 gMoveDescription_StringShot[] = _( +static const u8 MoveDescription_StringShot[] = _( "Binds the foe with string\n" "to reduce its SPEED."); -static const u8 gMoveDescription_DragonRage[] = _( +static const u8 MoveDescription_DragonRage[] = _( "Launches shock waves that\n" "always inflict 40 HP damage."); -static const u8 gMoveDescription_FireSpin[] = _( +static const u8 MoveDescription_FireSpin[] = _( "Traps the foe in a ring of\n" "fire for 2 to 5 turns."); -static const u8 gMoveDescription_ThunderShock[] = _( +static const u8 MoveDescription_ThunderShock[] = _( "An electrical attack that\n" "may paralyze the foe."); -static const u8 gMoveDescription_Thunderbolt[] = _( +static const u8 MoveDescription_Thunderbolt[] = _( "A strong electrical attack\n" "that may paralyze the foe."); -static const u8 gMoveDescription_ThunderWave[] = _( +static const u8 MoveDescription_ThunderWave[] = _( "A weak jolt of electricity\n" "that paralyzes the foe."); -static const u8 gMoveDescription_Thunder[] = _( +static const u8 MoveDescription_Thunder[] = _( "A lightning attack that may\n" "cause paralysis."); -static const u8 gMoveDescription_RockThrow[] = _( +static const u8 MoveDescription_RockThrow[] = _( "Throws small rocks to\n" "strike the foe."); -static const u8 gMoveDescription_Earthquake[] = _( +static const u8 MoveDescription_Earthquake[] = _( "A powerful quake, but has\n" "no effect on flying foes."); -static const u8 gMoveDescription_Fissure[] = _( +static const u8 MoveDescription_Fissure[] = _( "A one-hit KO move that\n" "drops the foe in a fissure."); -static const u8 gMoveDescription_Dig[] = _( +static const u8 MoveDescription_Dig[] = _( "Digs underground the first\n" "turn and strikes next turn."); -static const u8 gMoveDescription_Toxic[] = _( +static const u8 MoveDescription_Toxic[] = _( "Poisons the foe with an\n" "intensifying toxin."); -static const u8 gMoveDescription_Confusion[] = _( +static const u8 MoveDescription_Confusion[] = _( "A psychic attack that may\n" "cause confusion."); -static const u8 gMoveDescription_Psychic[] = _( +static const u8 MoveDescription_Psychic[] = _( "A powerful psychic attack\n" "that may lower SP. DEF."); -static const u8 gMoveDescription_Hypnosis[] = _( +static const u8 MoveDescription_Hypnosis[] = _( "A hypnotizing move that\n" "may induce sleep."); -static const u8 gMoveDescription_Meditate[] = _( +static const u8 MoveDescription_Meditate[] = _( "Meditates in a peaceful\n" "fashion to raise ATTACK."); -static const u8 gMoveDescription_Agility[] = _( +static const u8 MoveDescription_Agility[] = _( "Relaxes the body to sharply\n" "boost SPEED."); -static const u8 gMoveDescription_QuickAttack[] = _( +static const u8 MoveDescription_QuickAttack[] = _( "An extremely fast attack\n" "that always strikes first."); -static const u8 gMoveDescription_Rage[] = _( +static const u8 MoveDescription_Rage[] = _( "Raises the user’s ATTACK\n" "every time it is hit."); -static const u8 gMoveDescription_Teleport[] = _( +static const u8 MoveDescription_Teleport[] = _( "A psychic move for fleeing\n" "from battle instantly."); -static const u8 gMoveDescription_NightShade[] = _( +static const u8 MoveDescription_NightShade[] = _( "Inflicts damage identical\n" "to the user’s level."); -static const u8 gMoveDescription_Mimic[] = _( +static const u8 MoveDescription_Mimic[] = _( "Copies a move used by the\n" "foe during one battle."); -static const u8 gMoveDescription_Screech[] = _( +static const u8 MoveDescription_Screech[] = _( "Emits a screech to sharply\n" "reduce the foe’s DEFENSE."); -static const u8 gMoveDescription_DoubleTeam[] = _( +static const u8 MoveDescription_DoubleTeam[] = _( "Creates illusory copies to\n" "raise evasiveness."); -static const u8 gMoveDescription_Recover[] = _( +static const u8 MoveDescription_Recover[] = _( "Recovers up to half the\n" "user’s maximum HP."); -static const u8 gMoveDescription_Harden[] = _( +static const u8 MoveDescription_Harden[] = _( "Stiffens the body’s \n" "muscles to raise DEFENSE."); -static const u8 gMoveDescription_Minimize[] = _( +static const u8 MoveDescription_Minimize[] = _( "Minimizes the user’s size\n" "to raise evasiveness."); -static const u8 gMoveDescription_Smokescreen[] = _( +static const u8 MoveDescription_Smokescreen[] = _( "Lowers the foe’s accuracy\n" "using smoke, ink, etc."); -static const u8 gMoveDescription_ConfuseRay[] = _( +static const u8 MoveDescription_ConfuseRay[] = _( "A sinister ray that\n" "confuses the foe."); -static const u8 gMoveDescription_Withdraw[] = _( +static const u8 MoveDescription_Withdraw[] = _( "Withdraws the body into its\n" "hard shell to raise DEFENSE."); -static const u8 gMoveDescription_DefenseCurl[] = _( +static const u8 MoveDescription_DefenseCurl[] = _( "Curls up to conceal weak\n" "spots and raise DEFENSE."); -static const u8 gMoveDescription_Barrier[] = _( +static const u8 MoveDescription_Barrier[] = _( "Creates a barrier that\n" "sharply raises DEFENSE."); -static const u8 gMoveDescription_LightScreen[] = _( +static const u8 MoveDescription_LightScreen[] = _( "Creates a wall of light that\n" "lowers SP. ATK damage."); -static const u8 gMoveDescription_Haze[] = _( +static const u8 MoveDescription_Haze[] = _( "Creates a black haze that\n" "eliminates all stat changes."); -static const u8 gMoveDescription_Reflect[] = _( +static const u8 MoveDescription_Reflect[] = _( "Creates a wall of light that\n" "weakens physical attacks."); -static const u8 gMoveDescription_FocusEnergy[] = _( +static const u8 MoveDescription_FocusEnergy[] = _( "Focuses power to raise the\n" "critical-hit ratio."); -static const u8 gMoveDescription_Bide[] = _( +static const u8 MoveDescription_Bide[] = _( "Endures attack for 2\n" "turns to retaliate double."); -static const u8 gMoveDescription_Metronome[] = _( +static const u8 MoveDescription_Metronome[] = _( "Waggles a finger to use any\n" "POKéMON move at random."); -static const u8 gMoveDescription_MirrorMove[] = _( +static const u8 MoveDescription_MirrorMove[] = _( "Counters the foe’s attack\n" "with the same move."); -static const u8 gMoveDescription_SelfDestruct[] = _( +static const u8 MoveDescription_SelfDestruct[] = _( "Inflicts severe damage but\n" "makes the user faint."); -static const u8 gMoveDescription_EggBomb[] = _( +static const u8 MoveDescription_EggBomb[] = _( "An egg is forcibly hurled at\n" "the foe."); -static const u8 gMoveDescription_Lick[] = _( +static const u8 MoveDescription_Lick[] = _( "Licks with a long tongue to\n" "injure. May also paralyze."); -static const u8 gMoveDescription_Smog[] = _( +static const u8 MoveDescription_Smog[] = _( "An exhaust-gas attack\n" "that may also poison."); -static const u8 gMoveDescription_Sludge[] = _( +static const u8 MoveDescription_Sludge[] = _( "Sludge is hurled to inflict\n" "damage. May also poison."); -static const u8 gMoveDescription_BoneClub[] = _( +static const u8 MoveDescription_BoneClub[] = _( "Clubs the foe with a bone.\n" "May cause flinching."); -static const u8 gMoveDescription_FireBlast[] = _( +static const u8 MoveDescription_FireBlast[] = _( "A fiery blast that scorches\n" "all. May cause a burn."); -static const u8 gMoveDescription_Waterfall[] = _( +static const u8 MoveDescription_Waterfall[] = _( "Charges the foe with speed\n" "to climb waterfalls."); -static const u8 gMoveDescription_Clamp[] = _( +static const u8 MoveDescription_Clamp[] = _( "Traps and squeezes the\n" "foe for 2 to 5 turns."); -static const u8 gMoveDescription_Swift[] = _( +static const u8 MoveDescription_Swift[] = _( "Sprays star-shaped rays\n" "that never miss."); -static const u8 gMoveDescription_SkullBash[] = _( +static const u8 MoveDescription_SkullBash[] = _( "Tucks in the head, then\n" "attacks on the next turn."); -static const u8 gMoveDescription_SpikeCannon[] = _( +static const u8 MoveDescription_SpikeCannon[] = _( "Launches sharp spikes that\n" "strike 2 to 5 times."); -static const u8 gMoveDescription_Constrict[] = _( +static const u8 MoveDescription_Constrict[] = _( "Constricts to inflict pain.\n" "May lower SPEED."); -static const u8 gMoveDescription_Amnesia[] = _( +static const u8 MoveDescription_Amnesia[] = _( "Forgets about something\n" "and sharply raises SP. DEF."); -static const u8 gMoveDescription_Kinesis[] = _( +static const u8 MoveDescription_Kinesis[] = _( "Distracts the foe.\n" "May lower accuracy."); -static const u8 gMoveDescription_SoftBoiled[] = _( +static const u8 MoveDescription_SoftBoiled[] = _( "Recovers up to half the\n" "user’s maximum HP."); -static const u8 gMoveDescription_HiJumpKick[] = _( +static const u8 MoveDescription_HiJumpKick[] = _( "A jumping knee kick. If it\n" "misses, the user is hurt."); -static const u8 gMoveDescription_Glare[] = _( +static const u8 MoveDescription_Glare[] = _( "Intimidates and frightens\n" "the foe into paralysis."); -static const u8 gMoveDescription_DreamEater[] = _( +static const u8 MoveDescription_DreamEater[] = _( "Takes one half the damage\n" "inflicted on a sleeping foe."); -static const u8 gMoveDescription_PoisonGas[] = _( +static const u8 MoveDescription_PoisonGas[] = _( "Envelops the foe in a toxic\n" "gas that may poison."); -static const u8 gMoveDescription_Barrage[] = _( +static const u8 MoveDescription_Barrage[] = _( "Hurls round objects at the\n" "foe 2 to 5 times."); -static const u8 gMoveDescription_LeechLife[] = _( +static const u8 MoveDescription_LeechLife[] = _( "An attack that steals half\n" "the damage inflicted."); -static const u8 gMoveDescription_LovelyKiss[] = _( +static const u8 MoveDescription_LovelyKiss[] = _( "Demands a kiss with a scary\n" "face that induces sleep."); -static const u8 gMoveDescription_SkyAttack[] = _( +static const u8 MoveDescription_SkyAttack[] = _( "Searches out weak spots,\n" "then strikes the next turn."); -static const u8 gMoveDescription_Transform[] = _( +static const u8 MoveDescription_Transform[] = _( "Alters the user’s cells to\n" "become a copy of the foe."); -static const u8 gMoveDescription_Bubble[] = _( +static const u8 MoveDescription_Bubble[] = _( "An attack using bubbles.\n" "May lower the foe’s SPEED."); -static const u8 gMoveDescription_DizzyPunch[] = _( +static const u8 MoveDescription_DizzyPunch[] = _( "A rhythmic punch that may\n" "confuse the foe."); -static const u8 gMoveDescription_Spore[] = _( +static const u8 MoveDescription_Spore[] = _( "Scatters a cloud of spores\n" "that always induce sleep."); -static const u8 gMoveDescription_Flash[] = _( +static const u8 MoveDescription_Flash[] = _( "Looses a powerful blast of\n" "light that cuts accuracy."); -static const u8 gMoveDescription_Psywave[] = _( +static const u8 MoveDescription_Psywave[] = _( "Attacks with a psychic\n" "wave of varying intensity."); -static const u8 gMoveDescription_Splash[] = _( +static const u8 MoveDescription_Splash[] = _( "It’s just a splash...\n" "Has no effect whatsoever."); -static const u8 gMoveDescription_AcidArmor[] = _( +static const u8 MoveDescription_AcidArmor[] = _( "Liquifies the user’s body\n" "to sharply raise DEFENSE."); -static const u8 gMoveDescription_Crabhammer[] = _( +static const u8 MoveDescription_Crabhammer[] = _( "Hammers with a pincer. Has a\n" "high critical-hit ratio."); -static const u8 gMoveDescription_Explosion[] = _( +static const u8 MoveDescription_Explosion[] = _( "Inflicts severe damage but\n" "makes the user faint."); -static const u8 gMoveDescription_FurySwipes[] = _( +static const u8 MoveDescription_FurySwipes[] = _( "Rakes the foe with sharp\n" "claws, etc., 2 to 5 times."); -static const u8 gMoveDescription_Bonemerang[] = _( +static const u8 MoveDescription_Bonemerang[] = _( "Throws a bone boomerang\n" "that strikes twice."); -static const u8 gMoveDescription_Rest[] = _( +static const u8 MoveDescription_Rest[] = _( "The user sleeps for 2 turns,\n" "restoring HP and status."); -static const u8 gMoveDescription_RockSlide[] = _( +static const u8 MoveDescription_RockSlide[] = _( "Large boulders are hurled.\n" "May cause flinching."); -static const u8 gMoveDescription_HyperFang[] = _( +static const u8 MoveDescription_HyperFang[] = _( "Attacks with sharp fangs.\n" "May cause flinching."); -static const u8 gMoveDescription_Sharpen[] = _( +static const u8 MoveDescription_Sharpen[] = _( "Reduces the polygon count\n" "and raises ATTACK."); -static const u8 gMoveDescription_Conversion[] = _( +static const u8 MoveDescription_Conversion[] = _( "Changes the user’s type\n" "into an own move’s type."); -static const u8 gMoveDescription_TriAttack[] = _( +static const u8 MoveDescription_TriAttack[] = _( "Fires three types of beams\n" "at the same time."); -static const u8 gMoveDescription_SuperFang[] = _( +static const u8 MoveDescription_SuperFang[] = _( "Attacks with sharp fangs\n" "and cuts half the foe’s HP."); -static const u8 gMoveDescription_Slash[] = _( +static const u8 MoveDescription_Slash[] = _( "Slashes with claws, etc. Has\n" "a high critical-hit ratio."); -static const u8 gMoveDescription_Substitute[] = _( +static const u8 MoveDescription_Substitute[] = _( "Creates a decoy using 1/4\n" "of the user’s maximum HP."); -static const u8 gMoveDescription_Struggle[] = _( +static const u8 MoveDescription_Struggle[] = _( "Used only if all PP are gone.\n" "Also hurts the user a little."); -static const u8 gMoveDescription_Sketch[] = _( +static const u8 MoveDescription_Sketch[] = _( "Copies the foe’s last move\n" "permanently."); -static const u8 gMoveDescription_TripleKick[] = _( +static const u8 MoveDescription_TripleKick[] = _( "Kicks the foe 3 times in a\n" "row with rising intensity."); -static const u8 gMoveDescription_Thief[] = _( +static const u8 MoveDescription_Thief[] = _( "While attacking, it may\n" "steal the foe’s held item."); -static const u8 gMoveDescription_SpiderWeb[] = _( +static const u8 MoveDescription_SpiderWeb[] = _( "Ensnares the foe to stop it\n" "from fleeing or switching."); -static const u8 gMoveDescription_MindReader[] = _( +static const u8 MoveDescription_MindReader[] = _( "Senses the foe’s action to\n" "ensure the next move’s hit."); -static const u8 gMoveDescription_Nightmare[] = _( +static const u8 MoveDescription_Nightmare[] = _( "Inflicts 1/4 damage on a\n" "sleeping foe every turn."); -static const u8 gMoveDescription_FlameWheel[] = _( +static const u8 MoveDescription_FlameWheel[] = _( "A fiery charge attack that\n" "may inflict a burn."); -static const u8 gMoveDescription_Snore[] = _( +static const u8 MoveDescription_Snore[] = _( "A loud attack that can be\n" "used only while asleep."); -static const u8 gMoveDescription_Curse[] = _( +static const u8 MoveDescription_Curse[] = _( "A move that functions\n" "differently for GHOSTS."); -static const u8 gMoveDescription_Flail[] = _( +static const u8 MoveDescription_Flail[] = _( "Inflicts more damage when\n" "the user’s HP is down."); -static const u8 gMoveDescription_Conversion2[] = _( +static const u8 MoveDescription_Conversion2[] = _( "Makes the user resistant\n" "to the last attack’s type."); -static const u8 gMoveDescription_Aeroblast[] = _( +static const u8 MoveDescription_Aeroblast[] = _( "Launches a vacuumed blast.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_CottonSpore[] = _( +static const u8 MoveDescription_CottonSpore[] = _( "Spores cling to the foe,\n" "sharply reducing SPEED."); -static const u8 gMoveDescription_Reversal[] = _( +static const u8 MoveDescription_Reversal[] = _( "Inflicts more damage when\n" "the user’s HP is down."); -static const u8 gMoveDescription_Spite[] = _( +static const u8 MoveDescription_Spite[] = _( "Spitefully cuts the PP\n" "of the foe’s last move."); -static const u8 gMoveDescription_PowderSnow[] = _( +static const u8 MoveDescription_PowderSnow[] = _( "Blasts the foe with a snowy\n" "gust. May cause freezing."); -static const u8 gMoveDescription_Protect[] = _( +static const u8 MoveDescription_Protect[] = _( "Evades attack, but may fail\n" "if used in succession."); -static const u8 gMoveDescription_MachPunch[] = _( +static const u8 MoveDescription_MachPunch[] = _( "A punch is thrown at wicked\n" "speed to strike first."); -static const u8 gMoveDescription_ScaryFace[] = _( +static const u8 MoveDescription_ScaryFace[] = _( "Frightens with a scary face\n" "to sharply reduce SPEED."); -static const u8 gMoveDescription_FaintAttack[] = _( +static const u8 MoveDescription_FaintAttack[] = _( "Draws the foe close, then\n" "strikes without fail."); -static const u8 gMoveDescription_SweetKiss[] = _( +static const u8 MoveDescription_SweetKiss[] = _( "Demands a kiss with a cute\n" "look. May cause confusion."); -static const u8 gMoveDescription_BellyDrum[] = _( +static const u8 MoveDescription_BellyDrum[] = _( "Maximizes ATTACK while\n" "sacrificing HP."); -static const u8 gMoveDescription_SludgeBomb[] = _( +static const u8 MoveDescription_SludgeBomb[] = _( "Sludge is hurled to inflict\n" "damage. May also poison."); -static const u8 gMoveDescription_MudSlap[] = _( +static const u8 MoveDescription_MudSlap[] = _( "Hurls mud in the foe’s face\n" "to reduce its accuracy."); -static const u8 gMoveDescription_Octazooka[] = _( +static const u8 MoveDescription_Octazooka[] = _( "Fires a lump of ink to\n" "damage and cut accuracy."); -static const u8 gMoveDescription_Spikes[] = _( +static const u8 MoveDescription_Spikes[] = _( "Sets spikes that hurt a \n" "foe switching out."); -static const u8 gMoveDescription_ZapCannon[] = _( +static const u8 MoveDescription_ZapCannon[] = _( "Powerful and sure to cause\n" "paralysis, but inaccurate."); -static const u8 gMoveDescription_Foresight[] = _( +static const u8 MoveDescription_Foresight[] = _( "Negates the foe’s efforts\n" "to heighten evasiveness."); -static const u8 gMoveDescription_DestinyBond[] = _( +static const u8 MoveDescription_DestinyBond[] = _( "If the user faints, the foe\n" "is also made to faint."); -static const u8 gMoveDescription_PerishSong[] = _( +static const u8 MoveDescription_PerishSong[] = _( "Any POKéMON hearing this\n" "song faints in 3 turns."); -static const u8 gMoveDescription_IcyWind[] = _( +static const u8 MoveDescription_IcyWind[] = _( "A chilling attack that\n" "lowers the foe’s SPEED."); -static const u8 gMoveDescription_Detect[] = _( +static const u8 MoveDescription_Detect[] = _( "Evades attack, but may fail\n" "if used in succession."); -static const u8 gMoveDescription_BoneRush[] = _( +static const u8 MoveDescription_BoneRush[] = _( "Strikes the foe with a bone\n" "in hand 2 to 5 times."); -static const u8 gMoveDescription_LockOn[] = _( +static const u8 MoveDescription_LockOn[] = _( "Locks on to the foe to\n" "ensure the next move hits."); -static const u8 gMoveDescription_Outrage[] = _( +static const u8 MoveDescription_Outrage[] = _( "A rampage of 2 to 3 turns\n" "that confuses the user."); -static const u8 gMoveDescription_Sandstorm[] = _( +static const u8 MoveDescription_Sandstorm[] = _( "Causes a sandstorm that\n" "rages for several turns."); -static const u8 gMoveDescription_GigaDrain[] = _( +static const u8 MoveDescription_GigaDrain[] = _( "An attack that steals half\n" "the damage inflicted."); -static const u8 gMoveDescription_Endure[] = _( +static const u8 MoveDescription_Endure[] = _( "Endures any attack for\n" "1 turn, leaving at least 1HP."); -static const u8 gMoveDescription_Charm[] = _( +static const u8 MoveDescription_Charm[] = _( "Charms the foe and sharply\n" "reduces its ATTACK."); -static const u8 gMoveDescription_Rollout[] = _( +static const u8 MoveDescription_Rollout[] = _( "An attack lasting 5 turns\n" "with rising intensity."); -static const u8 gMoveDescription_FalseSwipe[] = _( +static const u8 MoveDescription_FalseSwipe[] = _( "An attack that leaves the\n" "foe with at least 1 HP."); -static const u8 gMoveDescription_Swagger[] = _( +static const u8 MoveDescription_Swagger[] = _( "Confuses the foe, but also\n" "sharply raises ATTACK."); -static const u8 gMoveDescription_MilkDrink[] = _( +static const u8 MoveDescription_MilkDrink[] = _( "Recovers up to half the\n" "user’s maximum HP."); -static const u8 gMoveDescription_Spark[] = _( +static const u8 MoveDescription_Spark[] = _( "An electrified tackle that\n" "may paralyze the foe."); -static const u8 gMoveDescription_FuryCutter[] = _( +static const u8 MoveDescription_FuryCutter[] = _( "An attack that intensifies\n" "on each successive hit."); -static const u8 gMoveDescription_SteelWing[] = _( +static const u8 MoveDescription_SteelWing[] = _( "Strikes the foe with hard\n" "wings spread wide."); -static const u8 gMoveDescription_MeanLook[] = _( +static const u8 MoveDescription_MeanLook[] = _( "Fixes the foe with a mean\n" "look that prevents escape."); -static const u8 gMoveDescription_Attract[] = _( +static const u8 MoveDescription_Attract[] = _( "Makes the opposite gender\n" "less likely to attack."); -static const u8 gMoveDescription_SleepTalk[] = _( +static const u8 MoveDescription_SleepTalk[] = _( "Uses an own move randomly\n" "while asleep."); -static const u8 gMoveDescription_HealBell[] = _( +static const u8 MoveDescription_HealBell[] = _( "Chimes soothingly to heal\n" "all status abnormalities."); -static const u8 gMoveDescription_Return[] = _( +static const u8 MoveDescription_Return[] = _( "An attack that increases\n" "in power with friendship."); -static const u8 gMoveDescription_Present[] = _( +static const u8 MoveDescription_Present[] = _( "A gift in the form of a\n" "bomb. May restore HP."); -static const u8 gMoveDescription_Frustration[] = _( +static const u8 MoveDescription_Frustration[] = _( "An attack that is stronger\n" "if the TRAINER is disliked."); -static const u8 gMoveDescription_Safeguard[] = _( +static const u8 MoveDescription_Safeguard[] = _( "A mystical force prevents\n" "all status problems."); -static const u8 gMoveDescription_PainSplit[] = _( +static const u8 MoveDescription_PainSplit[] = _( "Adds the user and foe’s HP,\n" "then shares them equally."); -static const u8 gMoveDescription_SacredFire[] = _( +static const u8 MoveDescription_SacredFire[] = _( "A mystical fire attack that\n" "may inflict a burn."); -static const u8 gMoveDescription_Magnitude[] = _( +static const u8 MoveDescription_Magnitude[] = _( "A ground-shaking attack\n" "of random intensity."); -static const u8 gMoveDescription_DynamicPunch[] = _( +static const u8 MoveDescription_DynamicPunch[] = _( "Powerful and sure to cause\n" "confusion, but inaccurate."); -static const u8 gMoveDescription_Megahorn[] = _( +static const u8 MoveDescription_Megahorn[] = _( "A brutal ramming attack\n" "using out-thrust horns."); -static const u8 gMoveDescription_DragonBreath[] = _( +static const u8 MoveDescription_DragonBreath[] = _( "Strikes the foe with an\n" "incredible blast of breath."); -static const u8 gMoveDescription_BatonPass[] = _( +static const u8 MoveDescription_BatonPass[] = _( "Switches out the user while\n" "keeping effects in play."); -static const u8 gMoveDescription_Encore[] = _( +static const u8 MoveDescription_Encore[] = _( "Makes the foe repeat its\n" "last move over 2 to 6 turns."); -static const u8 gMoveDescription_Pursuit[] = _( +static const u8 MoveDescription_Pursuit[] = _( "Inflicts bad damage if used\n" "on a foe switching out."); -static const u8 gMoveDescription_RapidSpin[] = _( +static const u8 MoveDescription_RapidSpin[] = _( "Spins the body at high\n" "speed to strike the foe."); -static const u8 gMoveDescription_SweetScent[] = _( +static const u8 MoveDescription_SweetScent[] = _( "Allures the foe to reduce\n" "evasiveness."); -static const u8 gMoveDescription_IronTail[] = _( +static const u8 MoveDescription_IronTail[] = _( "Attacks with a rock-hard\n" "tail. May lower DEFENSE."); -static const u8 gMoveDescription_MetalClaw[] = _( +static const u8 MoveDescription_MetalClaw[] = _( "A claw attack that may\n" "raise the user’s ATTACK."); -static const u8 gMoveDescription_VitalThrow[] = _( +static const u8 MoveDescription_VitalThrow[] = _( "Makes the user’s move last,\n" "but it never misses."); -static const u8 gMoveDescription_MorningSun[] = _( +static const u8 MoveDescription_MorningSun[] = _( "Restores HP. The amount\n" "varies with the weather."); -static const u8 gMoveDescription_Synthesis[] = _( +static const u8 MoveDescription_Synthesis[] = _( "Restores HP. The amount\n" "varies with the weather."); -static const u8 gMoveDescription_Moonlight[] = _( +static const u8 MoveDescription_Moonlight[] = _( "Restores HP. The amount\n" "varies with the weather."); -static const u8 gMoveDescription_HiddenPower[] = _( +static const u8 MoveDescription_HiddenPower[] = _( "The effectiveness varies\n" "with the user."); -static const u8 gMoveDescription_CrossChop[] = _( +static const u8 MoveDescription_CrossChop[] = _( "A double-chopping attack.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_Twister[] = _( +static const u8 MoveDescription_Twister[] = _( "Whips up a vicious twister\n" "to tear at the foe."); -static const u8 gMoveDescription_RainDance[] = _( +static const u8 MoveDescription_RainDance[] = _( "Boosts the power of WATER-\n" "type moves for 5 turns."); -static const u8 gMoveDescription_SunnyDay[] = _( +static const u8 MoveDescription_SunnyDay[] = _( "Boosts the power of FIRE-\n" "type moves for 5 turns."); -static const u8 gMoveDescription_Crunch[] = _( +static const u8 MoveDescription_Crunch[] = _( "Crunches with sharp fangs.\n" "May lower SP. DEF."); -static const u8 gMoveDescription_MirrorCoat[] = _( +static const u8 MoveDescription_MirrorCoat[] = _( "Counters the foe’s special\n" "attack at double the power."); -static const u8 gMoveDescription_PsychUp[] = _( +static const u8 MoveDescription_PsychUp[] = _( "Copies the foe’s effect(s)\n" "and gives to the user."); -static const u8 gMoveDescription_ExtremeSpeed[] = _( +static const u8 MoveDescription_ExtremeSpeed[] = _( "An extremely fast and\n" "powerful attack."); -static const u8 gMoveDescription_AncientPower[] = _( +static const u8 MoveDescription_AncientPower[] = _( "An attack that may raise\n" "all stats."); -static const u8 gMoveDescription_ShadowBall[] = _( +static const u8 MoveDescription_ShadowBall[] = _( "Hurls a black blob that may\n" "lower the foe’s SP. DEF."); -static const u8 gMoveDescription_FutureSight[] = _( +static const u8 MoveDescription_FutureSight[] = _( "Heightens inner power to\n" "strike 2 turns later."); -static const u8 gMoveDescription_RockSmash[] = _( +static const u8 MoveDescription_RockSmash[] = _( "A rock-crushing attack\n" "that may lower DEFENSE."); -static const u8 gMoveDescription_Whirlpool[] = _( +static const u8 MoveDescription_Whirlpool[] = _( "Traps and hurts the foe in\n" "a whirlpool for 2 to 5 turns."); -static const u8 gMoveDescription_BeatUp[] = _( +static const u8 MoveDescription_BeatUp[] = _( "Summons party POKéMON to\n" "join in the attack."); -static const u8 gMoveDescription_FakeOut[] = _( +static const u8 MoveDescription_FakeOut[] = _( "A 1st-turn, 1st-strike move\n" "that causes flinching."); -static const u8 gMoveDescription_Uproar[] = _( +static const u8 MoveDescription_Uproar[] = _( "Causes an uproar for 2 to 5\n" "turns and prevents sleep."); -static const u8 gMoveDescription_Stockpile[] = _( +static const u8 MoveDescription_Stockpile[] = _( "Charges up power for up to\n" "3 turns."); -static const u8 gMoveDescription_SpitUp[] = _( +static const u8 MoveDescription_SpitUp[] = _( "Releases stockpiled power\n" "(the more the better)."); -static const u8 gMoveDescription_Swallow[] = _( +static const u8 MoveDescription_Swallow[] = _( "Absorbs stockpiled power\n" "and restores HP."); -static const u8 gMoveDescription_HeatWave[] = _( +static const u8 MoveDescription_HeatWave[] = _( "Exhales a hot breath on the\n" "foe. May inflict a burn."); -static const u8 gMoveDescription_Hail[] = _( +static const u8 MoveDescription_Hail[] = _( "Summons a hailstorm that\n" "strikes every turn."); -static const u8 gMoveDescription_Torment[] = _( +static const u8 MoveDescription_Torment[] = _( "Torments the foe and stops\n" "successive use of a move."); -static const u8 gMoveDescription_Flatter[] = _( +static const u8 MoveDescription_Flatter[] = _( "Confuses the foe, but\n" "raises its SP. ATK."); -static const u8 gMoveDescription_WillOWisp[] = _( +static const u8 MoveDescription_WillOWisp[] = _( "Inflicts a burn on the foe\n" "with intense fire."); -static const u8 gMoveDescription_Memento[] = _( +static const u8 MoveDescription_Memento[] = _( "The user faints and lowers\n" "the foe’s abilities."); -static const u8 gMoveDescription_Facade[] = _( +static const u8 MoveDescription_Facade[] = _( "Boosts ATTACK when burned,\n" "paralyzed, or poisoned."); -static const u8 gMoveDescription_FocusPunch[] = _( +static const u8 MoveDescription_FocusPunch[] = _( "A powerful loyalty attack.\n" "The user flinches if hit."); -static const u8 gMoveDescription_SmellingSalt[] = _( +static const u8 MoveDescription_SmellingSalt[] = _( "Powerful against paralyzed\n" "foes, but also heals them."); -static const u8 gMoveDescription_FollowMe[] = _( +static const u8 MoveDescription_FollowMe[] = _( "Draws attention to make\n" "foes attack only the user."); -static const u8 gMoveDescription_NaturePower[] = _( +static const u8 MoveDescription_NaturePower[] = _( "The type of attack varies\n" "depending on the location."); -static const u8 gMoveDescription_Charge[] = _( +static const u8 MoveDescription_Charge[] = _( "Charges power to boost the\n" "electric move used next."); -static const u8 gMoveDescription_Taunt[] = _( +static const u8 MoveDescription_Taunt[] = _( "Taunts the foe into only\n" "using attack moves."); -static const u8 gMoveDescription_HelpingHand[] = _( +static const u8 MoveDescription_HelpingHand[] = _( "Boosts the power of the\n" "recipient’s moves."); -static const u8 gMoveDescription_Trick[] = _( +static const u8 MoveDescription_Trick[] = _( "Tricks the foe into trading\n" "held items."); -static const u8 gMoveDescription_RolePlay[] = _( +static const u8 MoveDescription_RolePlay[] = _( "Mimics the target and\n" "copies its special ability."); -static const u8 gMoveDescription_Wish[] = _( +static const u8 MoveDescription_Wish[] = _( "A wish that restores HP.\n" "It takes time to work."); -static const u8 gMoveDescription_Assist[] = _( +static const u8 MoveDescription_Assist[] = _( "Attacks randomly with one\n" "of the partner’s moves."); -static const u8 gMoveDescription_Ingrain[] = _( +static const u8 MoveDescription_Ingrain[] = _( "Lays roots that restore HP.\n" "The user can’t switch out."); -static const u8 gMoveDescription_Superpower[] = _( +static const u8 MoveDescription_Superpower[] = _( "Boosts strength sharply,\n" "but lowers abilities."); -static const u8 gMoveDescription_MagicCoat[] = _( +static const u8 MoveDescription_MagicCoat[] = _( "Reflects special effects\n" "back to the attacker."); -static const u8 gMoveDescription_Recycle[] = _( +static const u8 MoveDescription_Recycle[] = _( "Recycles a used item for\n" "one more use."); -static const u8 gMoveDescription_Revenge[] = _( +static const u8 MoveDescription_Revenge[] = _( "An attack that gains power\n" "if injured by the foe."); -static const u8 gMoveDescription_BrickBreak[] = _( +static const u8 MoveDescription_BrickBreak[] = _( "Destroys barriers such as\n" "REFLECT and causes damage."); -static const u8 gMoveDescription_Yawn[] = _( +static const u8 MoveDescription_Yawn[] = _( "Lulls the foe into yawning,\n" "then sleeping next turn."); -static const u8 gMoveDescription_KnockOff[] = _( +static const u8 MoveDescription_KnockOff[] = _( "Knocks down the foe’s held\n" "item to prevent its use."); -static const u8 gMoveDescription_Endeavor[] = _( +static const u8 MoveDescription_Endeavor[] = _( "Gains power if the user’s HP\n" "is lower than the foe’s HP."); -static const u8 gMoveDescription_Eruption[] = _( +static const u8 MoveDescription_Eruption[] = _( "The higher the user’s HP,\n" "the more damage caused."); -static const u8 gMoveDescription_SkillSwap[] = _( +static const u8 MoveDescription_SkillSwap[] = _( "The user swaps special\n" "abilities with the target."); -static const u8 gMoveDescription_Imprison[] = _( +static const u8 MoveDescription_Imprison[] = _( "Prevents foes from using\n" "moves known by the user."); -static const u8 gMoveDescription_Refresh[] = _( +static const u8 MoveDescription_Refresh[] = _( "Heals poisoning, paralysis,\n" "or a burn."); -static const u8 gMoveDescription_Grudge[] = _( +static const u8 MoveDescription_Grudge[] = _( "If the user faints, deletes\n" "the PP of the final move."); -static const u8 gMoveDescription_Snatch[] = _( +static const u8 MoveDescription_Snatch[] = _( "Steals the effects of the\n" "move the foe uses next."); -static const u8 gMoveDescription_SecretPower[] = _( +static const u8 MoveDescription_SecretPower[] = _( "An attack with effects\n" "that vary by location."); -static const u8 gMoveDescription_Dive[] = _( +static const u8 MoveDescription_Dive[] = _( "Dives underwater the first\n" "turn and strikes next turn."); -static const u8 gMoveDescription_ArmThrust[] = _( +static const u8 MoveDescription_ArmThrust[] = _( "Straight-arm punches that\n" "strike the foe 2 to 5 times."); -static const u8 gMoveDescription_Camouflage[] = _( +static const u8 MoveDescription_Camouflage[] = _( "Alters the POKéMON’s type\n" "depending on the location."); -static const u8 gMoveDescription_TailGlow[] = _( +static const u8 MoveDescription_TailGlow[] = _( "Flashes a light that sharply\n" "raises SP. ATK."); -static const u8 gMoveDescription_LusterPurge[] = _( +static const u8 MoveDescription_LusterPurge[] = _( "Attacks with a burst of\n" "light. May lower SP. DEF."); -static const u8 gMoveDescription_MistBall[] = _( +static const u8 MoveDescription_MistBall[] = _( "Attacks with a flurry of\n" "down. May lower SP. ATK."); -static const u8 gMoveDescription_FeatherDance[] = _( +static const u8 MoveDescription_FeatherDance[] = _( "Envelops the foe with down\n" "to sharply reduce ATTACK."); -static const u8 gMoveDescription_TeeterDance[] = _( +static const u8 MoveDescription_TeeterDance[] = _( "Confuses all POKéMON on\n" "the scene."); -static const u8 gMoveDescription_BlazeKick[] = _( +static const u8 MoveDescription_BlazeKick[] = _( "A kick with a high critical-\n" "hit ratio. May cause a burn."); -static const u8 gMoveDescription_MudSport[] = _( +static const u8 MoveDescription_MudSport[] = _( "Covers the user in mud to\n" "raise electrical resistance."); -static const u8 gMoveDescription_IceBall[] = _( +static const u8 MoveDescription_IceBall[] = _( "A 5-turn attack that gains\n" "power on successive hits."); -static const u8 gMoveDescription_NeedleArm[] = _( +static const u8 MoveDescription_NeedleArm[] = _( "Attacks with thorny arms.\n" "May cause flinching."); -static const u8 gMoveDescription_SlackOff[] = _( +static const u8 MoveDescription_SlackOff[] = _( "Slacks off and restores\n" "half the maximum HP."); -static const u8 gMoveDescription_HyperVoice[] = _( +static const u8 MoveDescription_HyperVoice[] = _( "A loud attack that uses\n" "sound waves to injure."); -static const u8 gMoveDescription_PoisonFang[] = _( +static const u8 MoveDescription_PoisonFang[] = _( "A sharp-fanged attack.\n" "May badly poison the foe."); -static const u8 gMoveDescription_CrushClaw[] = _( +static const u8 MoveDescription_CrushClaw[] = _( "Tears at the foe with sharp\n" "claws. May lower DEFENSE."); -static const u8 gMoveDescription_BlastBurn[] = _( +static const u8 MoveDescription_BlastBurn[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_HydroCannon[] = _( +static const u8 MoveDescription_HydroCannon[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_MeteorMash[] = _( +static const u8 MoveDescription_MeteorMash[] = _( "Fires a meteor-like punch.\n" "May raise ATTACK."); -static const u8 gMoveDescription_Astonish[] = _( +static const u8 MoveDescription_Astonish[] = _( "An attack that may shock\n" "the foe into flinching."); -static const u8 gMoveDescription_WeatherBall[] = _( +static const u8 MoveDescription_WeatherBall[] = _( "The move’s type and power\n" "change with the weather."); -static const u8 gMoveDescription_Aromatherapy[] = _( +static const u8 MoveDescription_Aromatherapy[] = _( "Heals all status problems\n" "with a soothing scent."); -static const u8 gMoveDescription_FakeTears[] = _( +static const u8 MoveDescription_FakeTears[] = _( "Feigns crying to sharply\n" "lower the foe’s SP. DEF."); -static const u8 gMoveDescription_AirCutter[] = _( +static const u8 MoveDescription_AirCutter[] = _( "Hacks with razorlike wind.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_Overheat[] = _( +static const u8 MoveDescription_Overheat[] = _( "Allows a full-power attack,\n" "but sharply lowers SP. ATK."); -static const u8 gMoveDescription_OdorSleuth[] = _( +static const u8 MoveDescription_OdorSleuth[] = _( "Negates the foe’s efforts\n" "to heighten evasiveness."); -static const u8 gMoveDescription_RockTomb[] = _( +static const u8 MoveDescription_RockTomb[] = _( "Stops the foe from moving\n" "with rocks and cuts SPEED."); -static const u8 gMoveDescription_SilverWind[] = _( +static const u8 MoveDescription_SilverWind[] = _( "A powdery attack that may\n" "raise abilities."); -static const u8 gMoveDescription_MetalSound[] = _( +static const u8 MoveDescription_MetalSound[] = _( "Emits a horrible screech\n" "that sharply lowers SP. DEF."); -static const u8 gMoveDescription_GrassWhistle[] = _( +static const u8 MoveDescription_GrassWhistle[] = _( "Lulls the foe into sleep\n" "with a pleasant melody."); -static const u8 gMoveDescription_Tickle[] = _( +static const u8 MoveDescription_Tickle[] = _( "Makes the foe laugh to\n" "lower ATTACK and DEFENSE."); -static const u8 gMoveDescription_CosmicPower[] = _( +static const u8 MoveDescription_CosmicPower[] = _( "Raises DEFENSE and SP. DEF\n" "with a mystic power."); -static const u8 gMoveDescription_WaterSpout[] = _( +static const u8 MoveDescription_WaterSpout[] = _( "Inflicts more damage if the\n" "user’s HP is high."); -static const u8 gMoveDescription_SignalBeam[] = _( +static const u8 MoveDescription_SignalBeam[] = _( "A strange beam attack that\n" "may confuse the foe."); -static const u8 gMoveDescription_ShadowPunch[] = _( +static const u8 MoveDescription_ShadowPunch[] = _( "An unavoidable punch that\n" "is thrown from shadows."); -static const u8 gMoveDescription_Extrasensory[] = _( +static const u8 MoveDescription_Extrasensory[] = _( "Attacks with a peculiar\n" "power. May cause flinching."); -static const u8 gMoveDescription_SkyUppercut[] = _( +static const u8 MoveDescription_SkyUppercut[] = _( "An uppercut thrown as if\n" "leaping into the sky."); -static const u8 gMoveDescription_SandTomb[] = _( +static const u8 MoveDescription_SandTomb[] = _( "Traps and hurts the foe in\n" "quicksand for 2 to 5 turns."); -static const u8 gMoveDescription_SheerCold[] = _( +static const u8 MoveDescription_SheerCold[] = _( "A chilling attack that\n" "causes fainting if it hits."); -static const u8 gMoveDescription_MuddyWater[] = _( +static const u8 MoveDescription_MuddyWater[] = _( "Attacks with muddy water.\n" "May lower accuracy."); -static const u8 gMoveDescription_BulletSeed[] = _( +static const u8 MoveDescription_BulletSeed[] = _( "Shoots 2 to 5 seeds in a row\n" "to strike the foe."); -static const u8 gMoveDescription_AerialAce[] = _( +static const u8 MoveDescription_AerialAce[] = _( "An extremely speedy and\n" "unavoidable attack."); -static const u8 gMoveDescription_IcicleSpear[] = _( +static const u8 MoveDescription_IcicleSpear[] = _( "Attacks the foe by firing\n" "2 to 5 icicles in a row."); -static const u8 gMoveDescription_IronDefense[] = _( +static const u8 MoveDescription_IronDefense[] = _( "Hardens the body’s surface\n" "to sharply raise DEFENSE."); -static const u8 gMoveDescription_Block[] = _( +static const u8 MoveDescription_Block[] = _( "Blocks the foe’s way to\n" "prevent escape."); -static const u8 gMoveDescription_Howl[] = _( +static const u8 MoveDescription_Howl[] = _( "Howls to raise the spirit\n" "and boosts ATTACK."); -static const u8 gMoveDescription_DragonClaw[] = _( +static const u8 MoveDescription_DragonClaw[] = _( "Slashes the foe with sharp\n" "claws."); -static const u8 gMoveDescription_FrenzyPlant[] = _( +static const u8 MoveDescription_FrenzyPlant[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_BulkUp[] = _( +static const u8 MoveDescription_BulkUp[] = _( "Bulks up the body to boost\n" "both ATTACK and DEFENSE."); -static const u8 gMoveDescription_Bounce[] = _( +static const u8 MoveDescription_Bounce[] = _( "Bounces up, then down the\n" "next turn. May paralyze."); -static const u8 gMoveDescription_MudShot[] = _( +static const u8 MoveDescription_MudShot[] = _( "Hurls mud at the foe and\n" "reduces SPEED."); -static const u8 gMoveDescription_PoisonTail[] = _( +static const u8 MoveDescription_PoisonTail[] = _( "Has a high critical-hit\n" "ratio. May also poison."); -static const u8 gMoveDescription_Covet[] = _( +static const u8 MoveDescription_Covet[] = _( "Cutely begs to obtain an\n" "item held by the foe."); -static const u8 gMoveDescription_VoltTackle[] = _( +static const u8 MoveDescription_VoltTackle[] = _( "A life-risking tackle that\n" "slightly hurts the user."); -static const u8 gMoveDescription_MagicalLeaf[] = _( +static const u8 MoveDescription_MagicalLeaf[] = _( "Attacks with a strange leaf\n" "that cannot be evaded."); -static const u8 gMoveDescription_WaterSport[] = _( +static const u8 MoveDescription_WaterSport[] = _( "The user becomes soaked to\n" "raise resistance to fire."); -static const u8 gMoveDescription_CalmMind[] = _( +static const u8 MoveDescription_CalmMind[] = _( "Raises SP. ATK and SP. DEF\n" "by focusing the mind."); -static const u8 gMoveDescription_LeafBlade[] = _( +static const u8 MoveDescription_LeafBlade[] = _( "Slashes with a sharp leaf.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_DragonDance[] = _( +static const u8 MoveDescription_DragonDance[] = _( "A mystical dance that ups\n" "ATTACK and SPEED."); -static const u8 gMoveDescription_RockBlast[] = _( +static const u8 MoveDescription_RockBlast[] = _( "Hurls boulders at the foe\n" "2 to 5 times in a row."); -static const u8 gMoveDescription_ShockWave[] = _( +static const u8 MoveDescription_ShockWave[] = _( "A fast and unavoidable\n" "electric attack."); -static const u8 gMoveDescription_WaterPulse[] = _( +static const u8 MoveDescription_WaterPulse[] = _( "Attacks with ultrasonic\n" "waves. May confuse the foe"); -static const u8 gMoveDescription_DoomDesire[] = _( +static const u8 MoveDescription_DoomDesire[] = _( "Summons strong sunlight to\n" "attack 2 turns later."); -static const u8 gMoveDescription_PsychoBoost[] = _( +static const u8 MoveDescription_PsychoBoost[] = _( "Allows a full-power attack,\n" "but sharply lowers SP. ATK."); const u8 * const gMoveDescriptions[] = { - gMoveDescription_Pound, - gMoveDescription_KarateChop, - gMoveDescription_DoubleSlap, - gMoveDescription_CometPunch, - gMoveDescription_MegaPunch, - gMoveDescription_PayDay, - gMoveDescription_FirePunch, - gMoveDescription_IcePunch, - gMoveDescription_ThunderPunch, - gMoveDescription_Scratch, - gMoveDescription_ViceGrip, - gMoveDescription_Guillotine, - gMoveDescription_RazorWind, - gMoveDescription_SwordsDance, - gMoveDescription_Cut, - gMoveDescription_Gust, - gMoveDescription_WingAttack, - gMoveDescription_Whirlwind, - gMoveDescription_Fly, - gMoveDescription_Bind, - gMoveDescription_Slam, - gMoveDescription_VineWhip, - gMoveDescription_Stomp, - gMoveDescription_DoubleKick, - gMoveDescription_MegaKick, - gMoveDescription_JumpKick, - gMoveDescription_RollingKick, - gMoveDescription_SandAttack, - gMoveDescription_Headbutt, - gMoveDescription_HornAttack, - gMoveDescription_FuryAttack, - gMoveDescription_HornDrill, - gMoveDescription_Tackle, - gMoveDescription_BodySlam, - gMoveDescription_Wrap, - gMoveDescription_TakeDown, - gMoveDescription_Thrash, - gMoveDescription_DoubleEdge, - gMoveDescription_TailWhip, - gMoveDescription_PoisonSting, - gMoveDescription_Twineedle, - gMoveDescription_PinMissile, - gMoveDescription_Leer, - gMoveDescription_Bite, - gMoveDescription_Growl, - gMoveDescription_Roar, - gMoveDescription_Sing, - gMoveDescription_Supersonic, - gMoveDescription_SonicBoom, - gMoveDescription_Disable, - gMoveDescription_Acid, - gMoveDescription_Ember, - gMoveDescription_Flamethrower, - gMoveDescription_Mist, - gMoveDescription_WaterGun, - gMoveDescription_HydroPump, - gMoveDescription_Surf, - gMoveDescription_IceBeam, - gMoveDescription_Blizzard, - gMoveDescription_Psybeam, - gMoveDescription_BubbleBeam, - gMoveDescription_AuroraBeam, - gMoveDescription_HyperBeam, - gMoveDescription_Peck, - gMoveDescription_DrillPeck, - gMoveDescription_Submission, - gMoveDescription_LowKick, - gMoveDescription_Counter, - gMoveDescription_SeismicToss, - gMoveDescription_Strength, - gMoveDescription_Absorb, - gMoveDescription_MegaDrain, - gMoveDescription_LeechSeed, - gMoveDescription_Growth, - gMoveDescription_RazorLeaf, - gMoveDescription_SolarBeam, - gMoveDescription_PoisonPowder, - gMoveDescription_StunSpore, - gMoveDescription_SleepPowder, - gMoveDescription_PetalDance, - gMoveDescription_StringShot, - gMoveDescription_DragonRage, - gMoveDescription_FireSpin, - gMoveDescription_ThunderShock, - gMoveDescription_Thunderbolt, - gMoveDescription_ThunderWave, - gMoveDescription_Thunder, - gMoveDescription_RockThrow, - gMoveDescription_Earthquake, - gMoveDescription_Fissure, - gMoveDescription_Dig, - gMoveDescription_Toxic, - gMoveDescription_Confusion, - gMoveDescription_Psychic, - gMoveDescription_Hypnosis, - gMoveDescription_Meditate, - gMoveDescription_Agility, - gMoveDescription_QuickAttack, - gMoveDescription_Rage, - gMoveDescription_Teleport, - gMoveDescription_NightShade, - gMoveDescription_Mimic, - gMoveDescription_Screech, - gMoveDescription_DoubleTeam, - gMoveDescription_Recover, - gMoveDescription_Harden, - gMoveDescription_Minimize, - gMoveDescription_Smokescreen, - gMoveDescription_ConfuseRay, - gMoveDescription_Withdraw, - gMoveDescription_DefenseCurl, - gMoveDescription_Barrier, - gMoveDescription_LightScreen, - gMoveDescription_Haze, - gMoveDescription_Reflect, - gMoveDescription_FocusEnergy, - gMoveDescription_Bide, - gMoveDescription_Metronome, - gMoveDescription_MirrorMove, - gMoveDescription_SelfDestruct, - gMoveDescription_EggBomb, - gMoveDescription_Lick, - gMoveDescription_Smog, - gMoveDescription_Sludge, - gMoveDescription_BoneClub, - gMoveDescription_FireBlast, - gMoveDescription_Waterfall, - gMoveDescription_Clamp, - gMoveDescription_Swift, - gMoveDescription_SkullBash, - gMoveDescription_SpikeCannon, - gMoveDescription_Constrict, - gMoveDescription_Amnesia, - gMoveDescription_Kinesis, - gMoveDescription_SoftBoiled, - gMoveDescription_HiJumpKick, - gMoveDescription_Glare, - gMoveDescription_DreamEater, - gMoveDescription_PoisonGas, - gMoveDescription_Barrage, - gMoveDescription_LeechLife, - gMoveDescription_LovelyKiss, - gMoveDescription_SkyAttack, - gMoveDescription_Transform, - gMoveDescription_Bubble, - gMoveDescription_DizzyPunch, - gMoveDescription_Spore, - gMoveDescription_Flash, - gMoveDescription_Psywave, - gMoveDescription_Splash, - gMoveDescription_AcidArmor, - gMoveDescription_Crabhammer, - gMoveDescription_Explosion, - gMoveDescription_FurySwipes, - gMoveDescription_Bonemerang, - gMoveDescription_Rest, - gMoveDescription_RockSlide, - gMoveDescription_HyperFang, - gMoveDescription_Sharpen, - gMoveDescription_Conversion, - gMoveDescription_TriAttack, - gMoveDescription_SuperFang, - gMoveDescription_Slash, - gMoveDescription_Substitute, - gMoveDescription_Struggle, - gMoveDescription_Sketch, - gMoveDescription_TripleKick, - gMoveDescription_Thief, - gMoveDescription_SpiderWeb, - gMoveDescription_MindReader, - gMoveDescription_Nightmare, - gMoveDescription_FlameWheel, - gMoveDescription_Snore, - gMoveDescription_Curse, - gMoveDescription_Flail, - gMoveDescription_Conversion2, - gMoveDescription_Aeroblast, - gMoveDescription_CottonSpore, - gMoveDescription_Reversal, - gMoveDescription_Spite, - gMoveDescription_PowderSnow, - gMoveDescription_Protect, - gMoveDescription_MachPunch, - gMoveDescription_ScaryFace, - gMoveDescription_FaintAttack, - gMoveDescription_SweetKiss, - gMoveDescription_BellyDrum, - gMoveDescription_SludgeBomb, - gMoveDescription_MudSlap, - gMoveDescription_Octazooka, - gMoveDescription_Spikes, - gMoveDescription_ZapCannon, - gMoveDescription_Foresight, - gMoveDescription_DestinyBond, - gMoveDescription_PerishSong, - gMoveDescription_IcyWind, - gMoveDescription_Detect, - gMoveDescription_BoneRush, - gMoveDescription_LockOn, - gMoveDescription_Outrage, - gMoveDescription_Sandstorm, - gMoveDescription_GigaDrain, - gMoveDescription_Endure, - gMoveDescription_Charm, - gMoveDescription_Rollout, - gMoveDescription_FalseSwipe, - gMoveDescription_Swagger, - gMoveDescription_MilkDrink, - gMoveDescription_Spark, - gMoveDescription_FuryCutter, - gMoveDescription_SteelWing, - gMoveDescription_MeanLook, - gMoveDescription_Attract, - gMoveDescription_SleepTalk, - gMoveDescription_HealBell, - gMoveDescription_Return, - gMoveDescription_Present, - gMoveDescription_Frustration, - gMoveDescription_Safeguard, - gMoveDescription_PainSplit, - gMoveDescription_SacredFire, - gMoveDescription_Magnitude, - gMoveDescription_DynamicPunch, - gMoveDescription_Megahorn, - gMoveDescription_DragonBreath, - gMoveDescription_BatonPass, - gMoveDescription_Encore, - gMoveDescription_Pursuit, - gMoveDescription_RapidSpin, - gMoveDescription_SweetScent, - gMoveDescription_IronTail, - gMoveDescription_MetalClaw, - gMoveDescription_VitalThrow, - gMoveDescription_MorningSun, - gMoveDescription_Synthesis, - gMoveDescription_Moonlight, - gMoveDescription_HiddenPower, - gMoveDescription_CrossChop, - gMoveDescription_Twister, - gMoveDescription_RainDance, - gMoveDescription_SunnyDay, - gMoveDescription_Crunch, - gMoveDescription_MirrorCoat, - gMoveDescription_PsychUp, - gMoveDescription_ExtremeSpeed, - gMoveDescription_AncientPower, - gMoveDescription_ShadowBall, - gMoveDescription_FutureSight, - gMoveDescription_RockSmash, - gMoveDescription_Whirlpool, - gMoveDescription_BeatUp, - gMoveDescription_FakeOut, - gMoveDescription_Uproar, - gMoveDescription_Stockpile, - gMoveDescription_SpitUp, - gMoveDescription_Swallow, - gMoveDescription_HeatWave, - gMoveDescription_Hail, - gMoveDescription_Torment, - gMoveDescription_Flatter, - gMoveDescription_WillOWisp, - gMoveDescription_Memento, - gMoveDescription_Facade, - gMoveDescription_FocusPunch, - gMoveDescription_SmellingSalt, - gMoveDescription_FollowMe, - gMoveDescription_NaturePower, - gMoveDescription_Charge, - gMoveDescription_Taunt, - gMoveDescription_HelpingHand, - gMoveDescription_Trick, - gMoveDescription_RolePlay, - gMoveDescription_Wish, - gMoveDescription_Assist, - gMoveDescription_Ingrain, - gMoveDescription_Superpower, - gMoveDescription_MagicCoat, - gMoveDescription_Recycle, - gMoveDescription_Revenge, - gMoveDescription_BrickBreak, - gMoveDescription_Yawn, - gMoveDescription_KnockOff, - gMoveDescription_Endeavor, - gMoveDescription_Eruption, - gMoveDescription_SkillSwap, - gMoveDescription_Imprison, - gMoveDescription_Refresh, - gMoveDescription_Grudge, - gMoveDescription_Snatch, - gMoveDescription_SecretPower, - gMoveDescription_Dive, - gMoveDescription_ArmThrust, - gMoveDescription_Camouflage, - gMoveDescription_TailGlow, - gMoveDescription_LusterPurge, - gMoveDescription_MistBall, - gMoveDescription_FeatherDance, - gMoveDescription_TeeterDance, - gMoveDescription_BlazeKick, - gMoveDescription_MudSport, - gMoveDescription_IceBall, - gMoveDescription_NeedleArm, - gMoveDescription_SlackOff, - gMoveDescription_HyperVoice, - gMoveDescription_PoisonFang, - gMoveDescription_CrushClaw, - gMoveDescription_BlastBurn, - gMoveDescription_HydroCannon, - gMoveDescription_MeteorMash, - gMoveDescription_Astonish, - gMoveDescription_WeatherBall, - gMoveDescription_Aromatherapy, - gMoveDescription_FakeTears, - gMoveDescription_AirCutter, - gMoveDescription_Overheat, - gMoveDescription_OdorSleuth, - gMoveDescription_RockTomb, - gMoveDescription_SilverWind, - gMoveDescription_MetalSound, - gMoveDescription_GrassWhistle, - gMoveDescription_Tickle, - gMoveDescription_CosmicPower, - gMoveDescription_WaterSpout, - gMoveDescription_SignalBeam, - gMoveDescription_ShadowPunch, - gMoveDescription_Extrasensory, - gMoveDescription_SkyUppercut, - gMoveDescription_SandTomb, - gMoveDescription_SheerCold, - gMoveDescription_MuddyWater, - gMoveDescription_BulletSeed, - gMoveDescription_AerialAce, - gMoveDescription_IcicleSpear, - gMoveDescription_IronDefense, - gMoveDescription_Block, - gMoveDescription_Howl, - gMoveDescription_DragonClaw, - gMoveDescription_FrenzyPlant, - gMoveDescription_BulkUp, - gMoveDescription_Bounce, - gMoveDescription_MudShot, - gMoveDescription_PoisonTail, - gMoveDescription_Covet, - gMoveDescription_VoltTackle, - gMoveDescription_MagicalLeaf, - gMoveDescription_WaterSport, - gMoveDescription_CalmMind, - gMoveDescription_LeafBlade, - gMoveDescription_DragonDance, - gMoveDescription_RockBlast, - gMoveDescription_ShockWave, - gMoveDescription_WaterPulse, - gMoveDescription_DoomDesire, - gMoveDescription_PsychoBoost, + MoveDescription_Pound, + MoveDescription_KarateChop, + MoveDescription_DoubleSlap, + MoveDescription_CometPunch, + MoveDescription_MegaPunch, + MoveDescription_PayDay, + MoveDescription_FirePunch, + MoveDescription_IcePunch, + MoveDescription_ThunderPunch, + MoveDescription_Scratch, + MoveDescription_ViceGrip, + MoveDescription_Guillotine, + MoveDescription_RazorWind, + MoveDescription_SwordsDance, + MoveDescription_Cut, + MoveDescription_Gust, + MoveDescription_WingAttack, + MoveDescription_Whirlwind, + MoveDescription_Fly, + MoveDescription_Bind, + MoveDescription_Slam, + MoveDescription_VineWhip, + MoveDescription_Stomp, + MoveDescription_DoubleKick, + MoveDescription_MegaKick, + MoveDescription_JumpKick, + MoveDescription_RollingKick, + MoveDescription_SandAttack, + MoveDescription_Headbutt, + MoveDescription_HornAttack, + MoveDescription_FuryAttack, + MoveDescription_HornDrill, + MoveDescription_Tackle, + MoveDescription_BodySlam, + MoveDescription_Wrap, + MoveDescription_TakeDown, + MoveDescription_Thrash, + MoveDescription_DoubleEdge, + MoveDescription_TailWhip, + MoveDescription_PoisonSting, + MoveDescription_Twineedle, + MoveDescription_PinMissile, + MoveDescription_Leer, + MoveDescription_Bite, + MoveDescription_Growl, + MoveDescription_Roar, + MoveDescription_Sing, + MoveDescription_Supersonic, + MoveDescription_SonicBoom, + MoveDescription_Disable, + MoveDescription_Acid, + MoveDescription_Ember, + MoveDescription_Flamethrower, + MoveDescription_Mist, + MoveDescription_WaterGun, + MoveDescription_HydroPump, + MoveDescription_Surf, + MoveDescription_IceBeam, + MoveDescription_Blizzard, + MoveDescription_Psybeam, + MoveDescription_BubbleBeam, + MoveDescription_AuroraBeam, + MoveDescription_HyperBeam, + MoveDescription_Peck, + MoveDescription_DrillPeck, + MoveDescription_Submission, + MoveDescription_LowKick, + MoveDescription_Counter, + MoveDescription_SeismicToss, + MoveDescription_Strength, + MoveDescription_Absorb, + MoveDescription_MegaDrain, + MoveDescription_LeechSeed, + MoveDescription_Growth, + MoveDescription_RazorLeaf, + MoveDescription_SolarBeam, + MoveDescription_PoisonPowder, + MoveDescription_StunSpore, + MoveDescription_SleepPowder, + MoveDescription_PetalDance, + MoveDescription_StringShot, + MoveDescription_DragonRage, + MoveDescription_FireSpin, + MoveDescription_ThunderShock, + MoveDescription_Thunderbolt, + MoveDescription_ThunderWave, + MoveDescription_Thunder, + MoveDescription_RockThrow, + MoveDescription_Earthquake, + MoveDescription_Fissure, + MoveDescription_Dig, + MoveDescription_Toxic, + MoveDescription_Confusion, + MoveDescription_Psychic, + MoveDescription_Hypnosis, + MoveDescription_Meditate, + MoveDescription_Agility, + MoveDescription_QuickAttack, + MoveDescription_Rage, + MoveDescription_Teleport, + MoveDescription_NightShade, + MoveDescription_Mimic, + MoveDescription_Screech, + MoveDescription_DoubleTeam, + MoveDescription_Recover, + MoveDescription_Harden, + MoveDescription_Minimize, + MoveDescription_Smokescreen, + MoveDescription_ConfuseRay, + MoveDescription_Withdraw, + MoveDescription_DefenseCurl, + MoveDescription_Barrier, + MoveDescription_LightScreen, + MoveDescription_Haze, + MoveDescription_Reflect, + MoveDescription_FocusEnergy, + MoveDescription_Bide, + MoveDescription_Metronome, + MoveDescription_MirrorMove, + MoveDescription_SelfDestruct, + MoveDescription_EggBomb, + MoveDescription_Lick, + MoveDescription_Smog, + MoveDescription_Sludge, + MoveDescription_BoneClub, + MoveDescription_FireBlast, + MoveDescription_Waterfall, + MoveDescription_Clamp, + MoveDescription_Swift, + MoveDescription_SkullBash, + MoveDescription_SpikeCannon, + MoveDescription_Constrict, + MoveDescription_Amnesia, + MoveDescription_Kinesis, + MoveDescription_SoftBoiled, + MoveDescription_HiJumpKick, + MoveDescription_Glare, + MoveDescription_DreamEater, + MoveDescription_PoisonGas, + MoveDescription_Barrage, + MoveDescription_LeechLife, + MoveDescription_LovelyKiss, + MoveDescription_SkyAttack, + MoveDescription_Transform, + MoveDescription_Bubble, + MoveDescription_DizzyPunch, + MoveDescription_Spore, + MoveDescription_Flash, + MoveDescription_Psywave, + MoveDescription_Splash, + MoveDescription_AcidArmor, + MoveDescription_Crabhammer, + MoveDescription_Explosion, + MoveDescription_FurySwipes, + MoveDescription_Bonemerang, + MoveDescription_Rest, + MoveDescription_RockSlide, + MoveDescription_HyperFang, + MoveDescription_Sharpen, + MoveDescription_Conversion, + MoveDescription_TriAttack, + MoveDescription_SuperFang, + MoveDescription_Slash, + MoveDescription_Substitute, + MoveDescription_Struggle, + MoveDescription_Sketch, + MoveDescription_TripleKick, + MoveDescription_Thief, + MoveDescription_SpiderWeb, + MoveDescription_MindReader, + MoveDescription_Nightmare, + MoveDescription_FlameWheel, + MoveDescription_Snore, + MoveDescription_Curse, + MoveDescription_Flail, + MoveDescription_Conversion2, + MoveDescription_Aeroblast, + MoveDescription_CottonSpore, + MoveDescription_Reversal, + MoveDescription_Spite, + MoveDescription_PowderSnow, + MoveDescription_Protect, + MoveDescription_MachPunch, + MoveDescription_ScaryFace, + MoveDescription_FaintAttack, + MoveDescription_SweetKiss, + MoveDescription_BellyDrum, + MoveDescription_SludgeBomb, + MoveDescription_MudSlap, + MoveDescription_Octazooka, + MoveDescription_Spikes, + MoveDescription_ZapCannon, + MoveDescription_Foresight, + MoveDescription_DestinyBond, + MoveDescription_PerishSong, + MoveDescription_IcyWind, + MoveDescription_Detect, + MoveDescription_BoneRush, + MoveDescription_LockOn, + MoveDescription_Outrage, + MoveDescription_Sandstorm, + MoveDescription_GigaDrain, + MoveDescription_Endure, + MoveDescription_Charm, + MoveDescription_Rollout, + MoveDescription_FalseSwipe, + MoveDescription_Swagger, + MoveDescription_MilkDrink, + MoveDescription_Spark, + MoveDescription_FuryCutter, + MoveDescription_SteelWing, + MoveDescription_MeanLook, + MoveDescription_Attract, + MoveDescription_SleepTalk, + MoveDescription_HealBell, + MoveDescription_Return, + MoveDescription_Present, + MoveDescription_Frustration, + MoveDescription_Safeguard, + MoveDescription_PainSplit, + MoveDescription_SacredFire, + MoveDescription_Magnitude, + MoveDescription_DynamicPunch, + MoveDescription_Megahorn, + MoveDescription_DragonBreath, + MoveDescription_BatonPass, + MoveDescription_Encore, + MoveDescription_Pursuit, + MoveDescription_RapidSpin, + MoveDescription_SweetScent, + MoveDescription_IronTail, + MoveDescription_MetalClaw, + MoveDescription_VitalThrow, + MoveDescription_MorningSun, + MoveDescription_Synthesis, + MoveDescription_Moonlight, + MoveDescription_HiddenPower, + MoveDescription_CrossChop, + MoveDescription_Twister, + MoveDescription_RainDance, + MoveDescription_SunnyDay, + MoveDescription_Crunch, + MoveDescription_MirrorCoat, + MoveDescription_PsychUp, + MoveDescription_ExtremeSpeed, + MoveDescription_AncientPower, + MoveDescription_ShadowBall, + MoveDescription_FutureSight, + MoveDescription_RockSmash, + MoveDescription_Whirlpool, + MoveDescription_BeatUp, + MoveDescription_FakeOut, + MoveDescription_Uproar, + MoveDescription_Stockpile, + MoveDescription_SpitUp, + MoveDescription_Swallow, + MoveDescription_HeatWave, + MoveDescription_Hail, + MoveDescription_Torment, + MoveDescription_Flatter, + MoveDescription_WillOWisp, + MoveDescription_Memento, + MoveDescription_Facade, + MoveDescription_FocusPunch, + MoveDescription_SmellingSalt, + MoveDescription_FollowMe, + MoveDescription_NaturePower, + MoveDescription_Charge, + MoveDescription_Taunt, + MoveDescription_HelpingHand, + MoveDescription_Trick, + MoveDescription_RolePlay, + MoveDescription_Wish, + MoveDescription_Assist, + MoveDescription_Ingrain, + MoveDescription_Superpower, + MoveDescription_MagicCoat, + MoveDescription_Recycle, + MoveDescription_Revenge, + MoveDescription_BrickBreak, + MoveDescription_Yawn, + MoveDescription_KnockOff, + MoveDescription_Endeavor, + MoveDescription_Eruption, + MoveDescription_SkillSwap, + MoveDescription_Imprison, + MoveDescription_Refresh, + MoveDescription_Grudge, + MoveDescription_Snatch, + MoveDescription_SecretPower, + MoveDescription_Dive, + MoveDescription_ArmThrust, + MoveDescription_Camouflage, + MoveDescription_TailGlow, + MoveDescription_LusterPurge, + MoveDescription_MistBall, + MoveDescription_FeatherDance, + MoveDescription_TeeterDance, + MoveDescription_BlazeKick, + MoveDescription_MudSport, + MoveDescription_IceBall, + MoveDescription_NeedleArm, + MoveDescription_SlackOff, + MoveDescription_HyperVoice, + MoveDescription_PoisonFang, + MoveDescription_CrushClaw, + MoveDescription_BlastBurn, + MoveDescription_HydroCannon, + MoveDescription_MeteorMash, + MoveDescription_Astonish, + MoveDescription_WeatherBall, + MoveDescription_Aromatherapy, + MoveDescription_FakeTears, + MoveDescription_AirCutter, + MoveDescription_Overheat, + MoveDescription_OdorSleuth, + MoveDescription_RockTomb, + MoveDescription_SilverWind, + MoveDescription_MetalSound, + MoveDescription_GrassWhistle, + MoveDescription_Tickle, + MoveDescription_CosmicPower, + MoveDescription_WaterSpout, + MoveDescription_SignalBeam, + MoveDescription_ShadowPunch, + MoveDescription_Extrasensory, + MoveDescription_SkyUppercut, + MoveDescription_SandTomb, + MoveDescription_SheerCold, + MoveDescription_MuddyWater, + MoveDescription_BulletSeed, + MoveDescription_AerialAce, + MoveDescription_IcicleSpear, + MoveDescription_IronDefense, + MoveDescription_Block, + MoveDescription_Howl, + MoveDescription_DragonClaw, + MoveDescription_FrenzyPlant, + MoveDescription_BulkUp, + MoveDescription_Bounce, + MoveDescription_MudShot, + MoveDescription_PoisonTail, + MoveDescription_Covet, + MoveDescription_VoltTackle, + MoveDescription_MagicalLeaf, + MoveDescription_WaterSport, + MoveDescription_CalmMind, + MoveDescription_LeafBlade, + MoveDescription_DragonDance, + MoveDescription_RockBlast, + MoveDescription_ShockWave, + MoveDescription_WaterPulse, + MoveDescription_DoomDesire, + MoveDescription_PsychoBoost, }; diff --git a/src/data/text/nature_names_de.h b/src/data/text/nature_names_de.h new file mode 100644 index 000000000..695b0b62c --- /dev/null +++ b/src/data/text/nature_names_de.h @@ -0,0 +1,53 @@ +static const u8 NatureName_Hardy[] = _("ROBUST"); +static const u8 NatureName_Lonely[] = _("SOLO"); +static const u8 NatureName_Brave[] = _("MUTIG"); +static const u8 NatureName_Adamant[] = _("HART"); +static const u8 NatureName_Naughty[] = _("FRECH"); +static const u8 NatureName_Bold[] = _("KÜHN"); +static const u8 NatureName_Docile[] = _("SANFT"); +static const u8 NatureName_Relaxed[] = _("LOCKER"); +static const u8 NatureName_Impish[] = _("PFIFFIG"); +static const u8 NatureName_Lax[] = _("LASCH"); +static const u8 NatureName_Timid[] = _("SCHEU"); +static const u8 NatureName_Hasty[] = _("HASTIG"); +static const u8 NatureName_Serious[] = _("ERNST"); +static const u8 NatureName_Jolly[] = _("FROH"); +static const u8 NatureName_Naive[] = _("NAIV"); +static const u8 NatureName_Modest[] = _("MÄSSIG"); +static const u8 NatureName_Mild[] = _("MILD"); +static const u8 NatureName_Quiet[] = _("RUHIG"); +static const u8 NatureName_Bashful[] = _("ZAGHAFT"); +static const u8 NatureName_Rash[] = _("HITZIG"); +static const u8 NatureName_Calm[] = _("STILL"); +static const u8 NatureName_Gentle[] = _("ZART"); +static const u8 NatureName_Sassy[] = _("FORSCH"); +static const u8 NatureName_Careful[] = _("SACHT"); +static const u8 NatureName_Quirky[] = _("KAUZIG"); + +const u8 * const gNatureNames[] = { + NatureName_Hardy, + NatureName_Lonely, + NatureName_Brave, + NatureName_Adamant, + NatureName_Naughty, + NatureName_Bold, + NatureName_Docile, + NatureName_Relaxed, + NatureName_Impish, + NatureName_Lax, + NatureName_Timid, + NatureName_Hasty, + NatureName_Serious, + NatureName_Jolly, + NatureName_Naive, + NatureName_Modest, + NatureName_Mild, + NatureName_Quiet, + NatureName_Bashful, + NatureName_Rash, + NatureName_Calm, + NatureName_Gentle, + NatureName_Sassy, + NatureName_Careful, + NatureName_Quirky, +}; diff --git a/src/data/text/nature_names_en.h b/src/data/text/nature_names_en.h new file mode 100644 index 000000000..305b43690 --- /dev/null +++ b/src/data/text/nature_names_en.h @@ -0,0 +1,53 @@ +static const u8 NatureName_Hardy[] = _("HARDY"); +static const u8 NatureName_Lonely[] = _("LONELY"); +static const u8 NatureName_Brave[] = _("BRAVE"); +static const u8 NatureName_Adamant[] = _("ADAMANT"); +static const u8 NatureName_Naughty[] = _("NAUGHTY"); +static const u8 NatureName_Bold[] = _("BOLD"); +static const u8 NatureName_Docile[] = _("DOCILE"); +static const u8 NatureName_Relaxed[] = _("RELAXED"); +static const u8 NatureName_Impish[] = _("IMPISH"); +static const u8 NatureName_Lax[] = _("LAX"); +static const u8 NatureName_Timid[] = _("TIMID"); +static const u8 NatureName_Hasty[] = _("HASTY"); +static const u8 NatureName_Serious[] = _("SERIOUS"); +static const u8 NatureName_Jolly[] = _("JOLLY"); +static const u8 NatureName_Naive[] = _("NAIVE"); +static const u8 NatureName_Modest[] = _("MODEST"); +static const u8 NatureName_Mild[] = _("MILD"); +static const u8 NatureName_Quiet[] = _("QUIET"); +static const u8 NatureName_Bashful[] = _("BASHFUL"); +static const u8 NatureName_Rash[] = _("RASH"); +static const u8 NatureName_Calm[] = _("CALM"); +static const u8 NatureName_Gentle[] = _("GENTLE"); +static const u8 NatureName_Sassy[] = _("SASSY"); +static const u8 NatureName_Careful[] = _("CAREFUL"); +static const u8 NatureName_Quirky[] = _("QUIRKY"); + +const u8 * const gNatureNames[] = { + NatureName_Hardy, + NatureName_Lonely, + NatureName_Brave, + NatureName_Adamant, + NatureName_Naughty, + NatureName_Bold, + NatureName_Docile, + NatureName_Relaxed, + NatureName_Impish, + NatureName_Lax, + NatureName_Timid, + NatureName_Hasty, + NatureName_Serious, + NatureName_Jolly, + NatureName_Naive, + NatureName_Modest, + NatureName_Mild, + NatureName_Quiet, + NatureName_Bashful, + NatureName_Rash, + NatureName_Calm, + NatureName_Gentle, + NatureName_Sassy, + NatureName_Careful, + NatureName_Quirky, +}; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 33034afa4..8f6ff07a0 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -174,8 +174,10 @@ extern const u8 *const gUnknown_083C1068[]; #if ENGLISH #include "../data/text/move_descriptions_en.h" +#include "../data/text/nature_names_en.h" #elif GERMAN #include "../data/text/move_descriptions_de.h" +#include "../data/text/nature_names_de.h" #endif -- cgit v1.2.3 From 8ad0f966993f4b87fcf30ddc217400164550f193 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 12:51:11 -0800 Subject: Move summary_screen data into src --- src/pokemon/pokemon_summary_screen.c | 506 +++++++++++++++++++++++++++++++---- 1 file changed, 451 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 8f6ff07a0..fb486727f 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -31,6 +31,16 @@ #define ewramSS (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) +static void sub_809FC0C(void); +static void sub_809FEB8(void); +static void sub_809F63C(struct Pokemon *); +static void sub_809F650(struct Pokemon *); +static void sub_809F664(struct Pokemon *); +static void sub_809F664(struct Pokemon *); +static void sub_809FE6C(struct Pokemon *); +static void sub_80A0090(struct Pokemon *); +static void sub_80A015C(struct Pokemon *); +static void sub_80A015C(struct Pokemon *); static void sub_809DE44(void); static void sub_809EB40(u8); static void sub_809EBC4(void); @@ -128,49 +138,31 @@ extern u16 gUnknown_03004288; extern u16 gUnknown_030041B0; extern TaskFunc gUnknown_03005CF0; extern struct Sprite *gUnknown_020384F4; -extern struct SpriteTemplate gSpriteTemplate_83C1304; -extern struct SpriteTemplate gSpriteTemplate_83C1280; -extern struct SpriteTemplate gSpriteTemplate_83C11C0; extern struct SpriteTemplate gUnknown_02024E8C; -extern const u16 gSummaryScreenTextTiles[]; -extern const u16 gSummaryScreenButtonTiles[]; +extern const u8 gStatusPal_Icons[]; +extern const u8 gStatusGfx_Icons[]; +extern const u8 gMenuSummaryPal[]; +extern const u8 gMenuSummaryGfx[]; +extern const u8 gMoveTypes_Gfx[]; extern const u8 gMoveTypes_Pal[]; extern const u8 gStatusScreen_Pal[]; extern const u8 gStatusScreen_Tilemap[]; -extern const struct CompressedSpritePalette gUnknown_083C1278; -extern const struct CompressedSpritePalette gUnknown_083C12FC; -extern const struct CompressedSpriteSheet gUnknown_083C12F4; -extern const struct CompressedSpriteSheet gUnknown_083C1270; -extern const struct CompressedSpriteSheet gUnknown_083C11B8; extern const u8 gUnknown_08E74688[]; -extern const u8 gUnknown_08E73E88[]; extern const u8 gUnknown_08E74E88[]; extern const u8 gUnknown_08E73508[]; extern const u8 gStatusScreen_Gfx[]; extern const u8 gFontDefaultPalette[]; extern const u8 gUnknownPalette_81E6692[]; -extern const u8 gDoubleBattlePartyOrder[]; -extern const void (*gUnknown_083C1580[])(void); -extern const void (*gUnknown_083C1598[])(struct Pokemon *); -extern const void (*gUnknown_083C1588[])(struct Pokemon *); -extern const u16 gUnknown_083C157E[]; -extern const u16 gUnknown_083C157C[]; extern const u8 gAbilityNames[][13]; extern const u8 * const gAbilityDescriptions[]; extern const u8 * const gContestEffectStrings[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; -extern const u8 gUnknown_083C15BC[]; -extern const u16 gSummaryScreenMonMarkingsPalette[]; -extern const u8 gUnknown_083C11D8[]; extern const u16 gUnknown_08E94510[]; extern const u16 gUnknown_08E94550[]; extern const u16 gUnknown_08E94590[]; extern const u8 gUnknown_08E73E88[]; -extern const u8 gUnknown_083C15AE[]; -extern const u8 gUnknown_083C15B4[]; -extern const u8 *const gUnknown_083C1068[]; #if ENGLISH #include "../data/text/move_descriptions_en.h" @@ -180,6 +172,410 @@ extern const u8 *const gUnknown_083C1068[]; #include "../data/text/nature_names_de.h" #endif +static const u8 * const sPageHeaderTexts[] = { + gEmptyString_81E72B0, + OtherText_PokeInfo, + OtherText_PokeSkills, + OtherText_BattleMoves, + OtherText_ContestMoves, + OtherText_Switch, + OtherText_Info, + gOtherText_CancelNoTerminator, +}; + +static const union AffineAnimCmd sUnusedSpriteAffineAnim[] = { + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sUnsuedSpriteAffineAnimTable[] = { + sUnusedSpriteAffineAnim, +}; + +static const struct OamData sOamData_83C109C = { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_83C10A4[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10AC[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10B4[] = { + ANIMCMD_FRAME(16, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10BC[] = { + ANIMCMD_FRAME(24, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10C4[] = { + ANIMCMD_FRAME(32, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10CC[] = { + ANIMCMD_FRAME(40, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10D4[] = { + ANIMCMD_FRAME(48, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10DC[] = { + ANIMCMD_FRAME(56, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10E4[] = { + ANIMCMD_FRAME(64, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10EC[] = { + ANIMCMD_FRAME(72, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10F4[] = { + ANIMCMD_FRAME(80, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10FC[] = { + ANIMCMD_FRAME(88, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1104[] = { + ANIMCMD_FRAME(96, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C110C[] = { + ANIMCMD_FRAME(104, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1114[] = { + ANIMCMD_FRAME(112, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C111C[] = { + ANIMCMD_FRAME(120, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1124[] = { + ANIMCMD_FRAME(128, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C112C[] = { + ANIMCMD_FRAME(136, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1134[] = { + ANIMCMD_FRAME(144, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C113C[] = { + ANIMCMD_FRAME(152, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1144[] = { + ANIMCMD_FRAME(160, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C114C[] = { + ANIMCMD_FRAME(168, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1154[] = { + ANIMCMD_FRAME(176, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_83C115C[] = { + sSpriteAnim_83C10A4, + sSpriteAnim_83C10AC, + sSpriteAnim_83C10B4, + sSpriteAnim_83C10BC, + sSpriteAnim_83C10C4, + sSpriteAnim_83C10CC, + sSpriteAnim_83C10D4, + sSpriteAnim_83C10DC, + sSpriteAnim_83C10E4, + sSpriteAnim_83C10EC, + sSpriteAnim_83C10F4, + sSpriteAnim_83C10FC, + sSpriteAnim_83C1104, + sSpriteAnim_83C110C, + sSpriteAnim_83C1114, + sSpriteAnim_83C111C, + sSpriteAnim_83C1124, + sSpriteAnim_83C112C, + sSpriteAnim_83C1134, + sSpriteAnim_83C113C, + sSpriteAnim_83C1144, + sSpriteAnim_83C114C, + sSpriteAnim_83C1154, +}; + +static const struct CompressedSpriteSheet sUnknown_083C11B8 = { gMoveTypes_Gfx, 0x1700, 30002 }; + +static const struct SpriteTemplate sSpriteTemplate_83C11C0 = { + .tileTag = 30002, + .paletteTag = 30002, + .oam = &sOamData_83C109C, + .anims = sSpriteAnimTable_83C115C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const u8 sUnknown_PaletteNums[] = { 0xD, 0xD, 0xE, 0xE, 0xD, 0xD, 0xF, 0xE, 0xD, 0xF, 0xD, 0xE, 0xF, 0xD, 0xE, 0xE, 0xF, 0xD, 0xD, 0xE, 0xE, 0xF, 0xD }; + +static const struct OamData sOamData_83C11F0 = { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_83C11F8[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1200[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1208[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1210[] = { + ANIMCMD_FRAME(12, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1218[] = { + ANIMCMD_FRAME(16, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1220[] = { + ANIMCMD_FRAME(16, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1228[] = { + ANIMCMD_FRAME(20, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1230[] = { + ANIMCMD_FRAME(24, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1238[] = { + ANIMCMD_FRAME(24, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1240[] = { + ANIMCMD_FRAME(28, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_83C1248[] = { + sSpriteAnim_83C11F8, + sSpriteAnim_83C1200, + sSpriteAnim_83C1208, + sSpriteAnim_83C1210, + sSpriteAnim_83C1218, + sSpriteAnim_83C1220, + sSpriteAnim_83C1228, + sSpriteAnim_83C1230, + sSpriteAnim_83C1238, + sSpriteAnim_83C1240, +}; + +static const struct CompressedSpriteSheet sUnknown_083C1270 = { gMenuSummaryGfx, 0x400, 30000 }; +static const struct CompressedSpritePalette sUnknown_083C1278 = { gMenuSummaryPal, 30000 }; + +static const struct SpriteTemplate sSpriteTemplate_83C1280 = { + .tileTag = 30000, + .paletteTag = 30000, + .oam = &sOamData_83C11F0, + .anims = sSpriteAnimTable_83C1248, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_83C1298 = { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_83C12A0[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12A8[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12B0[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12B8[] = { + ANIMCMD_FRAME(12, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12C0[] = { + ANIMCMD_FRAME(16, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12C8[] = { + ANIMCMD_FRAME(20, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12D0[] = { + ANIMCMD_FRAME(24, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_83C12D8[] = { + sSpriteAnim_83C12A0, + sSpriteAnim_83C12A8, + sSpriteAnim_83C12B0, + sSpriteAnim_83C12B8, + sSpriteAnim_83C12C0, + sSpriteAnim_83C12C8, + sSpriteAnim_83C12D0, +}; + +static const struct CompressedSpriteSheet sUnknown_083C12F4 = { gStatusGfx_Icons, 0x380, 30001 }; +static const struct CompressedSpritePalette sUnknown_083C12FC = { gStatusPal_Icons, 30001 }; + +static const struct SpriteTemplate sSpriteTemplate_83C1304 = { + .tileTag = 30001, + .paletteTag = 30001, + .oam = &sOamData_83C1298, + .anims = sSpriteAnimTable_83C12D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const u16 sSummaryScreenMonMarkingsPalette[] = INCBIN_U16("graphics/summary_screen/mon_markings.gbapal"); + +#if ENGLISH +static const u16 sSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp"); +#endif + +static const u16 sSummaryScreenButtonTiles[] = INCBIN_U16("graphics/summary_screen/buttons.4bpp"); + +static const u16 sUnknown_083C157C[] = { RGB(26, 26, 23) }; +static const u16 sUnknown_083C157E[] = { RGB(30, 30, 27) }; + +static void (*const sUnknown_083C1580[])(void) = { + sub_809FC0C, + sub_809FEB8, +}; + +static void (*const sUnknown_083C1588[])(struct Pokemon *) = { + sub_809F63C, + sub_809F650, + sub_809F664, + sub_809F664, +}; + +static void (*const sUnknown_083C1598[])(struct Pokemon *) = { + sub_809FE6C, + sub_80A0090, + sub_80A015C, + sub_80A015C, +}; + +static const u8 sDoubleBattlePartyOrder[] = { 0, 2, 3, 1, 4, 5 }; + +static const u8 sUnknown_083C15AE[] = _("{STR_VAR_1}{CLEAR_TO 64}"); +static const u8 sUnknown_083C15B4[] = _("{STR_VAR_1}{CLEAR_TO 72}"); + +asm(".align 2"); // TODO: this array is probably not correctly-typed +static const u8 sUnknown_083C15BC[] = { + 9, 1, 0, 2, + 10, 3, 0, 4, + 8, 5, 0, 6, + 11, 7, 0, 8, + 14, 9, 0, 10, + 12, 11, 0, 12, + 13, 13, 0, 14, + -1, 15, 0, 10, +}; + void sub_809D844(void) { @@ -345,11 +741,11 @@ bool8 sub_809DA84(void) gMain.state++; break; case 9: - src = gSummaryScreenTextTiles; + src = sSummaryScreenTextTiles; dest = (void *)VRAM + 0xD000; DmaCopy16(3, src, dest, 320); - src = gSummaryScreenButtonTiles; + src = sSummaryScreenButtonTiles; dest = (void *)VRAM + 0xD140; DmaCopy16(3, src, dest, 256); @@ -406,7 +802,7 @@ bool8 sub_809DA84(void) case 17: if (ewramSS.page <= PSS_PAGE_SKILLS) { - gUnknown_083C1580[ewramSS.page](); + sUnknown_083C1580[ewramSS.page](); } gMain.state++; @@ -416,7 +812,7 @@ bool8 sub_809DA84(void) gMain.state++; break; case 19: - gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); gMain.state++; break; case 20: @@ -523,19 +919,19 @@ bool8 LoadPokemonSummaryScreenGraphics(void) LoadCompressedPalette(gStatusScreen_Pal, 0, 160); break; case 7: - LoadCompressedObjectPic(&gUnknown_083C11B8); + LoadCompressedObjectPic(&sUnknown_083C11B8); break; case 8: - LoadCompressedObjectPic(&gUnknown_083C1270); + LoadCompressedObjectPic(&sUnknown_083C1270); break; case 9: - LoadCompressedObjectPic(&gUnknown_083C12F4); + LoadCompressedObjectPic(&sUnknown_083C12F4); break; case 10: - LoadCompressedObjectPalette(&gUnknown_083C12FC); + LoadCompressedObjectPalette(&sUnknown_083C12FC); break; case 11: - LoadCompressedObjectPalette(&gUnknown_083C1278); + LoadCompressedObjectPalette(&sUnknown_083C1278); break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 464, 96); @@ -1456,7 +1852,7 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 4: - gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); ewramSS.bgToggle ^= 1; taskData[0]++; break; @@ -1574,7 +1970,7 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 5: - gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); ewramSS.bgToggle ^= 1; taskData[0]++; break; @@ -1913,9 +2309,9 @@ s8 sub_809F344(u8 partyIndex) return -1; } - if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gDoubleBattlePartyOrder[partyIndex]; + return sDoubleBattlePartyOrder[partyIndex]; } } } @@ -1930,9 +2326,9 @@ s8 sub_809F388(u8 partyIndex) } partyIndex--; - if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gDoubleBattlePartyOrder[partyIndex]; + return sDoubleBattlePartyOrder[partyIndex]; } } } @@ -1944,7 +2340,7 @@ s8 sub_809F3CC(s8 direction) for (i = 0; i < PARTY_SIZE; i++) { - if (gDoubleBattlePartyOrder[i] == ewramSS.monIndex) + if (sDoubleBattlePartyOrder[i] == ewramSS.monIndex) { monIndex = i; break; @@ -2050,7 +2446,7 @@ bool8 sub_809F5F8(void) } else { - gUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); return TRUE; } } @@ -2532,12 +2928,12 @@ bool8 sub_809FA94(struct Pokemon *mon) { if (!IsShiny(mon)) { - LoadPalette(gUnknown_083C157C, 4, 2); + LoadPalette(sUnknown_083C157C, 4, 2); return FALSE; } else { - LoadPalette(gUnknown_083C157E, 4, 2); + LoadPalette(sUnknown_083C157E, 4, 2); return TRUE; } } @@ -2555,7 +2951,7 @@ void sub_809FAC8(struct Pokemon *mon) MenuZeroFillWindowRect(0, 12, 11, 15); GetMonNickname(mon, gStringVar1); sub_80A1FF8(gStringVar1, 13, 3, 16); - LoadPalette(gUnknown_083C157C, 4, 2); + LoadPalette(sUnknown_083C157C, 4, 2); } else { @@ -3462,7 +3858,7 @@ void PrintNumRibbons(struct Pokemon *pokemon) ConvertIntToDecimalStringN(&text[3], numRibbons, 1, 2); } - MenuPrint(gUnknown_083C15AE, 21, 4); + MenuPrint(sUnknown_083C15AE, 21, 4); } void PrintHeldItemName(u16 itemId, u8 left, u8 top) @@ -3483,7 +3879,7 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) CopyItemName(itemId, gStringVar1); } - MenuPrint(gUnknown_083C15B4, left, top); + MenuPrint(sUnknown_083C15B4, left, top); } void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) @@ -3567,7 +3963,7 @@ void PrintSummaryWindowHeaderText(void) buffer += 3; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3588,7 +3984,7 @@ void PrintSummaryWindowHeaderText(void) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerActionTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerActionTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -4974,7 +5370,7 @@ void sub_80A1950(void) { if (ewram1A000[i] == 0xFF) { - ewram1A000[i] = CreateSprite(&gSpriteTemplate_83C11C0, 0, 0, 2); + ewram1A000[i] = CreateSprite(&sSpriteTemplate_83C11C0, 0, 0, 2); } sub_80A1918(i, 1); @@ -4985,7 +5381,7 @@ void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) { StartSpriteAnim(&gSprites[ewram1A000[d]], animNum); - gSprites[ewram1A000[d]].oam.paletteNum = gUnknown_083C11D8[animNum]; + gSprites[ewram1A000[d]].oam.paletteNum = sUnknown_PaletteNums[animNum]; gSprites[ewram1A000[d]].pos1.x = x + 16; gSprites[ewram1A000[d]].pos1.y = y + 8; @@ -5008,7 +5404,7 @@ void sub_80A1A30(u8 a) for (i = 0; i < 10; i++) { x = (i * 16) + 0x58; - ewram1A000[a + i] = CreateSprite(&gSpriteTemplate_83C1280, x, 40, subPriority); + ewram1A000[a + i] = CreateSprite(&sSpriteTemplate_83C1280, x, 40, subPriority); if (i == 0) { @@ -5200,7 +5596,7 @@ void sub_80A1D18(void) if (ewram1A000[29] == 0xFF) { - ewram1A000[29] = CreateSprite(&gSpriteTemplate_83C1304, 64, 152, 0); + ewram1A000[29] = CreateSprite(&sSpriteTemplate_83C1304, 64, 152, 0); } } else @@ -5233,7 +5629,7 @@ void sub_80A1D18(void) ldrb r0, [r4]\n\ cmp r0, 0xFF\n\ bne _080A1D60\n\ - ldr r0, _080A1D54 @ =gSpriteTemplate_83C1304\n\ + ldr r0, _080A1D54 @ =sSpriteTemplate_83C1304\n\ movs r1, 0x40\n\ movs r2, 0x98\n\ movs r3, 0\n\ @@ -5242,7 +5638,7 @@ void sub_80A1D18(void) b _080A1D60\n\ .align 2, 0\n\ _080A1D50: .4byte gSharedMem + 0x1A01D\n\ -_080A1D54: .4byte gSpriteTemplate_83C1304\n\ +_080A1D54: .4byte sSpriteTemplate_83C1304\n\ _080A1D58:\n\ movs r0, 0x1D\n\ bl sub_80A18E4\n\ @@ -5273,7 +5669,7 @@ void sub_80A1D84(struct Pokemon *mon) { struct Sprite *sprite; - sprite = sub_80F7920(0x7533, 0x7533, gSummaryScreenMonMarkingsPalette); + sprite = sub_80F7920(0x7533, 0x7533, sSummaryScreenMonMarkingsPalette); gUnknown_020384F4 = sprite; if (sprite != NULL) @@ -5306,7 +5702,7 @@ u8 *sub_80A1E58(u8 *text, u8 id) { if (id != 0xFF) { - const u8 *ptr = gUnknown_083C15BC; + const u8 *ptr = sUnknown_083C15BC; while (*ptr != 0xFF && *ptr != id) { ptr += 4; -- cgit v1.2.3 From 3339dbf0ea8c635abd2159732e9e55882b8b629c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 13:01:51 -0800 Subject: Fix sprite data accesses --- src/pokemon/pokemon_summary_screen.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index fb486727f..1344f9f6e 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -5310,7 +5310,7 @@ u8 sub_80A1808(struct Pokemon *pokemon) FreeSpriteOamMatrix(&gSprites[spriteId]); - gSprites[spriteId].data0 = species; + gSprites[spriteId].data[0] = species; gSprites[spriteId].callback = sub_80A1888; if (!IsPokeSpriteNotFlipped(species)) @@ -5333,7 +5333,7 @@ void sub_80A1888(struct Sprite *sprite) if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { - PlayCry1(sprite->data0, 0); + PlayCry1(sprite->data[0], 0); } } } @@ -5420,8 +5420,8 @@ void sub_80A1A30(u8 a) } gSprites[ewram1A000[a + i]].callback = sub_80A1BC0; - gSprites[ewram1A000[a + i]].data0 = a; - gSprites[ewram1A000[a + i]].data1 = 0; + gSprites[ewram1A000[a + i]].data[0] = a; + gSprites[ewram1A000[a + i]].data[1] = 0; } } } @@ -5456,9 +5456,9 @@ void sub_80A1BC0(struct Sprite *sprite) u8 animNum = sprite->animNum - 4; if (animNum < 3) { - sprite->data1 = (sprite->data1 + 1) & 0x1F; + sprite->data[1] = (sprite->data[1] + 1) & 0x1F; - if (sprite->data1 > 24) + if (sprite->data[1] > 24) { sprite->invisible = 1; } @@ -5469,11 +5469,11 @@ void sub_80A1BC0(struct Sprite *sprite) } else { - sprite->data1 = 0; + sprite->data[1] = 0; sprite->invisible = 0; } - if (sprite->data0 == 9) + if (sprite->data[0] == 9) { sprite->pos2.y = ewramSS.selectedMoveIndex * 16; } -- cgit v1.2.3 From 1829f7e7195575e872eb378722a56b344e2a1cd7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 13:35:08 -0800 Subject: Cleanup pokemon_summary_screen --- src/battle/battle_4.c | 4 +- src/field/party_menu.c | 2 +- src/pokemon/learn_move.c | 4 +- src/pokemon/pokemon_summary_screen.c | 651 +++++++++++++++++------------------ src/scene/evolution_scene.c | 4 +- src/script_pokemon_util_80F99CC.c | 2 +- 6 files changed, 329 insertions(+), 338 deletions(-) (limited to 'src') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 088f30669..4483c252a 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -18,6 +18,7 @@ #include "sound.h" #include "task.h" #include "decompress.h" +#include "pokemon_summary_screen.h" #include "naming_screen.h" #include "ewram.h" @@ -139,7 +140,6 @@ u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight); u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); void DestroyMenuCursor(void); void sub_802BC6C(void); -void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32); u8 sub_809FA30(void); bool32 IsHMMove2(u16 move); void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); @@ -10833,7 +10833,7 @@ static void atk5A(void) case 2: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); BATTLE_STRUCT->atk5A_StateTracker++; } break; diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a8620570b..bee64fb27 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -4292,7 +4292,7 @@ void sub_806F3FC(u8 taskId) { if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); DestroyTask(taskId); } } diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index 2ba708a97..730717965 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -7,6 +7,7 @@ #include "learn_move.h" #include "palette.h" #include "pokemon.h" +#include "pokemon_summary_screen.h" #include "overworld.h" #include "script.h" #include "songs.h" @@ -36,7 +37,6 @@ extern const u8 *const gUnknown_083CAF70[]; extern const u8 deuOtherText_ForgotAndLearned[]; #endif -extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32); struct LearnMoveStruct { @@ -543,7 +543,7 @@ void LearnMoveMain(void) case 20: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, sub_81327A4, sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, sub_81327A4, sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]); sLearnMoveStruct->state = 28; } break; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 1344f9f6e..c7bdab069 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -29,18 +29,14 @@ #include "tv.h" #include "unknown_task.h" -#define ewramSS (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) - static void sub_809FC0C(void); static void sub_809FEB8(void); static void sub_809F63C(struct Pokemon *); static void sub_809F650(struct Pokemon *); static void sub_809F664(struct Pokemon *); -static void sub_809F664(struct Pokemon *); static void sub_809FE6C(struct Pokemon *); static void sub_80A0090(struct Pokemon *); static void sub_80A015C(struct Pokemon *); -static void sub_80A015C(struct Pokemon *); static void sub_809DE44(void); static void sub_809EB40(u8); static void sub_809EBC4(void); @@ -54,9 +50,8 @@ static void sub_80A1DCC(struct Pokemon *); static void sub_809FE80(void); static void sub_80A00A4(void); static void sub_80A0390(void); -extern void sub_80A015C(struct Pokemon *); extern u8 sub_80A1808(struct Pokemon *); -extern void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); +static void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); static void sub_80A0958(struct Pokemon *); static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *, u8, u8); static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *, u8, u8); @@ -67,9 +62,6 @@ static void PrintNumRibbons(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); static void sub_809E13C(u8 taskId); static void sub_80A1950(void); -static void sub_809DA1C(void); -static void sub_809D844(void); -static void sub_809D85C(void); static void sub_809DE64(void); static void SummaryScreenHandleAButton(u8); static void SummaryScreenHandleUpDownInput(u8, s8); @@ -78,7 +70,6 @@ static void sub_809F9D0(u8, u8); static void sub_809EAC8(u8); static void sub_809E534(u8); static void sub_809E83C(u8, s8); -static void sub_809E5C4(void); static void sub_80A1B40(u8); static void sub_80A2078(int); static void sub_809E3FC(u8); @@ -603,92 +594,92 @@ void ShowPokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex { gPaletteFade.bufferTransferDisabled = 1; - ewramSS.monList.partyMons = party; - ewramSS.mode = mode; - ewramSS.monIndex = monIndex; - ewramSS.maxMonIndex = maxMonIndex; - ewramSS.callback = callback; - ewramSS.loadGfxState = 0; - ewramSS.selectedMoveIndex = 4; - ewramSS.moveToLearn = 0; - ewramSS.bgToggle = 0; - ewramSS.disableMoveOrderEditing = FALSE; + pssData.monList.partyMons = party; + pssData.mode = mode; + pssData.monIndex = monIndex; + pssData.maxMonIndex = maxMonIndex; + pssData.callback = callback; + pssData.loadGfxState = 0; + pssData.selectedMoveIndex = 4; + pssData.moveToLearn = 0; + pssData.bgToggle = 0; + pssData.disableMoveOrderEditing = FALSE; if (mode >= PSS_MODE_PC_NORMAL) { - ewramSS.usingPC = TRUE; + pssData.usingPC = TRUE; } else { - ewramSS.usingPC = FALSE; + pssData.usingPC = FALSE; } switch (mode) { case PSS_MODE_NORMAL: case PSS_MODE_PC_NORMAL: - ewramSS.firstPage = PSS_PAGE_INFO; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 0; - ewramSS.unk78 = 0; - ewramSS.headerTextId = 1; - ewramSS.headerActionTextId = 7; + pssData.firstPage = PSS_PAGE_INFO; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 0; + pssData.unk78 = 0; + pssData.headerTextId = 1; + pssData.headerActionTextId = 7; break; case PSS_MODE_NO_MOVE_ORDER_EDIT: - ewramSS.firstPage = PSS_PAGE_INFO; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 0; - ewramSS.unk78 = 0; - ewramSS.headerTextId = 1; - ewramSS.headerActionTextId = 7; - ewramSS.disableMoveOrderEditing = TRUE; + pssData.firstPage = PSS_PAGE_INFO; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 0; + pssData.unk78 = 0; + pssData.headerTextId = 1; + pssData.headerActionTextId = 7; + pssData.disableMoveOrderEditing = TRUE; break; case PSS_MODE_SELECT_MOVE: - ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 1; - ewramSS.unk78 = 1; - ewramSS.headerTextId = 3; - ewramSS.headerActionTextId = 0; - ewramSS.selectedMoveIndex = 0; + pssData.firstPage = PSS_PAGE_BATTLE_MOVES; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 1; + pssData.unk78 = 1; + pssData.headerTextId = 3; + pssData.headerActionTextId = 0; + pssData.selectedMoveIndex = 0; break; case PSS_MODE_MOVES_ONLY: case PSS_MODE_PC_MOVES_ONLY: - ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 1; - ewramSS.unk78 = 1; + pssData.firstPage = PSS_PAGE_BATTLE_MOVES; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 1; + pssData.unk78 = 1; break; } - ewramSS.page = ewramSS.firstPage; + pssData.page = pssData.firstPage; SetMainCallback2(sub_809DE44); } -void sub_809D9F0(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move) +void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move) { ShowPokemonSummaryScreen(party, monIndex, maxMonIndex, callback, PSS_MODE_SELECT_MOVE); - ewramSS.moveToLearn = move; + pssData.moveToLearn = move; } void sub_809DA1C(void) { - switch (ewramSS.mode) + switch (pssData.mode) { case PSS_MODE_NORMAL: case PSS_MODE_PC_NORMAL: - ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); + pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; case PSS_MODE_NO_MOVE_ORDER_EDIT: - ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); + pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; case PSS_MODE_SELECT_MOVE: case PSS_MODE_UNKNOWN: - ewramSS.inputHandlingTaskId = CreateTask(sub_809EB40, 0); + pssData.inputHandlingTaskId = CreateTask(sub_809EB40, 0); break; case PSS_MODE_MOVES_ONLY: case PSS_MODE_PC_MOVES_ONLY: - ewramSS.inputHandlingTaskId = CreateTask(sub_809E3FC, 0); + pssData.inputHandlingTaskId = CreateTask(sub_809E3FC, 0); break; } } @@ -749,13 +740,13 @@ bool8 sub_809DA84(void) dest = (void *)VRAM + 0xD140; DmaCopy16(3, src, dest, 256); - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; break; case 10: if (LoadPokemonSummaryScreenGraphics()) { - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; } break; @@ -764,8 +755,8 @@ bool8 sub_809DA84(void) gMain.state++; break; case 12: - sub_809F678(&ewramSS.loadedMon); - if (!GetMonStatusAndPokerus(&ewramSS.loadedMon)) + sub_809F678(&pssData.loadedMon); + if (!GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(0); } @@ -774,23 +765,23 @@ bool8 sub_809DA84(void) sub_80A12D0(10); } - DrawPokerusSurvivorDot(&ewramSS.loadedMon); + DrawPokerusSurvivorDot(&pssData.loadedMon); gMain.state++; break; case 13: sub_80A1950(); - sub_80A1D84(&ewramSS.loadedMon); + sub_80A1D84(&pssData.loadedMon); gMain.state++; break; case 14: - sub_80A1DE8(&ewramSS.loadedMon); - ewramSS.loadGfxState = 0; + sub_80A1DE8(&pssData.loadedMon); + pssData.loadGfxState = 0; gMain.state++; break; case 15: - if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) + if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF) { - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; } break; @@ -800,23 +791,23 @@ bool8 sub_809DA84(void) gMain.state++; break; case 17: - if (ewramSS.page <= PSS_PAGE_SKILLS) + if (pssData.page <= PSS_PAGE_SKILLS) { - sUnknown_083C1580[ewramSS.page](); + sUnknown_083C1580[pssData.page](); } gMain.state++; break; case 18: - sub_809FAC8(&ewramSS.loadedMon); + sub_809FAC8(&pssData.loadedMon); gMain.state++; break; case 19: - sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[pssData.page](&pssData.loadedMon); gMain.state++; break; case 20: - if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -829,7 +820,7 @@ bool8 sub_809DA84(void) break; case 21: sub_809EBC4(); - if (ewramSS.selectedMoveIndex != 0) + if (pssData.selectedMoveIndex != 0) { sub_80A1488(0, 0); sub_80A1654(0, 0); @@ -861,12 +852,12 @@ bool8 sub_809DA84(void) return FALSE; } -void sub_809DE44(void) +static void sub_809DE44(void) { while (sub_809DA84() != TRUE && sub_80F9344() != TRUE); } -void sub_809DE64(void) +static void sub_809DE64(void) { REG_BG0CNT = 0x1E08; REG_BG1CNT = 0x4801; @@ -893,9 +884,9 @@ void sub_809DE64(void) REG_DISPCNT = 0x1F40; } -bool8 LoadPokemonSummaryScreenGraphics(void) +static bool8 LoadPokemonSummaryScreenGraphics(void) { - switch (ewramSS.loadGfxState) + switch (pssData.loadGfxState) { case 0: LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0); @@ -935,15 +926,15 @@ bool8 LoadPokemonSummaryScreenGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 464, 96); - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; return TRUE; } - ewramSS.loadGfxState++; + pssData.loadGfxState++; return FALSE; } -void sub_809E044(void) +static void sub_809E044(void) { LoadPalette(&gUnknownPalette_81E6692[28], 129, 2); LoadPalette(&gUnknownPalette_81E6692[30], 136, 2); @@ -962,29 +953,29 @@ void sub_809E044(void) LoadPalette(&gUnknownPalette_81E6692[6], 249, 2); } -void SummaryScreenExit(u8 taskId) +static void SummaryScreenExit(u8 taskId) { PlaySE(5); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_809E13C; } -void sub_809E13C(u8 taskId) +static void sub_809E13C(u8 taskId) { if (sub_8055870() != TRUE && !gPaletteFade.active) { - gUnknown_020384F0 = ewramSS.monIndex; + gUnknown_020384F0 = pssData.monIndex; ResetSpriteData(); FreeAllSpritePalettes(); StopCryAndClearCrySongs(); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - SetMainCallback2(ewramSS.callback); + SetMainCallback2(pssData.callback); DestroyTask(taskId); } } -void SummaryScreenHandleKeyInput(u8 taskId) +static void SummaryScreenHandleKeyInput(u8 taskId) { if (gPaletteFade.active) return; @@ -1007,12 +998,12 @@ void SummaryScreenHandleKeyInput(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES) { SummaryScreenHandleAButton(taskId); } - if (ewramSS.page == PSS_PAGE_INFO) + if (pssData.page == PSS_PAGE_INFO) { SummaryScreenExit(taskId); } @@ -1023,7 +1014,7 @@ void SummaryScreenHandleKeyInput(u8 taskId) } } -void sub_809E260(u8 taskId) +static void sub_809E260(u8 taskId) { if (gPaletteFade.active) return; @@ -1031,16 +1022,16 @@ void sub_809E260(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -1049,9 +1040,9 @@ void sub_809E260(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.page != ewramSS.lastPage) + if (pssData.page != pssData.lastPage) { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -1061,27 +1052,27 @@ void sub_809E260(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (sub_809F7D0(taskId) == TRUE || ewramSS.selectedMoveIndex == 4) + if (sub_809F7D0(taskId) == TRUE || pssData.selectedMoveIndex == 4) { - ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; - gSpecialVar_0x8005 = ewramSS.switchMoveIndex; + pssData.switchMoveIndex = pssData.selectedMoveIndex; + gSpecialVar_0x8005 = pssData.switchMoveIndex; SummaryScreenExit(taskId); } else { PlaySE(32); - sub_809F9D0(taskId, ewramSS.selectedMoveIndex); + sub_809F9D0(taskId, pssData.selectedMoveIndex); } } else if (gMain.newKeys & B_BUTTON) { - ewramSS.switchMoveIndex = 4; + pssData.switchMoveIndex = 4; gSpecialVar_0x8005 = 4; SummaryScreenExit(taskId); } } -void sub_809E3FC(u8 taskId) +static void sub_809E3FC(u8 taskId) { if (gPaletteFade.active) return; @@ -1089,18 +1080,18 @@ void sub_809E3FC(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.selectedMoveIndex != 4 && !ewramSS.disableMoveOrderEditing) + if (pssData.selectedMoveIndex != 4 && !pssData.disableMoveOrderEditing) { - if (!MonKnowsMultipleMoves(&ewramSS.loadedMon)) + if (!MonKnowsMultipleMoves(&pssData.loadedMon)) { PlaySE(32); } @@ -1108,7 +1099,7 @@ void sub_809E3FC(u8 taskId) { PlaySE(5); - ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; + pssData.switchMoveIndex = pssData.selectedMoveIndex; sub_80A1B40(1); sub_80A1A30(19); @@ -1129,7 +1120,7 @@ void sub_809E3FC(u8 taskId) } -bool8 MonKnowsMultipleMoves(struct Pokemon *mon) +static bool8 MonKnowsMultipleMoves(struct Pokemon *mon) { u8 i; @@ -1144,17 +1135,17 @@ bool8 MonKnowsMultipleMoves(struct Pokemon *mon) return FALSE; } -void sub_809E534(u8 taskId) +static void sub_809E534(u8 taskId) { if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, -1, &ewramSS.switchMoveIndex); + sub_809E8F0(taskId, -1, &pssData.switchMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, 1, &ewramSS.switchMoveIndex); + sub_809E8F0(taskId, 1, &pssData.switchMoveIndex); } else if (gMain.newKeys & A_BUTTON) { @@ -1167,7 +1158,7 @@ void sub_809E534(u8 taskId) } __attribute__((naked)) -void sub_809E5C4(void) +static void sub_809E5C4(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1439,14 +1430,14 @@ void sub_809E7F0(u8 taskId) { if (sub_809F5F8()) { - ewramSS.loadGfxState = 0; - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + pssData.loadGfxState = 0; + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); gTasks[taskId].func = sub_809E3FC; sub_80A2078(taskId); } } -void sub_809E83C(u8 taskId, s8 b) +static void sub_809E83C(u8 taskId, s8 b) { PlaySE(5); @@ -1455,9 +1446,9 @@ void sub_809E83C(u8 taskId, s8 b) if (b == 1) { - if (ewramSS.selectedMoveIndex != ewramSS.switchMoveIndex) + if (pssData.selectedMoveIndex != pssData.switchMoveIndex) { - if (ewramSS.usingPC == FALSE) + if (pssData.usingPC == FALSE) { sub_809E5C4(); } @@ -1466,9 +1457,9 @@ void sub_809E83C(u8 taskId, s8 b) sub_809E6D8(); } - ewramSS.selectedMoveIndex = ewramSS.switchMoveIndex; - sub_809F678(&ewramSS.loadedMon); - ewramSS.loadGfxState = 1; + pssData.selectedMoveIndex = pssData.switchMoveIndex; + sub_809F678(&pssData.loadedMon); + pssData.loadGfxState = 1; gTasks[taskId].func = sub_809E7F0; return; @@ -1476,7 +1467,7 @@ void sub_809E83C(u8 taskId, s8 b) } else { - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); } gTasks[taskId].func = sub_809E3FC; @@ -1484,7 +1475,7 @@ void sub_809E83C(u8 taskId, s8 b) } __attribute__((naked)) -void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/) +static void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1663,31 +1654,31 @@ _0809EA4C: .4byte gSharedMem + 0x18010\n\ .syntax divided\n"); } -void SummaryScreenHandleAButton(u8 taskId) +static void SummaryScreenHandleAButton(u8 taskId) { PlaySE(5); - ewramSS.selectedMoveIndex = 0; + pssData.selectedMoveIndex = 0; sub_80A1488(2, 0); sub_80A1654(2, 0); - if (!ewramSS.disableMoveOrderEditing) + if (!pssData.disableMoveOrderEditing) { - ewramSS.headerActionTextId = 5; + pssData.headerActionTextId = 5; PrintSummaryWindowHeaderText(); } sub_80A16CC(0); - sub_80A029C(&ewramSS.loadedMon); + sub_80A029C(&pssData.loadedMon); sub_80A1A30(9); gTasks[taskId].func = sub_809E3FC; sub_80A2078(taskId); } -void sub_809EAC8(u8 taskId) +static void sub_809EAC8(u8 taskId) { - if (ewramSS.selectedMoveIndex != 4) + if (pssData.selectedMoveIndex != 4) { sub_80A1488(-2, 0); sub_80A1654(-2, 0); @@ -1699,13 +1690,13 @@ void sub_809EAC8(u8 taskId) MenuZeroFillWindowRect(15, 12, 28, 13); MenuZeroFillWindowRect(11, 15, 28, 18); - ewramSS.headerActionTextId = 6; + pssData.headerActionTextId = 6; PrintSummaryWindowHeaderText(); gTasks[taskId].func = SummaryScreenHandleKeyInput; } -void sub_809EB40(u8 taskId) +static void sub_809EB40(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1715,15 +1706,15 @@ void sub_809EB40(u8 taskId) gTasks[taskId].func = sub_809E260; break; case 0: - ewramSS.selectedMoveIndex = 0; - if (ewramSS.moveToLearn != 0) + pssData.selectedMoveIndex = 0; + if (pssData.moveToLearn != 0) { sub_80A1488(10, 0); - sub_80A1654(10, ewramSS.selectedMoveIndex); + sub_80A1654(10, pssData.selectedMoveIndex); } sub_80A16CC(0); - sub_80A029C(&ewramSS.loadedMon); + sub_80A029C(&pssData.loadedMon); // fall through default: gTasks[taskId].data[0]++; @@ -1731,20 +1722,20 @@ void sub_809EB40(u8 taskId) } } -void sub_809EBC4(void) +static void sub_809EBC4(void) { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { DrawSummaryScreenNavigationDots(); gUnknown_030042C0 = 0x100; - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00; } } @@ -1757,36 +1748,36 @@ void sub_809EC38(u8 taskId) switch (taskData[0]) { case 0: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { gUnknown_03004288 = 0x100; } - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800; } - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00; } } else { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { gUnknown_030042C0 = 0x100; } - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; } - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; } @@ -1795,7 +1786,7 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 1: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { int var2 = gUnknown_030042C0 - 0x20; gUnknown_030042C0 = var2; @@ -1819,28 +1810,28 @@ void sub_809EC38(u8 taskId) } break; case 2: - ewramSS.headerTextId = ewramSS.page + 1; - minus2 = ewramSS.mode - 2; + pssData.headerTextId = pssData.page + 1; + minus2 = pssData.mode - 2; if (minus2 < 2) { - ewramSS.headerActionTextId = 0; - sub_80A029C(&ewramSS.loadedMon); - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); - sub_80A00F4(ewramSS.selectedMoveIndex); + pssData.headerActionTextId = 0; + sub_80A029C(&pssData.loadedMon); + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); + sub_80A00F4(pssData.selectedMoveIndex); } else { - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.headerActionTextId = 6; + pssData.headerActionTextId = 6; } - else if (ewramSS.page == PSS_PAGE_INFO) + else if (pssData.page == PSS_PAGE_INFO) { - ewramSS.headerActionTextId = 7; + pssData.headerActionTextId = 7; } else { - ewramSS.headerActionTextId = 0; + pssData.headerActionTextId = 0; } } @@ -1852,8 +1843,8 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 4: - sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); - ewramSS.bgToggle ^= 1; + sUnknown_083C1598[pssData.page](&pssData.loadedMon); + pssData.bgToggle ^= 1; taskData[0]++; break; case 5: @@ -1874,10 +1865,10 @@ void sub_809EE74(u8 taskId) switch (taskData[0]) { case 0: - var1 = ewramSS.bgToggle; + var1 = pssData.bgToggle; if (var1 == 0) { - gUnknown_03004288 = ewramSS.bgToggle; + gUnknown_03004288 = pssData.bgToggle; taskData[0]++; } else @@ -1887,28 +1878,28 @@ void sub_809EE74(u8 taskId) } break; case 1: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01; REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; } else { - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01; REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; @@ -1917,7 +1908,7 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 2: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { int var2 = gUnknown_03004288 + 0x20; gUnknown_03004288 = var2; @@ -1937,28 +1928,28 @@ void sub_809EE74(u8 taskId) } break; case 3: - ewramSS.headerTextId = ewramSS.page + 1; - minus2 = ewramSS.mode - 2; + pssData.headerTextId = pssData.page + 1; + minus2 = pssData.mode - 2; if (minus2 < 2) { - ewramSS.headerActionTextId = 0; - sub_80A029C(&ewramSS.loadedMon); - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); - sub_80A00F4(ewramSS.selectedMoveIndex); + pssData.headerActionTextId = 0; + sub_80A029C(&pssData.loadedMon); + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); + sub_80A00F4(pssData.selectedMoveIndex); } else { - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.headerActionTextId = 6; + pssData.headerActionTextId = 6; } - else if (ewramSS.page == PSS_PAGE_INFO) + else if (pssData.page == PSS_PAGE_INFO) { - ewramSS.headerActionTextId = 7; + pssData.headerActionTextId = 7; } else { - ewramSS.headerActionTextId = 0; + pssData.headerActionTextId = 0; } } @@ -1970,8 +1961,8 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 5: - sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); - ewramSS.bgToggle ^= 1; + sUnknown_083C1598[pssData.page](&pssData.loadedMon); + pssData.bgToggle ^= 1; taskData[0]++; break; case 6: @@ -1985,7 +1976,7 @@ void sub_809EE74(u8 taskId) void sub_809F0D0(u8 taskId, s8 direction) { - ewramSS.page += direction; + pssData.page += direction; gUnknown_03005CF0 = gTasks[taskId].func; sub_809FBE4(); gTasks[taskId].data[0] = 0; @@ -2001,12 +1992,12 @@ void sub_809F0D0(u8 taskId, s8 direction) } } -void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) +static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) { - if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { - if (direction == -1 && ewramSS.page == ewramSS.firstPage) return; - if (direction == 1 && ewramSS.page == ewramSS.lastPage) return; + if (direction == -1 && pssData.page == pssData.firstPage) return; + if (direction == 1 && pssData.page == pssData.lastPage) return; if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) { @@ -2017,14 +2008,14 @@ void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) } #ifdef NONMATCHING -void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) { s8 var3; u8 var1 = direction; - if (ewramSS.usingPC == TRUE) + if (pssData.usingPC == TRUE) { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { var1 = (direction == 1) ? 0 : 1; } @@ -2033,7 +2024,7 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) var1 = (direction == 1) ? 2 : 3; } - var3 = StorageSystemGetNextMonIndex(ewramSS.monList.boxMons, ewramSS.monIndex, ewramSS.maxMonIndex, var1); + var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, var1); } else { @@ -2050,19 +2041,19 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) if (var3 != -1) { PlaySE(5); - if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) + if (GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(-2); } - ewramSS.monIndex = var3; - ewramSS.unk84 = gTasks[taskId].func; + pssData.monIndex = var3; + pssData.unk84 = gTasks[taskId].func; gTasks[taskId].func = sub_809F43C; } } #else __attribute__((naked)) -void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ @@ -2168,16 +2159,16 @@ _0809F280: .4byte sub_809F43C\n\ // s8 sub_809F284(s8 a) // { -// struct Pokemon *mons = ewramSS.monList.partyMons; +// struct Pokemon *mons = pssData.monList.partyMons; // u8 var1 = 0; -// if (ewramSS.page == PSS_PAGE_INFO) +// if (pssData.page == PSS_PAGE_INFO) // { -// if ((s8)a == -1 || ewramSS.monIndex != 0) +// if ((s8)a == -1 || pssData.monIndex != 0) // { -// if ((s8)a == 1 || ewramSS.monIndex < ewramSS.maxMonIndex) +// if ((s8)a == 1 || pssData.monIndex < pssData.maxMonIndex) // { -// return ewramSS.monIndex + a; +// return pssData.monIndex + a; // } // } @@ -2189,18 +2180,18 @@ _0809F280: .4byte sub_809F43C\n\ // { // var1 += a; -// if (ewramSS.monIndex + var1 >= 0 || ewramSS.monIndex + var1 > ewramSS.maxMonIndex) +// if (pssData.monIndex + var1 >= 0 || pssData.monIndex + var1 > pssData.maxMonIndex) // { // return -1; // } -// if (!GetMonData(&mons[ewramSS.monIndex + var1], MON_DATA_IS_EGG)) +// if (!GetMonData(&mons[pssData.monIndex + var1], MON_DATA_IS_EGG)) // { // break; // } // } -// return ewramSS.monIndex + var1; +// return pssData.monIndex + var1; // } // } @@ -2290,7 +2281,7 @@ bool8 sub_809F310(struct Pokemon *mon) { if (GetMonData(mon, MON_DATA_SPECIES)) { - if (ewramSS.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG)) + if (pssData.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG)) { return TRUE; } @@ -2340,7 +2331,7 @@ s8 sub_809F3CC(s8 direction) for (i = 0; i < PARTY_SIZE; i++) { - if (sDoubleBattlePartyOrder[i] == ewramSS.monIndex) + if (sDoubleBattlePartyOrder[i] == pssData.monIndex) { monIndex = i; break; @@ -2373,33 +2364,33 @@ void sub_809F43C(u8 taskId) gMain.state++; break; case 1: - DestroySpriteAndFreeResources(&gSprites[ewramSS.monSpriteId]); + DestroySpriteAndFreeResources(&gSprites[pssData.monSpriteId]); gMain.state++; break; case 2: - DestroySpriteAndFreeResources(&gSprites[ewramSS.ballSpriteId]); + DestroySpriteAndFreeResources(&gSprites[pssData.ballSpriteId]); gMain.state++; break; case 3: - ewramSS.loadGfxState = 0; - ewramSS.selectedMoveIndex = 0; + pssData.loadGfxState = 0; + pssData.selectedMoveIndex = 0; gMain.state++; break; case 4: - sub_809F678(&ewramSS.loadedMon); - if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) + sub_809F678(&pssData.loadedMon); + if (GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(2); } - DrawPokerusSurvivorDot(&ewramSS.loadedMon); + DrawPokerusSurvivorDot(&pssData.loadedMon); gMain.state++; break; case 5: - if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) + if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF) { - ewramSS.loadGfxState = 0; - if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + pssData.loadGfxState = 0; + if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -2412,17 +2403,17 @@ void sub_809F43C(u8 taskId) } break; case 6: - sub_80A1DCC(&ewramSS.loadedMon); + sub_80A1DCC(&pssData.loadedMon); gMain.state++; break; case 7: - sub_80A1DE8(&ewramSS.loadedMon); + sub_80A1DE8(&pssData.loadedMon); gMain.state++; break; case 8: if (sub_809F5F8()) { - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; } break; @@ -2430,60 +2421,60 @@ void sub_809F43C(u8 taskId) if (sub_8055870() != TRUE) { gMain.state = 0; - gTasks[taskId].func = ewramSS.unk84; + gTasks[taskId].func = pssData.unk84; } break; } } -bool8 sub_809F5F8(void) +static bool8 sub_809F5F8(void) { - if (ewramSS.loadGfxState == 0) + if (pssData.loadGfxState == 0) { - sub_809FAC8(&ewramSS.loadedMon); - ewramSS.loadGfxState++; + sub_809FAC8(&pssData.loadedMon); + pssData.loadGfxState++; return FALSE; } else { - sUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1588[pssData.page](&pssData.loadedMon); return TRUE; } } -void sub_809F63C(struct Pokemon *mon) +static void sub_809F63C(struct Pokemon *mon) { sub_809FE80(); sub_809FC34(mon); } -void sub_809F650(struct Pokemon *mon) +static void sub_809F650(struct Pokemon *mon) { sub_80A00A4(); sub_809FF64(mon); } -void sub_809F664(struct Pokemon *mon) +static void sub_809F664(struct Pokemon *mon) { sub_80A0390(); sub_80A015C(mon); } -void sub_809F678(struct Pokemon *mon) +static void sub_809F678(struct Pokemon *mon) { - if (ewramSS.usingPC == FALSE) + if (pssData.usingPC == FALSE) { - struct Pokemon *mons = ewramSS.monList.partyMons; - *mon = mons[ewramSS.monIndex]; + struct Pokemon *mons = pssData.monList.partyMons; + *mon = mons[pssData.monIndex]; } else { - struct BoxPokemon *mons = ewramSS.monList.boxMons; - sub_803B4B4(&mons[ewramSS.monIndex], mon); + struct BoxPokemon *mons = pssData.monList.boxMons; + sub_803B4B4(&mons[pssData.monIndex], mon); } } -u8 sub_809F6B4(struct Pokemon *mon, u8 *b) +static u8 sub_809F6B4(struct Pokemon *mon, u8 *b) { u16 species; u32 personality; @@ -2521,7 +2512,7 @@ u8 sub_809F6B4(struct Pokemon *mon, u8 *b) } } -u16 GetMonMove(struct Pokemon *mon, u8 moveId) +static u16 GetMonMove(struct Pokemon *mon, u8 moveId) { switch (moveId) { @@ -2551,14 +2542,14 @@ static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId) } } -bool8 sub_809F7D0(u8 taskId) +static bool8 sub_809F7D0(u8 taskId) { struct Pokemon mon; u16 move; sub_809F678(&mon); - move = GetMonMove(&mon, ewramSS.selectedMoveIndex); - if (IsHMMove(move) == TRUE && ewramSS.mode != PSS_MODE_UNKNOWN) + move = GetMonMove(&mon, pssData.selectedMoveIndex); + if (IsHMMove(move) == TRUE && pssData.mode != PSS_MODE_UNKNOWN) { return FALSE; } @@ -2566,7 +2557,7 @@ bool8 sub_809F7D0(u8 taskId) return TRUE; } -#ifdef NONMATCHING // The two "ewramSS.selectedMoveIndex = taskData[15];" lines have small register differences. +#ifdef NONMATCHING // The two "pssData.selectedMoveIndex = taskData[15];" lines have small register differences. void sub_809F814(u8 taskId) { u16 var1; @@ -2583,7 +2574,7 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.selectedMoveIndex = taskData[15]; + pssData.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, -1); } else if (gMain.newKeys & DPAD_DOWN) @@ -2591,14 +2582,14 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.selectedMoveIndex = taskData[15]; + pssData.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, 1); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.page != PSS_PAGE_BATTLE_MOVES) + if (pssData.page != PSS_PAGE_BATTLE_MOVES) { - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2612,9 +2603,9 @@ void sub_809F814(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.page != ewramSS.lastPage) + if (pssData.page != pssData.lastPage) { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2858,7 +2849,7 @@ _0809F9CC: .4byte sub_809E260\n\ } #endif // NONMATCHING -void sub_809F9D0(u8 taskId, u8 b) +static void sub_809F9D0(u8 taskId, u8 b) { s16 *taskData = gTasks[taskId].data; taskData[14] = 0; @@ -2874,7 +2865,7 @@ void sub_809F9D0(u8 taskId, u8 b) u8 sub_809FA30(void) { - return ewramSS.switchMoveIndex; + return pssData.switchMoveIndex; } // void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) @@ -2938,7 +2929,7 @@ bool8 sub_809FA94(struct Pokemon *mon) } } -void sub_809FAC8(struct Pokemon *mon) +static void sub_809FAC8(struct Pokemon *mon) { bool8 shinyDexNum; u16 dexNum; @@ -2988,7 +2979,7 @@ void sub_809FAC8(struct Pokemon *mon) } } -void sub_809FBE4(void) +static void sub_809FBE4(void) { u8 i; @@ -3000,14 +2991,14 @@ void sub_809FBE4(void) MenuZeroFillWindowRect(11, 4, 29, 18); } -void sub_809FC0C(void) +static void sub_809FC0C(void) { MenuPrint(gOtherText_Type2, 11, 6); GetStringCenterAlignXOffset(0, 22, 4); GetStringCenterAlignXOffset(2, 23, 4); } -void sub_809FC34(struct Pokemon *mon) +static void sub_809FC34(struct Pokemon *mon) { u8 i; u8 *buffer; @@ -3100,13 +3091,13 @@ void sub_809FC34(struct Pokemon *mon) } } -void sub_809FE6C(struct Pokemon *mon) +static void sub_809FE6C(struct Pokemon *mon) { sub_809FC0C(); sub_809FC34(mon); } -void sub_809FE80(void) +static void sub_809FE80(void) { MenuZeroFillWindowRect(14, 4, 18, 5); MenuZeroFillWindowRect(25, 4, 30, 5); @@ -3114,7 +3105,7 @@ void sub_809FE80(void) MenuZeroFillWindowRect(11, 14, 28, 17); } -void sub_809FEB8(void) +static void sub_809FEB8(void) { sub_80A1FF8(gOtherText_ExpPoints, 13, 11, 14); sub_80A1FF8(gOtherText_NextLv, 13, 11, 16); @@ -3128,7 +3119,7 @@ void sub_809FEB8(void) sub_80A1F48(gOtherText_Speed, 13, 22, 11, 36); } -void sub_809FF64(struct Pokemon *mon) +static void sub_809FF64(struct Pokemon *mon) { u8 i; u16 heldItem; @@ -3171,13 +3162,13 @@ void sub_809FF64(struct Pokemon *mon) MenuPrint_PixelCoords(gStringVar1, 126, 56, 1); } -void sub_80A0090(struct Pokemon *mon) +static void sub_80A0090(struct Pokemon *mon) { sub_809FEB8(); sub_809FF64(mon); } -void sub_80A00A4(void) +static void sub_80A00A4(void) { MenuZeroFillWindowRect(11, 4, 19, 5); MenuZeroFillWindowRect(16, 7, 21, 8); @@ -3187,11 +3178,11 @@ void sub_80A00A4(void) MenuZeroFillWindowRect(23, 16, 28, 17); } -void sub_80A00F4(u8 a) +static void sub_80A00F4(u8 a) { - if (ewramSS.moveToLearn != 0 || a != 4) + if (pssData.moveToLearn != 0 || a != 4) { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A1FF8(gOtherText_Power2, 13, 1, 15); sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17); @@ -3204,7 +3195,7 @@ void sub_80A00F4(u8 a) } } -void sub_80A015C(struct Pokemon *mon) +static void sub_80A015C(struct Pokemon *mon) { u8 i; u16 move; @@ -3226,7 +3217,7 @@ void sub_80A015C(struct Pokemon *mon) } else { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i); } @@ -3250,26 +3241,26 @@ void sub_80A015C(struct Pokemon *mon) } } -void sub_80A029C(struct Pokemon *mon) +static void sub_80A029C(struct Pokemon *mon) { u8 *buffer; u16 move; u8 pp; - if (ewramSS.moveToLearn == 0) + if (pssData.moveToLearn == 0) { sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12); return; } - move = ewramSS.moveToLearn; + move = pssData.moveToLearn; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) sub_80A198C(gBattleMoves[move].type, 87, 96, 4); else sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4); - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) sub_80A1FF8(gMoveNames[move], 10, 15, 12); else sub_80A1FF8(gMoveNames[move], 9, 15, 12); @@ -3284,7 +3275,7 @@ void sub_80A029C(struct Pokemon *mon) MenuPrint(gStringVar1, 25, 12); } -void sub_80A0390(void) +static void sub_80A0390(void) { u8 i; @@ -3304,9 +3295,9 @@ u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex) } else { - if (ewramSS.moveToLearn != 0) + if (pssData.moveToLearn != 0) { - move = ewramSS.moveToLearn; + move = pssData.moveToLearn; } else { @@ -3321,7 +3312,7 @@ void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) { u16 move = sub_80A03BC(mon, *selectedMoveIndex); - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A04CC(move); sub_80A057C(0xFFFF); @@ -3332,12 +3323,12 @@ void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) } } -void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) +static void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) { u16 move = sub_80A03BC(mon, *selectedMoveIndex); MenuZeroFillWindowRect(11, 15, 28, 18); - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A046C(move); } @@ -3349,21 +3340,21 @@ void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) sub_80A03F0(mon, selectedMoveIndex); } -void sub_80A046C(u16 move) +static void sub_80A046C(u16 move) { if (move == 0xFFFF) return; MenuPrint(gMoveDescriptions[move - 1], 11, 15); } -void sub_80A0498(u16 move) +static void sub_80A0498(u16 move) { if (move == 0xFFFF) return; MenuPrint(gContestEffectStrings[gContestMoves[move].effect], 11, 15); } -void sub_80A04CC(u16 move) +static void sub_80A04CC(u16 move) { u8 *buffer; @@ -3397,7 +3388,7 @@ void sub_80A04CC(u16 move) } #ifdef NONMATCHING // The two vramAddr lines are non-matching. -void sub_80A057C(u16 move) +static void sub_80A057C(u16 move) { u8 appeal; u8 jam; @@ -3448,7 +3439,7 @@ void sub_80A057C(u16 move) } #else __attribute__((naked)) -void sub_80A057C(u16 move) +static void sub_80A057C(u16 move) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -3598,7 +3589,7 @@ bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) return FALSE; } -void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top) +static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top) { u8 locationMet; u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME); @@ -3635,7 +3626,7 @@ void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 t MenuPrint(gOtherText_EggDayCare, left, top); } -void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) +static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) { u8 locationMet; u8 gameMet; @@ -3740,7 +3731,7 @@ void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 MenuPrint(gStringVar4, left++, top++); } -void sub_80A0958(struct Pokemon *pokemon) +static void sub_80A0958(struct Pokemon *pokemon) { u16 species; u8 *buffer; @@ -3781,7 +3772,7 @@ void sub_80A0958(struct Pokemon *pokemon) sub_80A0A2C(pokemon, 7, 16); } -void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) +static void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) { const u8 *genderSymbol; u8 var1; @@ -3834,7 +3825,7 @@ u8 GetNumRibbons(struct Pokemon *pokemon) return numRibbons; } -void PrintNumRibbons(struct Pokemon *pokemon) +static void PrintNumRibbons(struct Pokemon *pokemon) { u8 numRibbons = GetNumRibbons(pokemon); @@ -3861,12 +3852,12 @@ void PrintNumRibbons(struct Pokemon *pokemon) MenuPrint(sUnknown_083C15AE, 21, 4); } -void PrintHeldItemName(u16 itemId, u8 left, u8 top) +static void PrintHeldItemName(u16 itemId, u8 left, u8 top) { if (itemId == ITEM_ENIGMA_BERRY && sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE - && (ewramSS.monIndex == 1 || ewramSS.monIndex == 4 || ewramSS.monIndex == 5)) + && (pssData.monIndex == 1 || pssData.monIndex == 4 || pssData.monIndex == 5)) { StringCopy(gStringVar1, ItemId_GetItem(itemId)->name); } @@ -3882,7 +3873,7 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) MenuPrint(sUnknown_083C15B4, left, top); } -void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) +static void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) { u32 curExperience; u8 level; @@ -3953,7 +3944,7 @@ void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) // Prints the text displayed in the top-left or top-right of the screen. // Each of the 4 summary screens displays different text. -void PrintSummaryWindowHeaderText(void) +static void PrintSummaryWindowHeaderText(void) { u8 *buffer = gStringVar1; @@ -3963,7 +3954,7 @@ void PrintSummaryWindowHeaderText(void) buffer += 3; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3972,7 +3963,7 @@ void PrintSummaryWindowHeaderText(void) MenuPrint(gStringVar1, 0, 0); - if (ewramSS.headerActionTextId != 0) + if (pssData.headerActionTextId != 0) { GetStringCenterAlignXOffset(5, 23, 0); GetStringCenterAlignXOffset(6, 24, 0); @@ -3984,7 +3975,7 @@ void PrintSummaryWindowHeaderText(void) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerActionTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerActionTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3996,7 +3987,7 @@ void PrintSummaryWindowHeaderText(void) // If the given pokemon previously had the pokerus virus, a small // dot will be drawn in between the pokeball and the mon's level. -void DrawPokerusSurvivorDot(struct Pokemon *pokemon) +static void DrawPokerusSurvivorDot(struct Pokemon *pokemon) { u16 *vram1 = (u16 *)(VRAM + 0xE444); u16 *vram2 = (u16 *)(VRAM + 0xEC44); @@ -4015,7 +4006,7 @@ void DrawPokerusSurvivorDot(struct Pokemon *pokemon) // Draws the 4 small navigation circles at the top of the pokemon summary screen. #ifdef NONMATCHING -void DrawSummaryScreenNavigationDots(void) +static void DrawSummaryScreenNavigationDots(void) { void *dest; u16 arr[8]; @@ -4087,7 +4078,7 @@ void DrawSummaryScreenNavigationDots(void) } #else __attribute__((naked)) -void DrawSummaryScreenNavigationDots(void) +static void DrawSummaryScreenNavigationDots(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -4586,7 +4577,7 @@ _080A12CC: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A12D0(s8 a) +static void sub_80A12D0(s8 a) { u8 newTaskId; @@ -4651,12 +4642,12 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0) // { -// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) +// if (pssData.page == PSS_PAGE_BATTLE_MOVES) // { // MenuZeroFillWindowRect(0, 14, 9, 18); -// sub_80A0958(ewramSS.loadedMon); +// sub_80A0958(pssData.loadedMon); -// if (GetMonStatusAndPokerus(ewramSS.loadedMon)) +// if (GetMonStatusAndPokerus(pssData.loadedMon)) // { // sub_80A1FF8(gOtherText_Status, 13, 1, 18); // } @@ -4667,17 +4658,17 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[1] > 9) // { -// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) +// if (pssData.page == PSS_PAGE_BATTLE_MOVES) // { // sub_80A00F4(gTasks[taskId].data[3]); // } -// sub_80A0428(ewramSS.loadedMon, &gTasks[taskId].data[3]); +// sub_80A0428(pssData.loadedMon, &gTasks[taskId].data[3]); // DestroyTask(taskId); // } // } __attribute__((naked)) -void sub_80A1334(u8 taskId) +static void sub_80A1334(u8 taskId) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -4850,11 +4841,11 @@ _080A1484: .4byte gOtherText_Status\n\ // Related to re-drawing the summary area underneath the pokemon's picture // in all of the summary screen tabs. -void sub_80A1488(s8 a, u8 b) +static void sub_80A1488(s8 a, u8 b) { u8 taskId; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -4881,7 +4872,7 @@ void sub_80A1488(s8 a, u8 b) } __attribute__((naked)) -void sub_80A1500(u8 taskId) +static void sub_80A1500(u8 taskId) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -5052,11 +5043,11 @@ _080A1650: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A1654(s8 a, u8 b) +static void sub_80A1654(s8 a, u8 b) { u8 taskId; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -5083,7 +5074,7 @@ void sub_80A1654(s8 a, u8 b) } #ifdef NONMATCHING -void sub_80A16CC(u8 a) +static void sub_80A16CC(u8 a) { u8 i; u16 *vramAddr = (u16 *)(VRAM + 0x6AD4); @@ -5131,7 +5122,7 @@ void sub_80A16CC(u8 a) } #else __attribute__((naked)) -void sub_80A16CC(u8 a) +static void sub_80A16CC(u8 a) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -5325,20 +5316,20 @@ u8 sub_80A1808(struct Pokemon *pokemon) return spriteId; } -void sub_80A1888(struct Sprite *sprite) +static void sub_80A1888(struct Sprite *sprite) { if (!gPaletteFade.active) { sprite->callback = SpriteCallbackDummy; - if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { PlayCry1(sprite->data[0], 0); } } } -void sub_80A18C4(void) +static void sub_80A18C4(void) { u8 i; @@ -5348,7 +5339,7 @@ void sub_80A18C4(void) } } -void sub_80A18E4(u8 a) +static void sub_80A18E4(u8 a) { if (ewram1A000[a] != 0xFF) { @@ -5357,12 +5348,12 @@ void sub_80A18E4(u8 a) } } -void sub_80A1918(u8 a, u8 invisible) +static void sub_80A1918(u8 a, u8 invisible) { gSprites[ewram1A000[a]].invisible = invisible; } -void sub_80A1950(void) +static void sub_80A1950(void) { u8 i; @@ -5377,7 +5368,7 @@ void sub_80A1950(void) } } -void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) +static void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) { StartSpriteAnim(&gSprites[ewram1A000[d]], animNum); @@ -5388,13 +5379,13 @@ void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) sub_80A1918(d, 0); } -void sub_80A1A30(u8 a) +static void sub_80A1A30(u8 a) { u8 i; s16 x; u8 subPriority = 0; - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES) { if (a == 9) { @@ -5426,7 +5417,7 @@ void sub_80A1A30(u8 a) } } -void sub_80A1B1C(u8 a) +static void sub_80A1B1C(u8 a) { u8 i; @@ -5436,7 +5427,7 @@ void sub_80A1B1C(u8 a) } } -void sub_80A1B40(u8 a) +static void sub_80A1B40(u8 a) { u8 i; a *= 3; @@ -5451,7 +5442,7 @@ void sub_80A1B40(u8 a) StartSpriteAnim(&gSprites[ewram1A000[18]], a + 5); } -void sub_80A1BC0(struct Sprite *sprite) +static void sub_80A1BC0(struct Sprite *sprite) { u8 animNum = sprite->animNum - 4; if (animNum < 3) @@ -5475,11 +5466,11 @@ void sub_80A1BC0(struct Sprite *sprite) if (sprite->data[0] == 9) { - sprite->pos2.y = ewramSS.selectedMoveIndex * 16; + sprite->pos2.y = pssData.selectedMoveIndex * 16; } else { - sprite->pos2.y = ewramSS.switchMoveIndex * 16; + sprite->pos2.y = pssData.switchMoveIndex * 16; } } @@ -5665,7 +5656,7 @@ _080A1D80: .4byte gSprites\n\ } #endif // NONMATCHING -void sub_80A1D84(struct Pokemon *mon) +static void sub_80A1D84(struct Pokemon *mon) { struct Sprite *sprite; @@ -5682,23 +5673,23 @@ void sub_80A1D84(struct Pokemon *mon) } } -void sub_80A1DCC(struct Pokemon *mon) +static void sub_80A1DCC(struct Pokemon *mon) { DestroySprite(gUnknown_020384F4); sub_80A1D84(mon); } -void sub_80A1DE8(struct Pokemon *mon) +static void sub_80A1DE8(struct Pokemon *mon) { u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL)); sub_80478DC(ball); - ewramSS.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); - gSprites[ewramSS.ballSpriteId].callback = SpriteCallbackDummy; - gSprites[ewramSS.ballSpriteId].oam.priority = 3; + pssData.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); + gSprites[pssData.ballSpriteId].callback = SpriteCallbackDummy; + gSprites[pssData.ballSpriteId].oam.priority = 3; } -u8 *sub_80A1E58(u8 *text, u8 id) +static u8 *sub_80A1E58(u8 *text, u8 id) { if (id != 0xFF) { @@ -5744,25 +5735,25 @@ u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8 id) return dest; } -void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e) +static void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e) { sub_80A1E9C(gStringVar4, text, id); MenuPrint_PixelCoords(gStringVar4, left, top, (bool8)e); } -void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e) +static void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e) { sub_80A1E9C(gStringVar4, text, id); sub_8072BD8(gStringVar4, c, d, e); } -void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e) +static void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e) { ConvertIntToDecimalStringN(gStringVar1, value, mode, n); sub_80A1EF8(gStringVar1, id, left, top, e); } -void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top) +static void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top) { sub_80A1E9C(gStringVar4, text, id); MenuPrint(gStringVar4, left, top); @@ -5787,14 +5778,14 @@ u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level) return dest; } -void sub_80A2078(int taskId) +static void sub_80A2078(int taskId) { gUnknown_03005CF0 = gTasks[taskId].func; gTasks[taskId].func = sub_80A20A8; gTasks[taskId].func((u8)taskId); } -void sub_80A20A8(u8 taskId) +static void sub_80A20A8(u8 taskId) { if (sub_8055870() != TRUE) { diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 1bbb8d485..d4c6417c7 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -817,7 +817,7 @@ static void Task_EvolutionScene(u8 taskID) case 5: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, gMoveToLearn); gTasks[taskID].tLearnMoveState++; @@ -1137,7 +1137,7 @@ static void Task_TradeEvolutionScene(u8 taskID) case 5: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics, gMoveToLearn); gTasks[taskID].tLearnMoveState++; diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 21ff220d2..d95a0ed39 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -272,7 +272,7 @@ void HandleMoveTutorPartyMenu(u8 var) void sub_80F9EEC(void) { - sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); + ShowSelectMovePokemonSummaryScreen(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); UNK_2018000_STRUCT.unk8 = 3; gFieldCallback = sub_8080990; } -- cgit v1.2.3 From 410fbfe7fe0e3ab1f367ab83fbea4a8145bf82fc Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 13:53:34 -0800 Subject: Fix German build --- src/data/text/move_descriptions_de.h | 8 +++++--- src/pokemon/pokemon_summary_screen.c | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/data/text/move_descriptions_de.h b/src/data/text/move_descriptions_de.h index 37f1ea410..854336295 100644 --- a/src/data/text/move_descriptions_de.h +++ b/src/data/text/move_descriptions_de.h @@ -95,7 +95,9 @@ static const u8 MoveDescription_DoubleKick[] = _( "wird zweimal getroffen."); static const u8 MoveDescription_MegaKick[] = _( - "Ein extrem heftiger Tritt.$"static const u8 MoveDescription_JumpKick[] = (); + "Ein extrem heftiger Tritt."); + +static const u8 MoveDescription_JumpKick[] = _( "Sprung-Tritt. Selbstschä-\n" "digung bei Misserfolg."); @@ -1411,7 +1413,7 @@ static const u8 MoveDescription_PsychoBoost[] = _( "Angriff mit voller Kraft.\n" "SPEZ. ANGR. sinkt deutlich."); -const u8 * const MoveDescriptions[] = { +const u8 * const gMoveDescriptions[] = { MoveDescription_Pound, MoveDescription_KarateChop, MoveDescription_DoubleSlap, @@ -1766,4 +1768,4 @@ const u8 * const MoveDescriptions[] = { MoveDescription_WaterPulse, MoveDescription_DoomDesire, MoveDescription_PsychoBoost, -]; +}; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index c7bdab069..f141f1c19 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -523,7 +523,9 @@ static const struct SpriteTemplate sSpriteTemplate_83C1304 = { static const u16 sSummaryScreenMonMarkingsPalette[] = INCBIN_U16("graphics/summary_screen/mon_markings.gbapal"); #if ENGLISH -static const u16 sSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp"); +static const u16 gSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp"); +#elif GERMAN +extern const u16 gSummaryScreenTextTiles[]; #endif static const u16 sSummaryScreenButtonTiles[] = INCBIN_U16("graphics/summary_screen/buttons.4bpp"); @@ -732,7 +734,7 @@ bool8 sub_809DA84(void) gMain.state++; break; case 9: - src = sSummaryScreenTextTiles; + src = gSummaryScreenTextTiles; dest = (void *)VRAM + 0xD000; DmaCopy16(3, src, dest, 320); -- cgit v1.2.3 From 617971cb63ec445b84d13b837e3adc0592b3057f Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 19:01:16 -0800 Subject: Use song constants and 'mon' instead of 'pokemon' --- src/pokemon/pokemon_summary_screen.c | 111 ++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index f141f1c19..33d4f2951 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -19,6 +19,7 @@ #include "pokemon.h" #include "pokemon_summary_screen.h" #include "region_map.h" +#include "songs.h" #include "sound.h" #include "species.h" #include "sprite.h" @@ -957,7 +958,7 @@ static void sub_809E044(void) static void SummaryScreenExit(u8 taskId) { - PlaySE(5); + PlaySE(SE_SELECT); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_809E13C; } @@ -1062,7 +1063,7 @@ static void sub_809E260(u8 taskId) } else { - PlaySE(32); + PlaySE(SE_HAZURE); sub_809F9D0(taskId, pssData.selectedMoveIndex); } } @@ -1095,11 +1096,11 @@ static void sub_809E3FC(u8 taskId) { if (!MonKnowsMultipleMoves(&pssData.loadedMon)) { - PlaySE(32); + PlaySE(SE_HAZURE); } else { - PlaySE(5); + PlaySE(SE_SELECT); pssData.switchMoveIndex = pssData.selectedMoveIndex; sub_80A1B40(1); @@ -1110,13 +1111,13 @@ static void sub_809E3FC(u8 taskId) } else { - PlaySE(5); + PlaySE(SE_SELECT); sub_809EAC8(taskId); } } else if (gMain.newKeys & B_BUTTON) { - PlaySE(5); + PlaySE(SE_SELECT); sub_809EAC8(taskId); } @@ -1441,7 +1442,7 @@ void sub_809E7F0(u8 taskId) static void sub_809E83C(u8 taskId, s8 b) { - PlaySE(5); + PlaySE(SE_SELECT); sub_80A1B1C(19); sub_80A1B40(0); @@ -1658,7 +1659,7 @@ _0809EA4C: .4byte gSharedMem + 0x18010\n\ static void SummaryScreenHandleAButton(u8 taskId) { - PlaySE(5); + PlaySE(SE_SELECT); pssData.selectedMoveIndex = 0; sub_80A1488(2, 0); @@ -2003,7 +2004,7 @@ static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) { - PlaySE(5); + PlaySE(SE_SELECT); sub_809F0D0(taskId, direction); } } @@ -2042,7 +2043,7 @@ static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) if (var3 != -1) { - PlaySE(5); + PlaySE(SE_SELECT); if (GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(-2); @@ -3628,12 +3629,12 @@ static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 lef MenuPrint(gOtherText_EggDayCare, left, top); } -static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) +static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *mon, u8 left, u8 top) { u8 locationMet; u8 gameMet; u8 *ptr = gStringVar4; - u8 nature = GetNature(pokemon); + u8 nature = GetNature(mon); #if ENGLISH ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14); @@ -3650,11 +3651,11 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le ptr = StringCopy(ptr, gOtherText_Terminator4); #endif - if (PokemonSummaryScreen_CheckOT(pokemon) == TRUE) + if (PokemonSummaryScreen_CheckOT(mon) == TRUE) { - locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); + locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); - if (GetMonData(pokemon, MON_DATA_MET_LEVEL) == 0) + if (GetMonData(mon, MON_DATA_MET_LEVEL) == 0) { ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5); *ptr = CHAR_NEWLINE; @@ -3673,7 +3674,7 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL); ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); *ptr = CHAR_NEWLINE; @@ -3686,7 +3687,7 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - gameMet = GetMonData(pokemon, MON_DATA_MET_GAME); + gameMet = GetMonData(mon, MON_DATA_MET_GAME); if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) { @@ -3697,10 +3698,10 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); + locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); if (locationMet == 0xFF) { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL); ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); *ptr = CHAR_NEWLINE; @@ -3717,7 +3718,7 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL); ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); *ptr = CHAR_NEWLINE; @@ -3733,13 +3734,13 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le MenuPrint(gStringVar4, left++, top++); } -static void sub_80A0958(struct Pokemon *pokemon) +static void sub_80A0958(struct Pokemon *mon) { u16 species; u8 *buffer; u8 level; - species = GetMonData(pokemon, MON_DATA_SPECIES); + species = GetMonData(mon, MON_DATA_SPECIES); buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); @@ -3758,7 +3759,7 @@ static void sub_80A0958(struct Pokemon *pokemon) MenuPrint(gStringVar1, 0, 14); MenuZeroFillWindowRect(3, 16, 9, 17); - level = GetMonData(pokemon, MON_DATA_LEVEL); + level = GetMonData(mon, MON_DATA_LEVEL); buffer = sub_80A1E58(gStringVar1, 13); buffer[0] = 0x34; @@ -3771,19 +3772,19 @@ static void sub_80A0958(struct Pokemon *pokemon) buffer[3] = EOS; MenuPrint(gStringVar1, 3, 16); - sub_80A0A2C(pokemon, 7, 16); + sub_80A0A2C(mon, 7, 16); } -static void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) +static void sub_80A0A2C(struct Pokemon *mon, u8 left, u8 top) { const u8 *genderSymbol; u8 var1; u8 bottom; - u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + u16 species = GetMonData(mon, MON_DATA_SPECIES2); if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F) { - u8 gender = GetMonGender(pokemon); + u8 gender = GetMonGender(mon); switch (gender) { default: @@ -3804,32 +3805,32 @@ static void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) } } -u8 GetNumRibbons(struct Pokemon *pokemon) +u8 GetNumRibbons(struct Pokemon *mon) { - u8 numRibbons = GetMonData(pokemon, MON_DATA_COOL_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_BEAUTY_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_CUTE_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_SMART_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_TOUGH_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_CHAMPION_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_WINNING_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_VICTORY_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_ARTIST_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_EFFORT_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_1); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_2); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_3); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_4); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_5); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_6); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_7); + u8 numRibbons = GetMonData(mon, MON_DATA_COOL_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_BEAUTY_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_CUTE_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_SMART_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_TOUGH_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_CHAMPION_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_WINNING_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_VICTORY_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_ARTIST_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_EFFORT_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_1); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_2); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_3); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_4); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_5); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_6); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_7); return numRibbons; } -static void PrintNumRibbons(struct Pokemon *pokemon) +static void PrintNumRibbons(struct Pokemon *mon) { - u8 numRibbons = GetNumRibbons(pokemon); + u8 numRibbons = GetNumRibbons(mon); if (numRibbons == 0) { @@ -3875,7 +3876,7 @@ static void PrintHeldItemName(u16 itemId, u8 left, u8 top) MenuPrint(sUnknown_083C15B4, left, top); } -static void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) +static void DrawExperienceProgressBar(struct Pokemon *mon, u8 left, u8 top) { u32 curExperience; u8 level; @@ -3885,9 +3886,9 @@ static void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) u32 expToNextLevel = 0; s64 numExpProgressBarTicks = 0; - curExperience = GetMonData(pokemon, MON_DATA_EXP); - level = GetMonData(pokemon, MON_DATA_LEVEL); - species = GetMonData(pokemon, MON_DATA_SPECIES); + curExperience = GetMonData(mon, MON_DATA_EXP); + level = GetMonData(mon, MON_DATA_LEVEL); + species = GetMonData(mon, MON_DATA_SPECIES); // The experience progress bar is shown as empty when the Pokemon is already level 100. if (level < 100) @@ -3989,12 +3990,12 @@ static void PrintSummaryWindowHeaderText(void) // If the given pokemon previously had the pokerus virus, a small // dot will be drawn in between the pokeball and the mon's level. -static void DrawPokerusSurvivorDot(struct Pokemon *pokemon) +static void DrawPokerusSurvivorDot(struct Pokemon *mon) { u16 *vram1 = (u16 *)(VRAM + 0xE444); u16 *vram2 = (u16 *)(VRAM + 0xEC44); - if (!CheckPartyPokerus(pokemon, 0) && CheckPartyHasHadPokerus(pokemon, 0)) + if (!CheckPartyPokerus(mon, 0) && CheckPartyHasHadPokerus(mon, 0)) { *vram1 = 0x2C; *vram2 = 0x2C; @@ -5293,12 +5294,12 @@ _080A1804: .4byte gUnknown_08E94550\n\ } #endif // NONMATCHING -u8 sub_80A1808(struct Pokemon *pokemon) +u8 sub_80A1808(struct Pokemon *mon) { u16 species; u8 spriteId; - species = GetMonData(pokemon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES2); spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5); FreeSpriteOamMatrix(&gSprites[spriteId]); -- cgit v1.2.3 From 10704a135e3738b49d9175531d32bfde877f3b6b Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 20:41:27 -0800 Subject: Fix some non-matching functions. Thanks cam --- src/pokemon/pokemon_summary_screen.c | 378 ++++++++--------------------------- 1 file changed, 79 insertions(+), 299 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 33d4f2951..c0f643818 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1160,273 +1160,64 @@ static void sub_809E534(u8 taskId) } } -__attribute__((naked)) static void sub_809E5C4(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - ldr r1, _0809E6D0 @ =gSharedMem + 0x18000\n\ - ldr r5, [r1]\n\ - ldrb r2, [r1, 0x9]\n\ - movs r0, 0x64\n\ - muls r0, r2\n\ - adds r5, r0\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r1, 0x7A\n\ - ldrb r6, [r1]\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r2, r6, 0\n\ - adds r2, 0xD\n\ - str r2, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - adds r1, r2, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - mov r3, r8\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x10]\n\ - adds r0, r5, 0\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - mov r7, sp\n\ - adds r7, 0x5\n\ - str r7, [sp, 0x18]\n\ - strb r0, [r7]\n\ - adds r0, r6, 0\n\ - adds r0, 0x11\n\ - str r0, [sp, 0x1C]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - bl GetMonData\n\ - add r1, sp, 0x4\n\ - mov r10, r1\n\ - strb r0, [r1]\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - bl GetMonData\n\ - mov r4, sp\n\ - adds r4, 0x6\n\ - strb r0, [r4]\n\ - ldr r1, _0809E6D4 @ =gUnknown_08208238\n\ - mov r2, r8\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r4]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - mov r7, r8\n\ - lsls r7, 1\n\ - mov r8, r7\n\ - asrs r2, r7\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r6, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r6, 1\n\ - asrs r1, r6\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r4]\n\ - ldrb r0, [r4]\n\ - bics r0, r3\n\ - strb r0, [r4]\n\ - lsls r2, r6\n\ - mov r0, r8\n\ - lsls r1, r0\n\ - adds r2, r1\n\ - ldrb r0, [r4]\n\ - orrs r0, r2\n\ - strb r0, [r4]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - adds r2, r4, 0\n\ - bl SetMonData\n\ - add sp, 0x20\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\ - .align 2, 0\n\ -_0809E6D0: .4byte gSharedMem + 0x18000\n\ -_0809E6D4: .4byte gUnknown_08208238\n\ - .syntax divided\n"); + struct Pokemon *party = pssData.monList.partyMons; + struct Pokemon *pkmn = &party[pssData.monIndex]; + u8 moveIndex1 = pssData.selectedMoveIndex; + u8 moveIndex2 = pssData.switchMoveIndex; + + u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); + u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); + u8 move1pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1); + u8 move2pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2); + u8 ppBonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES); + + // Calculate PP bonuses + u8 r9 = gUnknown_08208238[moveIndex1]; + u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); + u8 r3 = gUnknown_08208238[moveIndex2]; + u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2); + ppBonuses &= ~r9; + ppBonuses &= ~r3; + ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); + + // Swap the moves + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp); + SetMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses); } -__attribute__((naked)) -void sub_809E6D8(void) +static void sub_809E6D8(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - ldr r2, _0809E7E8 @ =gSharedMem + 0x18000\n\ - ldr r5, [r2]\n\ - ldrb r1, [r2, 0x9]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 4\n\ - adds r5, r0\n\ - adds r0, r2, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r2, 0x7A\n\ - ldrb r6, [r2]\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl GetBoxMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r2, r6, 0\n\ - adds r2, 0xD\n\ - str r2, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - adds r1, r2, 0\n\ - bl GetBoxMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - mov r3, r8\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x10]\n\ - adds r0, r5, 0\n\ - adds r1, r3, 0\n\ - bl GetBoxMonData\n\ - mov r7, sp\n\ - adds r7, 0x5\n\ - str r7, [sp, 0x18]\n\ - strb r0, [r7]\n\ - adds r0, r6, 0\n\ - adds r0, 0x11\n\ - str r0, [sp, 0x1C]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - bl GetBoxMonData\n\ - add r1, sp, 0x4\n\ - mov r10, r1\n\ - strb r0, [r1]\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - bl GetBoxMonData\n\ - mov r4, sp\n\ - adds r4, 0x6\n\ - strb r0, [r4]\n\ - ldr r1, _0809E7EC @ =gUnknown_08208238\n\ - mov r2, r8\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r4]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - mov r7, r8\n\ - lsls r7, 1\n\ - mov r8, r7\n\ - asrs r2, r7\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r6, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r6, 1\n\ - asrs r1, r6\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r4]\n\ - ldrb r0, [r4]\n\ - bics r0, r3\n\ - strb r0, [r4]\n\ - lsls r2, r6\n\ - mov r0, r8\n\ - lsls r1, r0\n\ - adds r2, r1\n\ - ldrb r0, [r4]\n\ - orrs r0, r2\n\ - strb r0, [r4]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - adds r2, r4, 0\n\ - bl SetBoxMonData\n\ - add sp, 0x20\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\ - .align 2, 0\n\ -_0809E7E8: .4byte gSharedMem + 0x18000\n\ -_0809E7EC: .4byte gUnknown_08208238\n\ - .syntax divided\n"); + struct BoxPokemon *boxMons = pssData.monList.boxMons; + struct BoxPokemon *pkmn = &boxMons[pssData.monIndex]; + u8 moveIndex1 = pssData.selectedMoveIndex; + u8 moveIndex2 = pssData.switchMoveIndex; + + u16 move1 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); + u16 move2 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); + u8 move1pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1); + u8 move2pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2); + u8 ppBonuses = GetBoxMonData(pkmn, MON_DATA_PP_BONUSES); + + // Calculate PP bonuses + u8 r9 = gUnknown_08208238[moveIndex1]; + u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); + u8 r3 = gUnknown_08208238[moveIndex2]; + u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2); + ppBonuses &= ~r9; + ppBonuses &= ~r3; + ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); + + // Swap the moves + SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); + SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); + SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp); + SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp); + SetBoxMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses); } void sub_809E7F0(u8 taskId) @@ -2160,44 +1951,32 @@ _0809F280: .4byte sub_809F43C\n\ } #endif // NONMATCHING -// s8 sub_809F284(s8 a) -// { -// struct Pokemon *mons = pssData.monList.partyMons; -// u8 var1 = 0; - -// if (pssData.page == PSS_PAGE_INFO) -// { -// if ((s8)a == -1 || pssData.monIndex != 0) -// { -// if ((s8)a == 1 || pssData.monIndex < pssData.maxMonIndex) -// { -// return pssData.monIndex + a; -// } -// } - -// return -1; -// } -// else -// { -// while (1) -// { -// var1 += a; - -// if (pssData.monIndex + var1 >= 0 || pssData.monIndex + var1 > pssData.maxMonIndex) -// { -// return -1; -// } - -// if (!GetMonData(&mons[pssData.monIndex + var1], MON_DATA_IS_EGG)) -// { -// break; -// } -// } - -// return pssData.monIndex + var1; -// } +#ifdef NONMATCHING +s8 sub_809F284(s8 a) +{ + struct Pokemon *mons = pssData.monList.partyMons; + s8 r6 = 0; -// } + if (pssData.page == PSS_PAGE_INFO) + { + if (a == -1 && pssData.monIndex == 0) + return -1; + if (a == 1 && pssData.monIndex >= pssData.maxMonIndex) + return -1; + return pssData.monIndex + a; + } + else + { + do + { + r6 += a; + if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex) + return -1; + } while (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) != 0); + return pssData.monIndex + r6; + } +} +#else __attribute__((naked)) s8 sub_809F284(s8 a) { @@ -2279,6 +2058,7 @@ _0809F308:\n\ bx r1\n\ .syntax divided\n"); } +#endif // NONMATCHING bool8 sub_809F310(struct Pokemon *mon) { -- cgit v1.2.3