mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-04 10:20:01 +01:00
Decompiled two difficult functions
Had do use a lot of `asm` directives for sub_81C8A28 to match.
This commit is contained in:
parent
8cea949e6d
commit
bdc6ed1a98
254
asm/pokenav.s
254
asm/pokenav.s
@ -5,260 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_81C8958
|
||||
sub_81C8958: @ 81C8958
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
movs r0, 0x11
|
||||
bl GetSubstructPtr
|
||||
adds r4, r0, 0
|
||||
bl IsDma3ManagerBusyWithBgCopy
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _081C8972
|
||||
movs r0, 0x2
|
||||
b _081C8A22
|
||||
_081C8972:
|
||||
cmp r5, 0x7
|
||||
bhi _081C8A1C
|
||||
lsls r0, r5, 2
|
||||
ldr r1, =_081C8984
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.pool
|
||||
.align 2, 0
|
||||
_081C8984:
|
||||
.4byte _081C89A4
|
||||
.4byte _081C89B4
|
||||
.4byte _081C89BE
|
||||
.4byte _081C89D0
|
||||
.4byte _081C89DA
|
||||
.4byte _081C89EC
|
||||
.4byte _081C89F6
|
||||
.4byte _081C8A08
|
||||
_081C89A4:
|
||||
ldr r1, =0x00000888
|
||||
adds r0, r4, r1
|
||||
adds r1, r4, 0
|
||||
bl sub_81C8CB4
|
||||
b _081C8A20
|
||||
.pool
|
||||
_081C89B4:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_81C8DBC
|
||||
b _081C8A20
|
||||
_081C89BE:
|
||||
ldr r1, =0x00000888
|
||||
adds r0, r4, r1
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_81C8E54
|
||||
b _081C8A20
|
||||
.pool
|
||||
_081C89D0:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl sub_81C8DBC
|
||||
b _081C8A20
|
||||
_081C89DA:
|
||||
ldr r1, =0x00000888
|
||||
adds r0, r4, r1
|
||||
adds r1, r4, 0
|
||||
movs r2, 0x1
|
||||
bl sub_81C8E54
|
||||
b _081C8A20
|
||||
.pool
|
||||
_081C89EC:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x2
|
||||
bl sub_81C8DBC
|
||||
b _081C8A20
|
||||
_081C89F6:
|
||||
ldr r1, =0x00000888
|
||||
adds r0, r4, r1
|
||||
adds r1, r4, 0
|
||||
movs r2, 0x2
|
||||
bl sub_81C8E54
|
||||
b _081C8A20
|
||||
.pool
|
||||
_081C8A08:
|
||||
ldr r1, =0x00000888
|
||||
adds r0, r4, r1
|
||||
adds r1, r4, 0
|
||||
movs r2, 0x3
|
||||
bl sub_81C8E54
|
||||
b _081C8A20
|
||||
.pool
|
||||
_081C8A1C:
|
||||
movs r0, 0x4
|
||||
b _081C8A22
|
||||
_081C8A20:
|
||||
movs r0, 0
|
||||
_081C8A22:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_81C8958
|
||||
|
||||
thumb_func_start sub_81C8A28
|
||||
sub_81C8A28: @ 81C8A28
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x8
|
||||
adds r5, r0, 0
|
||||
bl IsDma3ManagerBusyWithBgCopy
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _081C8AA6
|
||||
movs r0, 0x11
|
||||
bl GetSubstructPtr
|
||||
adds r4, r0, 0
|
||||
ldr r0, =0x00000888
|
||||
adds r6, r4, r0
|
||||
adds r2, r4, 0
|
||||
cmp r5, 0x6
|
||||
bls _081C8A4C
|
||||
b _081C8B64
|
||||
_081C8A4C:
|
||||
lsls r0, r5, 2
|
||||
ldr r1, =_081C8A60
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.pool
|
||||
.align 2, 0
|
||||
_081C8A60:
|
||||
.4byte _081C8A7C
|
||||
.4byte _081C8A88
|
||||
.4byte _081C8AE8
|
||||
.4byte _081C8AFC
|
||||
.4byte _081C8B14
|
||||
.4byte _081C8B34
|
||||
.4byte _081C8B5C
|
||||
_081C8A7C:
|
||||
adds r0, r6, 0
|
||||
adds r1, r2, 0
|
||||
bl sub_81C8D4C
|
||||
movs r0, 0
|
||||
b _081C8B66
|
||||
_081C8A88:
|
||||
ldr r1, =0x0000089c
|
||||
adds r7, r4, r1
|
||||
ldr r0, [r7]
|
||||
adds r1, r0, 0x1
|
||||
str r1, [r7]
|
||||
movs r3, 0x89
|
||||
lsls r3, 4
|
||||
adds r0, r4, r3
|
||||
ldrh r0, [r0]
|
||||
cmp r1, r0
|
||||
bge _081C8AB0
|
||||
adds r0, r2, 0
|
||||
movs r2, 0x1
|
||||
bl sub_81C8B70
|
||||
_081C8AA6:
|
||||
movs r0, 0x2
|
||||
b _081C8B66
|
||||
.pool
|
||||
_081C8AB0:
|
||||
movs r0, 0
|
||||
str r0, [r7]
|
||||
ldrh r0, [r6, 0x2]
|
||||
ldrh r1, [r6, 0x8]
|
||||
cmp r0, r1
|
||||
bhi _081C8AC6
|
||||
ldrh r0, [r6]
|
||||
cmp r0, 0
|
||||
beq _081C8B52
|
||||
adds r4, r0, 0
|
||||
b _081C8AD4
|
||||
_081C8AC6:
|
||||
ldrh r1, [r6]
|
||||
ldrh r0, [r6, 0x8]
|
||||
adds r4, r1, r0
|
||||
ldrh r1, [r6, 0x2]
|
||||
cmp r4, r1
|
||||
ble _081C8B52
|
||||
subs r4, r1
|
||||
_081C8AD4:
|
||||
negs r5, r4
|
||||
adds r0, r2, 0
|
||||
adds r1, r5, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_81C8B70
|
||||
strh r4, [r6, 0x6]
|
||||
str r5, [r7]
|
||||
movs r0, 0
|
||||
b _081C8B66
|
||||
_081C8AE8:
|
||||
ldr r2, =0x0000089c
|
||||
adds r0, r4, r2
|
||||
ldr r0, [r0]
|
||||
movs r1, 0
|
||||
bl sub_81C84E8
|
||||
movs r0, 0
|
||||
b _081C8B66
|
||||
.pool
|
||||
_081C8AFC:
|
||||
bl sub_81C8630
|
||||
adds r1, r0, 0
|
||||
cmp r1, 0
|
||||
bne _081C8AA6
|
||||
ldr r3, =0x0000089c
|
||||
adds r0, r4, r3
|
||||
str r1, [r0]
|
||||
_081C8B0C:
|
||||
movs r0, 0x1
|
||||
b _081C8B66
|
||||
.pool
|
||||
_081C8B14:
|
||||
ldr r0, [r6, 0x10]
|
||||
ldrh r1, [r6]
|
||||
ldr r3, =0x0000089c
|
||||
adds r2, r4, r3
|
||||
ldr r2, [r2]
|
||||
adds r1, r2
|
||||
ldr r3, [r6, 0xC]
|
||||
str r2, [sp]
|
||||
str r4, [sp, 0x4]
|
||||
movs r2, 0x1
|
||||
bl sub_81C83AC
|
||||
movs r0, 0
|
||||
b _081C8B66
|
||||
.pool
|
||||
_081C8B34:
|
||||
bl sub_81C83E0
|
||||
cmp r0, 0
|
||||
bne _081C8AA6
|
||||
ldr r0, =0x0000089c
|
||||
adds r1, r4, r0
|
||||
ldr r0, [r1]
|
||||
adds r0, 0x1
|
||||
str r0, [r1]
|
||||
ldrh r1, [r6, 0x2]
|
||||
cmp r0, r1
|
||||
bge _081C8B0C
|
||||
ldrh r6, [r6, 0x8]
|
||||
cmp r0, r6
|
||||
bge _081C8B0C
|
||||
_081C8B52:
|
||||
movs r0, 0x9
|
||||
b _081C8B66
|
||||
.pool
|
||||
_081C8B5C:
|
||||
adds r0, r2, 0
|
||||
movs r1, 0
|
||||
bl sub_81C9008
|
||||
_081C8B64:
|
||||
movs r0, 0x4
|
||||
_081C8B66:
|
||||
add sp, 0x8
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_81C8A28
|
||||
|
||||
thumb_func_start sub_81C8B70
|
||||
sub_81C8B70: @ 81C8B70
|
||||
push {r4-r7,lr}
|
||||
|
140
src/pokenav.c
140
src/pokenav.c
@ -179,12 +179,16 @@ extern u32 sub_81C91AC(struct UnknownSubStruct_81C81D4 *a0, const void *a1, void
|
||||
extern u32 sub_81C9160(struct UnknownSubSubStruct_81C81D4 *a0, void *a1);
|
||||
extern void sub_81C8ED0(void);
|
||||
extern void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1);
|
||||
extern u32 sub_81C8958(s32 a0);
|
||||
extern u32 sub_81C8A28(s32 a0);
|
||||
extern void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1, u32 a2);
|
||||
extern void sub_81C9008(struct UnknownSubStruct_81C81D4 *a0, u32 a1);
|
||||
extern void sub_81C9008(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1);
|
||||
extern void sub_81C7CB4(struct Sprite* sprite);
|
||||
extern void sub_81C8CB4(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1);
|
||||
extern void sub_81C8DBC(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1);
|
||||
extern void sub_81C8E54(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1, u32 a2);
|
||||
extern void sub_81C8D4C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1);
|
||||
|
||||
u32 sub_81C8A28(s32 a0);
|
||||
u32 sub_81C8958(s32 a0);
|
||||
u32 sub_81C8870(s32 a0);
|
||||
u32 sub_81C85A0(s32 a0);
|
||||
void sub_81C8568(s32 a0, struct UnknownSubStruct_81C81D4 *a1);
|
||||
@ -2233,7 +2237,7 @@ u32 sub_81C8870(s32 a0)
|
||||
switch (a0)
|
||||
{
|
||||
case 0:
|
||||
sub_81C9008(structPtr, 1);
|
||||
sub_81C9008(&structPtr->unk0, 1);
|
||||
// fall-through
|
||||
case 1:
|
||||
if (structPtr->unk89C != structPtr->unk888.unk6)
|
||||
@ -2272,4 +2276,132 @@ u32 sub_81C8870(s32 a0)
|
||||
default:
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_81C8958(s32 a0)
|
||||
{
|
||||
struct UnknownSubStruct_81C81D4 *structPtr;
|
||||
structPtr = GetSubstructPtr(0x11);
|
||||
if (IsDma3ManagerBusyWithBgCopy())
|
||||
return 2;
|
||||
|
||||
switch (a0)
|
||||
{
|
||||
case 0:
|
||||
sub_81C8CB4(&structPtr->unk888, &structPtr->unk0);
|
||||
break;
|
||||
case 1:
|
||||
sub_81C8DBC(&structPtr->unk0, 0);
|
||||
break;
|
||||
case 2:
|
||||
sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 0);
|
||||
break;
|
||||
case 3:
|
||||
sub_81C8DBC(&structPtr->unk0, 1);
|
||||
break;
|
||||
case 4:
|
||||
sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 1);
|
||||
break;
|
||||
case 5:
|
||||
sub_81C8DBC(&structPtr->unk0, 2);
|
||||
break;
|
||||
case 6:
|
||||
sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 2);
|
||||
break;
|
||||
case 7:
|
||||
sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 3);
|
||||
break;
|
||||
default:
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_81C8A28(s32 a0)
|
||||
{
|
||||
struct UnknownSubStruct_81C81D4 *structPtr;
|
||||
struct UnknownSubSubStruct_81C81D4 *subPtr888;
|
||||
register struct UnknownSubSubStruct_0203CF40 *subPtr0 asm("r2");
|
||||
s32 v4;
|
||||
|
||||
if (IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
structPtr = GetSubstructPtr(0x11);
|
||||
subPtr888 = &structPtr->unk888;
|
||||
subPtr0 = &structPtr->unk0;
|
||||
|
||||
switch (a0)
|
||||
{
|
||||
default:
|
||||
return 4;
|
||||
case 0:
|
||||
sub_81C8D4C(subPtr888, subPtr0);
|
||||
return 0;
|
||||
case 1:
|
||||
{
|
||||
s32 v1;
|
||||
s32 v2;
|
||||
u32 *v3;
|
||||
register s32 v4 asm("r5");
|
||||
|
||||
v3 = &structPtr->unk89C;
|
||||
v1 = *v3 + 1;
|
||||
*v3 = v1;
|
||||
if (v1 < structPtr->unk888.unk8)
|
||||
{
|
||||
sub_81C8B70(subPtr0, v1, 1);
|
||||
return 2;
|
||||
}
|
||||
|
||||
*v3 = 0;
|
||||
if (subPtr888->unk2 <= subPtr888->unk8)
|
||||
{
|
||||
register u32 temp asm("r0");
|
||||
temp = subPtr888->unk0;
|
||||
if (temp == 0)
|
||||
return 9;
|
||||
v2 = temp;
|
||||
}
|
||||
else
|
||||
{
|
||||
register s32 temp asm("r1");
|
||||
v2 = subPtr888->unk0 + subPtr888->unk8;
|
||||
temp = (s32)subPtr888->unk2;
|
||||
if (v2 <= temp)
|
||||
return 9;
|
||||
v2 -= temp;
|
||||
}
|
||||
v4 = v2 * -1;
|
||||
sub_81C8B70(subPtr0, v4, v2);
|
||||
subPtr888->unk6 = v2;
|
||||
*v3 = v4;
|
||||
return 0;
|
||||
}
|
||||
case 2:
|
||||
sub_81C84E8(structPtr->unk89C, 0);
|
||||
return 0;
|
||||
case 3:
|
||||
if (sub_81C8630())
|
||||
return 2;
|
||||
|
||||
structPtr->unk89C = 0;
|
||||
return 1;
|
||||
case 4:
|
||||
sub_81C83AC(subPtr888->unk10, subPtr888->unk0 + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, structPtr);
|
||||
return 0;
|
||||
case 5:
|
||||
if (sub_81C83E0())
|
||||
return 2;
|
||||
|
||||
v4 = ++structPtr->unk89C;
|
||||
if (v4 >= subPtr888->unk2 || v4 >= subPtr888->unk8)
|
||||
return 1;
|
||||
return 9;
|
||||
case 6:
|
||||
sub_81C9008(subPtr0, 0);
|
||||
return 4;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user