mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-02 16:53:46 -05:00
sub_809A8B8
This commit is contained in:
parent
ce53ecf468
commit
071c0f4e00
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user