diff options
Diffstat (limited to 'src/code_80A26CC.c')
-rw-r--r-- | src/code_80A26CC.c | 255 |
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; +} |