From 9c47da96e62439932bb4a02f3b1828109ed22d5f Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 26 Jul 2022 17:34:48 +0300 Subject: [PATCH] Match sub_0802EBC4 --- asm/enemy/gleerok.s | 99 --------------------------------------------- linker.ld | 1 - src/enemy/gleerok.c | 38 ++++++++++++++++- 3 files changed, 36 insertions(+), 102 deletions(-) delete mode 100644 asm/enemy/gleerok.s diff --git a/asm/enemy/gleerok.s b/asm/enemy/gleerok.s deleted file mode 100644 index 74dd5bb8..00000000 --- a/asm/enemy/gleerok.s +++ /dev/null @@ -1,99 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - - thumb_func_start sub_0802EBC4 -sub_0802EBC4: @ 0x0802EBC4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - adds r6, r0, #0 - cmp r6, #0 - bne _0802EC66 - ldr r1, _0802EC18 @ =gUnk_080CD86C - adds r5, r4, #0 - adds r5, #0x79 - ldrb r0, [r5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl GetRandomByWeight - ldr r2, _0802EC1C @ =gUnk_080CD878 - ldrb r1, [r5] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - adds r1, r1, r0 - adds r2, r4, #0 - adds r2, #0x75 - ldrb r0, [r1] - ldrb r1, [r2] - cmp r0, r1 - bhs _0802EC60 - strb r6, [r2] - ldrb r1, [r5] - cmp r1, #0 - bne _0802EC20 - adds r0, r4, #0 - adds r0, #0x76 - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x77 - movs r0, #3 - strb r0, [r1] - b _0802EC56 - .align 2, 0 -_0802EC18: .4byte gUnk_080CD86C -_0802EC1C: .4byte gUnk_080CD878 -_0802EC20: - bl Random - adds r1, r0, #0 - movs r5, #1 - ands r1, r5 - adds r3, r4, #0 - adds r3, #0x76 - ldrb r0, [r3] - cmp r1, r0 - beq _0802EC3E - strb r1, [r3] - adds r0, r4, #0 - adds r0, #0x77 - strb r5, [r0] - b _0802EC56 -_0802EC3E: - adds r2, r4, #0 - adds r2, #0x77 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bls _0802EC54 - eors r1, r5 - strb r5, [r2] -_0802EC54: - strb r1, [r3] -_0802EC56: - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xd] - strb r1, [r4, #0xb] - b _0802EC6A -_0802EC60: - movs r0, #2 - strb r0, [r4, #0xd] - b _0802EC6A -_0802EC66: - subs r0, #1 - strb r0, [r1] -_0802EC6A: - pop {r4, r5, r6, pc} diff --git a/linker.ld b/linker.ld index f9f4e0f6..81e26aff 100644 --- a/linker.ld +++ b/linker.ld @@ -328,7 +328,6 @@ SECTIONS { src/enemy/bobomb.o(.text); src/enemy/wallMaster2.o(.text); src/enemy/gleerok.o(.text); - asm/enemy/gleerok.o(.text); src/enemy/vaatiEyesMacro.o(.text); src/enemy/tektite.o(.text); src/enemy/wizzrobeWind.o(.text); diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c index 169a599b..e498719e 100644 --- a/src/enemy/gleerok.c +++ b/src/enemy/gleerok.c @@ -59,6 +59,8 @@ extern u8 gUnk_080CD840[]; extern u8 gUnk_080CD844[]; extern u8 gUnk_080CD850[]; extern u8 gUnk_080CD854[]; +extern const u8* gUnk_080CD86C[]; +extern const u8* gUnk_080CD878[]; extern u32 sub_0806FC80(Entity*, Entity*, s32); @@ -1259,7 +1261,6 @@ NONMATCH("asm/non_matching/gleerok/sub_0802E518.inc", void sub_0802E518(GleerokE END_NONMATCH NONMATCH("asm/non_matching/gleerok/sub_0802E768.inc", bool32 sub_0802E768(Gleerok_HeapStruct* param_1)) { - u32 cVar1; s32 bVar2; s32 bVar2a; u32 bVar3; @@ -1409,7 +1410,6 @@ void sub_0802EA68(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 par } NONMATCH("asm/non_matching/gleerok/sub_0802EA88.inc", bool32 sub_0802EA88(Gleerok_HeapStruct* this)) { - u32 cVar1; s32 bVar2; u32 uVar3; u32 bVar4; @@ -1495,3 +1495,37 @@ void sub_0802EB9C(GleerokEntity* this) { this->unk_74 = gUnk_080CD854[GetRandomByWeight(gUnk_080CD850)]; this->unk_75++; } + +void sub_0802EBC4(GleerokEntity* this) { + u32 bVar3; + s32 iVar4; + + if (this->unk_74 == 0) { + iVar4 = GetRandomByWeight(gUnk_080CD86C[this->unk_79]); + if (gUnk_080CD878[this->unk_79][iVar4] < this->unk_75) { + this->unk_75 = 0; + if (this->unk_79 == 0) { + this->unk_76 = 0; + this->unk_77 = 3; + } else { + bVar3 = Random() & 1; + if (bVar3 != this->unk_76) { + this->unk_76 = bVar3; + this->unk_77 = 1; + } else { + if (++this->unk_77 > 2) { + bVar3 ^= 1; + this->unk_77 = 1; + } + this->unk_76 = bVar3; + } + } + this->base.subAction = 3; + this->base.type2 = 0; + } else { + this->base.subAction = 2; + } + } else { + this->unk_74--; + } +}