diff options
Diffstat (limited to 'src/code_808EAB0.c')
-rw-r--r-- | src/code_808EAB0.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c index 9fea853..f50d053 100644 --- a/src/code_808EAB0.c +++ b/src/code_808EAB0.c @@ -8,6 +8,10 @@ extern u8 gUnknown_810A36B[]; extern s16 gUnknown_810A378[]; extern s32 gUnknown_810A390[]; +extern u32 gUnknown_81076E4[]; + +extern bool8 sub_808ECD0(u8 *, u32); +extern void sub_808EC30(u8 *, u32); u32 sub_808EAB0(u8 r0) { @@ -87,3 +91,103 @@ bool8 sub_808EB7C(s32 r0, u8 r1) return gUnknown_810A390[r1] <= r0; } + +s32 sub_808EBA8(u8 param_1[], s32 param_2) +{ + s32 counter_2; + s32 counter_1; + u8 cast_u8; + s32 index; + + index = 0; + + for(counter_1 = 1; counter_1 < 0x18; counter_1++) { + cast_u8 = counter_1; // force this cast to be in a reg + if (sub_808EB7C(param_2, cast_u8)) { + param_1[index] = cast_u8; + index++; + } + } + + counter_2 = index; // set counter to where the first loop ended + + while (counter_2 < 0x18) { + param_1[counter_2] = 0; + counter_2++; + } + return index; +} + +void sub_808EBF4(u8 *param_1, u32 param_2) +{ + int iVar2; // a mask? + + iVar2 = 1 << (param_2); + if (sub_808ECD0(param_1,iVar2)) { + param_1[0] = param_1[0] & ~iVar2; + param_1[1] = param_1[1] & ~(iVar2 >> 8); + param_1[2] = param_1[2] & ~(iVar2 >> 0x10); + } + else + { + sub_808EC30(param_1,param_2); + } +} + +void sub_808EC30(u8 *param_1, u32 param_2) +{ + s32 iVar1; + s32 counter; + s32 iVar4; + s32 iVar5; + + counter = 0; + iVar4 = gUnknown_81076E4[param_2]; + do { + if (iVar4 == gUnknown_81076E4[counter]) { + iVar1 = 1 << (counter); + param_1[0] = param_1[0] & ~iVar1; + param_1[1] = param_1[1] & ~(iVar1 >> 8); + param_1[2] = param_1[2] & ~(iVar1 >> 0x10); + } + counter++; + } while (counter < 0x18); + + iVar5 = 1 << (param_2); + param_1[0] = iVar5 | param_1[0]; + param_1[1] = (iVar5 >> 8) | param_1[1]; + param_1[2] = (iVar5 >> 0x10) | param_1[2]; +} + +void sub_808EC94(u8 *param_1, u8 param_2) +{ + + param_1[0] = 0; + param_1[1] = 0; + param_1[2] = 0; + sub_808EC30(param_1, 2); + sub_808EC30(param_1, 3); + sub_808EC30(param_1, 0x16); + if (param_2 != 0) { + sub_808EC30(param_1, 0x12); + } +} + +bool8 sub_808ECD0(u8 *param_1, u32 param_2) +{ + + if ((((param_1[0] & param_2) == 0) && + ((param_1[1] & param_2 >> 8) == 0)) && + ((param_1[2] & param_2 >> 0x10) == 0)) + { + return 0; + } + else { + return 1; + } +} + +u32 sub_808ECFC(void) +{ + return 0; +} |