From a0aa6c9233204c44236c8a312748c98cf3f1f38c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 22 Dec 2022 17:35:00 -0800 Subject: [PATCH] decomp (terribly) some pokemon compare funcs --- asm/code_801EE10.s | 335 --------------------------------------------- src/code_801EE10.c | 156 ++++++++++++++++++++- 2 files changed, 155 insertions(+), 336 deletions(-) diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index 92a682c62..1e44d3ed6 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -10498,339 +10498,4 @@ _0802417E: bx r1 thumb_func_end sub_8024108 - thumb_func_start sub_8024184 -sub_8024184: - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - movs r1, 0x8 - ldrsh r0, [r0, r1] - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - beq _0802419E - movs r0, 0 - b _080241A0 -_0802419E: - movs r0, 0x1 -_080241A0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8024184 - - thumb_func_start sub_80241A8 -sub_80241A8: - push {r4,lr} - ldr r4, _080241C0 - ldr r1, [r4] - ldr r0, [r1, 0x4] - cmp r0, 0x2 - beq _080241CA - cmp r0, 0x2 - bhi _080241C4 - cmp r0, 0x1 - beq _08024206 - b _08024222 - .align 2, 0 -_080241C0: .4byte gUnknown_3001B60 -_080241C4: - cmp r0, 0x3 - beq _080241E8 - b _08024222 -_080241CA: - ldr r0, [r1, 0xC] - ldr r1, [r1, 0x10] - cmp r0, r1 - beq _080241D6 - bl sub_80242D0 -_080241D6: - ldr r0, [r4] - ldr r2, [r0, 0x10] - ldr r1, [r0, 0x8] - cmp r2, r1 - beq _08024222 - adds r0, r2, 0 - bl sub_80242D0 - b _08024222 -_080241E8: - ldr r0, [r1, 0xC] - ldr r1, [r1, 0x10] - cmp r0, r1 - beq _080241F4 - bl sub_802437C -_080241F4: - ldr r0, [r4] - ldr r2, [r0, 0x10] - ldr r1, [r0, 0x8] - cmp r2, r1 - beq _08024222 - adds r0, r2, 0 - bl sub_802437C - b _08024222 -_08024206: - ldr r0, [r1, 0xC] - ldr r1, [r1, 0x10] - cmp r0, r1 - beq _08024212 - bl sub_8024228 -_08024212: - ldr r0, [r4] - ldr r2, [r0, 0x10] - ldr r1, [r0, 0x8] - cmp r2, r1 - beq _08024222 - adds r0, r2, 0 - bl sub_8024228 -_08024222: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80241A8 - - thumb_func_start sub_8024228 -sub_8024228: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - ldr r3, _080242C8 - lsls r2, r1, 1 - adds r2, 0x18 - ldr r3, [r3] - adds r3, r2 - str r3, [sp] - adds r2, r0, 0 - subs r1, 0x1 - cmp r2, r1 - bge _080242B8 - str r1, [sp, 0x4] -_0802424A: - ldr r5, [sp] - adds r7, r1, 0 - adds r0, r2, 0x1 - mov r10, r0 - cmp r7, r2 - ble _080242B0 - ldr r3, _080242CC - mov r9, r3 - movs r0, 0x58 - mov r8, r0 -_0802425E: - mov r3, r9 - ldr r1, [r3] - subs r6, r5, 0x2 - movs r3, 0 - ldrsh r0, [r6, r3] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r1, r0 - movs r3, 0x8 - ldrsh r0, [r1, r3] - str r2, [sp, 0x8] - bl GetInternalNo - adds r4, r0, 0 - mov r0, r9 - ldr r1, [r0] - movs r3, 0 - ldrsh r0, [r5, r3] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r1, r0 - movs r3, 0x8 - ldrsh r0, [r1, r3] - bl GetInternalNo - lsls r4, 16 - lsls r0, 16 - ldr r2, [sp, 0x8] - cmp r4, r0 - ble _080242A8 - movs r0, 0 - ldrsh r1, [r5, r0] - ldrh r0, [r6] - strh r0, [r5] - strh r1, [r6] -_080242A8: - adds r5, r6, 0 - subs r7, 0x1 - cmp r7, r2 - bgt _0802425E -_080242B0: - mov r2, r10 - ldr r1, [sp, 0x4] - cmp r2, r1 - blt _0802424A -_080242B8: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080242C8: .4byte gUnknown_3001B60 -_080242CC: .4byte gRecruitedPokemonRef - thumb_func_end sub_8024228 - - thumb_func_start sub_80242D0 -sub_80242D0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - ldr r3, _08024374 - lsls r2, r1, 1 - adds r2, 0x18 - ldr r3, [r3] - adds r3, r2 - str r3, [sp] - adds r2, r0, 0 - subs r1, 0x1 - cmp r2, r1 - bge _08024364 - str r1, [sp, 0x4] -_080242F2: - ldr r5, [sp] - adds r7, r1, 0 - adds r0, r2, 0x1 - mov r10, r0 - cmp r7, r2 - ble _0802435C - ldr r3, _08024378 - mov r9, r3 - movs r0, 0x58 - mov r8, r0 -_08024306: - mov r3, r9 - ldr r1, [r3] - subs r6, r5, 0x2 - movs r3, 0 - ldrsh r0, [r6, r3] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r1, r0 - movs r3, 0x8 - ldrsh r0, [r1, r3] - movs r1, 0 - str r2, [sp, 0x8] - bl GetAlphabetParentNo - adds r4, r0, 0 - mov r0, r9 - ldr r1, [r0] - movs r3, 0 - ldrsh r0, [r5, r3] - mov r3, r8 - muls r3, r0 - adds r0, r3, 0 - adds r1, r0 - movs r3, 0x8 - ldrsh r0, [r1, r3] - movs r1, 0 - bl GetAlphabetParentNo - lsls r4, 16 - lsls r0, 16 - ldr r2, [sp, 0x8] - cmp r4, r0 - ble _08024354 - movs r0, 0 - ldrsh r1, [r5, r0] - ldrh r0, [r6] - strh r0, [r5] - strh r1, [r6] -_08024354: - adds r5, r6, 0 - subs r7, 0x1 - cmp r7, r2 - bgt _08024306 -_0802435C: - mov r2, r10 - ldr r1, [sp, 0x4] - cmp r2, r1 - blt _080242F2 -_08024364: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08024374: .4byte gUnknown_3001B60 -_08024378: .4byte gRecruitedPokemonRef - thumb_func_end sub_80242D0 - - thumb_func_start sub_802437C -sub_802437C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r3, _080243E4 - lsls r2, r1, 1 - adds r2, 0x18 - ldr r3, [r3] - adds r3, r2 - mov r10, r3 - adds r7, r0, 0 - subs r1, 0x1 - cmp r7, r1 - bge _080243D6 - mov r9, r1 -_0802439C: - mov r4, r10 - adds r6, r1, 0 - adds r0, r7, 0x1 - mov r8, r0 - cmp r6, r7 - ble _080243CE -_080243A8: - subs r5, r4, 0x2 - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl ComparePokemonNames - lsls r0, 24 - cmp r0, 0 - beq _080243C6 - movs r0, 0 - ldrsh r1, [r4, r0] - ldrh r0, [r5] - strh r0, [r4] - strh r1, [r5] -_080243C6: - adds r4, r5, 0 - subs r6, 0x1 - cmp r6, r7 - bgt _080243A8 -_080243CE: - mov r7, r8 - mov r1, r9 - cmp r7, r1 - blt _0802439C -_080243D6: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080243E4: .4byte gUnknown_3001B60 - thumb_func_end sub_802437C - .align 2,0 diff --git a/src/code_801EE10.c b/src/code_801EE10.c index e4ea87e91..73f0804ee 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -27,7 +27,13 @@ extern struct unkStruct_203B2AC *gUnknown_203B2AC; struct unkStruct_3001B60 { - u8 fill0[0x1A]; + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u32 unk10; + u8 fill14[0x18 - 0x14]; + s16 unk18; s16 unk1A[2]; u8 fill1C[0x370 - 0x1E]; s16 unk370; @@ -51,6 +57,7 @@ extern void sub_802452C(void); extern void PlayMenuSoundEffect(u32); extern void sub_8013984(void *); void sub_80922B4(u8 *buffer, u8 *string, s32 size); +bool8 ComparePokemonNames(s16 a1, s16 a2); void sub_8024588(void); void sub_80245D0(void); @@ -58,6 +65,153 @@ void sub_8024604(void); extern u8 gUnknown_80DC9A4[]; +void CompareInternalNo(s32 param_1, s32 param_2); +void CompareAlphabetNo(s32 param_1,s32 param_2); +void CompareNames(s32 param_1,s32 param_2); + +bool8 sub_8024184(struct PokemonStruct *pokemon, u8 area) +{ + if(area == GetFriendArea(pokemon->speciesNum)) + return TRUE; + else + return FALSE; +} + +void sub_80241A8(void) +{ + switch(gUnknown_3001B60->unk4) + { + case 2: + if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { + CompareAlphabetNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); + } + if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { + CompareAlphabetNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); + } + break; + case 3: + if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { + CompareNames(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); + } + if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { + CompareNames(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); + } + break; + case 1: + if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { + CompareInternalNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); + } + if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { + CompareInternalNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); + } + break; + } +} + + +void CompareInternalNo(s32 param_1, s32 param_2) +{ + s16 *r4; + s32 iVar4; + s16 *r10; + s16 *r5; + s32 r6; + s32 r1; + s32 r7; + s32 r9; + + r10 = &gUnknown_3001B60->unk18 + param_2; + r7 = param_1; + r1 = param_2 - 1; + if (r7 < r1) { + r9 = r1; + do { + r4 = r10; + r6 = r1; + iVar4 = r7 + 1; + for (; r6 > r7; r6--) { + if (GetInternalNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum) > GetInternalNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum)) { + r1 = *r4; + *r4 = *r5; + *r5 = r1; + } + r4 = r5; + } + r7 = iVar4; + r1 = r9; + } while (iVar4 < r1); + } +} + +void CompareAlphabetNo(s32 param_1,s32 param_2) +{ + s16 *r4; + s32 iVar4; + s16 *r10; + s16 *r5; + s32 r6; + s32 r1; + s32 r7; + s32 r9; + + r10 = &gUnknown_3001B60->unk18 + param_2; + r7 = param_1; + r1 = param_2 - 1; + if (r7 < r1) { + r9 = r1; + do { + r4 = r10; + r6 = r1; + iVar4 = r7 + 1; + for (; r6 > r7; r6--) { + if (GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum, 0) > GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum, 0)) { + r1 = *r4; + *r4 = *r5; + *r5 = r1; + } + r4 = r5; + } + r7 = iVar4; + r1 = r9; + } while (iVar4 < r1); + } +} + +void CompareNames(s32 param_1,s32 param_2) +{ + s16 *r4; + s32 iVar4; + s16 *r10; + s16 *r5; + s32 r6; + s32 r1; + s32 r7; + s32 r9; + + r10 = &gUnknown_3001B60->unk18 + param_2; + r7 = param_1; + r1 = param_2 - 1; + if (r7 < r1) { + r9 = r1; + do { + r4 = r10; + r6 = r1; + iVar4 = r7 + 1; + for (; r6 > r7; r6--) { + r5 = r4 - 1; + if (ComparePokemonNames(*r5, *r4)) { + r1 = *r4; + *r4 = *r5; + *r5 = r1; + } + r4 = r5; + } + r7 = iVar4; + r1 = r9; + } while (iVar4 < r1); + } +} + struct PokemonStruct *sub_80243E8(void) { u8 buffer [40];