summaryrefslogtreecommitdiff
path: root/src/code_80A26CC.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/code_80A26CC.c')
-rw-r--r--src/code_80A26CC.c255
1 files changed, 255 insertions, 0 deletions
diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c
new file mode 100644
index 0000000..0217d51
--- /dev/null
+++ b/src/code_80A26CC.c
@@ -0,0 +1,255 @@
+#include "global.h"
+
+struct unkStruct_80A2608
+{
+ /* 0x0 */ s16 unk0;
+ /* 0x2 */ u16 padding;
+ /* 0x4 */ u32 padding2;
+ /* 0x8 */ u16 padding3;
+ /* 0xA */ u16 padding4;
+ /* 0xC */ u8 unkC;
+ /* 0xD */ u8 padding5;
+ /* 0xE */ s16 unkE;
+ /* 0x10 */ u8 unk10;
+ /* 0x11 */ u8 unk11;
+};
+
+extern struct unkStruct_80A2608 *sub_80A2608(s32);
+extern struct unkStruct_80A2608 *sub_80A2620(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)
+{
+ // Useless cast that forces correct ordering
+ s32 temp;
+ temp = r0;
+
+ return gUnknown_8116F9A[r0];
+}
+
+s16 sub_80A26CC(s16 r0)
+{
+ return (0xDC >> 2) + r0;
+}
+
+
+s32 sub_80A26D8(u8 r0)
+{
+ s32 counter;
+ s32 counter2;
+ s32 temp2;
+ struct unkStruct_80A2608 *temp;
+ for(counter = 0; counter <= 0x52; counter++)
+ {
+ temp2 = counter << 0x10;
+ counter2 = temp2 >> 0x10;
+ temp = sub_80A2608(counter2);
+ if(temp->unk11 != 0)
+ {
+ if(temp->unkC == r0)
+ {
+ return counter2;
+ }
+ }
+ }
+ return -1;
+}
+
+u8 sub_80A270C(s16 r0)
+{
+ struct unkStruct_80A2608 *temp;
+ s32 temp_number;
+
+ temp_number = r0; // forcing a shift before addressing
+ temp = sub_80A2608(gUnknown_8116F9A[temp_number]);
+ return temp->unkC;
+}
+
+u8 sub_80A2728(s16 r0)
+{
+ struct unkStruct_80A2608 *temp;
+ s16 temp_number = (0xDC >> 2) + r0;
+ temp = sub_80A2608(temp_number);
+ return temp->unkC;
+}
+
+u8 sub_80A2740(s16 r0)
+{
+ struct unkStruct_80A2608 *temp;
+ temp = sub_80A2608(r0);
+ return temp->unkC;
+}
+
+u32 sub_80A2750(s16 r0)
+{
+ struct unkStruct_80A2608 *temp;
+ s32 temp_32;
+ s32 temp_2;
+
+ // so dumb but it matches
+ temp_32 = r0;
+ temp_2 = temp_32;
+
+ if(r0 == 0x50)
+ return 3;
+ if(r0 == 0x51)
+ return 2;
+ if(r0 == 0x52)
+ return 4;
+ if((u16)(r0 - 0x28) <= 0xE)
+ return 2;
+ if((u16)(r0 - 0x37) <= 0x18)
+ return 4;
+
+ temp = sub_80A2608(temp_2);
+ if(temp->unkE == -1)
+ return 1;
+ if(sub_80023E4(5) != 0)
+ return 1;
+ if(sub_80973F4(temp->unkE) == 0)
+ return 1;
+ if(sub_80023E4(1) == 0)
+ return 1;
+ return 2;
+}
+
+u32 sub_80A27CC(s16 r0)
+{
+ s32 temp;
+ s32 temp2;
+ struct unkStruct_80A2608 *return_var;
+
+ // Same dumbness as above to get a match
+ temp2 = r0;
+ temp = temp2;
+
+ return_var = sub_80A2620(r0);
+ if(return_var->unk0 == -1)
+ return 0;
+ if(sub_80023E4(5) != 0)
+ return 0;
+ if(sub_8097384(r0) != 0)
+ return 1;
+ if(sub_80023E4(1) == 0)
+ return 0;
+ if(sub_80973F4(temp) == 0)
+ 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;
+}