From 0225356d5995c043ff9aee4756553294d46f14cf Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Sat, 19 Aug 2023 01:57:56 -0400 Subject: [PATCH] 99.09% matching for sub_807CB3C --- asm/code_807CABC.s | 266 ------------------------ include/dungeon_ai_attack.h | 1 + ld_script.txt | 1 - src/code_805A120.c | 4 +- src/code_8077274_1.c | 4 +- src/code_807CD9C.c | 6 +- src/dungeon_ai_attack.c | 397 ++++++++++++++++++++++++++++++++++-- 7 files changed, 389 insertions(+), 290 deletions(-) delete mode 100644 asm/code_807CABC.s diff --git a/asm/code_807CABC.s b/asm/code_807CABC.s deleted file mode 100644 index d97abc6c7..000000000 --- a/asm/code_807CABC.s +++ /dev/null @@ -1,266 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_807CB3C -sub_807CB3C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - adds r6, r0, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - movs r2, 0x15 - bl sub_8044D90 - adds r2, r0, 0 - ldr r5, [r2] - ldrb r1, [r2] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0807CB80 - ldr r0, _0807CB78 - adds r1, r2, 0 - bl sub_8045BF8 - ldr r0, _0807CB7C - ldr r1, [r0] - adds r0, r6, 0 - bl SendMessage - b _0807CD54 - .align 2, 0 -_0807CB78: .4byte gUnknown_202DE58 -_0807CB7C: .4byte gUnknown_80FE3E8 -_0807CB80: - add r0, sp, 0x8 - adds r1, r7, 0 - adds r1, 0x44 - ldm r1!, {r2-r4} - stm r0!, {r2-r4} - ldm r1!, {r2-r4} - stm r0!, {r2-r4} - bl IsBossFight - lsls r0, 24 - cmp r0, 0 - beq _0807CBAC - ldr r0, _0807CBA8 - ldr r1, [r0] - adds r0, r6, 0 - bl SendMessage - movs r4, 0x1 - b _0807CCDE - .align 2, 0 -_0807CBA8: .4byte gPtrMysteriousPowerPreventedUseMessage -_0807CBAC: - movs r0, 0x1 - mov r8, r0 - add r4, sp, 0x20 - lsls r5, 8 - lsrs r0, r5, 24 - bl GetItemMoveID - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl InitPokemonMove - ldrb r0, [r7, 0x7] - mov r10, r4 - mov r9, r5 - cmp r0, 0 - bne _0807CC08 - ldr r1, _0807CC20 - ldr r0, [sp, 0x28] - ands r0, r1 - mov r1, r8 - orrs r0, r1 - str r0, [sp, 0x28] - movs r0, 0xA - add r4, sp, 0x28 - str r0, [r4, 0x4] - movs r3, 0x8C - lsls r3, 1 - adds r2, r7, r3 - adds r0, r4, 0 - adds r1, r6, 0 - bl AIConsiderMove - ldrb r0, [r4] - cmp r0, 0 - beq _0807CC08 - ldrb r1, [r4, 0x1] - movs r0, 0x7 - ands r0, r1 - adds r1, r7, 0 - adds r1, 0x46 - strb r0, [r1] - adds r0, r6, 0 - bl TargetTileInFront -_0807CC08: - adds r0, r7, 0 - adds r0, 0xBC - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807CC2C - ldr r0, _0807CC24 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807CC28 - b _0807CC3C - .align 2, 0 -_0807CC20: .4byte 0xffffff00 -_0807CC24: .4byte gAvailablePokemonNames -_0807CC28: .4byte gUnknown_80FC714 -_0807CC2C: - cmp r0, 0x7 - bne _0807CC50 - ldr r0, _0807CC48 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807CC4C -_0807CC3C: - ldr r1, [r0] - adds r0, r6, 0 - bl SendMessage - b _0807CCDC - .align 2, 0 -_0807CC48: .4byte gAvailablePokemonNames -_0807CC4C: .4byte gUnknown_80FC718 -_0807CC50: - adds r0, r7, 0 - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0x4 - bne _0807CC72 - ldr r0, _0807CCB8 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807CCBC - ldr r1, [r0] - adds r0, r6, 0 - bl SendMessage - movs r4, 0 - mov r8, r4 -_0807CC72: - mov r0, r8 - cmp r0, 0 - beq _0807CCDC - mov r5, r9 - lsrs r0, r5, 24 - cmp r0, 0xB6 - beq _0807CC84 - cmp r0, 0xBF - bne _0807CCC0 -_0807CC84: - adds r0, r6, 0 - movs r1, 0 - movs r2, 0x7A - bl sub_8044DF0 - mov r2, r10 - ldrb r1, [r2] - movs r0, 0x8 - movs r4, 0 - orrs r0, r1 - add r3, sp, 0x20 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - movs r0, 0xA - strb r0, [r3, 0x4] - lsrs r2, r5, 24 - str r4, [sp] - str r3, [sp, 0x4] - adds r0, r6, 0 - movs r1, 0 - movs r3, 0 - bl sub_8055FA0 - b _0807CCDE - .align 2, 0 -_0807CCB8: .4byte gAvailablePokemonNames -_0807CCBC: .4byte gUnknown_80FC6A8 -_0807CCC0: - mov r3, r9 - lsrs r2, r3, 24 - movs r0, 0 - str r0, [sp] - mov r4, r10 - str r4, [sp, 0x4] - adds r0, r6, 0 - movs r1, 0 - movs r3, 0 - bl sub_8055FA0 - lsls r0, 24 - lsrs r4, r0, 24 - b _0807CCDE -_0807CCDC: - movs r4, 0 -_0807CCDE: - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807CD38 - cmp r4, 0 - beq _0807CCF8 - adds r0, r6, 0 - movs r1, 0 - movs r2, 0x7A - bl sub_8044DF0 -_0807CCF8: - adds r0, r6, 0 - bl sub_8071DA4 - adds r0, r6, 0 - movs r1, 0x8 - bl sub_806CE68 - ldrb r0, [r7, 0x7] - cmp r0, 0 - beq _0807CD18 - adds r0, r6, 0x4 - bl sub_804AC20 - movs r0, 0 - bl sub_807EC28 -_0807CD18: - adds r0, r6, 0 - bl sub_806A5B8 - ldr r0, _0807CD30 - ldr r0, [r0] - ldr r1, _0807CD34 - adds r0, r1 - ldrb r1, [r0] - adds r0, r6, 0 - bl sub_8075900 - b _0807CD44 - .align 2, 0 -_0807CD30: .4byte gDungeon -_0807CD34: .4byte 0x00003a08 -_0807CD38: - cmp r4, 0 - beq _0807CD44 - add r0, sp, 0x8 - movs r1, 0 - bl sub_8044D40 -_0807CD44: - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _0807CD54 - adds r0, r6, 0 - bl sub_806A1B0 -_0807CD54: - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807CB3C - - .align 2, 0 diff --git a/include/dungeon_ai_attack.h b/include/dungeon_ai_attack.h index c867b2531..4f9795ce2 100644 --- a/include/dungeon_ai_attack.h +++ b/include/dungeon_ai_attack.h @@ -5,6 +5,7 @@ #define RANGED_ATTACK_RANGE 10 +// size: 0x8 struct AIPossibleMove { bool8 canBeUsed; diff --git a/ld_script.txt b/ld_script.txt index af1e11bab..fdfaaa1a8 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -233,7 +233,6 @@ SECTIONS { asm/code_8077274_1.o(.text); src/dungeon_ai_movement.o(.text); src/dungeon_ai_attack.o(.text); - asm/code_807CABC.o(.text); src/targeting_flags.o(.text); asm/code_807CD9C.o(.text); src/code_807CD9C.o(.text); diff --git a/src/code_805A120.c b/src/code_805A120.c index 7bec68cfc..d1f8fbb9d 100644 --- a/src/code_805A120.c +++ b/src/code_805A120.c @@ -102,7 +102,7 @@ extern u8 sub_8044B28(void); extern u8 sub_803F428(struct Position *pos); extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_803E46C(u32); -extern void sub_807EC28(u32); +extern void sub_807EC28(bool8); extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); void sub_8075900(struct Entity *pokemon, u8 r1); extern void sub_804535C(struct Entity *, u32); @@ -1219,7 +1219,7 @@ _0805AA5E: } if (target->info->isTeamLeader) { sub_804AC20(r9); - sub_807EC28(0); + sub_807EC28(FALSE); } sub_806A5B8(target); sub_8075900(target,gDungeon->unk3A08); diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index fa2340e40..b11ff5d2d 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -172,7 +172,7 @@ extern void SetMessageArgument(u8 *buffer, struct Entity *r1, u32); extern void sub_80522F4(struct Entity *pokemon, struct Entity *r1, const char[]); extern void EntityUpdateStatusSprites(struct Entity *); extern void sub_8042A74(struct Entity *r0); -extern void sub_807EC28(u32); +extern void sub_807EC28(bool8); extern s32 sub_8069F54(struct Entity *param_1, s16 param_2); extern void sub_806A898(struct Entity *, u32, u32); extern void HealTargetHP(struct Entity *pokemon, struct Entity *r1, s16, s16, u32); @@ -1515,7 +1515,7 @@ void SendTransformEndMessage(struct Entity * pokemon, struct Entity *target) entityInfo->transformStatus = STATUS_NONE; EntityUpdateStatusSprites(target); if (isInvisible) { - sub_807EC28(1); + sub_807EC28(TRUE); } } diff --git a/src/code_807CD9C.c b/src/code_807CD9C.c index 2e94e2fe7..28f1e9940 100644 --- a/src/code_807CD9C.c +++ b/src/code_807CD9C.c @@ -24,7 +24,7 @@ extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8 extern void sub_80694C0(struct Entity *, s32, s32, u32); extern void sub_804535C(struct Entity *, u32); extern void sub_804AC20(struct Position *); -extern void sub_807EC28(u32); +extern void sub_807EC28(bool8); extern void sub_806A5B8(struct Entity *); extern u32 gUnknown_80F5FAC[]; @@ -101,7 +101,7 @@ void sub_807E254(struct Entity *pokemon,struct Entity *target) if (EntityExists(pokemon)) { if (pokemon->info->isTeamLeader) { sub_804AC20(&pokemon->pos); - sub_807EC28(0); + sub_807EC28(FALSE); } sub_806A5B8(pokemon); sub_8075900(pokemon,gDungeon->unk3A08); @@ -110,7 +110,7 @@ void sub_807E254(struct Entity *pokemon,struct Entity *target) if (EntityExists(target)) { if (target->info->isTeamLeader) { sub_804AC20(&target->pos); - sub_807EC28(0); + sub_807EC28(FALSE); } sub_806A5B8(target); sub_8075900(target,gDungeon->unk3A08); diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index 3af5f4c57..9a275baa5 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -45,7 +45,8 @@ extern void sub_806A9B4(struct Entity *, u8); extern bool8 sub_8044B28(void); extern void sub_8057588(struct Entity *, u32); extern void sub_806A1B0(struct Entity *); - +extern struct Item *sub_8044D90(struct Entity *, s32, u32); +extern bool8 sub_8044D40(struct ActionContainer *, u32); void DecideAttack(struct Entity *pokemon) { @@ -932,23 +933,387 @@ bool8 IsTargetInRange(struct Entity *pokemon, struct Entity *targetPokemon, s32 void sub_807CABC(struct Entity *target) { - struct EntityInfo *entityInfo; - s32 counter; + struct EntityInfo *entityInfo; + s32 counter; - counter = 0; - while (1) { - if(counter >= sub_8070828(target, TRUE)) break; + counter = 0; + while (TRUE) { + if (counter >= sub_8070828(target, TRUE)) + break; entityInfo = target->info; - sub_8055A00(target,(entityInfo->action).actionUseIndex,1,0,0); - if(!EntityExists(target)) break; - if(sub_8044B28()) break; - if(entityInfo->unk159) break; + sub_8055A00(target, entityInfo->action.actionUseIndex, 1, 0, 0); + if (!EntityExists(target)) + break; + if (sub_8044B28()) + break; + if (entityInfo->unk159) + break; counter++; - } + } - sub_8057588(target,1); - if (EntityExists(target)) { - sub_806A9B4(target,(target->info->action).actionUseIndex); - } - sub_806A1B0(target); + sub_8057588(target, 1); + if (EntityExists(target)) + sub_806A9B4(target, target->info->action.actionUseIndex); + + sub_806A1B0(target); } + +#if NONMATCHING // 99.09% https://decomp.me/scratch/rpwXh +void sub_807CB3C(struct Entity *pokemon) +{ + bool8 r4; + struct Item *item; + struct Item IVar5; + struct EntityInfo *entityInfo; // r7 + struct ActionContainer act; + struct Move move; + struct AIPossibleMove sp28; + bool8 r8; + + entityInfo = pokemon->info; + item = sub_8044D90(pokemon, 0, 21); + IVar5 = *item; + + if (item->flags & ITEM_FLAG_STICKY) { + sub_8045BF8(gUnknown_202DE58, item); + SendMessage(pokemon, *gUnknown_80FE3E8); + return; + } + + act = entityInfo->action; + + if (IsBossFight()) { + SendMessage(pokemon, *gPtrMysteriousPowerPreventedUseMessage); + r4 = TRUE; + } + else { + r8 = TRUE; + InitPokemonMove(&move, GetItemMoveID(IVar5.id)); + + if (!entityInfo->isTeamLeader) { + sp28.canBeUsed = r8; + sp28.weight = 10; + AIConsiderMove(&sp28, pokemon, entityInfo->moves); + + if (sp28.canBeUsed) { + entityInfo->action.direction = sp28.direction & 7; + TargetTileInFront(pokemon); + } + } + + if (entityInfo->volatileStatus == 1) { + SetMessageArgument(gAvailablePokemonNames, pokemon, 0); + SendMessage(pokemon, *gUnknown_80FC714); + r4 = FALSE; + } + else if (entityInfo->volatileStatus == 7) { + SetMessageArgument(gAvailablePokemonNames, pokemon, 0); + SendMessage(pokemon, *gUnknown_80FC718); + r4 = FALSE; + } + else { + if (entityInfo->nonVolatileStatus == 4) { + SetMessageArgument(gAvailablePokemonNames, pokemon, 0); + SendMessage(pokemon, *gUnknown_80FC6A8); + r4 = FALSE; + r8 = FALSE; + } + if (r8) { + if ((IVar5.id == ITEM_SWITCHER_ORB) || (IVar5.id == ITEM_POUNCE_ORB)) { + sub_8044DF0(pokemon, 0, 122); + move.moveFlags |= MOVE_FLAG_SET; + move.moveFlags |= MOVE_FLAG_ENABLED_FOR_AI; + move.PP = 10; + sub_8055FA0(pokemon, 0, IVar5.id, 0, 0, &move); + r4 = FALSE; + } + else + r4 = sub_8055FA0(pokemon, 0, IVar5.id, 0, 0, &move); + } + else + r4 = FALSE; + } + } + + if (EntityExists(pokemon)) { + if (r4) + sub_8044DF0(pokemon, 0, 122); + + sub_8071DA4(pokemon); + sub_806CE68(pokemon, 8); + + if (entityInfo->isTeamLeader) { + sub_804AC20(&pokemon->pos); + sub_807EC28(FALSE); + } + + sub_806A5B8(pokemon); + sub_8075900(pokemon, gDungeon->unk3A08); + } + else if (r4) + sub_8044D40(&act, 0); + + if (!sub_8044B28()) + sub_806A1B0(pokemon); +} +#else +NAKED +void sub_807CB3C(struct Entity *pokemon) +{ + asm_unified( + "push {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x30\n" + "\tadds r6, r0, 0\n" + "\tldr r7, [r6, 0x70]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x15\n" + "\tbl sub_8044D90\n" + "\tadds r2, r0, 0\n" + "\tldr r5, [r2]\n" + "\tldrb r1, [r2]\n" + "\tmovs r0, 0x8\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0807CB80\n" + "\tldr r0, _0807CB78\n" + "\tadds r1, r2, 0\n" + "\tbl sub_8045BF8\n" + "\tldr r0, _0807CB7C\n" + "\tldr r1, [r0]\n" + "\tadds r0, r6, 0\n" + "\tbl SendMessage\n" + "\tb _0807CD54\n" + "\t.align 2, 0\n" +"_0807CB78: .4byte gUnknown_202DE58\n" +"_0807CB7C: .4byte gUnknown_80FE3E8\n" +"_0807CB80:\n" + "\tadd r0, sp, 0x8\n" + "\tadds r1, r7, 0\n" + "\tadds r1, 0x44\n" + "\tldm r1!, {r2-r4}\n" + "\tstm r0!, {r2-r4}\n" + "\tldm r1!, {r2-r4}\n" + "\tstm r0!, {r2-r4}\n" + "\tbl IsBossFight\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0807CBAC\n" + "\tldr r0, _0807CBA8\n" + "\tldr r1, [r0]\n" + "\tadds r0, r6, 0\n" + "\tbl SendMessage\n" + "\tmovs r4, 0x1\n" + "\tb _0807CCDE\n" + "\t.align 2, 0\n" +"_0807CBA8: .4byte gPtrMysteriousPowerPreventedUseMessage\n" +"_0807CBAC:\n" + "\tmovs r0, 0x1\n" + "\tmov r8, r0\n" + "\tadd r4, sp, 0x20\n" + "\tlsls r5, 8\n" + "\tlsrs r0, r5, 24\n" + "\tbl GetItemMoveID\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r4, 0\n" + "\tbl InitPokemonMove\n" + "\tldrb r0, [r7, 0x7]\n" + "\tmov r10, r4\n" + "\tmov r9, r5\n" + "\tcmp r0, 0\n" + "\tbne _0807CC08\n" + "\tldr r1, _0807CC20\n" + "\tldr r0, [sp, 0x28]\n" + "\tands r0, r1\n" + "\tmov r1, r8\n" + "\torrs r0, r1\n" + "\tstr r0, [sp, 0x28]\n" + "\tmovs r0, 0xA\n" + "\tadd r4, sp, 0x28\n" + "\tstr r0, [r4, 0x4]\n" + "\tmovs r3, 0x8C\n" + "\tlsls r3, 1\n" + "\tadds r2, r7, r3\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r6, 0\n" + "\tbl AIConsiderMove\n" + "\tldrb r0, [r4]\n" + "\tcmp r0, 0\n" + "\tbeq _0807CC08\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmovs r0, 0x7\n" + "\tands r0, r1\n" + "\tadds r1, r7, 0\n" + "\tadds r1, 0x46\n" + "\tstrb r0, [r1]\n" + "\tadds r0, r6, 0\n" + "\tbl TargetTileInFront\n" +"_0807CC08:\n" + "\tadds r0, r7, 0\n" + "\tadds r0, 0xBC\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbne _0807CC2C\n" + "\tldr r0, _0807CC24\n" + "\tadds r1, r6, 0\n" + "\tmovs r2, 0\n" + "\tbl SetMessageArgument\n" + "\tldr r0, _0807CC28\n" + "\tb _0807CC3C\n" + "\t.align 2, 0\n" +"_0807CC20: .4byte 0xffffff00\n" +"_0807CC24: .4byte gAvailablePokemonNames\n" +"_0807CC28: .4byte gUnknown_80FC714\n" +"_0807CC2C:\n" + "\tcmp r0, 0x7\n" + "\tbne _0807CC50\n" + "\tldr r0, _0807CC48\n" + "\tadds r1, r6, 0\n" + "\tmovs r2, 0\n" + "\tbl SetMessageArgument\n" + "\tldr r0, _0807CC4C\n" +"_0807CC3C:\n" + "\tldr r1, [r0]\n" + "\tadds r0, r6, 0\n" + "\tbl SendMessage\n" + "\tb _0807CCDC\n" + "\t.align 2, 0\n" +"_0807CC48: .4byte gAvailablePokemonNames\n" +"_0807CC4C: .4byte gUnknown_80FC718\n" +"_0807CC50:\n" + "\tadds r0, r7, 0\n" + "\tadds r0, 0xAC\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x4\n" + "\tbne _0807CC72\n" + "\tldr r0, _0807CCB8\n" + "\tadds r1, r6, 0\n" + "\tmovs r2, 0\n" + "\tbl SetMessageArgument\n" + "\tldr r0, _0807CCBC\n" + "\tldr r1, [r0]\n" + "\tadds r0, r6, 0\n" + "\tbl SendMessage\n" + "\tmovs r4, 0\n" + "\tmov r8, r4\n" +"_0807CC72:\n" + "\tmov r0, r8\n" + "\tcmp r0, 0\n" + "\tbeq _0807CCDC\n" + "\tmov r5, r9\n" + "\tlsrs r0, r5, 24\n" + "\tcmp r0, 0xB6\n" + "\tbeq _0807CC84\n" + "\tcmp r0, 0xBF\n" + "\tbne _0807CCC0\n" +"_0807CC84:\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x7A\n" + "\tbl sub_8044DF0\n" + "\tmov r2, r10\n" + "\tldrb r1, [r2]\n" + "\tmovs r0, 0x8\n" + "\tmovs r4, 0\n" + "\torrs r0, r1\n" + "\tadd r3, sp, 0x20\n" + "\tmovs r1, 0x4\n" + "\torrs r0, r1\n" + "\tstrb r0, [r3]\n" + "\tmovs r0, 0xA\n" + "\tstrb r0, [r3, 0x4]\n" + "\tlsrs r2, r5, 24\n" + "\tstr r4, [sp]\n" + "\tstr r3, [sp, 0x4]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_8055FA0\n" + "\tb _0807CCDE\n" + "\t.align 2, 0\n" +"_0807CCB8: .4byte gAvailablePokemonNames\n" +"_0807CCBC: .4byte gUnknown_80FC6A8\n" +"_0807CCC0:\n" + "\tmov r3, r9\n" + "\tlsrs r2, r3, 24\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tmov r4, r10\n" + "\tstr r4, [sp, 0x4]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_8055FA0\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tb _0807CCDE\n" +"_0807CCDC:\n" + "\tmovs r4, 0\n" +"_0807CCDE:\n" + "\tadds r0, r6, 0\n" + "\tbl EntityExists\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0807CD38\n" + "\tcmp r4, 0\n" + "\tbeq _0807CCF8\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x7A\n" + "\tbl sub_8044DF0\n" +"_0807CCF8:\n" + "\tadds r0, r6, 0\n" + "\tbl sub_8071DA4\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0x8\n" + "\tbl sub_806CE68\n" + "\tldrb r0, [r7, 0x7]\n" + "\tcmp r0, 0\n" + "\tbeq _0807CD18\n" + "\tadds r0, r6, 0x4\n" + "\tbl sub_804AC20\n" + "\tmovs r0, 0\n" + "\tbl sub_807EC28\n" +"_0807CD18:\n" + "\tadds r0, r6, 0\n" + "\tbl sub_806A5B8\n" + "\tldr r0, _0807CD30\n" + "\tldr r0, [r0]\n" + "\tldr r1, _0807CD34\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tadds r0, r6, 0\n" + "\tbl sub_8075900\n" + "\tb _0807CD44\n" + "\t.align 2, 0\n" +"_0807CD30: .4byte gDungeon\n" +"_0807CD34: .4byte 0x00003a08\n" +"_0807CD38:\n" + "\tcmp r4, 0\n" + "\tbeq _0807CD44\n" + "\tadd r0, sp, 0x8\n" + "\tmovs r1, 0\n" + "\tbl sub_8044D40\n" +"_0807CD44:\n" + "\tbl sub_8044B28\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0807CD54\n" + "\tadds r0, r6, 0\n" + "\tbl sub_806A1B0\n" +"_0807CD54:\n" + "\tadd sp, 0x30\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif // NONMATCHING \ No newline at end of file