From 071c0f4e003c44e1f60dc7b7dc5ee7fe240878e3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 12 Feb 2025 11:04:43 +0100 Subject: [PATCH] sub_809A8B8 --- asm/code_809A560.s | 302 --------------------------------------------- src/code_809A560.c | 143 +++++++++++++++++++++ 2 files changed, 143 insertions(+), 302 deletions(-) diff --git a/asm/code_809A560.s b/asm/code_809A560.s index feb225a31..90a96f8ef 100644 --- a/asm/code_809A560.s +++ b/asm/code_809A560.s @@ -5,308 +5,6 @@ .text - thumb_func_start sub_809A8B8 -sub_809A8B8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 16 - asrs r0, 16 - mov r9, r0 - mov r0, sp - strh r1, [r0] - ldr r1, _0809A928 - mov r2, r9 - lsls r0, r2, 3 - add r0, r9 - lsls r0, 2 - ldr r2, _0809A92C - adds r0, r2 - ldr r1, [r1] - adds r7, r1, r0 - movs r0, 0x1 - mov r10, r0 - movs r1, 0 - str r1, [sp, 0x4] - ldr r0, [r7, 0x20] - cmp r0, 0 - beq _0809A8F6 - bl CloseFile - ldr r2, [sp, 0x4] - str r2, [r7, 0x20] -_0809A8F6: - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl sub_80A7DDC - mov r0, sp - ldrh r0, [r0] - subs r0, 0xA - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x13 - bhi _0809A9D6 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - bl sub_80A8D54 - adds r5, r0, 0 - cmp r5, 0 - bne _0809A930 - movs r2, 0 - mov r10, r2 - b _0809A9D6 - .align 2, 0 -_0809A928: .4byte gUnknown_3001B64 -_0809A92C: .4byte 0x0000043c -_0809A930: - bl sub_808D3BC - cmp r5, r0 - bne _0809A940 - mov r1, sp - movs r0, 0x21 - strh r0, [r1] - b _0809A9D6 -_0809A940: - bl sub_808D3F8 - cmp r5, r0 - bne _0809A950 - mov r1, sp - movs r0, 0x22 - strh r0, [r1] - b _0809A9D6 -_0809A950: - ldrb r0, [r5, 0x4] - subs r0, 0x43 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _0809A990 - movs r0, 0 - ldrsh r1, [r4, r0] - ldr r0, _0809A978 - cmp r1, r0 - beq _0809A9D6 - cmp r1, r0 - ble _0809A97C - adds r0, 0x16 - cmp r1, r0 - bgt _0809A98A - subs r0, 0x1 - cmp r1, r0 - blt _0809A98A - b _0809A9D6 - .align 2, 0 -_0809A978: .4byte 0x00000183 -_0809A97C: - movs r0, 0x82 - lsls r0, 1 - cmp r1, r0 - beq _0809A9D6 - adds r0, 0x2F - cmp r1, r0 - beq _0809A9D6 -_0809A98A: - movs r1, 0 - mov r10, r1 - b _0809A9D6 -_0809A990: - movs r2, 0 - ldrsh r1, [r4, r2] - movs r0, 0x87 - lsls r0, 1 - cmp r1, r0 - bgt _0809A9B0 - subs r0, 0x2 - cmp r1, r0 - bge _0809A9D6 - cmp r1, 0x90 - blt _0809A9D2 - cmp r1, 0x92 - ble _0809A9D6 - cmp r1, 0x96 - beq _0809A9D6 - b _0809A9D2 -_0809A9B0: - movs r0, 0xCF - lsls r0, 1 - cmp r1, r0 - bgt _0809A9CC - subs r0, 0x4 - cmp r1, r0 - bge _0809A9D6 - subs r0, 0x87 - cmp r1, r0 - bgt _0809A9D2 - subs r0, 0x1 - cmp r1, r0 - blt _0809A9D2 - b _0809A9D6 -_0809A9CC: - ldr r0, _0809A9F0 - cmp r1, r0 - beq _0809A9D6 -_0809A9D2: - movs r0, 0 - mov r10, r0 -_0809A9D6: - mov r0, sp - ldrh r0, [r0] - subs r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x21 - bhi _0809AA98 - lsls r0, 2 - ldr r1, _0809A9F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809A9F0: .4byte 0x000001a7 -_0809A9F4: .4byte _0809A9F8 - .align 2, 0 -_0809A9F8: - .4byte _0809AA80 - .4byte _0809AA80 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA80 - .4byte _0809AA80 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA98 - .4byte _0809AA80 - .4byte _0809AA80 -_0809AA80: - movs r1, 0 - ldrsh r0, [r4, r1] - bl sub_80A8CF0 - lsls r0, 24 - cmp r0, 0 - beq _0809AA94 - movs r2, 0x1 - str r2, [sp, 0x4] - b _0809AA98 -_0809AA94: - movs r0, 0 - mov r10, r0 -_0809AA98: - mov r0, sp - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809AB34 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - bl sub_80A7AE8 - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0 - blt _0809AACE - mov r0, sp - ldrh r0, [r0] - movs r2, 0 - mov r8, r2 - movs r6, 0 - strh r0, [r7] - adds r0, r1, 0 - bl sub_80A8BFC - strh r0, [r7, 0x2] - b _0809AAE6 -_0809AACE: - ldrh r1, [r4] - movs r2, 0 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _0809AB34 - mov r0, sp - ldrh r0, [r0] - movs r2, 0 - mov r8, r2 - movs r6, 0 - strh r0, [r7] - strh r1, [r7, 0x2] -_0809AAE6: - mov r0, r9 - lsls r4, r0, 2 - add r4, r9 - lsls r4, 4 - ldr r0, _0809AB28 - adds r0, r4, r0 - ldr r5, _0809AB2C - adds r1, r5, 0 - bl strcpy - ldr r0, _0809AB30 - adds r4, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - mov r1, r10 - strb r1, [r7, 0x4] - mov r2, sp - ldrb r2, [r2, 0x4] - strb r2, [r7, 0x5] - movs r0, 0xFF - strb r0, [r7, 0x6] - mov r0, r8 - strb r0, [r7, 0x7] - str r6, [r7, 0x8] - str r6, [r7, 0xC] - str r6, [r7, 0x10] - str r6, [r7, 0x14] - strb r0, [r7, 0x1C] - movs r0, 0x1 - b _0809AB3C - .align 2, 0 -_0809AB28: .4byte gFormatBuffer_Monsters -_0809AB2C: .4byte gUndefineText -_0809AB30: .4byte gFormatBuffer_Names -_0809AB34: - mov r0, r9 - bl sub_809A83C - movs r0, 0 -_0809AB3C: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809A8B8 - thumb_func_start sub_809AB4C sub_809AB4C: push {r4-r6,lr} diff --git a/src/code_809A560.c b/src/code_809A560.c index 14c17dbe8..43a49bf11 100644 --- a/src/code_809A560.c +++ b/src/code_809A560.c @@ -1,14 +1,17 @@ #include "global.h" #include "text.h" #include "memory.h" +#include "pokemon.h" #include "string_format.h" #include "structs/str_3001B64.h" +#include "constants/dungeon.h" IWRAM_INIT struct unkStruct_3001B64 *gUnknown_3001B64 = {NULL}; extern u16 gUnknown_20399DC; extern u16 gUnknown_20399DE; extern u8 gInvalidityText[]; +extern u8 gUndefineText[]; extern u8 ScriptPrintText_809B2B8(u32 *, u32, u32, u32); extern u32 IsTextboxOpen_809B40C(u32 *); @@ -222,3 +225,143 @@ void sub_809A83C(s16 param_1) temp->faceFile = NULL; } } + +PokemonStruct1 *sub_808D3BC(void); +PokemonStruct1 *sub_808D3F8(void); +PokemonStruct1 *sub_80A8D54(s16); +void sub_80A7DDC(s16 *, s16*); +u8 sub_80A8CF0(s16); +s16 sub_80A7AE8(s16); +s16 sub_80A8BFC(s32); + +bool8 sub_809A8B8(short param_1,u16 param_2) +{ + bool8 ret; + s16 local_26; + int iVar5 = param_1; + s16 local_28 = param_2; + struct unkStruct_3001B64_sub *puVar8 = &gUnknown_3001B64->unk43C[iVar5]; + u8 uVar9 = 1; + u8 byte1 = 0; + + if (puVar8->faceFile != NULL) { + CloseFile(puVar8->faceFile); + puVar8->faceFile = NULL; + } + + sub_80A7DDC(&local_28,&local_26); + if (local_28 >= 10 && local_28 <= 29) { + PokemonStruct1 *pPVar6 = sub_80A8D54(local_28); + if (pPVar6 == NULL) { + uVar9 = '\0'; + } + else if (pPVar6 == sub_808D3BC()) { + local_28 = 0x21; + } + else if (pPVar6 == sub_808D3F8()) { + local_28 = 0x22; + } + else if (pPVar6->dungeonLocation.id == DUNGEON_FROSTY_GROTTO_2 + || pPVar6->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 + || pPVar6->dungeonLocation.id == DUNGEON_POKEMON_SQUARE + || pPVar6->dungeonLocation.id == DUNGEON_POKEMON_SQUARE_2) + { + switch (local_26) { + case 0x104: + case 0x133: + case 0x183: + case 0x198: + case 0x199: + break; + default: + uVar9 = 0; + break; + } + } + else { + switch (local_26) { + case 0x90: + case 0x91: + case 0x92: + case 0x96: + case 0x10C: + case 0x10D: + case 0x10E: + case 0x112: + case 0x113: + case 0x19A: + case 0x19B: + case 0x19C: + case 0x19D: + case 0x19E: + case 0x1A7: + break; + default: + uVar9 = 0; + break; + } + } + } + + switch(local_28) { + case 1: + case 2: + case 6: + case 7: + case 0x21: + case 0x22: + if (sub_80A8CF0(local_26) != 0) { + byte1 = 0x1; + } + else { + uVar9 = 0; + } + break; + } + + if (local_28 != -1) { + s32 sVar3 = sub_80A7AE8(local_28); + if (sVar3 >= 0) { + puVar8->unk0 = local_28; + puVar8->speciesID = sub_80A8BFC(sVar3); + strcpy(gFormatBuffer_Monsters[iVar5], gUndefineText); + strcpy(gFormatBuffer_Names[iVar5], gUndefineText); + puVar8->unk4 = uVar9; + puVar8->unk5 = byte1; + puVar8->unk6 = 0xff; + puVar8->unk7 = 0; + puVar8->unk8 = 0; + puVar8->unkC = 0; + puVar8->unk10 = 0; + puVar8->faceData = NULL; + puVar8->unk1C = 0; + ret = TRUE; + } + else if (local_26 != 0) { + puVar8->unk0 = local_28; + puVar8->speciesID = local_26; + strcpy(gFormatBuffer_Monsters[iVar5], gUndefineText); + strcpy(gFormatBuffer_Names[iVar5], gUndefineText); + puVar8->unk4 = uVar9; + puVar8->unk5 = byte1; + puVar8->unk6 = 0xff; + puVar8->unk7 = 0; + puVar8->unk8 = 0; + puVar8->unkC = 0; + puVar8->unk10 = 0; + puVar8->faceData = NULL; + puVar8->unk1C = 0; + ret = TRUE; + } + else { + sub_809A83C(iVar5); + ret = FALSE; + } + } + else { + sub_809A83C(iVar5); + ret = FALSE; + } + + return ret; +}