sub_809A8B8

This commit is contained in:
DizzyEggg 2025-02-12 11:04:43 +01:00
parent ce53ecf468
commit 071c0f4e00
2 changed files with 143 additions and 302 deletions

View File

@ -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}

View File

@ -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;
}