Fix non-matching sub_80EEF34 and start more decomp

This commit is contained in:
Marcus Huderle
2017-11-03 22:35:38 -07:00
parent 34fad4a455
commit a5754b95e8
4 changed files with 47 additions and 105 deletions
-40
View File
@@ -6,46 +6,6 @@
.text
thumb_func_start sub_80EEF78
sub_80EEF78: @ 80EEF78
push {r4,lr}
movs r3, 0x1
ldr r0, _080EEF94 @ =gUnknown_083DFEC4
ldr r0, [r0]
movs r1, 0xC3
lsls r1, 2
adds r2, r0, r1
ldrh r1, [r2]
movs r4, 0
ldrsh r0, [r2, r4]
cmp r0, 0
bne _080EEF98
movs r0, 0
b _080EEFB0
.align 2, 0
_080EEF94: .4byte gUnknown_083DFEC4
_080EEF98:
subs r0, r1, 0x2
strh r0, [r2]
lsls r0, 16
cmp r0, 0
bgt _080EEFA8
movs r0, 0
strh r0, [r2]
movs r3, 0
_080EEFA8:
ldr r1, _080EEFB8 @ =REG_BG1VOFS
ldrh r0, [r2]
strh r0, [r1]
adds r0, r3, 0
_080EEFB0:
pop {r4}
pop {r1}
bx r1
.align 2, 0
_080EEFB8: .4byte REG_BG1VOFS
thumb_func_end sub_80EEF78
thumb_func_start sub_80EEFBC
sub_80EEFBC: @ 80EEFBC
push {r4-r7,lr}
+10 -3
View File
@@ -30,15 +30,22 @@ struct UnkPokenavStruct_Sub2 {
/*0x26*/ u16 unk26;
};
struct UnkPokenavStruct_Sub3 {
/*0x00*/s16 unk0;
};
struct UnkUsePokeblockSub {
/*0*/ u8 fil0[2];
/*2*/ u8 partyIdx:5;
};
struct UnkPokenavStruct {
/*0x0000*/ u8 filler0000[0x30c];
/*0x0000*/ u16 unk030C;
/*0x0000*/ u8 filler030E[0x6a9e];
/*0x0000*/ u8 filler0000[0x30C];
/*0x030C*/ union { // TODO: what?
u16 val;
struct UnkPokenavStruct_Sub3 unk030C;
} unk030C;
/*0x0310*/ u8 filler030E[0x6a9c];
/*0x6DAC*/ u8 unk6DAC;
/*0x6DAD*/ u8 filler6DAD[0x8fd];
/*0x76AA*/ u8 unk76AA;
+1 -1
View File
@@ -244,7 +244,7 @@ static void sub_8136294(void)
case 6:
gUnknown_083DFEC4->unk76AA = 0;
gUnknown_083DFEC4->unk87E0 = NULL;
gUnknown_083DFEC4->unk030C = 0x20;
gUnknown_083DFEC4->unk030C.val = 0x20;
gUnknown_02039304->unk50++;
break;
case 7:
+36 -61
View File
@@ -2897,7 +2897,7 @@ bool8 sub_80EEE54() {
sub_80EF58C(2);
break;
case 4:
gUnknown_083DFEC4->unk030C = 0;
gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG1CNT = 0x1B0C;
@@ -2909,66 +2909,41 @@ bool8 sub_80EEE54() {
return 1;
}
#if 0
// not matches because of register differences
bool8 sub_80EEF34() {
bool8 ret = 0x1;
if ((s8)gUnknown_083DFEC4->unk030C == 0x20) {
return 0;
}
else {
gUnknown_083DFEC4->unk030C += 2;
if (gUnknown_083DFEC4->unk030C > 0x1F) {
gUnknown_083DFEC4->unk030C = 0x20;
ret = 0;
}
REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
return ret;
}
}
#else
__attribute__((naked))
bool8 sub_80EEF34() {
asm(".text\n"
".include \"constants/gba_constants.inc\"");
bool8 retVal = TRUE;
asm_unified(
"push {r4,lr}\n\
movs r3, 0x1\n\
ldr r0, _080EEF50 @ =gUnknown_083DFEC4\n\
ldr r0, [r0]\n\
movs r1, 0xC3\n\
lsls r1, 2\n\
adds r2, r0, r1\n\
ldrh r1, [r2]\n\
movs r4, 0\n\
ldrsh r0, [r2, r4]\n\
cmp r0, 0x20\n\
bne _080EEF54\n\
movs r0, 0\n\
b _080EEF6E\n\
.align 2, 0\n\
_080EEF50: .4byte gUnknown_083DFEC4\n\
_080EEF54:\n\
adds r0, r1, 0x2\n\
strh r0, [r2]\n\
lsls r0, 16\n\
asrs r0, 16\n\
cmp r0, 0x1F\n\
ble _080EEF66\n\
movs r0, 0x20\n\
strh r0, [r2]\n\
movs r3, 0\n\
_080EEF66:\n\
ldr r1, _080EEF74 @ =REG_BG1VOFS\n\
ldrh r0, [r2]\n\
strh r0, [r1]\n\
adds r0, r3, 0\n\
_080EEF6E:\n\
pop {r4}\n\
pop {r1}\n\
bx r1\n\
.align 2, 0\n\
_080EEF74: .4byte REG_BG1VOFS");
if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 32)
{
return FALSE;
}
gUnknown_083DFEC4->unk030C.unk030C.unk0 += 2;
if (gUnknown_083DFEC4->unk030C.unk030C.unk0 > 31)
{
gUnknown_083DFEC4->unk030C.unk030C.unk0 = 32;
retVal = FALSE;
}
REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
return retVal;
}
bool8 sub_80EEF78(void)
{
bool8 retVal = TRUE;
if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 0)
{
return FALSE;
}
gUnknown_083DFEC4->unk030C.unk030C.unk0 -= 2;
if (gUnknown_083DFEC4->unk030C.unk030C.unk0 <= 0)
{
gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
retVal = FALSE;
}
REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
return retVal;
}
#endif