mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-30 23:36:47 -05:00
sub_809B028
This commit is contained in:
parent
48a8b10c66
commit
061cee7a8e
|
|
@ -6,177 +6,6 @@
|
|||
.text
|
||||
|
||||
|
||||
|
||||
thumb_func_start sub_809B028
|
||||
sub_809B028:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x14
|
||||
mov r8, r0
|
||||
adds r7, r2, 0
|
||||
adds r6, r3, 0
|
||||
ldr r0, [sp, 0x2C]
|
||||
lsls r1, 24
|
||||
lsrs r5, r1, 24
|
||||
lsls r0, 16
|
||||
asrs r4, r0, 16
|
||||
ldr r1, _0809B084
|
||||
lsls r0, r6, 2
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
movs r1, 0
|
||||
bl xxx_script_textboxes_809A680
|
||||
ldr r0, _0809B088
|
||||
ldr r1, [r0]
|
||||
ldr r0, _0809B08C
|
||||
adds r2, r1, r0
|
||||
movs r0, 0x1
|
||||
str r0, [r2]
|
||||
movs r0, 0x83
|
||||
lsls r0, 3
|
||||
adds r2, r1, r0
|
||||
movs r0, 0
|
||||
str r0, [r2]
|
||||
ldr r2, _0809B090
|
||||
adds r0, r1, r2
|
||||
mov r2, r8
|
||||
str r2, [r0]
|
||||
movs r2, 0x84
|
||||
lsls r2, 3
|
||||
adds r0, r1, r2
|
||||
movs r2, 0x2
|
||||
str r2, [r0]
|
||||
ldr r0, _0809B094
|
||||
adds r1, r0
|
||||
cmp r5, 0
|
||||
beq _0809B098
|
||||
str r2, [r1]
|
||||
b _0809B09A
|
||||
.align 2, 0
|
||||
_0809B084: .4byte gUnknown_8116134
|
||||
_0809B088: .4byte gUnknown_3001B64
|
||||
_0809B08C: .4byte 0x00000414
|
||||
_0809B090: .4byte 0x0000041c
|
||||
_0809B094: .4byte 0x00000424
|
||||
_0809B098:
|
||||
str r5, [r1]
|
||||
_0809B09A:
|
||||
ldr r0, _0809B0D4
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x85
|
||||
lsls r1, 3
|
||||
adds r2, r0, r1
|
||||
movs r1, 0
|
||||
str r1, [r2]
|
||||
movs r2, 0x86
|
||||
lsls r2, 3
|
||||
adds r0, r2
|
||||
str r7, [r0]
|
||||
ldr r0, _0809B0D8
|
||||
lsls r2, r6, 1
|
||||
adds r0, r2, r0
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x80
|
||||
lsls r0, 1
|
||||
ands r0, r1
|
||||
adds r5, r2, 0
|
||||
cmp r0, 0
|
||||
beq _0809B0F6
|
||||
cmp r4, 0
|
||||
bge _0809B0E4
|
||||
ldr r0, _0809B0DC
|
||||
ldr r1, _0809B0E0
|
||||
bl strcpy
|
||||
b _0809B0F6
|
||||
.align 2, 0
|
||||
_0809B0D4: .4byte gUnknown_3001B64
|
||||
_0809B0D8: .4byte gUnknown_8116148
|
||||
_0809B0DC: .4byte gSpeakerNameBuffer
|
||||
_0809B0E0: .4byte gFormattedSpeechBubble
|
||||
_0809B0E4:
|
||||
ldr r0, _0809B134
|
||||
ldr r1, _0809B138
|
||||
lsls r2, r4, 2
|
||||
adds r2, r4
|
||||
lsls r2, 4
|
||||
ldr r3, _0809B13C
|
||||
adds r2, r3
|
||||
bl sprintfStatic
|
||||
_0809B0F6:
|
||||
adds r0, r4, 0
|
||||
bl sub_809AE3C
|
||||
ldr r4, _0809B140
|
||||
movs r1, 0
|
||||
str r1, [sp]
|
||||
movs r3, 0x4
|
||||
str r3, [sp, 0x4]
|
||||
str r1, [sp, 0x8]
|
||||
str r0, [sp, 0xC]
|
||||
ldr r0, _0809B144
|
||||
adds r0, r5, r0
|
||||
ldrh r2, [r0]
|
||||
movs r0, 0x80
|
||||
lsls r0, 1
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _0809B11C
|
||||
movs r1, 0xC
|
||||
_0809B11C:
|
||||
movs r0, 0x80
|
||||
lsls r0, 2
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _0809B128
|
||||
orrs r1, r3
|
||||
_0809B128:
|
||||
movs r0, 0x20
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _0809B148
|
||||
movs r0, 0x21
|
||||
b _0809B14A
|
||||
.align 2, 0
|
||||
_0809B134: .4byte gSpeakerNameBuffer
|
||||
_0809B138: .4byte gUnknown_8116188
|
||||
_0809B13C: .4byte gFormatBuffer_Names
|
||||
_0809B140: .4byte sub_809B428
|
||||
_0809B144: .4byte gUnknown_8116148
|
||||
_0809B148:
|
||||
movs r0, 0x1
|
||||
_0809B14A:
|
||||
orrs r0, r1
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
str r0, [sp, 0x10]
|
||||
ldr r0, [sp, 0x30]
|
||||
adds r1, r4, 0
|
||||
adds r2, r7, 0
|
||||
mov r3, r8
|
||||
bl CreateMenuDialogueBoxAndPortrait
|
||||
ldr r0, _0809B184
|
||||
ldr r0, [r0]
|
||||
ldr r1, _0809B188
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0809B176
|
||||
movs r0, 0x1
|
||||
bl sub_809A6E4
|
||||
_0809B176:
|
||||
add sp, 0x14
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0809B184: .4byte gUnknown_3001B64
|
||||
_0809B188: .4byte 0x00000424
|
||||
thumb_func_end sub_809B028
|
||||
|
||||
thumb_func_start sub_809B18C
|
||||
sub_809B18C:
|
||||
push {lr}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
#define GUARD_STR_3001B64_H
|
||||
|
||||
#include "file_system.h"
|
||||
#include "structs/menu.h"
|
||||
#include "string_format.h"
|
||||
|
||||
// Maybe Position32?
|
||||
struct unkStruct_3001B64_sub_sub
|
||||
|
|
@ -20,13 +22,7 @@ struct unkStruct_3001B64_sub
|
|||
s8 unk6;
|
||||
u8 unk7;
|
||||
struct unkStruct_3001B64_sub_sub unk8;
|
||||
OpenedFile *unk10;
|
||||
/* 0x14 */ u8 *faceData;
|
||||
u16 unk18;
|
||||
u16 unk1A;
|
||||
u8 unk1C;
|
||||
u8 unk1D;
|
||||
u8 unk1E;
|
||||
struct MonPortraitMsg monPortrait;
|
||||
/* 0x20 */ OpenedFile *faceFile;
|
||||
};
|
||||
|
||||
|
|
@ -40,7 +36,7 @@ struct unkStruct_3001B64
|
|||
u8 fill10[0x414 - 0x10];
|
||||
u32 unk414;
|
||||
u32 unk418;
|
||||
u32 unk41C;
|
||||
const MenuItem *unk41C;
|
||||
u32 unk420;
|
||||
u32 unk424;
|
||||
u32 unk428;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "text.h"
|
||||
#include "memory.h"
|
||||
#include "pokemon.h"
|
||||
#include "code_800D090.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "string_format.h"
|
||||
#include "structs/str_3001B64.h"
|
||||
|
|
@ -191,9 +192,9 @@ void sub_809A7EC(void)
|
|||
temp->unk7 = 0;
|
||||
temp->unk8.a0 = 0;
|
||||
temp->unk8.a4 = 0;
|
||||
temp->unk10 = 0;
|
||||
temp->faceData = 0;
|
||||
temp->unk1C = 0;
|
||||
temp->monPortrait.faceFile = NULL;
|
||||
temp->monPortrait.faceData = NULL;
|
||||
temp->monPortrait.spriteId = 0;
|
||||
temp->faceFile = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -211,9 +212,9 @@ void sub_809A83C(s16 param_1)
|
|||
temp->unk7 = 0;
|
||||
temp->unk8.a0 = 0;
|
||||
temp->unk8.a4 = 0;
|
||||
temp->unk10 = 0;
|
||||
temp->faceData = NULL;
|
||||
temp->unk1C = 0;
|
||||
temp->monPortrait.faceFile = NULL;
|
||||
temp->monPortrait.faceData = NULL;
|
||||
temp->monPortrait.spriteId = 0;
|
||||
strcpy(gFormatBuffer_Monsters[param_1], gInvalidityText);
|
||||
strcpy(gFormatBuffer_Names[param_1], gInvalidityText);
|
||||
if(temp->faceFile)
|
||||
|
|
@ -237,13 +238,13 @@ bool8 sub_809A8B8(s32 param_1, s32 param_2)
|
|||
s16 local_26;
|
||||
s32 iVar5 = (s16) param_1;
|
||||
s16 local_28 = (s16) param_2;
|
||||
struct unkStruct_3001B64_sub *puVar8 = &gUnknown_3001B64->unk43C[iVar5];
|
||||
struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[iVar5];
|
||||
u8 uVar9 = 1;
|
||||
u8 byte1 = 0;
|
||||
|
||||
if (puVar8->faceFile != NULL) {
|
||||
CloseFile(puVar8->faceFile);
|
||||
puVar8->faceFile = NULL;
|
||||
if (unkPtr->faceFile != NULL) {
|
||||
CloseFile(unkPtr->faceFile);
|
||||
unkPtr->faceFile = NULL;
|
||||
}
|
||||
|
||||
sub_80A7DDC(&local_28,&local_26);
|
||||
|
|
@ -319,35 +320,35 @@ bool8 sub_809A8B8(s32 param_1, s32 param_2)
|
|||
if (local_28 != -1) {
|
||||
s32 sVar3 = sub_80A7AE8(local_28);
|
||||
if (sVar3 >= 0) {
|
||||
puVar8->unk0 = local_28;
|
||||
puVar8->speciesID = sub_80A8BFC(sVar3);
|
||||
unkPtr->unk0 = local_28;
|
||||
unkPtr->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.a0 = 0;
|
||||
puVar8->unk8.a4 = 0;
|
||||
puVar8->unk10 = 0;
|
||||
puVar8->faceData = NULL;
|
||||
puVar8->unk1C = 0;
|
||||
unkPtr->unk4 = uVar9;
|
||||
unkPtr->unk5 = byte1;
|
||||
unkPtr->unk6 = 0xff;
|
||||
unkPtr->unk7 = 0;
|
||||
unkPtr->unk8.a0 = 0;
|
||||
unkPtr->unk8.a4 = 0;
|
||||
unkPtr->monPortrait.faceFile = NULL;
|
||||
unkPtr->monPortrait.faceData = NULL;
|
||||
unkPtr->monPortrait.spriteId = 0;
|
||||
ret = TRUE;
|
||||
}
|
||||
else if (local_26 != 0) {
|
||||
puVar8->unk0 = local_28;
|
||||
puVar8->speciesID = local_26;
|
||||
unkPtr->unk0 = local_28;
|
||||
unkPtr->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.a0 = 0;
|
||||
puVar8->unk8.a4 = 0;
|
||||
puVar8->unk10 = 0;
|
||||
puVar8->faceData = NULL;
|
||||
puVar8->unk1C = 0;
|
||||
unkPtr->unk4 = uVar9;
|
||||
unkPtr->unk5 = byte1;
|
||||
unkPtr->unk6 = 0xff;
|
||||
unkPtr->unk7 = 0;
|
||||
unkPtr->unk8.a0 = 0;
|
||||
unkPtr->unk8.a4 = 0;
|
||||
unkPtr->monPortrait.faceFile = NULL;
|
||||
unkPtr->monPortrait.faceData = NULL;
|
||||
unkPtr->monPortrait.spriteId = 0;
|
||||
ret = TRUE;
|
||||
}
|
||||
else {
|
||||
|
|
@ -415,9 +416,9 @@ bool8 sub_809AC18(s32 a0_, s32 a1_)
|
|||
|
||||
struct Unk8116040Struct
|
||||
{
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
u8 unk4;
|
||||
u16 x;
|
||||
u16 y;
|
||||
bool8 flip;
|
||||
};
|
||||
|
||||
extern const struct Unk8116040Struct gUnknown_8116040[];
|
||||
|
|
@ -440,15 +441,15 @@ bool8 sub_809AC7C(s32 a0_, s32 a1_, s32 a2_)
|
|||
unkPtr->unk8.a0 = 0;
|
||||
unkPtr->unk8.a4 = 0;
|
||||
}
|
||||
unkPtr->unk18 = gUnknown_8116040[unkPtr->unk7].unk0 + unkPtr->unk8.a0;
|
||||
unkPtr->unk1A = gUnknown_8116040[unkPtr->unk7].unk2 + unkPtr->unk8.a4;
|
||||
unkPtr->unk1D = gUnknown_8116040[unkPtr->unk7].unk4;
|
||||
unkPtr->unk1E = 0;
|
||||
unkPtr->monPortrait.pos.x = gUnknown_8116040[unkPtr->unk7].x + unkPtr->unk8.a0;
|
||||
unkPtr->monPortrait.pos.y = gUnknown_8116040[unkPtr->unk7].y + unkPtr->unk8.a4;
|
||||
unkPtr->monPortrait.flip = gUnknown_8116040[unkPtr->unk7].flip;
|
||||
unkPtr->monPortrait.unkE = 0;
|
||||
if (r5 == -2) {
|
||||
unkPtr->unk6 = r5;
|
||||
unkPtr->unk10 = 0;
|
||||
unkPtr->faceData = NULL;
|
||||
unkPtr->unk1C = 0;
|
||||
unkPtr->monPortrait.faceFile = NULL;
|
||||
unkPtr->monPortrait.faceData = NULL;
|
||||
unkPtr->monPortrait.spriteId = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -456,7 +457,7 @@ bool8 sub_809AC7C(s32 a0_, s32 a1_, s32 a2_)
|
|||
unkPtr->faceFile = OpenPokemonDialogueSpriteFile(unkPtr->speciesID);
|
||||
if (unkPtr->faceFile != NULL) {
|
||||
unkPtr->unk6 = r5;
|
||||
unkPtr->unk10 = unkPtr->faceFile;
|
||||
unkPtr->monPortrait.faceFile = unkPtr->faceFile;
|
||||
GetFileDataPtr(unkPtr->faceFile, 0);
|
||||
switch (unkPtr->unk0) {
|
||||
case 0x47:
|
||||
|
|
@ -466,35 +467,35 @@ bool8 sub_809AC7C(s32 a0_, s32 a1_, s32 a2_)
|
|||
}
|
||||
break;
|
||||
case 0x4D:
|
||||
if (unkPtr->unk1D != 0 && (r5 & 0xF) < 4) {
|
||||
unkPtr->unk1D = 0;
|
||||
if (unkPtr->monPortrait.flip && (r5 & 0xF) < 4) {
|
||||
unkPtr->monPortrait.flip = FALSE;
|
||||
r5 = (s8) (r5 + 4);
|
||||
r5 = (s8) (r5 | 0x40);
|
||||
}
|
||||
break;
|
||||
case 0x53:
|
||||
if (unkPtr->unk1D != 0 && (r5 & 0xF) < 1) {
|
||||
unkPtr->unk1D = 0;
|
||||
if (unkPtr->monPortrait.flip && (r5 & 0xF) < 1) {
|
||||
unkPtr->monPortrait.flip = FALSE;
|
||||
r5 = (s8) (r5 + 1);
|
||||
r5 = (s8) (r5 | 0x40);
|
||||
}
|
||||
break;
|
||||
case 0x73:
|
||||
if (unkPtr->unk1D != 0 && (r5 & 0xF) < 2) {
|
||||
unkPtr->unk1D = 0;
|
||||
if (unkPtr->monPortrait.flip && (r5 & 0xF) < 2) {
|
||||
unkPtr->monPortrait.flip = FALSE;
|
||||
r5 = (s8) (r5 + 2);
|
||||
r5 = (s8) (r5 | 0x40);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
unkPtr->faceData = unkPtr->faceFile->data;
|
||||
unkPtr->unk1C = r5 & 0xF;
|
||||
unkPtr->monPortrait.faceData = (void *) unkPtr->faceFile->data;
|
||||
unkPtr->monPortrait.spriteId = r5 & 0xF;
|
||||
}
|
||||
else {
|
||||
unkPtr->unk10 = 0;
|
||||
unkPtr->faceData = NULL;
|
||||
unkPtr->unk1C = 0;
|
||||
unkPtr->monPortrait.faceFile = NULL;
|
||||
unkPtr->monPortrait.faceData = NULL;
|
||||
unkPtr->monPortrait.spriteId = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -504,9 +505,9 @@ bool8 sub_809AC7C(s32 a0_, s32 a1_, s32 a2_)
|
|||
unkPtr->unk7 = 0;
|
||||
unkPtr->unk8.a0 = 0;
|
||||
unkPtr->unk8.a4 = 0;
|
||||
unkPtr->unk10 = 0;
|
||||
unkPtr->faceData = NULL;
|
||||
unkPtr->unk1C = 0;
|
||||
unkPtr->monPortrait.faceFile = NULL;
|
||||
unkPtr->monPortrait.faceData = NULL;
|
||||
unkPtr->monPortrait.spriteId = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -521,12 +522,12 @@ bool8 sub_809ADD8(s32 a0_, struct unkStruct_3001B64_sub_sub *a1)
|
|||
return FALSE;
|
||||
|
||||
unkPtr->unk8 = *a1;
|
||||
unkPtr->unk18 = gUnknown_8116040[unkPtr->unk7].unk0 + unkPtr->unk8.a0;
|
||||
unkPtr->unk1A = gUnknown_8116040[unkPtr->unk7].unk2 + unkPtr->unk8.a4;
|
||||
unkPtr->monPortrait.pos.x = gUnknown_8116040[unkPtr->unk7].x + unkPtr->unk8.a0;
|
||||
unkPtr->monPortrait.pos.y = gUnknown_8116040[unkPtr->unk7].y + unkPtr->unk8.a4;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
OpenedFile **sub_809AE3C(s32 a0_)
|
||||
struct MonPortraitMsg *sub_809AE3C(s32 a0_)
|
||||
{
|
||||
s32 a0 = (s16) a0_;
|
||||
|
||||
|
|
@ -535,8 +536,8 @@ OpenedFile **sub_809AE3C(s32 a0_)
|
|||
if (unkPtr->speciesID != MONSTER_NONE && unkPtr->unk6 == -1) {
|
||||
sub_809AC7C(a0, 0, 0);
|
||||
}
|
||||
if (unkPtr->unk10 != NULL) {
|
||||
return &unkPtr->unk10;
|
||||
if (unkPtr->monPortrait.faceFile != NULL) {
|
||||
return &unkPtr->monPortrait;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -631,3 +632,37 @@ u8 sub_809AFFC(u8 *a0)
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
extern const char gUnknown_8116188[];
|
||||
extern const char gFormattedSpeechBubble[];
|
||||
|
||||
bool8 sub_809B428(u8 *a0, s32 a1, u8 *a2);
|
||||
|
||||
void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text)
|
||||
{
|
||||
s32 a1 = (u8) a1_;
|
||||
s32 a4 = (s16) a4_;
|
||||
|
||||
xxx_script_textboxes_809A680(gUnknown_8116134[a3], 0);
|
||||
gUnknown_3001B64->unk414 = 1;
|
||||
gUnknown_3001B64->unk418 = 0;
|
||||
gUnknown_3001B64->unk41C = menuItems;
|
||||
gUnknown_3001B64->unk420 = 2;
|
||||
gUnknown_3001B64->unk424 = (a1 != 0) ? 2 : 0;
|
||||
gUnknown_3001B64->unk428 = 0;
|
||||
gUnknown_3001B64->unk430 = a2;
|
||||
if (gUnknown_8116148[a3] & 0x100) {
|
||||
if (a4 < 0) {
|
||||
strcpy(gSpeakerNameBuffer, gFormattedSpeechBubble);
|
||||
}
|
||||
else {
|
||||
sprintfStatic(gSpeakerNameBuffer, gUnknown_8116188, gFormatBuffer_Names[a4]);
|
||||
}
|
||||
}
|
||||
|
||||
CreateMenuDialogueBoxAndPortrait(text, sub_809B428, a2, menuItems, 0, 4, 0, sub_809AE3C(a4),
|
||||
((gUnknown_8116148[a3] & 0x100) ? 0xC : 0) | ((gUnknown_8116148[a3] & 0x200) ? 0x4 : 0) | ((gUnknown_8116148[a3] & 0x20) ? 0x21 : 1)); // What an ugly way to get flags lol
|
||||
if (gUnknown_3001B64->unk424 & 2) {
|
||||
sub_809A6E4(1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user