diff --git a/include/code_8024458.h b/include/code_8024458.h index 8d69e6492..b0054c832 100644 --- a/include/code_8024458.h +++ b/include/code_8024458.h @@ -13,8 +13,7 @@ struct unkStruct_203B2AC u8 unk40[0x48 - 0x40]; s16 speciesNum; struct unkStruct_808FF20 unk4C; - u32 unkB0; - u8 fillB4[0xE0 - 0xB4]; + struct UnkInfoTabStruct unkB0; u32 unkE0; UnkTextStruct2 *unkE4; UnkTextStruct3 unkE8; diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 436a5ad73..e52d2a12b 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -49,6 +49,12 @@ struct unkStruct_808FF20 u8 unk58[12]; }; +struct UnkInfoTabStruct +{ + u8 unk0[0xC]; + s32 unkC[9]; +}; + bool8 HasRecruitedMon(s16 species); s16 GetBaseSpecies(s16 index); s16 GetBaseSpeciesNoUnown(s16 index); @@ -70,7 +76,7 @@ s16 ExtractSpeciesIndex(UnkDungeonGlobal_unk1CD98 *r0); void SetSpeciesLevelToExtract(UnkDungeonGlobal_unk1CD98 *r0, s32 level, s32 species); s32 ExtractLevel(UnkDungeonGlobal_unk1CD98 *r0); PokemonStruct1 *sub_808F798(PokemonStruct1 *pokemon, short _species); -void CreatePokemonInfoTabScreen(u32, s32, struct unkStruct_808FF20 *, u8 *, u32); +void CreatePokemonInfoTabScreen(s32 param_1, s32 param_2, struct unkStruct_808FF20 *mon, struct UnkInfoTabStruct *param_4, u32 windowId); void sub_808FF20(struct unkStruct_808FF20 *param_1, struct PokemonStruct1 *pokemon, bool8 param_3); #endif // GUARD_POKEMON_3_H diff --git a/src/code_8024458.c b/src/code_8024458.c index e8e3cb418..adf5af2f2 100644 --- a/src/code_8024458.c +++ b/src/code_8024458.c @@ -83,7 +83,7 @@ static void sub_8024588(void) static void sub_80245D0(void) { - CreatePokemonInfoTabScreen(sUnknown_203B2AC->unk34[sUnknown_203B2AC->input.unk1E], sUnknown_203B2AC->input.unk1E, &sUnknown_203B2AC->unk4C, (u8 *)&sUnknown_203B2AC->unkB0, sUnknown_203B2AC->unkE0); + CreatePokemonInfoTabScreen(sUnknown_203B2AC->unk34[sUnknown_203B2AC->input.unk1E], sUnknown_203B2AC->input.unk1E, &sUnknown_203B2AC->unk4C, &sUnknown_203B2AC->unkB0, sUnknown_203B2AC->unkE0); } static void sub_8024604(void) diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 5a6c20b04..81fb0c5cc 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -1256,7 +1256,7 @@ void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2_, s32 a3, s32 a4) void sub_806806C(PokemonStruct1 *a0) { struct unkStruct_808FF20 unkStruct; - u8 var_C8[48]; + struct UnkInfoTabStruct var_C8; UnkTextStruct3 spTxtStruct = {0}; s32 r7; @@ -1299,7 +1299,7 @@ void sub_806806C(PokemonStruct1 *a0) sub_801317C(&gUnknown_202EE10.unk28); sub_803ECB4(&spTxtStruct, 1); sub_808FF20(&unkStruct, a0, gDungeon->unk644.unk16); - CreatePokemonInfoTabScreen(spF8[r7], r7, &unkStruct, var_C8, 0); + CreatePokemonInfoTabScreen(spF8[r7], r7, &unkStruct, &var_C8, 0); gUnknown_202EE10.unkC = (gUnknown_2027370[0].unk0 + 15) * 8; gUnknown_202EE10.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; @@ -1309,7 +1309,7 @@ void sub_806806C(PokemonStruct1 *a0) AddMenuCursorSprite(&gUnknown_202EE10); if (spF8[r7] == 4) { - if (var_C8[8] != 0) { + if (var_C8.unk0[8] != 0) { sub_80684C4(); } if (unkStruct.unk40 != 0) { @@ -1335,7 +1335,7 @@ void sub_806806C(PokemonStruct1 *a0) } if (spF8[r7] == 4) { - if (((gRealInputs.repeated & DPAD_DOWN) || r5 == 2) && var_C8[8] != 0) { + if (((gRealInputs.repeated & DPAD_DOWN) || r5 == 2) && var_C8.unk0[8] != 0) { s32 i; sub_8083CE0(0); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 6707b9e48..d0f1262ce 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -9,6 +9,7 @@ #include "constants/iq_skill.h" #include "constants/tactic.h" #include "constants/type.h" +#include "constants/ability.h" #include "structs/str_pokemon.h" #include "sprite.h" #include "text_util.h" @@ -16,6 +17,9 @@ #include "luminous_cave.h" #include "code_8097670.h" #include "moves.h" +#include "string_format.h" +#include "dungeon.h" +#include "text.h" extern u8 *gIQSkillNames[]; extern u8 *gIQSkillDescriptions[]; @@ -1050,810 +1054,225 @@ UNUSED void sub_808F83C(PokemonStruct1 *pokemon, s16 species, u8 *r2) *r2 = 0; } - -// https://decomp.me/scratch/qONOW - 91.59% matched (Seth) -NAKED -void CreatePokemonInfoTabScreen(u32 param_1, s32 param_2, struct unkStruct_808FF20 *param_3, u8 *param_4, u32 param_5) +void CreatePokemonInfoTabScreen(s32 param_1, s32 param_2, struct unkStruct_808FF20 *mon, struct UnkInfoTabStruct *param_4, u32 windowId) { - asm_unified( -" push {r4-r7,lr}\n" -" mov r7, r10\n" -" mov r6, r9\n" -" mov r5, r8\n" -" push {r5-r7}\n" -" sub sp, 0x30\n" -" adds r5, r0, 0\n" -" adds r4, r1, 0\n" -" mov r10, r2\n" -" str r3, [sp, 0x2C]\n" -" ldr r0, [sp, 0x50]\n" -" bl sub_80073B8\n" -" ldr r0, _0808F880\n" -" mov r1, r10\n" -" adds r1, 0x2\n" -" movs r2, 0x14\n" -" bl strncpy\n" -" movs r0, 0x20\n" -" mov r9, r0\n" -" cmp r5, 0x5\n" -" bls _0808F874\n" -" b _0808FED6\n" -"_0808F874:\n" -" lsls r0, r5, 2\n" -" ldr r1, _0808F884\n" -" adds r0, r1\n" -" ldr r0, [r0]\n" -" mov pc, r0\n" -" .align 2, 0\n" -"_0808F880: .4byte gFormatBuffer_Monsters\n" -"_0808F884: .4byte _0808F888\n" -" .align 2, 0\n" -"_0808F888:\n" -" .4byte _0808FED6\n" -" .4byte _0808FBF4\n" -" .4byte _0808F8A0\n" -" .4byte _0808FB44\n" -" .4byte _0808FCB0\n" -" .4byte _0808FDB0\n" -"_0808F8A0:\n" -" lsls r0, r4, 3\n" -" adds r0, 0x10\n" -" ldr r2, _0808F998\n" -" movs r5, 0\n" -" str r5, [sp]\n" -" movs r1, 0\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" ldr r4, _0808F99C\n" -" mov r1, r10\n" -" ldr r0, [r1, 0x2C]\n" -" str r0, [r4]\n" -" ldr r0, [r1, 0x30]\n" -" str r0, [r4, 0x4]\n" -" ldr r0, _0808F9A0\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r2, 0xA\n" -" add r9, r2\n" -" ldr r0, _0808F9A4\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r3, 0xA\n" -" add r9, r3\n" -" mov r0, r10\n" -" ldr r2, [r0, 0x2C]\n" -" cmp r2, 0x63\n" -" bgt _0808F914\n" -" movs r3, 0\n" -" ldrsh r1, [r0, r3]\n" -" adds r2, 0x1\n" -" add r0, sp, 0x8\n" -" bl GetPokemonLevelData\n" -" ldr r0, [sp, 0x8]\n" -" mov r2, r10\n" -" ldr r1, [r2, 0x30]\n" -" subs r0, r1\n" -" str r0, [r4]\n" -" ldr r0, _0808F9A8\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -"_0808F914:\n" -" movs r3, 0xC\n" -" add r9, r3\n" -" mov r1, r10\n" -" ldr r0, [r1, 0x24]\n" -" str r0, [r4]\n" -" ldr r0, [r1, 0x28]\n" -" str r0, [r4, 0x4]\n" -" ldr r0, _0808F9AC\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r2, 0xA\n" -" add r9, r2\n" -" ldr r0, _0808F9B0\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" ldr r0, _0808F9B4\n" -" ldr r2, [r0]\n" -" mov r0, r10\n" -" adds r0, 0x34\n" -" ldrb r3, [r0]\n" -" str r3, [r4]\n" -" mov r1, r10\n" -" adds r1, 0x39\n" -" ldrb r0, [r1]\n" -" cmp r0, 0\n" -" beq _0808F964\n" -" adds r0, r3, r0\n" -" str r0, [r4]\n" -" ldr r0, _0808F9B8\n" -" ldr r2, [r0]\n" -"_0808F964:\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" mov r1, r10\n" -" adds r1, 0x3B\n" -" ldrb r3, [r1]\n" -" cmp r3, 0\n" -" beq _0808F9C0\n" -" mov r0, r10\n" -" adds r0, 0x36\n" -" ldrb r0, [r0]\n" -" adds r1, r3, 0\n" -" adds r0, r1\n" -" str r0, [r4]\n" -" ldr r0, _0808F9BC\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" b _0808F9D8\n" -" .align 2, 0\n" -"_0808F998: .4byte gUnknown_8107754\n" -"_0808F99C: .4byte gFormatArgs\n" -"_0808F9A0: .4byte gLevel810DD6C_Ptr\n" -"_0808F9A4: .4byte gExpPts810DD9C_Ptr\n" -"_0808F9A8: .4byte gUnknown_810DDB8\n" -"_0808F9AC: .4byte gUnknown_810DDD0\n" -"_0808F9B0: .4byte gUnknown_810DDE4\n" -"_0808F9B4: .4byte gUnknown_810DE0C\n" -"_0808F9B8: .4byte gUnknown_810DE20\n" -"_0808F9BC: .4byte gUnknown_810DE4C\n" -"_0808F9C0:\n" -" mov r0, r10\n" -" adds r0, 0x36\n" -" ldrb r0, [r0]\n" -" str r0, [r4]\n" -" ldr r0, _0808FA44\n" -" ldr r2, [r0]\n" -" str r3, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -"_0808F9D8:\n" -" movs r3, 0xA\n" -" add r9, r3\n" -" ldr r0, _0808FA48\n" -" ldr r2, [r0]\n" -" movs r5, 0\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" ldr r0, _0808FA4C\n" -" ldr r2, [r0]\n" -" ldr r4, _0808FA50\n" -" mov r0, r10\n" -" adds r0, 0x35\n" -" ldrb r3, [r0]\n" -" str r3, [r4]\n" -" mov r1, r10\n" -" adds r1, 0x3A\n" -" ldrb r0, [r1]\n" -" cmp r0, 0\n" -" beq _0808FA0E\n" -" adds r0, r3, r0\n" -" str r0, [r4]\n" -" ldr r0, _0808FA54\n" -" ldr r2, [r0]\n" -"_0808FA0E:\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" mov r1, r10\n" -" adds r1, 0x3C\n" -" ldrb r3, [r1]\n" -" cmp r3, 0\n" -" beq _0808FA5C\n" -" mov r0, r10\n" -" adds r0, 0x37\n" -" ldrb r0, [r0]\n" -" adds r1, r3, 0\n" -" adds r0, r1\n" -" str r0, [r4]\n" -" ldr r0, _0808FA58\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" b _0808FA74\n" -" .align 2, 0\n" -"_0808FA44: .4byte gUnknown_810DE38\n" -"_0808FA48: .4byte gUnknown_810DDFC\n" -"_0808FA4C: .4byte gUnknown_810DE24\n" -"_0808FA50: .4byte gFormatArgs\n" -"_0808FA54: .4byte gUnknown_810DE28\n" -"_0808FA58: .4byte gUnknown_810DE54\n" -"_0808FA5C:\n" -" mov r0, r10\n" -" adds r0, 0x37\n" -" ldrb r0, [r0]\n" -" str r0, [r4]\n" -" ldr r0, _0808FA94\n" -" ldr r2, [r0]\n" -" str r3, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -"_0808FA74:\n" -" movs r0, 0xA\n" -" add r9, r0\n" -" mov r2, r10\n" -" adds r2, 0x20\n" -" ldrb r1, [r2]\n" -" movs r0, 0x1\n" -" ands r0, r1\n" -" cmp r0, 0\n" -" beq _0808FA9C\n" -" ldr r0, _0808FA98\n" -" adds r1, r2, 0\n" -" movs r2, 0\n" -" bl sub_8090E14\n" -" b _0808FAA6\n" -" .align 2, 0\n" -"_0808FA94: .4byte gUnknown_810DE50\n" -"_0808FA98: .4byte gFormatBuffer_Items\n" -"_0808FA9C:\n" -" ldr r0, _0808FB24\n" -" ldr r1, _0808FB28\n" -" ldr r1, [r1]\n" -" bl strcpy\n" -"_0808FAA6:\n" -" ldr r0, _0808FB2C\n" -" ldr r2, [r0]\n" -" movs r4, 0\n" -" str r4, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r1, 0xC\n" -" add r9, r1\n" -" ldr r1, _0808FB30\n" -" mov r2, r10\n" -" movs r3, 0x3E\n" -" ldrsh r0, [r2, r3]\n" -" str r0, [r1]\n" -" movs r1, 0x3E\n" -" ldrsh r0, [r2, r1]\n" -" movs r1, 0xA\n" -" bl __divsi3\n" -" lsls r0, 16\n" -" asrs r0, 16\n" -" cmp r0, 0\n" -" bge _0808FADA\n" -" movs r0, 0\n" -"_0808FADA:\n" -" cmp r0, 0x62\n" -" ble _0808FAE0\n" -" movs r0, 0x63\n" -"_0808FAE0:\n" -" ldr r1, _0808FB34\n" -" lsls r0, 2\n" -" adds r0, r1\n" -" ldr r5, _0808FB38\n" -" ldr r1, [r0]\n" -" adds r0, r5, 0\n" -" bl strcpy\n" -" ldr r0, _0808FB3C\n" -" ldr r2, [r0]\n" -" str r4, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r2, 0xA\n" -" add r9, r2\n" -" mov r0, r10\n" -" adds r0, 0x38\n" -" ldrb r4, [r0]\n" -" cmp r4, 0\n" -" beq _0808FB10\n" -" b _0808FED6\n" -"_0808FB10:\n" -" adds r0, 0x1C\n" -" ldrb r1, [r0]\n" -" adds r0, r5, 0\n" -" bl CopyTacticsNameToBuffer\n" -" ldr r0, _0808FB40\n" -" ldr r2, [r0]\n" -" str r4, [sp]\n" -" b _0808FECC\n" -" .align 2, 0\n" -"_0808FB24: .4byte gFormatBuffer_Items\n" -"_0808FB28: .4byte gUnknown_810DE58\n" -"_0808FB2C: .4byte gUnknown_810DE6C\n" -"_0808FB30: .4byte gFormatArgs\n" -"_0808FB34: .4byte gUnknown_8115718\n" -"_0808FB38: .4byte gFormatBuffer_Monsters\n" -"_0808FB3C: .4byte gUnknown_810DE80\n" -"_0808FB40: .4byte gUnknown_810DE98\n" -"_0808FB44:\n" -" lsls r0, r4, 3\n" -" adds r0, 0x10\n" -" ldr r2, _0808FBE8\n" -" movs r4, 0\n" -" str r4, [sp]\n" -" movs r1, 0\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" ldr r2, _0808FBEC\n" -" str r4, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" mov r3, r10\n" -" ldrb r0, [r3, 0x16]\n" -" bl GetFormattedTypeString\n" -" adds r2, r0, 0\n" -" str r4, [sp]\n" -" movs r0, 0x38\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" mov r1, r10\n" -" ldrb r0, [r1, 0x17]\n" -" cmp r0, 0\n" -" beq _0808FB94\n" -" bl GetFormattedTypeString\n" -" adds r2, r0, 0\n" -" str r4, [sp]\n" -" movs r0, 0x60\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -"_0808FB94:\n" -" movs r2, 0xC\n" -" add r9, r2\n" -" ldr r2, _0808FBF0\n" -" str r4, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r3, 0xC\n" -" add r9, r3\n" -" mov r1, r10\n" -" ldrb r0, [r1, 0x18]\n" -" bl GetAbilityDescription\n" -" adds r2, r0, 0\n" -" str r4, [sp]\n" -" movs r5, 0xB\n" -" str r5, [sp, 0x4]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow2\n" -" movs r2, 0x21\n" -" add r9, r2\n" -" mov r3, r10\n" -" ldrb r0, [r3, 0x19]\n" -" cmp r0, 0\n" -" bne _0808FBD2\n" -" b _0808FED6\n" -"_0808FBD2:\n" -" bl GetAbilityDescription\n" -" adds r2, r0, 0\n" -" str r4, [sp]\n" -" str r5, [sp, 0x4]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow2\n" -" b _0808FED6\n" -" .align 2, 0\n" -"_0808FBE8: .4byte gUnknown_810775C\n" -"_0808FBEC: .4byte gUnknown_8107768\n" -"_0808FBF0: .4byte gUnknown_8107770\n" -"_0808FBF4:\n" -" lsls r0, r4, 3\n" -" adds r0, 0x10\n" -" ldr r1, _0808FC34\n" -" ldr r2, [r1]\n" -" movs r1, 0\n" -" str r1, [sp]\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" mov r0, r10\n" -" adds r0, 0x56\n" -" movs r1, 0\n" -" ldrsh r0, [r0, r1]\n" -" subs r5, r0, 0x1\n" -" movs r2, 0xC\n" -" negs r2, r2\n" -" add r9, r2\n" -" movs r7, 0\n" -" ldr r6, [sp, 0x2C]\n" -" adds r6, 0xC\n" -" adds r1, r6, 0\n" -" movs r2, 0\n" -" ldr r0, [sp, 0x2C]\n" -" adds r0, 0x2C\n" -"_0808FC24:\n" -" str r2, [r0]\n" -" subs r0, 0x4\n" -" cmp r0, r1\n" -" bge _0808FC24\n" -" movs r3, 0\n" -" mov r8, r3\n" -" b _0808FC88\n" -" .align 2, 0\n" -"_0808FC34: .4byte gUnknown_810DD58\n" -"_0808FC38:\n" -" mov r0, r10\n" -" adds r0, 0x58\n" -" adds r4, r0, r5\n" -" ldrb r0, [r4]\n" -" cmp r0, 0\n" -" beq _0808FC78\n" -" movs r7, 0x1\n" -" ldr r0, _0808FCA0\n" -" ldrb r1, [r4]\n" -" lsls r1, 2\n" -" adds r1, r0\n" -" ldr r0, _0808FCA4\n" -" ldr r1, [r1]\n" -" movs r2, 0x50\n" -" bl strncpy\n" -" ldr r2, _0808FCA8\n" -" movs r0, 0\n" -" str r0, [sp]\n" -" movs r0, 0xC\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" mov r0, r8\n" -" cmp r0, 0\n" -" ble _0808FC78\n" -" subs r0, 0x1\n" -" lsls r0, 2\n" -" adds r0, r6, r0\n" -" ldrb r1, [r4]\n" -" str r1, [r0]\n" -"_0808FC78:\n" -" movs r1, 0x1\n" -" add r8, r1\n" -" adds r5, 0x1\n" -" movs r2, 0xC\n" -" add r9, r2\n" -" mov r3, r8\n" -" cmp r3, 0x9\n" -" bgt _0808FC90\n" -"_0808FC88:\n" -" cmp r5, 0\n" -" blt _0808FC78\n" -" cmp r5, 0xB\n" -" ble _0808FC38\n" -"_0808FC90:\n" -" cmp r7, 0\n" -" beq _0808FC96\n" -" b _0808FED6\n" -"_0808FC96:\n" -" ldr r0, _0808FCAC\n" -" ldr r2, [r0]\n" -" str r7, [sp]\n" -" b _0808FD98\n" -" .align 2, 0\n" -"_0808FCA0: .4byte gStatusNames\n" -"_0808FCA4: .4byte gFormatBuffer_Items + 0x50\n" -"_0808FCA8: .4byte gUnknown_8107784\n" -"_0808FCAC: .4byte gUnknown_810DF78\n" -"_0808FCB0:\n" -" lsls r0, r4, 3\n" -" adds r0, 0x10\n" -" ldr r1, _0808FCF8\n" -" ldr r2, [r1]\n" -" movs r1, 0\n" -" str r1, [sp]\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" add r4, sp, 0x14\n" -" mov r0, r10\n" -" movs r2, 0x3E\n" -" ldrsh r1, [r0, r2]\n" -" adds r0, r4, 0\n" -" bl GetNumAvailableIQSkills\n" -" mov r0, r10\n" -" adds r0, 0x40\n" -" movs r3, 0\n" -" ldrsh r0, [r0, r3]\n" -" subs r7, r0, 0x1\n" -" mov r1, r9\n" -" subs r1, 0xC\n" -" movs r2, 0\n" -" ldr r0, [sp, 0x2C]\n" -" adds r0, 0x8\n" -"_0808FCE4:\n" -" strb r2, [r0]\n" -" subs r0, 0x1\n" -" ldr r3, [sp, 0x2C]\n" -" cmp r0, r3\n" -" bge _0808FCE4\n" -" mov r9, r1\n" -" movs r4, 0\n" -" mov r8, r4\n" -" b _0808FD84\n" -" .align 2, 0\n" -"_0808FCF8: .4byte gIQSkill810DD68_Ptr\n" -"_0808FCFC:\n" -" mov r5, sp\n" -" adds r5, r7\n" -" adds r5, 0x14\n" -" ldrb r0, [r5]\n" -" cmp r0, 0\n" -" beq _0808FD74\n" -" movs r4, 0x1\n" -" bl GetIQSkillName\n" -" adds r1, r0, 0\n" -" ldr r6, _0808FD3C\n" -" adds r0, r6, 0\n" -" movs r2, 0x50\n" -" bl strncpy\n" -" mov r0, r10\n" -" adds r0, 0x50\n" -" adds r1, r4, 0\n" -" ldrb r5, [r5]\n" -" lsls r1, r5\n" -" bl IsIQSkillSet\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _0808FD44\n" -" adds r0, r6, 0\n" -" subs r0, 0x50\n" -" ldr r1, _0808FD40\n" -" bl strcpy\n" -" b _0808FD4E\n" -" .align 2, 0\n" -"_0808FD3C: .4byte gFormatBuffer_Items + 0x50\n" -"_0808FD40: .4byte gUnknown_8107788\n" -"_0808FD44:\n" -" adds r0, r6, 0\n" -" subs r0, 0x50\n" -" ldr r1, _0808FDA4\n" -" bl strcpy\n" -"_0808FD4E:\n" -" mov r0, r8\n" -" cmp r0, 0\n" -" ble _0808FD64\n" -" subs r0, 0x1\n" -" ldr r1, [sp, 0x2C]\n" -" adds r0, r1, r0\n" -" mov r1, sp\n" -" adds r1, r7\n" -" adds r1, 0x14\n" -" ldrb r1, [r1]\n" -" strb r1, [r0]\n" -"_0808FD64:\n" -" ldr r2, _0808FDA8\n" -" movs r0, 0\n" -" str r0, [sp]\n" -" movs r0, 0xC\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -"_0808FD74:\n" -" movs r2, 0x1\n" -" add r8, r2\n" -" adds r7, 0x1\n" -" movs r3, 0xC\n" -" add r9, r3\n" -" mov r0, r8\n" -" cmp r0, 0x9\n" -" bgt _0808FD8C\n" -"_0808FD84:\n" -" cmp r7, 0\n" -" blt _0808FD74\n" -" cmp r7, 0x17\n" -" ble _0808FCFC\n" -"_0808FD8C:\n" -" cmp r4, 0\n" -" beq _0808FD92\n" -" b _0808FED6\n" -"_0808FD92:\n" -" ldr r0, _0808FDAC\n" -" ldr r2, [r0]\n" -" str r4, [sp]\n" -"_0808FD98:\n" -" movs r0, 0xC\n" -" movs r1, 0x20\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" b _0808FED6\n" -" .align 2, 0\n" -"_0808FDA4: .4byte gUnknown_810778C\n" -"_0808FDA8: .4byte gUnknown_8107790\n" -"_0808FDAC: .4byte gUnknown_810DF84\n" -"_0808FDB0:\n" -" lsls r0, r4, 3\n" -" adds r0, 0x10\n" -" ldr r2, _0808FEEC\n" -" movs r5, 0\n" -" str r5, [sp]\n" -" movs r1, 0\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" ldr r6, _0808FEF0\n" -" mov r2, r10\n" -" movs r3, 0\n" -" ldrsh r1, [r2, r3]\n" -" adds r0, r6, 0\n" -" bl CopyMonsterNameToBuffer\n" -" ldr r1, _0808FEF4\n" -" mov r2, r10\n" -" movs r3, 0\n" -" ldrsh r0, [r2, r3]\n" -" str r0, [r1]\n" -" ldr r0, _0808FEF8\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r0, 0xA\n" -" add r9, r0\n" -" mov r1, r10\n" -" movs r2, 0\n" -" ldrsh r0, [r1, r2]\n" -" bl GetFriendArea\n" -" lsls r0, 24\n" -" lsrs r0, 24\n" -" bl GetFriendAreaName\n" -" adds r1, r0, 0\n" -" ldr r4, _0808FEFC\n" -" adds r0, r4, 0\n" -" movs r2, 0x50\n" -" bl strncpy\n" -" ldr r0, _0808FF00\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r3, 0xA\n" -" add r9, r3\n" -" ldr r0, _0808FF04\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r0, 0xD\n" -" add r9, r0\n" -" ldr r0, _0808FF08\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r1, 0xA\n" -" add r9, r1\n" -" mov r1, r10\n" -" adds r1, 0x1C\n" -" adds r0, r4, 0\n" -" bl PrintYellowDungeonNametoBuffer\n" -" ldr r0, _0808FF0C\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r2, 0xD\n" -" add r9, r2\n" -" mov r3, r10\n" -" movs r1, 0\n" -" ldrsh r0, [r3, r1]\n" -" bl GetCategoryString\n" -" adds r1, r0, 0\n" -" adds r0, r6, 0\n" -" movs r2, 0x14\n" -" bl strncpy\n" -" ldr r0, _0808FF10\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r2, 0xD\n" -" add r9, r2\n" -" ldr r4, _0808FF14\n" -" mov r3, r10\n" -" movs r1, 0\n" -" ldrsh r0, [r3, r1]\n" -" bl GetBodySize\n" -" lsls r0, 24\n" -" lsrs r0, 22\n" -" adds r0, r4\n" -" ldr r1, [r0]\n" -" adds r0, r6, 0\n" -" bl strcpy\n" -" ldr r0, _0808FF18\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -" movs r2, 0xD\n" -" add r9, r2\n" -" ldr r1, _0808FF1C\n" -" mov r0, r10\n" -" adds r0, 0x4C\n" -" ldrb r0, [r0]\n" -" lsls r0, 2\n" -" adds r0, r1\n" -" ldr r2, [r0]\n" -" str r5, [sp]\n" -"_0808FECC:\n" -" movs r0, 0x4\n" -" mov r1, r9\n" -" ldr r3, [sp, 0x50]\n" -" bl PrintFormattedStringOnWindow\n" -"_0808FED6:\n" -" ldr r0, [sp, 0x50]\n" -" bl sub_80073E0\n" -" add sp, 0x30\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" -"_0808FEEC: .4byte gUnknown_8107798\n" -"_0808FEF0: .4byte gFormatBuffer_Monsters\n" -"_0808FEF4: .4byte gFormatArgs\n" -"_0808FEF8: .4byte gUnknown_810DEB4\n" -"_0808FEFC: .4byte gFormatBuffer_Items\n" -"_0808FF00: .4byte gUnknown_810DEC8\n" -"_0808FF04: .4byte gUnknown_810DEDC\n" -"_0808FF08: .4byte gUnknown_810DFB4\n" -"_0808FF0C: .4byte gUnknown_810DFC8\n" -"_0808FF10: .4byte gUnknown_810DEF4\n" -"_0808FF14: .4byte gUnknown_810E02C\n" -"_0808FF18: .4byte gUnknown_810DF98\n" -"_0808FF1C: .4byte gEvolutionStrings"); + s32 i, y; + s32 j; + + sub_80073B8(windowId); + strncpy(gFormatBuffer_Monsters[0],mon->nameBuffer,0x14); + y = 0x20; + switch (param_1) { + case 0: + break; + case 2: { + const u8 *str; + s32 iVar8; + LevelData levelData; + + PrintFormattedStringOnWindow(param_2 * 8 + 0x10,0,gUnknown_8107754,windowId,'\0'); + gFormatArgs[0] = mon->level; + gFormatArgs[1] = mon->exp; + PrintFormattedStringOnWindow(4,y,*gLevel810DD6C_Ptr,windowId,'\0'); + y += 0xA; + PrintFormattedStringOnWindow(4,y,*gExpPts810DD9C_Ptr,windowId,'\0'); + y += 0xA; + if (mon->level < 100) { + GetPokemonLevelData(&levelData,mon->species,mon->level + 1); + gFormatArgs[0] = levelData.expRequired - mon->exp; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DDB8,windowId,'\0'); + } + y += 0xC; + gFormatArgs[0] = mon->HP1; + gFormatArgs[1] = mon->HP2; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DDD0,windowId,'\0'); + y += 0xA; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DDE4,windowId,'\0'); + str = *gUnknown_810DE0C; + gFormatArgs[0] = mon->offense.att[0]; + if (mon->atkBoost != 0) { + gFormatArgs[0] = gFormatArgs[0] + mon->atkBoost; + str = *gUnknown_810DE20; + } + PrintFormattedStringOnWindow(4,y,str,windowId,'\0'); + if (mon->defBoost != 0) { + gFormatArgs[0] = mon->offense.def[0] + mon->defBoost; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE4C,windowId,'\0'); + } + else { + gFormatArgs[0] = mon->offense.def[0]; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE38,windowId,'\0'); + } + y += 0xA; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DDFC,windowId,'\0'); + str = *gUnknown_810DE24; + gFormatArgs[0] = mon->offense.att[1]; + if (mon->spAtkBoost != 0) { + gFormatArgs[0] = gFormatArgs[0] + mon->spAtkBoost; + str = *gUnknown_810DE28; + } + PrintFormattedStringOnWindow(4,y,str,windowId,'\0'); + if (mon->spDefBoost != 0) { + gFormatArgs[0] = mon->offense.def[1] + mon->spDefBoost; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE54,windowId,'\0'); + } + else { + gFormatArgs[0] = mon->offense.def[1]; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE50,windowId,'\0'); + } + y += 0xA; + if (ItemExists(&mon->item)) { + sub_8090E14(gFormatBuffer_Items[0],&mon->item,0); + } + else { + strcpy(gFormatBuffer_Items[0],*gUnknown_810DE58); + } + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE6C,windowId,'\0'); + y += 0xC; + gFormatArgs[0] = mon->IQ; + iVar8 = mon->IQ / 10; + if (iVar8 < 0) { + iVar8 = 0; + } + if (0x62 < iVar8) { + iVar8 = 99; + } + + InlineStrcpy(gFormatBuffer_Monsters[0],gUnknown_8115718[iVar8]); + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE80,windowId,'\0'); + y += 0xA; + if (!mon->isTeamLeader) + { + CopyTacticsNameToBuffer(gFormatBuffer_Monsters[0],mon->tactic); + PrintFormattedStringOnWindow(4,y,*gUnknown_810DE98,windowId,'\0'); + } + y += 0xA; + break; + } + case 3: { + PrintFormattedStringOnWindow(param_2 * 8 + 0x10,0,gUnknown_810775C,windowId,'\0'); + PrintFormattedStringOnWindow(4,y,gUnknown_8107768,windowId,'\0'); + PrintFormattedStringOnWindow(0x38,y,GetFormattedTypeString(mon->types[0]),windowId,'\0'); + if (mon->types[1] != TYPE_NONE) { + PrintFormattedStringOnWindow(0x60,y,GetFormattedTypeString(mon->types[1]),windowId,'\0'); + } + y += 0xC; + PrintFormattedStringOnWindow(4,y,gUnknown_8107770,windowId,'\0'); + y += 0xC; + PrintFormattedStringOnWindow2(4,y,GetAbilityDescription(mon->abilities[0]),windowId,'\0',0xb); + y += 0x21; + if (mon->abilities[1] != ABILITY_UNKNOWN) { + PrintFormattedStringOnWindow2(4,y,GetAbilityDescription(mon->abilities[1]),windowId,'\0',0xb); + } + break; + } + case 1: { + s32 iVar11; + bool8 bVar10; + + PrintFormattedStringOnWindow(param_2 * 8 + 0x10,0,*gUnknown_810DD58,windowId,'\0'); + iVar11 = mon->unk56 - 1; + y -= 0xC; + bVar10 = FALSE; + + for (i = 0; i < 9; i++) { + param_4->unkC[i] = 0; + } + + for (j = 0; j < 10; j++, iVar11++, y += 0xC) { + if (-1 < iVar11) { + if (0xb < iVar11) + break; + if (mon->unk58[iVar11] != 0) { + bVar10 = TRUE; + InlineStrncpy(gFormatBuffer_Items[1],gStatusNames[mon->unk58[iVar11]],0x50); + PrintFormattedStringOnWindow(0xc,y,gUnknown_8107784,windowId,'\0'); + if (0 < j) { + param_4->unkC[j - 1] = mon->unk58[iVar11]; + } + } + } + } + + if (!bVar10) { + PrintFormattedStringOnWindow(0xc,0x20,*gUnknown_810DF78,windowId,'\0'); + } + break; + } + case 4: { + s32 iVar13; + bool8 bVar11; + u8 iqSkillBuffer[24]; + + PrintFormattedStringOnWindow(param_2 * 8 + 0x10,0,*gIQSkill810DD68_Ptr,windowId,'\0'); + GetNumAvailableIQSkills(iqSkillBuffer,mon->IQ); + iVar13 = mon->unk40 - 1; + + for (i = 0; i < 9; i++) { + param_4->unk0[i] = 0; + } + y -= 0xC; + bVar11 = FALSE; + + for(j = 0; j < 10; j++, iVar13++, y += 0xC) { + if (-1 < iVar13) { + if (0x17 < iVar13) + break; + if (iqSkillBuffer[iVar13] != 0) { + u8 *iqSkillName; + + bVar11 = TRUE; + iqSkillName = GetIQSkillName(iqSkillBuffer[iVar13]); + strncpy(gFormatBuffer_Items[1],iqSkillName,0x50); + if (IsIQSkillSet(&mon->IQSkills,1 << iqSkillBuffer[iVar13])) { + strcpy(gFormatBuffer_Items[0],gUnknown_8107788); + } + else { + strcpy(gFormatBuffer_Items[0],gUnknown_810778C); + } + if (j >= 1) { + param_4->unk0[j - 1] = iqSkillBuffer[iVar13]; + } + PrintFormattedStringOnWindow(0xc,y,gUnknown_8107790,windowId,'\0'); + } + } + } + + if (!bVar11) { + PrintFormattedStringOnWindow(0xc,0x20,*gUnknown_810DF84,windowId,'\0'); + } + break; + } + case 5: { + PrintFormattedStringOnWindow(param_2 * 8 + 0x10,0,gUnknown_8107798,windowId,'\0'); + CopyMonsterNameToBuffer(gFormatBuffer_Monsters[0],mon->species); + gFormatArgs[0] = mon->species; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DEB4,windowId,'\0'); + y += 0xA; + InlineStrncpy(gFormatBuffer_Items[0],GetFriendAreaName(GetFriendArea(mon->species)),0x50); + PrintFormattedStringOnWindow(4,y,*gUnknown_810DEC8,windowId,'\0'); + y += 0xA; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DEDC,windowId,'\0'); + y += 0xD; + PrintFormattedStringOnWindow(4,y,*gUnknown_810DFB4,windowId,'\0'); + y += 0xA; + PrintYellowDungeonNametoBuffer(gFormatBuffer_Items[0],&mon->dungeonLocation); + PrintFormattedStringOnWindow(4,y,*gUnknown_810DFC8,windowId,'\0'); + y += 0xD; + strncpy(gFormatBuffer_Monsters[0],GetCategoryString(mon->species),0x14); + PrintFormattedStringOnWindow(4,y,*gUnknown_810DEF4,windowId,'\0'); + y += 0xD; + strcpy(gFormatBuffer_Monsters[0],gUnknown_810E02C[GetBodySize(mon->species)]); + PrintFormattedStringOnWindow(4,y,*gUnknown_810DF98,windowId,'\0'); + y += 0xD; + PrintFormattedStringOnWindow(4,y,gEvolutionStrings[mon->unk4C],windowId,'\0'); + break; + } + } + sub_80073E0(windowId); } + void sub_808FF20(struct unkStruct_808FF20 *param_1, struct PokemonStruct1 *pokemon, bool8 param_3) { s32 index;