mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-09 14:53: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
|
.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
|
thumb_func_start sub_81C8B70
|
||||||
sub_81C8B70: @ 81C8B70
|
sub_81C8B70: @ 81C8B70
|
||||||
push {r4-r7,lr}
|
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 u32 sub_81C9160(struct UnknownSubSubStruct_81C81D4 *a0, void *a1);
|
||||||
extern void sub_81C8ED0(void);
|
extern void sub_81C8ED0(void);
|
||||||
extern void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1);
|
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_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_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_81C8870(s32 a0);
|
||||||
u32 sub_81C85A0(s32 a0);
|
u32 sub_81C85A0(s32 a0);
|
||||||
void sub_81C8568(s32 a0, struct UnknownSubStruct_81C81D4 *a1);
|
void sub_81C8568(s32 a0, struct UnknownSubStruct_81C81D4 *a1);
|
||||||
@ -2233,7 +2237,7 @@ u32 sub_81C8870(s32 a0)
|
|||||||
switch (a0)
|
switch (a0)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
sub_81C9008(structPtr, 1);
|
sub_81C9008(&structPtr->unk0, 1);
|
||||||
// fall-through
|
// fall-through
|
||||||
case 1:
|
case 1:
|
||||||
if (structPtr->unk89C != structPtr->unk888.unk6)
|
if (structPtr->unk89C != structPtr->unk888.unk6)
|
||||||
@ -2272,4 +2276,132 @@ u32 sub_81C8870(s32 a0)
|
|||||||
default:
|
default:
|
||||||
return 4;
|
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