From c280da22ddf478f6b81d078ef9e8459e57586a68 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 8 Sep 2024 14:01:10 -0700 Subject: [PATCH] more decomp --- asm/code_806E8B0.s | 618 --------------------------------------------- src/code_806FDF4.c | 373 +++++++++++++++++++++++++++ 2 files changed, 373 insertions(+), 618 deletions(-) diff --git a/asm/code_806E8B0.s b/asm/code_806E8B0.s index 3a44c4f55..329c5d7d7 100644 --- a/asm/code_806E8B0.s +++ b/asm/code_806E8B0.s @@ -1787,622 +1787,4 @@ _0806F8FE: bx r1 thumb_func_end sub_806F660 - thumb_func_start nullsub_96 -nullsub_96: - bx lr - thumb_func_end nullsub_96 - - thumb_func_start sub_806F910 -sub_806F910: - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r5, 0 - movs r6, 0 - movs r7, 0x40 -_0806F91C: - ldr r0, _0806F9AC - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _0806F9B0 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - adds r1, r6, 0x1 - mov r8, r1 - cmp r0, 0 - beq _0806F98A - ldr r0, [r4, 0x70] - movs r2, 0x4 - ldrsh r0, [r0, r2] - bl GetBodySize - lsls r0, 24 - lsrs r1, r0, 24 - adds r0, r4, 0 - adds r0, 0x68 - strh r7, [r0] - ldr r0, [r4, 0x70] - ldr r2, _0806F9B4 - adds r0, r2 - strb r6, [r0] - ldr r0, [r4, 0x70] - adds r2, 0x1 - adds r0, r2 - strb r1, [r0] - cmp r1, 0 - beq _0806F978 - ldr r3, _0806F9B8 - movs r2, 0x1 -_0806F966: - cmp r5, 0x5 - bgt _0806F972 - adds r0, r5, r3 - strb r2, [r0] - adds r7, 0x10 - adds r5, 0x1 -_0806F972: - subs r1, 0x1 - cmp r1, 0 - bne _0806F966 -_0806F978: - adds r0, r4, 0 - bl sub_806CEBC - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_806CCB4 -_0806F98A: - mov r6, r8 - cmp r6, 0x3 - ble _0806F91C - cmp r5, 0x5 - bgt _0806F9A2 - ldr r2, _0806F9B8 - movs r1, 0 -_0806F998: - adds r0, r5, r2 - strb r1, [r0] - adds r5, 0x1 - cmp r5, 0x5 - ble _0806F998 -_0806F9A2: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806F9AC: .4byte gDungeon -_0806F9B0: .4byte 0x0001357c -_0806F9B4: .4byte 0x00000167 -_0806F9B8: .4byte gUnknown_202EE70 - thumb_func_end sub_806F910 - - thumb_func_start sub_806F9BC -sub_806F9BC: - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 16 - asrs r4, r0, 16 - ldr r5, _0806FA40 - ldr r0, [r5] - movs r1, 0xCB - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0806FA3C - adds r0, r4, 0 - bl sub_808529C - lsls r0, 24 - cmp r0, 0 - beq _0806FA3C - cmp r4, 0x97 - bne _0806F9F2 - ldr r0, [r5] - movs r1, 0xCF - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0806FA3C -_0806F9F2: - movs r0, 0xCC - lsls r0, 1 - cmp r4, r0 - beq _0806FA3C - ldr r0, _0806FA44 - cmp r4, r0 - beq _0806FA3C - ldr r0, _0806FA48 - cmp r4, r0 - beq _0806FA3C - movs r0, 0xD1 - lsls r0, 1 - cmp r4, r0 - beq _0806FA3C - ldr r0, _0806FA4C - cmp r4, r0 - beq _0806FA3C - adds r0, r4, 0 - bl GetUnk12 - lsls r0, 24 - cmp r0, 0 - bne _0806FA50 - adds r0, r4, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - movs r2, 0 - movs r3, 0 - bl sub_8092638 - mov r0, sp - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _0806FA50 -_0806FA3C: - movs r0, 0 - b _0806FA52 - .align 2, 0 -_0806FA40: .4byte gDungeon -_0806FA44: .4byte 0x00000199 -_0806FA48: .4byte 0x000001a1 -_0806FA4C: .4byte 0x000001a3 -_0806FA50: - movs r0, 0x1 -_0806FA52: - add sp, 0xC - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806F9BC - - thumb_func_start sub_806FA5C -sub_806FA5C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r8, r0 - adds r5, r1, 0 - adds r6, r2, 0 - adds r0, r5, 0x4 - mov r1, r8 - adds r1, 0x4 - bl GetDirectionTowardsPosition - adds r4, r0, 0 - movs r0, 0 - mov r10, r0 - movs r1, 0 - ldrsh r0, [r6, r1] - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - adds r0, r5, 0 - adds r0, 0x22 - mov r2, r10 - strb r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_807A0CC - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_806CE68 - ldr r0, _0806FAD4 - movs r3, 0 - ldrsh r1, [r6, r3] - bl CopyCyanMonsterNametoBuffer - ldr r0, _0806FAD8 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0 - bne _0806FAE4 - movs r4, 0 - ldrsh r1, [r6, r4] - ldr r0, _0806FADC - cmp r1, r0 - beq _0806FB28 - ldr r0, _0806FAE0 - ldr r1, [r0] - mov r0, r8 - bl SendMessage - b _0806FB28 - .align 2, 0 -_0806FAD4: .4byte gAvailablePokemonNames -_0806FAD8: .4byte gUnknown_80F9FE8 -_0806FADC: .4byte 0x0000019d -_0806FAE0: .4byte gUnknown_80FA004 -_0806FAE4: - movs r7, 0 - ldr r3, _0806FB2C - ldr r0, [r3] - ldr r2, _0806FB30 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806FB1A - mov r12, r3 - adds r4, r2, 0 - movs r2, 0 - movs r3, 0x1 -_0806FB00: - adds r2, 0x64 - adds r7, 0x1 - cmp r7, 0x3 - bgt _0806FB1A - mov r1, r12 - ldr r0, [r1] - adds r0, r2, r0 - adds r0, r4 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0806FB00 -_0806FB1A: - cmp r7, 0x4 - bne _0806FB38 - ldr r0, _0806FB34 - ldr r1, [r0] - mov r0, r8 - bl SendMessage -_0806FB28: - movs r0, 0 - b _0806FCF0 - .align 2, 0 -_0806FB2C: .4byte gRecruitedPokemonRef -_0806FB30: .4byte 0x00008df8 -_0806FB34: .4byte gUnknown_80FA030 -_0806FB38: - mov r0, r9 - bl GetFriendAreaStatus - lsls r0, 24 - cmp r0, 0 - bne _0806FB4E - mov r0, r9 - bl UnlockFriendArea - movs r2, 0x1 - mov r10, r2 -_0806FB4E: - movs r1, 0xFA - lsls r1, 1 - adds r0, r5, 0 - mov r2, r8 - bl sub_8068FE0 - ldr r1, _0806FC40 - movs r0, 0x64 - muls r0, r7 - ldr r3, _0806FC44 - adds r0, r3 - ldr r1, [r1] - adds r5, r1, r0 - movs r4, 0 - movs r0, 0x3 - strh r0, [r5] - strb r4, [r5, 0x2] - ldrh r0, [r6, 0xE] - strb r0, [r5, 0x3] - movs r0, 0x1 - strh r0, [r5, 0x8] - adds r0, r5, 0 - adds r0, 0x4C - movs r1, 0 - bl SetDefaultIQSkills - ldr r0, [r6, 0x44] - str r0, [r5, 0x54] - adds r0, r5, 0 - adds r0, 0x50 - strb r4, [r0] - ldr r0, _0806FC48 - strh r0, [r5, 0xA] - strh r7, [r5, 0xC] - ldrh r0, [r6] - strh r0, [r5, 0xE] - ldr r0, _0806FC4C - ldr r0, [r0] - ldr r4, _0806FC50 - adds r0, r4 - ldr r0, [r0] - str r0, [r5, 0x4] - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x10] - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x12] - ldr r0, [r6, 0x14] - str r0, [r5, 0x44] - ldr r0, [r6, 0x18] - str r0, [r5, 0x48] - movs r2, 0 - adds r7, r6, 0 - adds r7, 0x20 - adds r4, r6, 0 - adds r4, 0xA - adds r3, r6, 0 - adds r3, 0xC - adds r1, r5, 0 - adds r1, 0x14 -_0806FBC4: - adds r0, r4, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r3, r2 - ldrb r0, [r0] - strb r0, [r1, 0x2] - adds r1, 0x1 - adds r2, 0x1 - cmp r2, 0x1 - ble _0806FBC4 - ldr r0, [r6, 0x10] - str r0, [r5, 0x18] - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r7, 0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r6, 0x1C] - str r0, [r5, 0x40] - adds r4, r5, 0 - adds r4, 0x58 - movs r1, 0 - ldrsh r0, [r6, r1] - bl GetMonSpecies - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0xA - bl BoundedCopyStringtoBuffer - bl sub_8097848 - movs r2, 0 - ldrsh r0, [r6, r2] - movs r3, 0x4 - ldrsh r1, [r6, r3] - movs r3, 0x6 - ldrsh r2, [r6, r3] - add r3, sp, 0xC - str r3, [sp] - movs r3, 0 - str r3, [sp, 0x4] - movs r3, 0x1 - str r3, [sp, 0x8] - adds r3, r5, 0 - bl sub_806B8CC - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0 - bne _0806FC58 - ldr r0, _0806FC54 - ldr r1, [r0] - mov r0, r8 - bl SendMessage - strh r7, [r5] - b _0806FCEE - .align 2, 0 -_0806FC40: .4byte gRecruitedPokemonRef -_0806FC44: .4byte 0x00008df8 -_0806FC48: .4byte 0x0000ffff -_0806FC4C: .4byte gDungeon -_0806FC50: .4byte 0x00000644 -_0806FC54: .4byte gUnknown_80FA058 -_0806FC58: - bl sub_8083D88 - movs r0, 0xA0 - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0806FC78 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0x1 - bne _0806FC94 - b _0806FC88 - .align 2, 0 -_0806FC78: .4byte gUnknown_80FA090 -_0806FC7C: - ldr r0, _0806FD00 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage -_0806FC88: - adds r0, r4, 0 - bl sub_805FBE8 - lsls r0, 24 - cmp r0, 0 - beq _0806FC7C -_0806FC94: - ldr r4, _0806FD04 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl sub_808D9DC - ldr r0, _0806FD08 - ldr r1, [r0] - mov r0, r8 - bl SendMessage - mov r0, r10 - cmp r0, 0 - beq _0806FCD8 - bl xxx_call_GetLeader - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0806FD0C - mov r1, r9 - bl sub_8092558 - movs r0, 0xCE - bl PlaySound - ldr r0, _0806FD10 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage -_0806FCD8: - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x97 - bne _0806FCEE - ldr r2, _0806FD14 - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r1, [r2] - movs r0, 0x3 - strb r0, [r1, 0x11] -_0806FCEE: - movs r0, 0x1 -_0806FCF0: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0806FD00: .4byte gUnknown_80FA0C8 -_0806FD04: .4byte gAvailablePokemonNames -_0806FD08: .4byte gUnknown_80FA0F0 -_0806FD0C: .4byte gUnknown_202E628 -_0806FD10: .4byte gUnknown_80FA120 -_0806FD14: .4byte gDungeon - thumb_func_end sub_806FA5C - - thumb_func_start sub_806FD18 -sub_806FD18: - push {r4-r7,lr} - ldr r4, [r0, 0x70] - movs r6, 0x1 - negs r6, r6 - movs r1, 0x4 - ldrsh r0, [r4, r1] - bl GetBodySize - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0x2 - ldrsh r0, [r4, r2] - bl sub_806F9BC - lsls r0, 24 - cmp r0, 0 - beq _0806FDEC - bl sub_806F910 - movs r4, 0 - movs r0, 0x6 - subs r3, r0, r5 - ldr r7, _0806FD48 - b _0806FD4E - .align 2, 0 -_0806FD48: .4byte gUnknown_202EE70 -_0806FD4C: - adds r4, 0x1 -_0806FD4E: - cmp r4, r3 - bgt _0806FD70 - movs r2, 0 - cmp r2, r5 - bge _0806FD6A - adds r1, r4, r7 - b _0806FD64 -_0806FD5C: - adds r1, 0x1 - adds r2, 0x1 - cmp r2, r5 - bge _0806FD6A -_0806FD64: - ldrb r0, [r1] - cmp r0, 0 - beq _0806FD5C -_0806FD6A: - cmp r2, r5 - bne _0806FD4C - adds r6, r4, 0 -_0806FD70: - movs r0, 0x1 - negs r0, r0 - cmp r6, r0 - beq _0806FDEC - movs r4, 0 - ldr r3, _0806FDB4 - ldr r0, [r3] - ldr r2, _0806FDB8 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806FDAC - adds r6, r3, 0 - adds r5, r2, 0 - movs r2, 0 - movs r3, 0x1 -_0806FD94: - adds r2, 0x64 - adds r4, 0x1 - cmp r4, 0x3 - bgt _0806FDAC - ldr r0, [r6] - adds r0, r2, r0 - adds r0, r5 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0806FD94 -_0806FDAC: - cmp r4, 0x4 - beq _0806FDEC - movs r4, 0 - b _0806FDBE - .align 2, 0 -_0806FDB4: .4byte gRecruitedPokemonRef -_0806FDB8: .4byte 0x00008df8 -_0806FDBC: - adds r4, 0x1 -_0806FDBE: - cmp r4, 0x3 - bgt _0806FDDA - ldr r0, _0806FDE4 - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _0806FDE8 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0806FDBC -_0806FDDA: - cmp r4, 0x4 - beq _0806FDEC - movs r0, 0x1 - b _0806FDEE - .align 2, 0 -_0806FDE4: .4byte gDungeon -_0806FDE8: .4byte 0x0001357c -_0806FDEC: - movs r0, 0 -_0806FDEE: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806FD18 - .align 2,0 diff --git a/src/code_806FDF4.c b/src/code_806FDF4.c index 98cb4234d..ff93b117f 100644 --- a/src/code_806FDF4.c +++ b/src/code_806FDF4.c @@ -2,18 +2,31 @@ #include "structs/str_pokemon.h" #include "structs/struct_8069D4C.h" #include "code_80118A4.h" +#include "code_803E668.h" #include "code_8045A00.h" +#include "code_80521D0.h" +#include "code_806CD90.h" +#include "code_8077274_1.h" #include "code_8097670.h" +#include "dungeon_util.h" #include "friend_area.h" #include "pokemon.h" #include "pokemon_3.h" +#include "pokemon_mid.h" +#include "position_util.h" #include "text_util.h" #include "dungeon_util_1.h" extern u8 gUnknown_202E628[]; extern u8 gUnknown_202E088[]; extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_202EE70[MAX_TEAM_BODY_SIZE]; +extern u8 *gUnknown_80FA0F0[]; +extern u8 *gUnknown_80FA058[]; +extern u8 *gUnknown_80FA030[]; +extern u8 *gUnknown_80F9FE8[]; +extern u8 *gUnknown_80FA004[]; extern u8 *gUnknown_80FA0C8[]; extern u8 gUnknown_202E088[]; extern u8 *gUnknown_80FA120[]; @@ -25,6 +38,366 @@ u8 sub_806B8CC(); bool8 sub_805FBE8(u8 *a0); extern s32 sub_8052B8C(u32, const u8 *, u32); extern void PrintFieldMessage(u32, const u8 *, u32); +void sub_8083D88(); +u8 sub_808529C(s32); +extern u8 GetBodySize(s16 index); +void sub_806F910(); + +void nullsub_96(Entity *pokemon,Entity *target) +{} + +void sub_806F910(void) +{ + u8 size; + s32 counter; + Entity *entity; + int totalSize; + int index; + s32 sVar6; + + totalSize = 0; + + for(index = 0, sVar6 = 0x40; index < MAX_TEAM_MEMBERS; index++) + { + entity = gDungeon->teamPokemon[index]; + if (EntityExists(entity)) { + size = GetBodySize(entity->info->apparentID); + entity->unk68 = sVar6; + entity->info->unk167 = index; + entity->info->unk168 = size; + for (counter = 0; counter < size; counter++) { + if (totalSize < MAX_TEAM_BODY_SIZE) { + gUnknown_202EE70[totalSize] = 1; + sVar6 += 0x10; + totalSize++; + } + } + sub_806CCB4(entity,sub_806CEBC(entity)); + } + } + for (; totalSize < MAX_TEAM_BODY_SIZE; totalSize++) { + gUnknown_202EE70[totalSize] = 0; + } +} + +bool8 sub_806F9BC(s16 species) +{ + u8 friendArea; + s32 id; + unkStruct_8092638 auStack_18; + + id = species; + if (((gDungeon->fill655[3] == 0) || (sub_808529C(id) == 0)) || + ((id == MONSTER_MEW && (gDungeon->unk678 == 1)))) { + return FALSE; + } + else if (id == MONSTER_LATIAS) + { + return FALSE; + } + else if (id == MONSTER_LATIOS) + { + return FALSE; + } + else if (id == MONSTER_DEOXYS_ATTACK) + { + return FALSE; + } + else if (id == MONSTER_DEOXYS_DEFENSE) + { + return FALSE; + } + else if (id == MONSTER_DEOXYS_SPEED) + { + return FALSE; + } + else { + if (GetUnk12(id) == 0) { + friendArea = GetFriendArea(id); + sub_8092638(friendArea, &auStack_18, FALSE, FALSE); + if (auStack_18.hasFriendArea == FALSE) + return FALSE; + } + return TRUE; + } +} + +bool8 sub_806FA5C(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *param_3) +{ + u8 friendArea; + bool8 flag; + Entity *leader; + PokemonStruct2 *pokeStruct2; + int pokeIndex; + Entity *local_2c; + s32 iVar2; + u32 direction; + + + direction = GetDirectionTowardsPosition(&entity2->pos,&entity1->pos); + flag = FALSE; + friendArea = GetFriendArea(param_3->id); + entity2->unk22 = 0; + sub_807A0CC(entity1, entity2); + sub_806CE68(entity2, direction); + CopyCyanMonsterNametoBuffer(gAvailablePokemonNames,param_3->id); + + if (sub_8052B8C(0,*gUnknown_80F9FE8,1) == 0) { + if (param_3->id != MONSTER_JIRACHI) { + SendMessage(entity1,*gUnknown_80FA004); + } + return 0; + } + else + { + for(pokeIndex = 0; pokeIndex < MAX_TEAM_MEMBERS; pokeIndex++) + { + if (((u8)(pokeIndex[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0) + break; + } + + if (pokeIndex == MAX_TEAM_MEMBERS) { + SendMessage(entity1,*gUnknown_80FA030); + return FALSE; + } + else { + if (GetFriendAreaStatus(friendArea) == 0) { + UnlockFriendArea(friendArea); + flag = TRUE; + } + sub_8068FE0(entity2,500,entity1); + pokeStruct2 = &gRecruitedPokemonRef->pokemon2[pokeIndex]; + pokeStruct2->unk0 = 3; + pokeStruct2->isTeamLeader = FALSE; + pokeStruct2->level = param_3->level; + pokeStruct2->IQ = 1; + SetDefaultIQSkills((u8 *)&(pokeStruct2->IQSkills),0); + pokeStruct2->hiddenPower = param_3->hiddenPower; + pokeStruct2->tacticIndex = 0; + pokeStruct2->unkA = -1; + pokeStruct2->unkC = pokeIndex; + pokeStruct2->speciesNum = param_3->id; + (pokeStruct2->dungeonLocation) = gDungeon->dungeonLocation; + pokeStruct2->unk10 = param_3->HP; + pokeStruct2->unk12 = param_3->HP; + pokeStruct2->belly = param_3->belly; + pokeStruct2->maxBelly = param_3->maxBelly; + + for(iVar2 = 0; iVar2 < 2; iVar2++) + { + pokeStruct2->offense.att[iVar2] = param_3->att[iVar2]; + pokeStruct2->offense.def[iVar2] = param_3->def[iVar2]; + } + + pokeStruct2->currExp = param_3->exp; + pokeStruct2->moves = param_3->moves; + + pokeStruct2->itemSlot = param_3->heldItem; + BoundedCopyStringtoBuffer(pokeStruct2->name,GetMonSpecies(param_3->id),10); + + sub_8097848(); + + if (sub_806B8CC(param_3->id,param_3->pos.x,param_3->pos.y,pokeStruct2,&local_2c,0,1) == 0) { + SendMessage(entity1,*gUnknown_80FA058); + pokeStruct2->unk0 = 0; + } + else { + sub_8083D88(); + sub_803E708(0xa0,0x46); + if (sub_8052B8C(0,*gUnknown_80FA090,1) == 1) { + while (sub_805FBE8(pokeStruct2->name) == 0) { + PrintFieldMessage(0,*gUnknown_80FA0C8,1); + } + } + sub_808D9DC(gAvailablePokemonNames,pokeStruct2,0); + SendMessage(entity1,*gUnknown_80FA0F0); + if (flag != '\0') { + leader = xxx_call_GetLeader(); + SetMessageArgument(gAvailablePokemonNames,leader,0); + sub_8092558(gUnknown_202E628,friendArea); + PlaySound(0xce); + PrintFieldMessage(0,*gUnknown_80FA120,1); + } + if (param_3->id == MONSTER_MEW) { + gDungeon->unk4 = 1; + gDungeon->unk11 = 3; + } + } + return TRUE; + } + } +} + +// https://decomp.me/scratch/LByEy (93.86% matching - Seth) + +#ifdef NONMATCHING +bool8 sub_806FD18(Entity *param_1) +{ + s32 size; + s32 uVar3; + int iVar4; + EntityInfo *info; + int index; + + info = param_1->info; + iVar4 = -1; + size = GetBodySize((int)info->apparentID); + if (sub_806F9BC((int)info->id) != 0) { + sub_806F910(); + for (index = 0; index <= (6 - size); index++) { + for(uVar3 = 0; uVar3 < size; uVar3++) + { + if (gUnknown_202EE70[index] != 0) break; + iVar4 = index; + } + if (uVar3 == size) break; + } + if (iVar4 != -1) { + + for(index = 0; index < 4; index++) + { + if (((u8)(index[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0) break; + } + + if (index != 4) { + for(index = 0; index < 4; index++) + { + if(!EntityExists(gDungeon->teamPokemon[index])) break; + } + if (index != 4) { + return 1; + } + } + } + } + return 0; +} +#else +NAKED +bool8 sub_806FD18(Entity *param_1) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tldr r4, [r0, 0x70]\n" + "\tmovs r6, 0x1\n" + "\tnegs r6, r6\n" + "\tmovs r1, 0x4\n" + "\tldrsh r0, [r4, r1]\n" + "\tbl GetBodySize\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tmovs r2, 0x2\n" + "\tldrsh r0, [r4, r2]\n" + "\tbl sub_806F9BC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0806FDEC\n" + "\tbl sub_806F910\n" + "\tmovs r4, 0\n" + "\tmovs r0, 0x6\n" + "\tsubs r3, r0, r5\n" + "\tldr r7, _0806FD48\n" + "\tb _0806FD4E\n" + "\t.align 2, 0\n" +"_0806FD48: .4byte gUnknown_202EE70\n" +"_0806FD4C:\n" + "\tadds r4, 0x1\n" +"_0806FD4E:\n" + "\tcmp r4, r3\n" + "\tbgt _0806FD70\n" + "\tmovs r2, 0\n" + "\tcmp r2, r5\n" + "\tbge _0806FD6A\n" + "\tadds r1, r4, r7\n" + "\tb _0806FD64\n" +"_0806FD5C:\n" + "\tadds r1, 0x1\n" + "\tadds r2, 0x1\n" + "\tcmp r2, r5\n" + "\tbge _0806FD6A\n" +"_0806FD64:\n" + "\tldrb r0, [r1]\n" + "\tcmp r0, 0\n" + "\tbeq _0806FD5C\n" +"_0806FD6A:\n" + "\tcmp r2, r5\n" + "\tbne _0806FD4C\n" + "\tadds r6, r4, 0\n" +"_0806FD70:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r6, r0\n" + "\tbeq _0806FDEC\n" + "\tmovs r4, 0\n" + "\tldr r3, _0806FDB4\n" + "\tldr r0, [r3]\n" + "\tldr r2, _0806FDB8\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0806FDAC\n" + "\tadds r6, r3, 0\n" + "\tadds r5, r2, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x1\n" +"_0806FD94:\n" + "\tadds r2, 0x64\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x3\n" + "\tbgt _0806FDAC\n" + "\tldr r0, [r6]\n" + "\tadds r0, r2, r0\n" + "\tadds r0, r5\n" + "\tldrb r1, [r0]\n" + "\tadds r0, r3, 0\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _0806FD94\n" +"_0806FDAC:\n" + "\tcmp r4, 0x4\n" + "\tbeq _0806FDEC\n" + "\tmovs r4, 0\n" + "\tb _0806FDBE\n" + "\t.align 2, 0\n" +"_0806FDB4: .4byte gRecruitedPokemonRef\n" +"_0806FDB8: .4byte 0x00008df8\n" +"_0806FDBC:\n" + "\tadds r4, 0x1\n" +"_0806FDBE:\n" + "\tcmp r4, 0x3\n" + "\tbgt _0806FDDA\n" + "\tldr r0, _0806FDE4\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r4, 2\n" + "\tldr r2, _0806FDE8\n" + "\tadds r0, r2\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tbl EntityExists\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0806FDBC\n" +"_0806FDDA:\n" + "\tcmp r4, 0x4\n" + "\tbeq _0806FDEC\n" + "\tmovs r0, 0x1\n" + "\tb _0806FDEE\n" + "\t.align 2, 0\n" +"_0806FDE4: .4byte gDungeon\n" +"_0806FDE8: .4byte 0x0001357c\n" +"_0806FDEC:\n" + "\tmovs r0, 0\n" +"_0806FDEE:\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1" + ); +} + +#endif + bool8 sub_806FDF4(Entity *entity1,Entity *entity2,Entity **entityPtr) {