From 4ef1c57fb9992f6edaa12df63bc53d0a050ae7e2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 12 May 2025 09:34:15 +0200 Subject: [PATCH] start code 8023868 --- asm/code_8023868.s | 276 ----------------------------------------- include/code_8023868.h | 14 ++- src/code_8023868.c | 82 +++++++++++- 3 files changed, 89 insertions(+), 283 deletions(-) diff --git a/asm/code_8023868.s b/asm/code_8023868.s index b88ed6dba..5ee25d676 100644 --- a/asm/code_8023868.s +++ b/asm/code_8023868.s @@ -910,281 +910,5 @@ _08023F84: .4byte 0x00000372 _08023F88: .4byte gUnknown_3001B60 thumb_func_end sub_8023DA4 - thumb_func_start sub_8023F8C -sub_8023F8C: - push {r4-r7,lr} - ldr r2, _08023FD0 - ldr r1, [r2] - movs r0, 0 - str r0, [r1, 0x8] - ldrb r0, [r1, 0x15] - adds r6, r2, 0 - cmp r0, 0 - bne _08023FE2 - movs r4, 0 - ldr r2, _08023FD4 -_08023FA2: - movs r0, 0x58 - adds r1, r4, 0 - muls r1, r0 - ldr r0, [r2] - adds r1, r0, r1 - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _08023FD8 - ldrb r1, [r1] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08023FD8 - ldr r3, [r6] - ldr r1, [r3, 0x8] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0x1A - adds r0, r2 - strh r4, [r0] - adds r1, 0x1 - str r1, [r3, 0x8] - b _08023FE2 - .align 2, 0 -_08023FD0: .4byte gUnknown_3001B60 -_08023FD4: .4byte gRecruitedPokemonRef -_08023FD8: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _08023FA2 -_08023FE2: - ldr r0, [r6] - ldrb r0, [r0, 0x16] - cmp r0, 0 - bne _08024042 - movs r4, 0 - ldr r3, _08024034 -_08023FEE: - movs r0, 0x58 - adds r1, r4, 0 - muls r1, r0 - ldr r0, [r3] - adds r1, r0, r1 - movs r2, 0 - ldrb r0, [r1, 0x4] - cmp r0, 0x41 - bne _08024002 - movs r2, 0x1 -_08024002: - cmp r2, 0 - beq _08024038 - ldrb r0, [r1, 0x2] - cmp r0, 0 - bne _08024038 - ldrh r1, [r1] - lsrs r0, r1, 1 - movs r2, 0x1 - ands r0, r2 - cmp r0, 0 - beq _08024038 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _08024038 - ldr r3, [r6] - ldr r1, [r3, 0x8] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0x1A - adds r0, r2 - strh r4, [r0] - adds r1, 0x1 - str r1, [r3, 0x8] - b _08024042 - .align 2, 0 -_08024034: .4byte gRecruitedPokemonRef -_08024038: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _08023FEE -_08024042: - ldr r0, [r6] - ldr r1, [r0, 0x8] - str r1, [r0, 0xC] - ldrb r0, [r0, 0x17] - cmp r0, 0 - bne _080240A4 - movs r4, 0 - ldr r7, _08024100 - movs r5, 0x1 -_08024054: - movs r0, 0x58 - adds r1, r4, 0 - muls r1, r0 - ldr r0, [r7] - adds r1, r0, r1 - ldrh r2, [r1] - lsrs r0, r2, 1 - ands r0, r5 - cmp r0, 0 - beq _0802409A - adds r0, r5, 0 - ands r0, r2 - cmp r0, 0 - beq _0802409A - ldrb r0, [r1, 0x2] - cmp r0, 0 - bne _0802409A - movs r2, 0 - ldrb r0, [r1, 0x4] - cmp r0, 0x41 - bne _08024080 - movs r2, 0x1 -_08024080: - cmp r2, 0 - bne _0802409A - ldr r3, [r6] - ldr r1, [r3, 0x8] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0x1A - adds r0, r2 - strh r4, [r0] - adds r1, 0x1 - str r1, [r3, 0x8] - cmp r1, 0x3 - bgt _080240A4 -_0802409A: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _08024054 -_080240A4: - ldr r0, [r6] - ldr r1, [r0, 0x8] - str r1, [r0, 0x10] - ldrb r0, [r0, 0x14] - cmp r0, 0 - bne _080240EE - movs r4, 0 - ldr r7, _08024100 - movs r5, 0x1 -_080240B6: - movs r0, 0x58 - adds r1, r4, 0 - muls r1, r0 - ldr r0, [r7] - adds r1, r0, r1 - ldrh r1, [r1] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080240E4 - lsrs r0, r1, 1 - ands r0, r5 - cmp r0, 0 - bne _080240E4 - ldr r3, [r6] - ldr r1, [r3, 0x8] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0x1A - adds r0, r2 - strh r4, [r0] - adds r1, 0x1 - str r1, [r3, 0x8] -_080240E4: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _080240B6 -_080240EE: - bl sub_80241A8 - ldr r0, _08024104 - ldr r0, [r0] - ldr r0, [r0, 0x8] - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08024100: .4byte gRecruitedPokemonRef -_08024104: .4byte gUnknown_3001B60 - thumb_func_end sub_8023F8C - - thumb_func_start sub_8024108 -sub_8024108: - push {r4-r7,lr} - adds r5, r0, 0 - movs r7, 0 - movs r6, 0x1 -_08024110: - ldr r2, _08024134 - movs r0, 0x58 - adds r1, r7, 0 - muls r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - ldrh r1, [r4] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08024172 - cmp r5, 0x2 - bne _08024138 - lsrs r0, r1, 1 - ands r0, r6 - cmp r0, 0 - beq _08024172 - b _0802416E - .align 2, 0 -_08024134: .4byte gRecruitedPokemonRef -_08024138: - cmp r5, 0x3 - bne _08024140 - lsrs r0, r1, 1 - b _08024168 -_08024140: - cmp r5, 0x4 - bne _0802416E - ldrb r0, [r4, 0x2] - cmp r0, 0 - bne _08024172 - movs r0, 0x9 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _0802416E - movs r1, 0 - ldrb r0, [r4, 0x4] - cmp r0, 0x41 - bne _08024160 - movs r1, 0x1 -_08024160: - cmp r1, 0 - beq _0802416E - ldrh r0, [r4] - lsrs r0, 1 -_08024168: - ands r0, r6 - cmp r0, 0 - bne _08024172 -_0802416E: - movs r0, 0 - b _0802417E -_08024172: - adds r7, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - ble _08024110 - movs r0, 0x1 -_0802417E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8024108 .align 2,0 \ No newline at end of file diff --git a/include/code_8023868.h b/include/code_8023868.h index 548472a71..12de8fefa 100644 --- a/include/code_8023868.h +++ b/include/code_8023868.h @@ -5,13 +5,15 @@ struct unkStruct_3001B60 { u32 unk0; u32 sortMethod; - u32 unk8; + s32 unk8; u32 unkC; u32 unk10; - u8 fill14[0x18 - 0x14]; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; s16 unk18; - s16 unk1A[2]; - u8 fill1C[0x370 - 0x1E]; + s16 unk1A[427]; s16 unk370; s16 unk372; s16 unk374; @@ -25,6 +27,6 @@ extern s16 sub_8023B44(void); extern void sub_8023B7C(u32); extern void sub_8023C60(void); extern void sub_8023DA4(void); -extern bool8 sub_8024108(u32); +extern bool8 sub_8024108(s32); -#endif // GUARD_CODE_8023868_H \ No newline at end of file +#endif // GUARD_CODE_8023868_H diff --git a/src/code_8023868.c b/src/code_8023868.c index 154e1821a..78957161d 100644 --- a/src/code_8023868.c +++ b/src/code_8023868.c @@ -5,6 +5,7 @@ #include "pokemon.h" #include "structs/str_text.h" #include "text_util.h" +#include "event_flag.h" //static // MAKE STATIC WHEN code_8023868.s IS DONE IWRAM_INIT struct unkStruct_3001B60 *gUnknown_3001B60 = {NULL}; @@ -16,10 +17,89 @@ static void SortbyInternalNo(s32, s32); static void SortbyName(s32, s32); //static bool8 sub_8024184(PokemonStruct1 *pokemon, u8 area); -//static void sub_80241A8(void); +void sub_80241A8(void); // THE REMAINING CODE FROM THIS FILE IS IN code_8023868.s STARTING WITH sub_8023868 +s32 sub_8023F8C(void) +{ + s32 i; + PokemonStruct1 *pokeStruct; + + gUnknown_3001B60->unk8 = 0; + if (!gUnknown_3001B60->unk15) { + for (i = 0; i < NUM_MONSTERS; i++) { + pokeStruct = &gRecruitedPokemonRef->pokemon[i]; + if (pokeStruct->isTeamLeader && PokemonFlag1(pokeStruct)) { + gUnknown_3001B60->unk1A[gUnknown_3001B60->unk8++] = i; + break; + } + } + } + + if (!gUnknown_3001B60->unk16) { + for (i = 0; i < NUM_MONSTERS; i++) { + pokeStruct = &gRecruitedPokemonRef->pokemon[i]; + if (IsMonPartner(pokeStruct) && !pokeStruct->isTeamLeader && PokemonFlag2(pokeStruct) && PokemonFlag1(pokeStruct)) { + gUnknown_3001B60->unk1A[gUnknown_3001B60->unk8++] = i; + break; + } + } + } + gUnknown_3001B60->unkC = gUnknown_3001B60->unk8; + + if (!gUnknown_3001B60->unk17) { + for (i = 0; i < NUM_MONSTERS; i++) { + pokeStruct = &gRecruitedPokemonRef->pokemon[i]; + if (PokemonFlag2(pokeStruct) && PokemonFlag1(pokeStruct) && !pokeStruct->isTeamLeader && !IsMonPartner(pokeStruct)) { + gUnknown_3001B60->unk1A[gUnknown_3001B60->unk8++] = i; + if (gUnknown_3001B60->unk8 >= 4) { + break; + } + } + } + } + gUnknown_3001B60->unk10 = gUnknown_3001B60->unk8; + + if (!gUnknown_3001B60->unk14) { + for (i = 0; i < NUM_MONSTERS; i++) { + pokeStruct = &gRecruitedPokemonRef->pokemon[i]; + if (PokemonFlag1(pokeStruct) && !PokemonFlag2(&gRecruitedPokemonRef->pokemon[i])) { + gUnknown_3001B60->unk1A[gUnknown_3001B60->unk8++] = i; + } + } + } + + sub_80241A8(); + return gUnknown_3001B60->unk8; +} + +bool8 sub_8024108(s32 param_1) +{ + s32 i; + + for (i = 0; i < NUM_MONSTERS; i++) { + PokemonStruct1 *pokeStruct = &gRecruitedPokemonRef->pokemon[i]; + if (PokemonFlag1(pokeStruct)) { + if (param_1 == 2) { + if (!PokemonFlag2(pokeStruct)) continue; + } + else if (param_1 == 3) { + if (PokemonFlag2(pokeStruct)) continue; + } + else if (param_1 == 4) { + if (pokeStruct->isTeamLeader) continue; + if (!sub_80023E4(9)) { + if (!IsMonPartner(pokeStruct)) return FALSE; + if (PokemonFlag2(pokeStruct)) continue; + } + } + return FALSE; + } + } + return TRUE; +} + //static // MAKE STATIC WHEN code_8023868.s IS DONE bool8 sub_8024184(PokemonStruct1 *pokemon, u8 area) {