summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_80A26CC.s153
-rw-r--r--src/code_80A26CC.c177
2 files changed, 129 insertions, 201 deletions
diff --git a/asm/code_80A26CC.s b/asm/code_80A26CC.s
index 8a533e5..ebc16bc 100644
--- a/asm/code_80A26CC.s
+++ b/asm/code_80A26CC.s
@@ -5,159 +5,6 @@
.text
- thumb_func_start sub_80A2824
-sub_80A2824:
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0x5
- bl sub_80023E4
- lsls r0, 24
- cmp r0, 0
- bne _080A28AC
- movs r0, 0x1
- bl sub_80023E4
- lsls r0, 24
- cmp r0, 0
- beq _080A2880
- movs r5, 0
-_080A2844:
- lsls r0, r5, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- bl sub_80A2620
- adds r1, r0, 0
- ldrb r0, [r1, 0x11]
- cmp r0, 0
- beq _080A2874
- ldrb r0, [r1, 0xC]
- cmp r0, r6
- bne _080A2874
- adds r0, r4, 0
- bl sub_8097384
- lsls r0, 24
- cmp r0, 0
- bne _080A287C
- adds r0, r4, 0
- bl sub_80973F4
- lsls r0, 24
- cmp r0, 0
- bne _080A287C
-_080A2874:
- adds r5, 0x1
- cmp r5, 0x2D
- ble _080A2844
- b _080A28AC
-_080A287C:
- movs r0, 0x1
- b _080A28AE
-_080A2880:
- movs r5, 0
-_080A2882:
- lsls r0, r5, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- bl sub_80A2620
- adds r1, r0, 0
- ldrb r0, [r1, 0x11]
- cmp r0, 0
- beq _080A28A6
- ldrb r0, [r1, 0xC]
- cmp r0, r6
- bne _080A28A6
- adds r0, r4, 0
- bl sub_8097384
- lsls r0, 24
- cmp r0, 0
- bne _080A287C
-_080A28A6:
- adds r5, 0x1
- cmp r5, 0x2D
- ble _080A2882
-_080A28AC:
- movs r0, 0
-_080A28AE:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80A2824
-
- thumb_func_start sub_80A28B4
-sub_80A28B4:
- push {r4,lr}
- lsls r0, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- bl sub_80A2620
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A28E8
- adds r0, r4, 0
- bl sub_8097384
- lsls r0, 24
- cmp r0, 0
- bne _080A28E4
- adds r0, r4, 0
- bl sub_80973F4
- lsls r0, 24
- cmp r0, 0
- beq _080A28E8
-_080A28E4:
- movs r0, 0x1
- b _080A28EA
-_080A28E8:
- movs r0, 0
-_080A28EA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A28B4
-
- thumb_func_start sub_80A28F0
-sub_80A28F0:
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
-_080A28F8:
- lsls r0, r5, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- bl sub_80A2620
- adds r1, r0, 0
- ldrb r0, [r1, 0x11]
- cmp r0, 0
- beq _080A292C
- ldrb r0, [r1, 0xC]
- cmp r0, r6
- bne _080A292C
- adds r0, r4, 0
- bl sub_8097384
- lsls r0, 24
- cmp r0, 0
- bne _080A2928
- adds r0, r4, 0
- bl sub_80973F4
- lsls r0, 24
- cmp r0, 0
- beq _080A292C
-_080A2928:
- movs r0, 0x1
- b _080A2934
-_080A292C:
- adds r5, 0x1
- cmp r5, 0x2D
- ble _080A28F8
- movs r0, 0
-_080A2934:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80A28F0
-
thumb_func_start sub_80A293C
sub_80A293C:
push {r4-r7,lr}
diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c
index 7be1bbb..0217d51 100644
--- a/src/code_80A26CC.c
+++ b/src/code_80A26CC.c
@@ -2,22 +2,23 @@
struct unkStruct_80A2608
{
- s16 unk0;
- /*0x2*/ u16 padding;
- /*0x4*/ u32 padding2;
- /*0x8*/ u16 padding3;
- /*0xA*/ u16 padding4;
- u8 unkC;
+ /* 0x0 */ s16 unk0;
+ /* 0x2 */ u16 padding;
+ /* 0x4 */ u32 padding2;
+ /* 0x8 */ u16 padding3;
+ /* 0xA */ u16 padding4;
+ /* 0xC */ u8 unkC;
/* 0xD */ u8 padding5;
- s16 unkE;
- u8 unk11;
+ /* 0xE */ s16 unkE;
+ /* 0x10 */ u8 unk10;
+ /* 0x11 */ u8 unk11;
};
-extern u8 sub_80023E4(u32);
-extern u8 sub_80973F4(s16);
extern struct unkStruct_80A2608 *sub_80A2608(s32);
extern struct unkStruct_80A2608 *sub_80A2620(u32);
-extern u8 sub_8097384(u32);
+extern u8 sub_80023E4(u32);
+extern u8 sub_80973F4(s16);
+extern u8 sub_8097384(s16);
extern s16 gUnknown_8116F9A[];
s16 sub_80A26B8(s16 r0)
@@ -35,20 +36,16 @@ s16 sub_80A26CC(s16 r0)
}
-#ifndef NONMATCHING
-NAKED
-#endif
s32 sub_80A26D8(u8 r0)
{
-#ifdef NONMATCHING
s32 counter;
s32 counter2;
+ s32 temp2;
struct unkStruct_80A2608 *temp;
for(counter = 0; counter <= 0x52; counter++)
{
- // Forcing a shift here.. but does it to R4 instead of R0
- counter2 = counter << 0x10;
- counter2 >>= 0x10;
+ temp2 = counter << 0x10;
+ counter2 = temp2 >> 0x10;
temp = sub_80A2608(counter2);
if(temp->unk11 != 0)
{
@@ -59,36 +56,6 @@ s32 sub_80A26D8(u8 r0)
}
}
return -1;
-#else
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmovs r5, 0\n"
-"_080A26E0:\n"
- "\tlsls r0, r5, 16\n"
- "\tasrs r4, r0, 16\n"
- "\tadds r0, r4, 0\n"
- "\tbl sub_80A2608\n"
- "\tadds r1, r0, 0\n"
- "\tldrb r0, [r1, 0x11]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080A26FC\n"
- "\tldrb r0, [r1, 0xC]\n"
- "\tcmp r0, r6\n"
- "\tbne _080A26FC\n"
- "\tadds r0, r4, 0\n"
- "\tb _080A2706\n"
-"_080A26FC:\n"
- "\tadds r5, 0x1\n"
- "\tcmp r5, 0x52\n"
- "\tble _080A26E0\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
-"_080A2706:\n"
- "\tpop {r4-r6}\n"
- "\tpop {r1}\n"
- "\tbx r1\n");
-#endif
}
u8 sub_80A270C(s16 r0)
@@ -172,3 +139,117 @@ u32 sub_80A27CC(s16 r0)
return 0;
return 1;
}
+
+u32 sub_80A2824(u8 r0)
+{
+ s32 counter;
+ s32 counter2;
+ s32 temp2;
+ struct unkStruct_80A2608 *temp;
+
+ if(sub_80023E4(5) != 0)
+ {
+ return 0;
+ }
+ if(sub_80023E4(1) != 0)
+ {
+ for(counter = 0; counter <= 0x2D; counter++)
+ {
+ temp2 = counter << 0x10;
+ counter2 = temp2 >> 0x10;
+ temp = sub_80A2620(counter2);
+ if(temp->unk11 != 0)
+ {
+ if(temp->unkC == r0)
+ {
+ if(sub_8097384(counter2) != 0)
+ {
+ return 1;
+ }
+ if(sub_80973F4(counter2) != 0)
+ {
+ return 1;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ for(counter = 0; counter <= 0x2D; counter++)
+ {
+ temp2 = counter << 0x10;
+ counter2 = temp2 >> 0x10;
+ temp = sub_80A2620(counter2);
+ if(temp->unk11 != 0)
+ {
+ if(temp->unkC == r0)
+ {
+ if(sub_8097384(counter2) != 0)
+ {
+ return 1;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+
+}
+
+u32 sub_80A28B4(s16 r0)
+{
+ s32 counter2;
+ s32 temp2;
+ struct unkStruct_80A2608 *temp;
+
+ temp2 = r0 << 0x10;
+ counter2 = temp2 >> 0x10;
+ temp = sub_80A2620(counter2);
+ if(temp->unk0 != -1)
+ {
+ if(sub_8097384(counter2) == 0)
+ {
+ if(sub_80973F4(counter2) == 0)
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ return 1;
+ }
+ return 1;
+ }
+ return 0;
+}
+
+u32 sub_80A28F0(u8 r0)
+{
+ s32 counter;
+ s32 counter2;
+ s32 temp2;
+ struct unkStruct_80A2608 *temp;
+
+ for(counter = 0; counter <= 0x2D; counter++)
+ {
+ temp2 = counter << 0x10;
+ counter2 = temp2 >> 0x10;
+ temp = sub_80A2620(counter2);
+ if(temp->unk11 != 0)
+ {
+ if(temp->unkC == r0)
+ {
+ if(sub_8097384(counter2) != 0)
+ {
+ return 1;
+ }
+ if(sub_80973F4(counter2) != 0)
+ {
+ return 1;
+ }
+ }
+ }
+ }
+ return 0;
+}