Decompile sub_02008A84

This commit is contained in:
PikalaxALT 2021-04-10 18:26:24 -04:00
parent 7b99d0c7a8
commit 8c58dc6bf6
4 changed files with 120 additions and 195 deletions

View File

@ -127,7 +127,7 @@ $(ELF): $(OBJ_DIR)/ld_script.ld $(ALL_OBJS)
$(ROM): $(ELF)
$(OBJCOPY) -O binary --gap-fill $(GAPFILL) --pad-to 0x2028000 $< $@
$(GBAFIX) $@ --silent
@# Hack to get the ROM checksum to match
@# Hack to get the ROM header complement to match
$(PYTHON) fixrom.py $@
%.lz: %

View File

@ -1,7 +1,6 @@
#!/usr/bin/python3
import sys
fp = open(sys.argv[1], 'r+b')
fp.seek(0xbd)
fp.write(b'\xf0')
fp.close()
#!/usr/bin/python3
import sys
with open(sys.argv[1], 'r+b') as fp:
fp.seek(0xbd)
fp.write(b'\xf0')

View File

@ -3,187 +3,6 @@
.text
.syntax unified
thumb_func_start sub_02008A84
sub_02008A84: @ 0x02008A84
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r6, r0, #0
ldr r1, =gUnknown_02020F58
movs r2, #0x80
lsls r2, r2, #3
adds r0, r1, r2
ldrb r0, [r0]
mov ip, r0
lsls r0, r0, #3
adds r7, r0, r1
ldr r4, [r6, #0xc]
ldr r2, [r4]
ldr r0, =0x0000FFFF
mov sl, r1
cmp r2, r0
bne _02008AAE
b _02008BDC
_02008AAE:
mov r0, ip
cmp r0, #0x80
bne _02008AB6
b _02008BE6
_02008AB6:
movs r2, #4
ldrsh r1, [r4, r2]
movs r2, #8
ldrsh r0, [r6, r2]
adds r5, r1, r0
cmp r5, #0xef
ble _02008AC6
b _02008BD0
_02008AC6:
movs r0, #6
ldrsh r1, [r4, r0]
movs r2, #0xa
ldrsh r0, [r6, r2]
adds r3, r1, r0
cmp r3, #0x9f
ble _02008AD6
b _02008BD0
_02008AD6:
ldr r0, [r4]
movs r1, #0xc0
lsls r1, r1, #8
ands r1, r0
lsrs r1, r1, #0xc
lsrs r2, r0, #0x1e
adds r2, r1, r2
mov r8, r0
cmp r2, #0xb
bhi _02008B40
lsls r0, r2, #2
ldr r1, =_02008B00
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
.pool
_02008B00: @ jump table
.4byte _02008B30 @ case 0
.4byte _02008B34 @ case 1
.4byte _02008B38 @ case 2
.4byte _02008B3C @ case 3
.4byte _02008B34 @ case 4
.4byte _02008B38 @ case 5
.4byte _02008B38 @ case 6
.4byte _02008B3C @ case 7
.4byte _02008B30 @ case 8
.4byte _02008B30 @ case 9
.4byte _02008B34 @ case 10
.4byte _02008B38 @ case 11
_02008B30:
movs r0, #8
b _02008B42
_02008B34:
movs r0, #0x10
b _02008B42
_02008B38:
movs r0, #0x20
b _02008B42
_02008B3C:
movs r0, #0x40
b _02008B42
_02008B40:
movs r0, #0
_02008B42:
adds r0, r5, r0
cmp r0, #0
blt _02008BD0
cmp r2, #0xb
bhi _02008BA0
lsls r0, r2, #2
ldr r1, =_02008B5C
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
.pool
_02008B5C: @ jump table
.4byte _02008B8C @ case 0
.4byte _02008B90 @ case 1
.4byte _02008B96 @ case 2
.4byte _02008B9C @ case 3
.4byte _02008B8C @ case 4
.4byte _02008B8C @ case 5
.4byte _02008B90 @ case 6
.4byte _02008B96 @ case 7
.4byte _02008B90 @ case 8
.4byte _02008B96 @ case 9
.4byte _02008B96 @ case 10
.4byte _02008B9C @ case 11
_02008B8C:
movs r0, #8
b _02008B9E
_02008B90:
movs r1, #0x10
mov sb, r1
b _02008BA0
_02008B96:
movs r2, #0x20
mov sb, r2
b _02008BA0
_02008B9C:
movs r0, #0x40
_02008B9E:
mov sb, r0
_02008BA0:
mov r1, sb
adds r0, r3, r1
cmp r0, #0
blt _02008BD0
ldr r0, =0x000001FF
ands r5, r0
movs r0, #0xff
ands r3, r0
lsls r0, r5, #0x10
mov r2, r8
orrs r0, r2
orrs r3, r0
str r3, [r7]
ldr r0, =0x00000FFF
ldrh r1, [r4, #8]
ands r0, r1
ldrh r2, [r6, #4]
orrs r0, r2
ldrh r1, [r6, #6]
adds r0, r1, r0
strh r0, [r7, #4]
adds r7, #8
movs r2, #1
add ip, r2
_02008BD0:
adds r4, #0xc
ldr r1, [r4]
ldr r0, =0x0000FFFF
cmp r1, r0
beq _02008BDC
b _02008AAE
_02008BDC:
movs r0, #0x80
lsls r0, r0, #3
add r0, sl
mov r1, ip
strb r1, [r0]
_02008BE6:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
.pool
thumb_func_start sub_02008C00
sub_02008C00: @ 0x02008C00
push {r4, r5, lr}

View File

@ -59,6 +59,14 @@ struct RomInfo
/*0xFC*/ const u8 *moveDescriptions;
};
struct UnkStruct_02020CD0_sub
{
u32 unk_0;
struct Coords16 pos;
u16 unk_8;
u16 unk_a;
};
struct UnkStruct_02020CD0
{
u8 unk0;
@ -66,9 +74,8 @@ struct UnkStruct_02020CD0
u8 unk2;
u16 unk4;
u16 unk6;
u16 unk8;
u16 unkA;
u32 unkC;
struct Coords16 unk8;
const struct UnkStruct_02020CD0_sub * unkC;
void (*unk10)(struct UnkStruct_02020CD0 *);
void * unk14[4];
};
@ -329,15 +336,15 @@ void sub_020089BC(struct UnkStruct_02020CD0 * a0, struct UnkStruct_02020CD0 * a1
a0->unk1 = gUnknown_02020CD0[a0->unk1].unk0 = a1 - gUnknown_02020CD0;
}
struct UnkStruct_02020CD0 * sub_02008A10(s32 a, s32 b, s32 c)
struct UnkStruct_02020CD0 * sub_02008A10(s32 a, s32 b, const struct UnkStruct_02020CD0_sub * c)
{
s32 i;
struct UnkStruct_02020CD0 * r7 = &gUnknown_02020CD0[gUnknown_02020CD0[0].unk1];
gUnknown_02020CD0[r7->unk0].unk1 = r7->unk1;
gUnknown_02020CD0[r7->unk1].unk0 = r7->unk0;
sub_020089BC(&gUnknown_02020CD0[1], r7);
r7->unk8 = a;
r7->unkA = b;
r7->unk8.x = a;
r7->unk8.y = b;
r7->unkC = c;
r7->unk2 = 0;
r7->unk4 = 0;
@ -348,6 +355,106 @@ struct UnkStruct_02020CD0 * sub_02008A10(s32 a, s32 b, s32 c)
return r7;
}
struct UnkStruct_02020F58
{
struct OamData unk_0000[0x80];
u8 unk_4000;
};
extern struct UnkStruct_02020F58 gUnknown_02020F58;
void sub_02008A84(struct UnkStruct_02020CD0 * ptr)
{
u32 ip;
struct OamData * r7;
const struct UnkStruct_02020CD0_sub * r4;
s32 r0;
s32 r5;
s32 r3;
s32 sb;
u32 r2;
u32 r8;
ip = gUnknown_02020F58.unk_4000;
r7 = &gUnknown_02020F58.unk_0000[ip];
r4 = ptr->unkC;
while (r4->unk_0 != 0xFFFF)
{
if (ip == 0x80)
return;
if ((r5 = r4->pos.x + ptr->unk8.x) < 0xF0 && (r3 = r4->pos.y + ptr->unk8.y) < 0xA0)
{
r2 = ((r4->unk_0 & 0xC000) >> 12) + (r4->unk_0 >> 30);
r8 = r4->unk_0;
switch (r2)
{
case 0:
case 8:
case 9:
r0 = 8;
break;
case 1:
case 4:
case 10:
r0 = 16;
break;
case 2:
case 5:
case 6:
case 11:
r0 = 32;
break;;
case 3:
case 7:
r0 = 64;
break;
default:
r0 = 0;
break;
}
if (r5 + r0 >= 0)
{
switch (r2)
{
case 0:
case 4:
case 5:
sb = 8;
break;
case 1:
case 6:
case 8:
sb = 16;
break;
case 2:
case 7:
case 9:
case 10:
sb = 32;
break;
case 3:
case 11:
sb = 64;
break;
}
if (r3 + sb >= 0)
{
r5 &= 0x1FF;
r3 &= 0xFF;
*(u32 *)r7 = r3 | ((r5 << 16) | r8);
*((u16 *)r7 + 2) = ((r4->unk_8 & 0xFFF) | ptr->unk4) + ptr->unk6;
r7++;
ip++;
}
}
}
r4++;
}
gUnknown_02020F58.unk_4000 = ip;
}
asm(".section .text.020092C0");
void sub_020092A4(u16 a0, u16 a1)