mirror of
https://github.com/pret/colosseum-mb.git
synced 2026-04-26 00:37:33 -05:00
Decompile sub_02008A84
This commit is contained in:
parent
7b99d0c7a8
commit
8c58dc6bf6
2
Makefile
2
Makefile
|
|
@ -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: %
|
||||
|
|
|
|||
13
fixrom.py
13
fixrom.py
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user