sub_800E52C

This commit is contained in:
DizzyEggg
2025-07-08 22:25:14 +02:00
parent 384283db66
commit 1e2c4a2a8a
5 changed files with 148 additions and 288 deletions

View File

@@ -6,259 +6,6 @@
.text
thumb_func_start sub_800E49C
sub_800E49C:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x50
adds r7, r1, 0
mov r8, r2
lsls r0, 24
lsrs r0, 24
lsls r3, 24
lsrs r6, r3, 24
cmp r6, 0
beq _0800E4BA
bl sub_800ECF8
b _0800E4BE
_0800E4BA:
bl sub_800ED0C
_0800E4BE:
lsls r0, 16
asrs r4, r0, 16
adds r0, r4, 0
bl sub_800E700
adds r5, r0, 0
str r4, [sp, 0x28]
movs r1, 0
str r1, [sp, 0x2C]
movs r4, 0x1
negs r4, r4
str r4, [sp, 0x30]
ldr r0, [r7]
str r0, [sp, 0x34]
str r1, [sp, 0x38]
str r4, [sp, 0x3C]
str r1, [sp, 0x40]
add r1, sp, 0x44
ldr r0, _0800E508
ldm r0!, {r2,r3,r7}
stm r1!, {r2,r3,r7}
add r1, sp, 0x28
mov r0, sp
movs r2, 0x28
bl memcpy
ldr r0, [sp, 0x68]
str r0, [sp, 0x18]
cmp r6, 0
beq _0800E50C
cmp r5, r4
beq _0800E516
str r5, [sp, 0x14]
lsls r0, r5, 2
add r0, r8
ldr r0, [r0]
b _0800E514
.align 2, 0
_0800E508: .4byte gUnknown_80B9C60
_0800E50C:
movs r0, 0x3
str r0, [sp, 0x14]
mov r1, r8
ldr r0, [r1, 0xC]
_0800E514:
str r0, [sp, 0x10]
_0800E516:
movs r0, 0x4
mov r1, sp
bl sub_800E208
add sp, 0x50
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_800E49C
thumb_func_start sub_800E52C
sub_800E52C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x1B0
adds r7, r0, 0
ldrh r0, [r7]
cmp r0, 0x52
bne _0800E628
mov r1, sp
ldr r0, _0800E618
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r4,r5}
stm r1!, {r4,r5}
movs r0, 0
mov r10, r0
mov r9, r0
mov r8, sp
add r6, sp, 0x20
adds r4, r6, 0
_0800E55C:
ldrh r0, [r7]
bl sub_800ECB8
movs r1, 0x2
ldrsh r0, [r0, r1]
str r0, [r4]
ldr r0, [r7, 0x10]
str r0, [r4, 0x4]
ldr r0, [r7, 0xC]
str r0, [r4, 0x8]
ldr r0, [r7, 0x4]
str r0, [r4, 0xC]
ldrh r0, [r4, 0xE]
adds r0, 0x40
strh r0, [r4, 0xE]
ldr r0, [r7, 0x8]
str r0, [r4, 0x10]
mov r2, r8
ldrh r0, [r2]
ldrh r3, [r4, 0x10]
adds r0, r3
strh r0, [r4, 0x10]
ldrh r0, [r4, 0x12]
subs r0, 0x40
ldrh r5, [r2, 0x2]
adds r0, r5
strh r0, [r4, 0x12]
movs r1, 0x2
ldrsh r0, [r7, r1]
ldrh r1, [r7]
bl sub_800E750
str r0, [r4, 0x14]
ldr r0, _0800E61C
str r0, [r4, 0x18]
adds r1, r6, 0
adds r1, 0x1C
ldr r0, _0800E620
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
movs r0, 0x1
adds r1, r6, 0
bl sub_800E208
adds r5, r0, 0
bl sub_800E2C0
adds r1, r0, 0
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _0800E5D4
ldr r2, _0800E624
movs r0, 0xD0
muls r1, r0
ldr r0, [r2]
adds r0, r1
adds r0, 0xCC
movs r1, 0x6
strh r1, [r0]
_0800E5D4:
mov r0, r9
cmp r0, 0
bne _0800E5DC
mov r10, r5
_0800E5DC:
movs r1, 0x4
add r8, r1
adds r4, 0x28
adds r6, 0x28
movs r2, 0x1
add r9, r2
mov r3, r9
cmp r3, 0x7
ble _0800E55C
movs r4, 0x6
mov r9, r4
_0800E5F2:
ldrh r0, [r7]
bl sub_800ECB8
movs r5, 0x2
ldrsh r0, [r0, r5]
bl sub_800ECA4
ldr r0, [r0, 0x4]
bl sub_800F15C
movs r0, 0x1
negs r0, r0
add r9, r0
mov r1, r9
cmp r1, 0
bge _0800E5F2
mov r0, r10
b _0800E67E
.align 2, 0
_0800E618: .4byte gUnknown_80B9C7C
_0800E61C: .4byte 0x0000ffff
_0800E620: .4byte gUnknown_80B9C60
_0800E624: .4byte gUnknown_203B0CC
_0800E628:
add r6, sp, 0x160
add r5, sp, 0x188
ldrh r0, [r7]
bl sub_800ECB8
movs r2, 0x2
ldrsh r0, [r0, r2]
str r0, [r5]
add r1, sp, 0x18C
ldr r0, [r7, 0x10]
str r0, [r1]
add r1, sp, 0x190
ldr r0, [r7, 0xC]
str r0, [r1]
add r1, sp, 0x194
ldr r0, [r7, 0x4]
str r0, [r1]
add r1, sp, 0x198
ldr r0, [r7, 0x8]
str r0, [r1]
add r4, sp, 0x19C
movs r3, 0x2
ldrsh r0, [r7, r3]
ldrh r1, [r7]
bl sub_800E750
str r0, [r4]
add r1, sp, 0x1A0
ldr r0, _0800E690
str r0, [r1]
add r1, sp, 0x1A4
ldr r0, _0800E694
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
adds r0, r6, 0
adds r1, r5, 0
movs r2, 0x28
bl memcpy
movs r0, 0x1
adds r1, r6, 0
bl sub_800E208
_0800E67E:
add sp, 0x1B0
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0800E690: .4byte 0x0000ffff
_0800E694: .4byte gUnknown_80B9C60
thumb_func_end sub_800E52C
thumb_func_start sub_800E698
sub_800E698:
push {r4,r5,lr}

35
data/data_80B9BB0.s Normal file
View File

@@ -0,0 +1,35 @@
.section .rodata
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "MultiSio010918\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.global gUnknown_80B9C60
gUnknown_80B9C60: @ 80B9C60
.byte 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFF, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
gefob001_string:: @ 80B9C6C
.string "efob001\0"
.align 2,0
gefob000_string:: @ 80B9C74
.string "efob000\0"
.align 2,0

View File

@@ -2,41 +2,6 @@
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "MultiSio010918\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.global gUnknown_80B9C60
gUnknown_80B9C60: @ 80B9C60
.byte 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFF, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
gefob001_string:: @ 80B9C6C
.string "efob001\0"
.align 2,0
gefob000_string:: @ 80B9C74
.string "efob000\0"
.align 2,0
.global gUnknown_80B9C7C
gUnknown_80B9C7C: @ 80B9C7C
.byte 0xc0, 0xff, 0x0a, 0x00, 0xb8, 0xff, 0xe4, 0xff, 0xc4, 0xff, 0x32, 0x00, 0xbf, 0xff, 0xc4, 0xff, 0xb0, 0xff, 0x18, 0x00, 0xb0, 0xff, 0x46, 0x00, 0x9c, 0xff, 0x20, 0x00, 0x88, 0xff, 0xd0, 0xff
.global gUnknown_80B9C9C
gUnknown_80B9C9C: @ 80B9C9C
.byte 0x01, 0x00, 0x00, 0x00

View File

@@ -452,6 +452,8 @@ SECTIONS {
data/pksdir_8.o(.rodata);
src/main.o(.rodata);
src/reg_control.o(.rodata);
data/data_80B9BB0.o(.rodata);
src/code_800DAC0.o(.rodata)
data/data_80B9BB8_2.o(.rodata);
src/code_800F034.o(.rodata);
src/dungeon_pokemon_sprites.o(.rodata);

View File

@@ -719,4 +719,115 @@ s32 sub_800E448(u8 a0, DungeonPos *pos)
return sub_800E208(3, &sp);
}
s32 sub_800E700(s32);
s32 sub_800E49C(u8 a0, DungeonPos *pos, DungeonPos posArray[4], bool8 a3, s32 a4)
{
s32 r4 = a3 ? sub_800ECF8(a0) : sub_800ED0C(a0);
s32 r5 = sub_800E700(r4);
struct unkStruct_203B0CC_xC sp = {
.unkC = r4,
.unk10 = 0,
.unk14 = -1,
.unk18 = *pos,
.unk1c = {0, 0},
.unk20 = -1,
.unk24 = 0,
.spriteMasks = gUnknown_80B9C60,
};
sp.unk24 = a4;
if (a3) {
if (r5 != -1) {
sp.unk20 = r5;
sp.unk1c = posArray[r5];
}
}
else {
sp.unk20 = 3;
sp.unk1c = posArray[3];
}
return sub_800E208(4, &sp);
}
// TODO: MERGE WITH UnkStruct_sub_800E308_1
struct UnkStruct_8040094
{
u16 unk0;
s16 unk2;
DungeonPos unk4;
DungeonPos unk8;
s32 unkC;
s32 unk10;
};
void sub_800F15C(s32 effectID);
s32 sub_800E52C(struct UnkStruct_8040094 *a0)
{
s32 i;
if (a0->unk0 == 0x52) {
DungeonPos positions[8] = {
{ -64, 10 },
{ -72, -28 },
{ -60, 50 },
{ -65, -60 },
{ -80, 24 },
{ -80, 70 },
{ -100, 32 },
{ -120, -48 },
};
struct unkStruct_203B0CC_xC sp[8];
s32 ret = 0;
for (i = 0; i < 8; i++) {
s32 possibleRet;
s32 id;
struct unkStruct_203B0CC_xC *curr = &sp[i];
curr->unkC = sub_800ECB8(a0->unk0)->unk2;
curr->unk10 = a0->unk10;
curr->unk14 = a0->unkC;
curr->unk18 = a0->unk4;
curr->unk18.y += 64;
curr->unk1c = a0->unk8;
curr->unk1c.x += positions[i].x;
curr->unk1c.y += positions[i].y - 64;
curr->unk20 = sub_800E750(a0->unk2, a0->unk0);
curr->unk24 = 0xFFFF;
curr->spriteMasks = gUnknown_80B9C60;
possibleRet = sub_800E208(1, curr);
id = sub_800E2C0(possibleRet);
if (id != -1) {
struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[id];
ptr->unkCC.x = 6;
}
if (i == 0) {
ret = possibleRet;
}
}
for (i = 0; i < 7; i++) {
unkStruct_80B9CC4 *ptr2 = sub_800ECA4(sub_800ECB8(a0->unk0)->unk2);
sub_800F15C(ptr2->effectId);
}
return ret;
}
else {
struct unkStruct_203B0CC_xC sp = {
.unkC = sub_800ECB8(a0->unk0)->unk2,
.unk10 = a0->unk10,
.unk14 = a0->unkC,
.unk18 = a0->unk4,
.unk1c = a0->unk8,
.unk20 = sub_800E750(a0->unk2, a0->unk0),
.unk24 = 0xFFFF,
.spriteMasks = gUnknown_80B9C60,
};
return sub_800E208(1, &sp);
}
}
//