From 22e9d9979d052cd88ee4a375f83f7492cb893543 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 18 Feb 2025 22:02:06 +0100 Subject: [PATCH] code_8066D04 --- asm/code_8066D04.s | 504 --------------------------------------------- ld_script.txt | 1 - src/code_8066D04.c | 211 ++++++++++++++++++- 3 files changed, 205 insertions(+), 511 deletions(-) delete mode 100644 asm/code_8066D04.s diff --git a/asm/code_8066D04.s b/asm/code_8066D04.s deleted file mode 100644 index 5a293ca66..000000000 --- a/asm/code_8066D04.s +++ /dev/null @@ -1,504 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8067F00 -sub_8067F00: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r4, r0, 0 - mov r9, r1 - str r3, [sp, 0x4] - lsls r4, 24 - lsrs r4, 24 - subs r7, r2, 0x1 - movs r0, 0x16 - mov r8, r0 - movs r0, 0 - bl sub_80073B8 - ldr r0, _08067F44 - adds r1, r4, 0 - movs r2, 0 - bl WriteFriendAreaName - ldr r2, _08067F48 - movs r0, 0 - str r0, [sp] - movs r0, 0xC - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r1, 0 - mov r10, r1 - b _08067FF6 - .align 2, 0 -_08067F44: .4byte gFormatBuffer_Monsters -_08067F48: .4byte gUnknown_8106E28 -_08067F4C: - ldr r4, _08067F8C - lsls r6, r7, 2 - mov r0, r9 - adds r5, r6, r0 - ldr r1, [r5] - adds r0, r4, 0 - movs r2, 0 - bl PrintColoredPokeNameToBuffer - adds r4, 0x50 - ldr r0, [r5] - movs r2, 0x8 - ldrsh r1, [r0, r2] - adds r0, r4, 0 - bl sub_808D930 - ldr r1, _08067F90 - adds r0, r7, 0x1 - str r0, [r1] - ldr r0, [r5] - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08067F9C - ldr r0, _08067F94 - ldr r1, _08067F98 - bl strcpy - b _08067FA4 - .align 2, 0 -_08067F8C: .4byte gFormatBuffer_Monsters -_08067F90: .4byte gFormatArgs -_08067F94: .4byte gFormatBuffer_Items -_08067F98: .4byte gUnknown_8106E2C -_08067F9C: - ldr r0, _08067FCC - ldr r1, _08067FD0 - bl strcpy -_08067FA4: - mov r1, r9 - adds r0, r6, r1 - ldr r0, [r0] - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 7 - ands r0, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _08067FD8 - ldr r2, _08067FD4 - movs r0, 0 - str r0, [sp] - movs r0, 0x7 - mov r1, r8 - movs r3, 0 - bl PrintFormattedStringOnWindow - b _08067FE6 - .align 2, 0 -_08067FCC: .4byte gFormatBuffer_Items -_08067FD0: .4byte gUnknown_8106E30 -_08067FD4: .4byte gUnknown_8106E34 -_08067FD8: - ldr r2, _08068028 - str r0, [sp] - movs r0, 0x7 - mov r1, r8 - movs r3, 0 - bl PrintFormattedStringOnWindow -_08067FE6: - movs r2, 0x1 - add r10, r2 - movs r0, 0xC - add r8, r0 - adds r7, 0x1 - mov r1, r10 - cmp r1, 0x9 - bgt _08068000 -_08067FF6: - cmp r7, 0 - blt _08067FE6 - ldr r2, [sp, 0x4] - cmp r7, r2 - blt _08067F4C -_08068000: - movs r0, 0 - bl sub_80073E0 - movs r0, 0x1 - bl sub_80073B8 - ldr r0, _0806802C - ldr r0, [r0] - ldr r1, [sp, 0x28] - cmp r0, r1 - blt _08068034 - ldr r2, _08068030 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x2 - movs r3, 0x1 - bl PrintFormattedStringOnWindow - b _0806804C - .align 2, 0 -_08068028: .4byte gUnknown_8106E48 -_0806802C: .4byte gUnknown_202F310 -_08068030: .4byte gUnknown_8106E5C -_08068034: - ldr r1, _08068064 - ldr r2, [sp, 0x28] - subs r0, r2, r0 - str r0, [r1] - ldr r2, _08068068 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x2 - movs r3, 0x1 - bl PrintFormattedStringOnWindow -_0806804C: - movs r0, 0x1 - bl sub_80073E0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08068064: .4byte gFormatArgs -_08068068: .4byte gUnknown_8106E6C - thumb_func_end sub_8067F00 - - thumb_func_start sub_806806C -sub_806806C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x110 - str r0, [sp, 0x108] - add r4, sp, 0x98 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [r4, 0x4] - movs r1, 0x2 - strh r1, [r4, 0x8] - strh r1, [r4, 0xA] - movs r2, 0x12 - strh r2, [r4, 0xC] - movs r0, 0xE - strh r0, [r4, 0xE] - strh r2, [r4, 0x10] - strh r1, [r4, 0x12] - ldr r0, _080681B4 - str r0, [r4, 0x14] - movs r0, 0x3 - str r0, [r4, 0x1C] - str r0, [r4, 0x34] - str r0, [r4, 0x4C] - movs r7, 0 - add r1, sp, 0x44 - strh r7, [r1] - mov r0, sp - adds r0, 0x5A - strh r7, [r0] - ldr r0, _080681B8 - strh r7, [r0, 0x18] - mov r9, r1 - adds r1, 0xB4 - str r1, [sp, 0x10C] - add r2, sp, 0x68 - mov r10, r2 - adds r6, r0, 0 -_080680C4: - movs r3, 0 - mov r8, r3 - add r1, sp, 0xF8 - ldr r0, _080681BC - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r0] - str r0, [r1] - ldr r1, _080681B4 - movs r2, 0x4 - strb r2, [r1] - strb r7, [r1, 0x1] - movs r0, 0xA - strb r0, [r1, 0x2] - mov r4, r8 - strb r4, [r1, 0x3] - strh r7, [r6, 0x1E] - strh r2, [r6, 0x20] - mov r0, r8 - strh r0, [r6, 0x1A] - strh r0, [r6, 0x18] - strh r0, [r6, 0x1C] - strh r0, [r6, 0x4] - movs r0, 0x10 - strh r0, [r6, 0x6] - mov r1, r8 - strh r1, [r6, 0x14] - mov r2, r8 - str r2, [r6] - adds r0, r6, 0 - adds r0, 0x28 - bl sub_801317C - add r0, sp, 0x98 - movs r1, 0x1 - bl sub_803ECB4 - ldr r0, _080681C0 - ldr r0, [r0] - ldr r3, _080681C4 - adds r0, r3 - ldrb r2, [r0] - add r0, sp, 0x4 - ldr r1, [sp, 0x108] - bl sub_808FF20 - lsls r4, r7, 2 - mov r0, sp - adds r0, r4 - adds r0, 0xF8 - ldr r0, [r0] - mov r1, r8 - str r1, [sp] - adds r1, r7, 0 - add r2, sp, 0x4 - mov r3, r10 - bl CreatePokemonInfoTabScreen - ldr r1, _080681C8 - movs r2, 0 - ldrsh r0, [r1, r2] - adds r0, 0xF - lsls r0, 3 - strh r0, [r6, 0xC] - movs r3, 0x2 - ldrsh r0, [r1, r3] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r6, 0xE] -_08068150: - ldr r0, _080681B8 - bl AddMenuCursorSprite - ldr r1, [sp, 0x10C] - adds r0, r1, r4 - ldr r0, [r0] - cmp r0, 0x4 - bne _0806817A - mov r2, r10 - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _0806816C - bl sub_80684C4 -_0806816C: - mov r3, r9 - movs r1, 0 - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _0806817A - bl sub_8068344 -_0806817A: - movs r0, 0 - ldr r1, _080681CC - bl sub_8014140 - adds r5, r0, 0 - movs r0, 0x1C - bl sub_803E46C - ldr r3, _080681D0 - ldrh r1, [r3, 0x2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080681A2 - ldr r2, _080681B8 - adds r0, r2, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - beq _080681D4 -_080681A2: - movs r0, 0 - bl sub_8083CE0 - adds r7, 0x1 - cmp r7, 0x4 - beq _080681B0 - b _080682E8 -_080681B0: - movs r7, 0 - b _080682E8 - .align 2, 0 -_080681B4: .4byte gUnknown_202F308 -_080681B8: .4byte gUnknown_202EE10 -_080681BC: .4byte gUnknown_8106E80 -_080681C0: .4byte gDungeon -_080681C4: .4byte 0x0000065a -_080681C8: .4byte gUnknown_2027370 -_080681CC: .4byte gUnknown_8106DA4 -_080681D0: .4byte gRealInputs -_080681D4: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _080681E6 - adds r0, r2, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - beq _080681FA -_080681E6: - movs r0, 0 - bl sub_8083CE0 - subs r7, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r7, r0 - bne _080682E8 - movs r7, 0x3 - b _080682E8 -_080681FA: - ldr r2, [sp, 0x10C] - adds r0, r2, r4 - ldr r0, [r0] - cmp r0, 0x4 - bne _08068294 - ldrh r1, [r3, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08068212 - cmp r5, 0x2 - bne _08068248 -_08068212: - mov r3, r10 - ldrb r0, [r3, 0x8] - cmp r0, 0 - beq _08068248 - movs r0, 0 - bl sub_8083CE0 - ldr r5, _08068244 - movs r4, 0x5 -_08068224: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08068224 - mov r4, r9 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _080682E8 - .align 2, 0 -_08068244: .4byte gIwramTextFunc1 -_08068248: - ldr r0, _0806828C - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08068258 - cmp r5, 0x1 - bne _08068294 -_08068258: - mov r1, r9 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08068294 - movs r0, 0 - bl sub_8083CE0 - ldr r5, _08068290 - movs r4, 0x5 -_0806826C: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _0806826C - mov r3, r9 - ldrh r0, [r3] - subs r0, 0x1 - strh r0, [r3] - b _080682E8 - .align 2, 0 -_0806828C: .4byte gRealInputs -_08068290: .4byte gIwramTextFunc2 -_08068294: - bl sub_80048C8 - lsls r0, 24 - cmp r0, 0 - beq _080682A0 - b _08068150 -_080682A0: - ldr r0, _080682C4 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080682B8 - ldr r2, _080682C8 - adds r0, r2, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _080682CC -_080682B8: - bl sub_8083D08 - movs r4, 0x1 - mov r8, r4 - b _080682E8 - .align 2, 0 -_080682C4: .4byte gRealInputs -_080682C8: .4byte gUnknown_202EE10 -_080682CC: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080682E0 - adds r0, r2, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - bne _080682E0 - b _08068150 -_080682E0: - bl sub_8083D30 - movs r0, 0x1 - mov r8, r0 -_080682E8: - movs r0, 0x37 - bl sub_803E46C - mov r1, r8 - cmp r1, 0 - bne _080682F6 - b _080680C4 -_080682F6: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - add sp, 0x110 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_806806C - - .align 2,0 diff --git a/ld_script.txt b/ld_script.txt index 0f655209b..6c9cb7146 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -229,7 +229,6 @@ SECTIONS { src/code_805D8C8_1.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); - asm/code_8066D04.o(.text); src/code_805D8C8.o(.text); asm/code_805D8C8_1.o(.text); src/code_8069D4C.o(.text); diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 241510c94..19382a04d 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -14,6 +14,7 @@ #include "text.h" #include "code_803E46C.h" #include "string_format.h" +#include "friend_area.h" #include "dungeon_leader.h" #include "status_checks_1.h" #include "dungeon_ai_targeting.h" @@ -26,6 +27,7 @@ #include "pokemon.h" #include "trap.h" #include "moves.h" +#include "pokemon_3.h" #include "menu_input.h" #include "dungeon_capabilities.h" #include "constants/item.h" @@ -68,6 +70,13 @@ extern const u8 *const gUnknown_80F9114; extern const u8 *const gMonDisappointedAndLeft; extern const u8 *const gSendMonBackQ; extern const u8 *const gSendMonBackWithItemQ; +extern const u8 gUnknown_8106E28[]; +extern const u8 gUnknown_8106E5C[]; +extern const u8 gUnknown_8106E30[]; +extern const u8 gUnknown_8106E6C[]; +extern const u8 gUnknown_8106E48[]; +extern const u8 gUnknown_8106E2C[]; +extern const u8 gUnknown_8106E34[]; extern const u8 *const gMonWentBack; extern const u8 *const gMonCringing; extern const u8 *const gMonParalyzed; @@ -909,7 +918,7 @@ extern void sub_8083CE0(u8 param_1); extern void sub_8068344(void); bool8 sub_8044F3C(s32 param_1); void sub_8068310(s32 a0, PokemonStruct1 **a1); -void sub_8067F00(s32 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4); +void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4); extern void sub_803ECB4(UnkTextStruct3 *a0, u8 a1); u32 sub_8014140(s32 a0, const void *a1); void sub_8083D1C(void); @@ -917,13 +926,14 @@ void sub_8083D08(void); void sub_8083D30(void); void sub_806806C(PokemonStruct1 *a0); void sub_805FC30(UnkTextStruct3 *a0, s32 a1); +extern void sub_803EAF0(u32, u8 *); extern const u8 gUnknown_8106DA4[]; extern MenuInputStruct gUnknown_202EE10; extern const UnkTextStruct3 gUnknown_8106DC8; extern s32 gUnknown_202F30C; extern s32 gUnknown_202F310; -extern u8 gUnknown_202F308[]; +extern UnkTextStruct2_sub2 gUnknown_202F308; void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) { @@ -944,10 +954,10 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) while (1) { s32 r7 = 0, r5 = 0; - gUnknown_202F308[0] = 1; - gUnknown_202F308[1] = 0; - gUnknown_202F308[2] = 0xE; - gUnknown_202F308[3] = 0; + gUnknown_202F308.f0 = 1; + gUnknown_202F308.f1 = 0; + gUnknown_202F308.f2 = 0xE; + gUnknown_202F308.f3 = 0; ASM_MATCH_TRICK(r7); @@ -1163,3 +1173,192 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } } } + +void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2_, s32 a3, s32 a4) +{ + s32 i, y; + s32 a2; + + a2 = a2_ - 1; + y = 0x16; + + sub_80073B8(0); + WriteFriendAreaName(gFormatBuffer_Monsters[0], a0, FALSE); + PrintFormattedStringOnWindow(12, 0, gUnknown_8106E28, 0, '\0'); + i = 0; + while (i < 10) { + if (a2 >= 0) { + if (a2 >= a3) { + break; + } + + PrintColoredPokeNameToBuffer(gFormatBuffer_Monsters[0], a1[a2], 0); + sub_808D930(gFormatBuffer_Monsters[1], a1[a2]->speciesNum); + gFormatArgs[0] = a2 + 1; + if (a1[a2]->unk0 & 0x8000) { + strcpy(gFormatBuffer_Items[0], gUnknown_8106E2C); + } + else { + strcpy(gFormatBuffer_Items[0], gUnknown_8106E30); + } + + if (a1[a2]->unk0 & 0x4000) { + PrintFormattedStringOnWindow(7, y, gUnknown_8106E34, 0, '\0'); + } + else { + PrintFormattedStringOnWindow(7, y, gUnknown_8106E48, 0, '\0'); + } + } + + i++; + y += 12; + a2++; + } + + sub_80073E0(0); + sub_80073B8(1); + if (gUnknown_202F310 >= a4) { + PrintFormattedStringOnWindow(8, 2, gUnknown_8106E5C, 1, '\0'); + } + else { + gFormatArgs[0] = a4 - gUnknown_202F310; + PrintFormattedStringOnWindow(8, 2, gUnknown_8106E6C, 1, '\0'); + } + + sub_80073E0(1); +} + +extern const s32 gUnknown_8106E80[]; + +void sub_806806C(PokemonStruct1 *a0) +{ + struct unkStruct_808FF20 unkStruct; + u8 var_C8[48]; + UnkTextStruct3 spTxtStruct = {0}; + s32 spF8[4]; + s32 r7, r8; + + spTxtStruct.a0[0].unk4 = 6; + spTxtStruct.a0[0].unk8.unk0.separate.unk0 = 2; + spTxtStruct.a0[0].unk8.unk0.separate.unk2 = 2; + spTxtStruct.a0[0].unkC = 0x12; + spTxtStruct.a0[0].unkE = 0xE; + spTxtStruct.a0[0].unk10 = 0x12; + spTxtStruct.a0[0].unk12 = 2; + spTxtStruct.a0[0].unk14 = &gUnknown_202F308; + spTxtStruct.a0[1].unk4 = 3; + spTxtStruct.a0[2].unk4 = 3; + spTxtStruct.a0[3].unk4 = 3; + + r7 = 0; + unkStruct.unk40 = 0; + unkStruct.unk56 = 0; + gUnknown_202EE10.menuIndex = 0; + + while (1) { + r8 = 0; + memcpy(spF8, gUnknown_8106E80, sizeof(spF8)); + + gUnknown_202F308.f0 = 4; + gUnknown_202F308.f1 = r7; + gUnknown_202F308.f2 = 10; + gUnknown_202F308.f3 = 0; + + gUnknown_202EE10.unk1E = r7; + gUnknown_202EE10.unk20 = 4; + gUnknown_202EE10.unk1A = 0; + gUnknown_202EE10.menuIndex = 0; + gUnknown_202EE10.unk1C = 0; + gUnknown_202EE10.unk4 = 0; + gUnknown_202EE10.unk6 = 16; + gUnknown_202EE10.unk14.x = 0; + gUnknown_202EE10.unk0 = 0; + + sub_801317C(&gUnknown_202EE10.unk28); + sub_803ECB4(&spTxtStruct, 1); + sub_808FF20(&unkStruct, a0, gDungeon->unk644.unk16); + 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; + + while (1) { + s32 r5; + + AddMenuCursorSprite(&gUnknown_202EE10); + if (spF8[r7] == 4) { + if (var_C8[8] != 0) { + sub_80684C4(); + } + if (unkStruct.unk40 != 0) { + sub_8068344(); + } + } + + r5 = sub_8014140(0, gUnknown_8106DA4); + sub_803E46C(0x1C); + if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + sub_8083CE0(0); + if (++r7 == 4) { + r7 = 0; + } + break; + } + if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + sub_8083CE0(0); + if (--r7 == -1) { + r7 = 3; + } + break; + } + + if (spF8[r7] == 4) { + if (((gRealInputs.repeated & DPAD_DOWN) || r5 == 2) && var_C8[8] != 0) { + s32 i; + + sub_8083CE0(0); + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + sub_803E46C(0x1C); + } + unkStruct.unk40++; + break; + } + if (((gRealInputs.repeated & DPAD_UP) || r5 == 1) && unkStruct.unk40 != 0) { + s32 i; + + sub_8083CE0(0); + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + sub_803E46C(0x1C); + } + unkStruct.unk40--; + break; + } + } + + if (sub_80048C8()) { + continue; + } + + if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + sub_8083D08(); + r8 = 1; + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + r8 = 1; + break; + } + } + + sub_803E46C(0x37); + if (r8 != 0) { + break; + } + } + + sub_803EAF0(0, NULL); +} +