From 23736e63a998da62d750f779eb5999f6ded78b7b Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Sat, 1 Jan 2022 18:11:39 +0100 Subject: [PATCH] gyorgChild.c: ok --- asm/gyorgChild.s | 455 ----------------------------------------- include/enemy/gyorg.h | 3 +- include/functions.h | 2 +- linker.ld | 2 +- src/enemy/gyorgChild.c | 172 ++++++++++++++++ 5 files changed, 176 insertions(+), 458 deletions(-) delete mode 100644 asm/gyorgChild.s create mode 100644 src/enemy/gyorgChild.c diff --git a/asm/gyorgChild.s b/asm/gyorgChild.s deleted file mode 100644 index c812d0ff..00000000 --- a/asm/gyorgChild.s +++ /dev/null @@ -1,455 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start GyorgChild -GyorgChild: @ 0x08048640 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0804867C @ =gScreenTransition - adds r0, #0x39 - ldrb r2, [r0] - cmp r2, #0 - bne _08048664 - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - adds r0, #0x45 - strb r2, [r0] - adds r1, r5, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] -_08048664: - ldr r4, _08048680 @ =gUnk_080D1E6C - adds r0, r5, #0 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0804867C: .4byte gScreenTransition -_08048680: .4byte gUnk_080D1E6C - - thumb_func_start sub_08048684 -sub_08048684: @ 0x08048684 - push {lr} - ldr r2, _08048698 @ =gUnk_080D1E84 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08048698: .4byte gUnk_080D1E84 - - thumb_func_start sub_0804869C -sub_0804869C: @ 0x0804869C - push {lr} - ldr r1, _080486A8 @ =gUnk_080D1E6C - bl sub_0804AA30 - pop {pc} - .align 2, 0 -_080486A8: .4byte gUnk_080D1E6C - - thumb_func_start sub_080486AC -sub_080486AC: @ 0x080486AC - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - beq _080486C8 - ldr r0, _080486CC @ =gUnk_080D1E94 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_080486C8: - pop {r4, pc} - .align 2, 0 -_080486CC: .4byte gUnk_080D1E94 - - thumb_func_start sub_080486D0 -sub_080486D0: @ 0x080486D0 - movs r1, #2 - strb r1, [r0, #0xd] - bx lr - .align 2, 0 - - thumb_func_start sub_080486D8 -sub_080486D8: @ 0x080486D8 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_080486E0 -sub_080486E0: @ 0x080486E0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _080486F2 - adds r0, r4, #0 - bl sub_0804A7D4 -_080486F2: - pop {r4, pc} - - thumb_func_start sub_080486F4 -sub_080486F4: @ 0x080486F4 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #1 - strb r5, [r4, #0x1c] - ldrb r0, [r4, #0x1b] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x19] - orrs r0, r1 - strb r0, [r4, #0x19] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0x15] - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0804876C - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - strb r5, [r4, #0xc] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - bl Random - movs r1, #0xb - bl __modsi3 - ldrb r1, [r4, #0x15] - adds r1, r1, r0 - subs r1, #5 - movs r2, #0x1f - ands r1, r2 - strb r1, [r4, #0x15] - lsls r0, r0, #1 - ldr r2, _08048768 @ =gUnk_080D1EA0 - adds r1, r0, r2 - ldrb r1, [r1] - strb r1, [r4, #0xe] - adds r0, #1 - adds r0, r0, r2 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x7b - strb r0, [r1] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - b _0804877A - .align 2, 0 -_08048768: .4byte gUnk_080D1EA0 -_0804876C: - movs r0, #2 - strb r0, [r4, #0xc] - strb r5, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] -_0804877A: - pop {r4, r5, pc} - - thumb_func_start sub_0804877C -sub_0804877C: @ 0x0804877C - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _080487AA - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _080487AA - adds r0, r4, #0 - adds r0, #0x7b - ldrb r0, [r0] - ldrb r1, [r4, #0x15] - adds r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] -_080487AA: - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - cmp r0, #1 - beq _080487D4 - cmp r0, #1 - bgt _080487BC - cmp r0, #0 - beq _080487C2 - b _08048804 -_080487BC: - cmp r0, #2 - beq _080487EC - b _08048804 -_080487C2: - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldr r0, _080487D0 @ =gRoomControls - movs r2, #0xc - ldrsh r0, [r0, r2] - b _0804880E - .align 2, 0 -_080487D0: .4byte gRoomControls -_080487D4: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r0, _080487E8 @ =gRoomControls - movs r2, #0xa - ldrsh r0, [r0, r2] - movs r2, #0x84 - lsls r2, r2, #1 - adds r0, r0, r2 - b _080487F8 - .align 2, 0 -_080487E8: .4byte gRoomControls -_080487EC: - movs r0, #0x32 - ldrsh r1, [r4, r0] - ldr r0, _08048800 @ =gRoomControls - movs r2, #0xc - ldrsh r0, [r0, r2] - adds r0, #0xb8 -_080487F8: - cmp r1, r0 - blt _08048824 - b _08048814 - .align 2, 0 -_08048800: .4byte gRoomControls -_08048804: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r0, _08048828 @ =gRoomControls - movs r2, #0xa - ldrsh r0, [r0, r2] -_0804880E: - subs r0, #0x18 - cmp r1, r0 - bgt _08048824 -_08048814: - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x5a - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0x5e - ands r0, r1 - strb r0, [r4, #0x18] -_08048824: - pop {r4, pc} - .align 2, 0 -_08048828: .4byte gRoomControls - - thumb_func_start sub_0804882C -sub_0804882C: @ 0x0804882C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080488FA - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - bl Random - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x78 - ldrh r0, [r0] - strh r0, [r4, #0x24] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - adds r0, #0x7a - ldrb r0, [r0] - strb r0, [r4, #0x15] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1a - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - cmp r0, #1 - beq _080488D0 - cmp r0, #1 - bgt _080488AA - cmp r0, #0 - beq _080488AE - b _080488D0 -_080488AA: - cmp r0, #2 - bne _080488D0 -_080488AE: - ldr r1, _080488C8 @ =gPlayerEntity - adds r0, r4, #0 - adds r0, #0x74 - ldrh r0, [r0] - ldrh r1, [r1, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - ldr r1, _080488CC @ =gRoomControls - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - ldrh r1, [r1, #0xc] - b _080488E8 - .align 2, 0 -_080488C8: .4byte gPlayerEntity -_080488CC: .4byte gRoomControls -_080488D0: - ldr r1, _080488FC @ =gRoomControls - adds r0, r4, #0 - adds r0, #0x74 - ldrh r0, [r0] - ldrh r1, [r1, #0xa] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - ldr r1, _08048900 @ =gPlayerEntity - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - ldrh r1, [r1, #0x32] -_080488E8: - adds r0, r0, r1 - strh r0, [r4, #0x32] - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _080488FA - movs r0, #0xcc - lsls r0, r0, #1 - bl SoundReq -_080488FA: - pop {r4, pc} - .align 2, 0 -_080488FC: .4byte gRoomControls -_08048900: .4byte gPlayerEntity - - thumb_func_start sub_08048904 -sub_08048904: @ 0x08048904 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F69C - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - cmp r0, #1 - beq _0804893C - cmp r0, #1 - bgt _08048924 - cmp r0, #0 - beq _0804892A - b _0804896C -_08048924: - cmp r0, #2 - beq _08048954 - b _0804896C -_0804892A: - movs r0, #0x32 - ldrsh r1, [r4, r0] - ldr r0, _08048938 @ =gRoomControls - movs r2, #0xc - ldrsh r0, [r0, r2] - b _08048976 - .align 2, 0 -_08048938: .4byte gRoomControls -_0804893C: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r0, _08048950 @ =gRoomControls - movs r2, #0xa - ldrsh r0, [r0, r2] - movs r2, #0x8c - lsls r2, r2, #1 - adds r0, r0, r2 - b _08048960 - .align 2, 0 -_08048950: .4byte gRoomControls -_08048954: - movs r0, #0x32 - ldrsh r1, [r4, r0] - ldr r0, _08048968 @ =gRoomControls - movs r2, #0xc - ldrsh r0, [r0, r2] - adds r0, #0xc8 -_08048960: - cmp r1, r0 - blt _08048980 - b _0804897C - .align 2, 0 -_08048968: .4byte gRoomControls -_0804896C: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r0, _08048984 @ =gRoomControls - movs r2, #0xa - ldrsh r0, [r0, r2] -_08048976: - subs r0, #0x28 - cmp r1, r0 - bgt _08048980 -_0804897C: - bl DeleteThisEntity -_08048980: - pop {r4, pc} - .align 2, 0 -_08048984: .4byte gRoomControls diff --git a/include/enemy/gyorg.h b/include/enemy/gyorg.h index bcd6286c..cad4e6ec 100644 --- a/include/enemy/gyorg.h +++ b/include/enemy/gyorg.h @@ -33,7 +33,8 @@ typedef struct { u16 unk_76; u16 unk_78; u8 unk_7a; - u8 unk_7b[0xD]; + u8 unk_7b; + u8 unk_7c[0xC]; } GyorgChildEntity; typedef struct { diff --git a/include/functions.h b/include/functions.h index 99d3d476..3d646598 100644 --- a/include/functions.h +++ b/include/functions.h @@ -58,7 +58,7 @@ extern void ChangeObjPalette(Entity*, u32); extern void sub_0806FD3C(Entity*); extern void sub_0805ED14(u32*); extern void sub_080A7C18(u32, u32, u32); -extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*)); +extern void sub_0804AA30(Entity*, void (*const funcs[])()); extern void sub_0804A720(Entity*); extern u32 sub_080AEFE0(Entity*); extern u32 sub_08049FA0(Entity*); diff --git a/linker.ld b/linker.ld index a4921b91..effaf018 100644 --- a/linker.ld +++ b/linker.ld @@ -465,7 +465,7 @@ SECTIONS { src/enemy/gyorgMale.o(.text); asm/curtain.o(.text); src/enemy/vaatiWrathEye.o(.text); - asm/gyorgChild.o(.text); + src/enemy/gyorgChild.o(.text); src/enemy/gyorgFemaleEye.o(.text); asm/enemy62.o(.text); src/enemy/gyorgFemaleMouth.o(.text); diff --git a/src/enemy/gyorgChild.c b/src/enemy/gyorgChild.c new file mode 100644 index 00000000..87050067 --- /dev/null +++ b/src/enemy/gyorgChild.c @@ -0,0 +1,172 @@ +#define NENT_DEPRECATED +#include "global.h" +#include "room.h" +#include "functions.h" +#include "enemy/gyorg.h" + +extern void (*const gUnk_080D1E6C[])(GyorgChildEntity*); + +void GyorgChild(Entity* this) { + if (gScreenTransition.field_0x39 == 0) { + this->flags &= ~0x80; + this->health = 0; + this->collisionLayer = 2; + } + gUnk_080D1E6C[GetNextFunction(this)]((GyorgChildEntity*)this); +} + +extern void (*const gUnk_080D1E84[])(GyorgChildEntity*); + +void sub_08048684(GyorgChildEntity* this) { + gUnk_080D1E84[super->action](this); +} + +extern void (*const gUnk_080D1E6C[])(GyorgChildEntity*); + +void sub_0804869C(GyorgChildEntity* this) { + sub_0804AA30(super, gUnk_080D1E6C); +} + +extern void (*const gUnk_080D1E94[])(GyorgChildEntity*); + +void sub_080486AC(GyorgChildEntity* this) { + if (sub_0806F520()) { + gUnk_080D1E94[super->subAction](this); + } +} + +void sub_080486D0(GyorgChildEntity* this) { + super->subAction = 2; +} + +void sub_080486D8(GyorgChildEntity* this) { + sub_0806F4E8(super); +} + +void sub_080486E0(GyorgChildEntity* this) { + if (sub_0806F3E4(super)) { + sub_0804A7D4(super); + } +} + +extern const u8 gUnk_080D1EA0[]; + +void sub_080486F4(GyorgChildEntity* this) { + super->field_0x1c = 1; + super->spriteOrientation.flipY = 3; + super->spriteRendering.b3 = 3; + super->spritePriority.b0 = 7; + super->animationState = super->direction >> 2; + if (super->type == 0) { + s32 r; + InitializeAnimation(super, super->animationState); + super->action = 1; + super->flags |= 0x80; + r = (signed)Random() % 0xB; + super->direction += r; + super->direction -= 5; + super->direction &= 0x1F; + r *= 2; + super->actionDelay = gUnk_080D1EA0[r]; + this->unk_7b = gUnk_080D1EA0[r + 1]; + super->speed = 0x200; + } else { + super->action = 2; + super->actionDelay = 1; + super->spriteSettings.draw = 0; + } +} + +void sub_0804877C(GyorgChildEntity* this) { + sub_0806F69C(super); + if (super->actionDelay != 0) { + if ((--super->actionDelay & 0xF) == 0) { + super->direction += this->unk_7b; + super->direction &= 0x1F; + } + } + switch (super->animationState >> 1) { + case 0: + if (super->y.HALF.HI > gRoomControls.roomScrollY - 0x18) { + return; + } + break; + case 1: + if (super->x.HALF.HI < gRoomControls.roomScrollX + 0x108) { + return; + } + break; + case 2: + if (super->y.HALF.HI < gRoomControls.roomScrollY + 0xb8) { + return; + } + break; + default: + if (super->x.HALF.HI > gRoomControls.roomScrollX - 0x18) { + return; + } + break; + } + super->action = 2; + super->actionDelay = 90; + super->spriteSettings.draw = 0; +} + +void sub_0804882C(GyorgChildEntity* this) { + if (--super->actionDelay == 0) { + super->action = 3; + super->flags |= 0x80; + Random(); + super->spriteSettings.draw = 1; + super->spritePriority.b0 = 4; + super->speed = this->unk_78; + super->collisionLayer = 2; + UpdateSpriteForCollisionLayer(super); + super->direction = this->unk_7a; + super->animationState = super->direction >> 2; + InitializeAnimation(super, super->animationState); + switch (super->animationState >> 1) { + case 0: + case 2: + super->x.HALF.HI = gPlayerEntity.x.HALF.HI + this->unk_74; + super->y.HALF.HI = gRoomControls.roomScrollY + this->unk_76; + break; + case 1: + default: + super->x.HALF.HI = gRoomControls.roomScrollX + this->unk_74; + super->y.HALF.HI = gPlayerEntity.y.HALF.HI + this->unk_76; + break; + } + if (super->type2 == 0) { + SoundReq(SFX_198); + } + } +} + +void sub_08048904(GyorgChildEntity* this) { + sub_0806F69C(super); + GetNextFrame(super); + switch (super->animationState >> 1) { + case 0: + if (super->y.HALF.HI > gRoomControls.roomScrollY - 0x28) { + return; + } + break; + case 1: + if (super->x.HALF.HI < gRoomControls.roomScrollX + 0x118) { + return; + } + break; + case 2: + if (super->y.HALF.HI < gRoomControls.roomScrollY + 0xc8) { + return; + } + break; + default: + if (super->x.HALF.HI > gRoomControls.roomScrollX - 0x28) { + return; + } + break; + } + DeleteThisEntity(); +}