From 90536b532101623e4ef93f5e9aadf96b125077f7 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 26 Jul 2022 17:02:39 +0300 Subject: [PATCH] Add non matching sub_0802EA88 --- asm/enemy/gleerok.s | 74 ---------------------- asm/non_matching/gleerok/sub_0802EA88.inc | 75 +++++++++++++++++++++++ src/enemy/gleerok.c | 41 +++++++++++++ 3 files changed, 116 insertions(+), 74 deletions(-) create mode 100644 asm/non_matching/gleerok/sub_0802EA88.inc diff --git a/asm/enemy/gleerok.s b/asm/enemy/gleerok.s index 46e90cd1..104034f9 100644 --- a/asm/enemy/gleerok.s +++ b/asm/enemy/gleerok.s @@ -7,80 +7,6 @@ .text - thumb_func_start sub_0802EA88 -sub_0802EA88: @ 0x0802EA88 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r6, #0 - movs r3, #0 -_0802EA90: - lsls r0, r3, #2 - adds r4, r5, r0 - adds r2, r3, #1 - lsls r0, r2, #2 - adds r1, r5, r0 - ldrb r0, [r4, #1] - ldrb r3, [r1, #1] - cmp r0, r3 - beq _0802EAC2 - movs r6, #1 - ldrb r0, [r1, #1] - ldrb r1, [r4, #1] - subs r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - movs r3, #1 - cmp r0, #0x10 - ble _0802EAB6 - movs r3, #0 -_0802EAB6: - adds r0, r5, #0 - adds r1, r2, #0 - movs r2, #0x20 - bl sub_0802EA48 - b _0802EAC8 -_0802EAC2: - adds r3, r2, #0 - cmp r3, #4 - bls _0802EA90 -_0802EAC8: - movs r3, #0 - movs r4, #0x1f -_0802EACC: - adds r2, r3, #1 - lsls r0, r2, #2 - adds r0, r5, r0 - ldrb r1, [r0, #1] - lsls r0, r3, #2 - adds r0, r5, r0 - ldrb r0, [r0, #1] - subs r0, r1, r0 - ands r0, r4 - adds r3, r1, #0 - adds r1, r2, #0 - cmp r0, #0x10 - ble _0802EAEE - cmp r0, #0x1e - bgt _0802EAF6 - adds r3, #1 - b _0802EAF4 -_0802EAEE: - cmp r0, #1 - ble _0802EAF6 - subs r3, #1 -_0802EAF4: - ands r3, r4 -_0802EAF6: - lsls r0, r1, #2 - adds r0, r5, r0 - strb r3, [r0, #1] - adds r3, r1, #0 - cmp r3, #4 - bls _0802EACC - adds r0, r6, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_start sub_0802EB08 sub_0802EB08: @ 0x0802EB08 push {r4, r5, r6, r7, lr} diff --git a/asm/non_matching/gleerok/sub_0802EA88.inc b/asm/non_matching/gleerok/sub_0802EA88.inc new file mode 100644 index 00000000..b419969b --- /dev/null +++ b/asm/non_matching/gleerok/sub_0802EA88.inc @@ -0,0 +1,75 @@ + .syntax unified + + .text +push {r4, r5, r6, lr} + adds r5, r0, #0 + movs r6, #0 + movs r3, #0 +_0802EA90: + lsls r0, r3, #2 + adds r4, r5, r0 + adds r2, r3, #1 + lsls r0, r2, #2 + adds r1, r5, r0 + ldrb r0, [r4, #1] + ldrb r3, [r1, #1] + cmp r0, r3 + beq _0802EAC2 + movs r6, #1 + ldrb r0, [r1, #1] + ldrb r1, [r4, #1] + subs r0, r0, r1 + movs r1, #0x1f + ands r0, r1 + movs r3, #1 + cmp r0, #0x10 + ble _0802EAB6 + movs r3, #0 +_0802EAB6: + adds r0, r5, #0 + adds r1, r2, #0 + movs r2, #0x20 + bl sub_0802EA48 + b _0802EAC8 +_0802EAC2: + adds r3, r2, #0 + cmp r3, #4 + bls _0802EA90 +_0802EAC8: + movs r3, #0 + movs r4, #0x1f +_0802EACC: + adds r2, r3, #1 + lsls r0, r2, #2 + adds r0, r5, r0 + ldrb r1, [r0, #1] + lsls r0, r3, #2 + adds r0, r5, r0 + ldrb r0, [r0, #1] + subs r0, r1, r0 + ands r0, r4 + adds r3, r1, #0 + adds r1, r2, #0 + cmp r0, #0x10 + ble _0802EAEE + cmp r0, #0x1e + bgt _0802EAF6 + adds r3, #1 + b _0802EAF4 +_0802EAEE: + cmp r0, #1 + ble _0802EAF6 + subs r3, #1 +_0802EAF4: + ands r3, r4 +_0802EAF6: + lsls r0, r1, #2 + adds r0, r5, r0 + strb r3, [r0, #1] + adds r3, r1, #0 + cmp r3, #4 + bls _0802EACC + adds r0, r6, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c index d7542be3..6fa86ea0 100644 --- a/src/enemy/gleerok.c +++ b/src/enemy/gleerok.c @@ -1405,3 +1405,44 @@ void sub_0802EA68(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 par } param_1->filler2[param_2].unk0.HWORD = (param_1->filler2[param_2].unk0.HWORD + param_3) & 0x1fff; } + +NONMATCH("asm/non_matching/gleerok/sub_0802EA88.inc", bool32 sub_0802EA88(Gleerok_HeapStruct* this)) { + u32 cVar1; + s32 bVar2; + u32 uVar3; + u32 bVar4; + u32 uVar5; + u32 uVar6; + + uVar6 = FALSE; + + for (uVar5 = 0; uVar5 < 5; uVar5++) { + if (this->filler[uVar5].unk0.HALF.HI != this->filler[uVar5 + 1].unk0.HALF.HI) { + uVar6 = TRUE; + if ((s32)((this->filler[uVar5 + 1].unk0.HALF.HI - this->filler[uVar5].unk0.HALF.HI) & 0x1fU) > 0x10) { + uVar3 = 0; + } else { + uVar3 = 1; + } + sub_0802EA48(this, uVar5 + 1, 0x20, uVar3); + break; + } + } + + for (uVar5 = 0; uVar5 <= 4; uVar5++) { + bVar4 = this->filler[uVar5 + 1].unk0.HALF.HI; + bVar2 = (bVar4 - this->filler[uVar5].unk0.HALF.HI) & 0x1f; + if (bVar2 >= 0x11) { + if (bVar2 < 0x1f) { + bVar4 = (bVar4 + 1) & 0x1f; + } + } else { + if (1 < bVar2) { + bVar4 = (bVar4 - 1) & 0x1f; + } + } + this->filler[uVar5 + 1].unk0.HALF.HI = bVar4; + } + return uVar6; +} +END_NONMATCH