From b738f28239b3508974b0dd1ff6d8da85fd269e75 Mon Sep 17 00:00:00 2001 From: Luis Scheurenbrand Date: Mon, 19 Oct 2020 03:41:28 +0200 Subject: [PATCH] decompile wallMaster2 --- asm/non_matching/wallMaster2/sub_0802CF8C.inc | 50 ++ asm/wallMaster2.s | 499 ------------------ data/data_080CC6FC.s | 15 - linker.ld | 2 + src/enemy/wallMaster2.c | 205 +++++++ 5 files changed, 257 insertions(+), 514 deletions(-) create mode 100644 asm/non_matching/wallMaster2/sub_0802CF8C.inc create mode 100644 src/enemy/wallMaster2.c diff --git a/asm/non_matching/wallMaster2/sub_0802CF8C.inc b/asm/non_matching/wallMaster2/sub_0802CF8C.inc new file mode 100644 index 00000000..2b963bf2 --- /dev/null +++ b/asm/non_matching/wallMaster2/sub_0802CF8C.inc @@ -0,0 +1,50 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, lr} + adds r3, r0, #0 + ldrb r1, [r3, #0x15] + adds r2, r1, #2 + movs r0, #0x1c + ands r2, r0 + ldrb r4, [r3, #0x14] + lsls r0, r4, #2 + subs r0, r2, r0 + adds r0, #6 + cmp r0, #0xc + bls _0802CFA8 + lsrs r0, r2, #2 + b _0802CFB8 +_0802CFA8: + adds r0, r1, #1 + movs r1, #7 + ands r0, r1 + cmp r0, #2 + ble _0802CFD0 + lsrs r0, r2, #2 + cmp r0, r4 + beq _0802CFD0 +_0802CFB8: + strb r0, [r3, #0x14] + lsrs r0, r2, #3 + lsls r0, r0, #2 + ldr r1, _0802CFD4 @ =gUnk_080CD730 + adds r2, r0, r1 + ldrh r1, [r2] + adds r0, r3, #0 + adds r0, #0x74 + strh r1, [r0] + ldrh r1, [r2, #2] + adds r0, #2 + strh r1, [r0] +_0802CFD0: + pop {r4, pc} + .align 2, 0 +_0802CFD4: .4byte gUnk_080CD730 + + .syntax divided \ No newline at end of file diff --git a/asm/wallMaster2.s b/asm/wallMaster2.s index 71bc9e54..a42aa8ad 100644 --- a/asm/wallMaster2.s +++ b/asm/wallMaster2.s @@ -6,502 +6,3 @@ .text - - thumb_func_start WallMaster2 -WallMaster2: @ 0x0802CC3C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0802CC64 @ =gUnk_080CD6FC - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, r5, pc} - .align 2, 0 -_0802CC64: .4byte gUnk_080CD6FC - - thumb_func_start sub_0802CC68 -sub_0802CC68: @ 0x0802CC68 - push {lr} - ldr r2, _0802CC7C @ =gUnk_080CD714 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802CC7C: .4byte gUnk_080CD714 - - thumb_func_start sub_0802CC80 -sub_0802CC80: @ 0x0802CC80 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r5, #0x7f - adds r1, r5, #0 - ands r1, r0 - cmp r1, #0 - blt _0802CCB8 - cmp r1, #1 - ble _0802CC9A - cmp r1, #0x1e - bne _0802CCB8 -_0802CC9A: - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - ldr r2, _0802CCD4 @ =gPlayerEntity - ldrb r1, [r2, #0x10] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r2, #0x10] -_0802CCB8: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802CCCA - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802CCCA: - ldr r1, _0802CCD8 @ =gUnk_080CD6FC - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_0802CCD4: .4byte gPlayerEntity -_0802CCD8: .4byte gUnk_080CD6FC - - thumb_func_start nullsub_151 -nullsub_151: @ 0x0802CCDC - bx lr - .align 2, 0 - - thumb_func_start sub_0802CCE0 -sub_0802CCE0: @ 0x0802CCE0 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r5, #0 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - bl Random - strb r0, [r4, #0xf] - ldrb r1, [r4, #0x18] - movs r0, #0x31 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x20 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xff - strb r0, [r4, #0x14] - ldr r0, _0802CD50 @ =0x0000FFFE - strh r0, [r4, #0x36] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - bl Random - adds r1, r4, #0 - adds r1, #0x7a - strb r0, [r1] - lsrs r0, r0, #8 - movs r1, #0x60 - ands r0, r1 - adds r1, r4, #0 - adds r1, #0x7b - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x7c - strh r5, [r0] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0802CF64 - adds r0, r4, #0 - bl sub_0802CFD8 - pop {r4, r5, pc} - .align 2, 0 -_0802CD50: .4byte 0x0000FFFE - - thumb_func_start sub_0802CD54 -sub_0802CD54: @ 0x0802CD54 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl GetNextFrame - adds r0, r5, #0 - bl sub_0802CFD8 - adds r1, r5, #0 - adds r1, #0x7c - ldrh r0, [r1] - cmp r0, #0 - beq _0802CD76 - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0802CDC8 -_0802CD76: - adds r0, r5, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802CDC8 - adds r6, r5, #0 - adds r6, #0x7b - ldrb r0, [r6] - cmp r0, #0 - bne _0802CDC4 - movs r0, #2 - strb r0, [r5, #0xc] - bl Random - adds r4, r0, #0 - lsrs r0, r4, #0x10 - strb r0, [r5, #0xe] - movs r0, #0xc0 - strh r0, [r5, #0x24] - bl Random - ldr r2, _0802CDC0 @ =gUnk_080CD728 - movs r1, #3 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1] - adds r0, r5, #0 - adds r0, #0x78 - strh r1, [r0] - lsrs r4, r4, #0x18 - movs r0, #0x60 - ands r4, r0 - strb r4, [r6] - b _0802CDE4 - .align 2, 0 -_0802CDC0: .4byte gUnk_080CD728 -_0802CDC4: - subs r0, #1 - strb r0, [r6] -_0802CDC8: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802CDDE - movs r0, #0x3c - strb r0, [r5, #0xe] - adds r0, r5, #0 - bl sub_0802CF64 -_0802CDDE: - adds r0, r5, #0 - bl sub_0806F69C -_0802CDE4: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802CDE8 -sub_0802CDE8: @ 0x0802CDE8 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _0802CE3C - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802CE3C - ldrb r1, [r4, #0xe] - adds r0, r1, #1 - strb r0, [r4, #0xe] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _0802CE2E - ldr r0, _0802CE38 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - adds r0, r4, #0 - bl sub_0802CF8C -_0802CE2E: - adds r0, r4, #0 - bl sub_0806F69C - b _0802CE58 - .align 2, 0 -_0802CE38: .4byte gUnk_020000B0 -_0802CE3C: - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r0, #0x60 - strh r0, [r4, #0x24] - bl Random - movs r1, #0x38 - ands r0, r1 - adds r0, #0x96 - adds r1, r4, #0 - adds r1, #0x7c - strh r0, [r1] -_0802CE58: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0802CFD8 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802CE68 -sub_0802CE68: @ 0x0802CE68 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _0802CED4 @ =gPlayerState - ldrb r1, [r2, #0xa] - movs r0, #0x80 - orrs r1, r0 - strb r1, [r2, #0xa] - ldrb r1, [r2, #0x1a] - orrs r0, r1 - strb r0, [r2, #0x1a] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r5, _0802CED8 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #0 - movs r3, #4 - bl sub_0806FCB8 - cmp r0, #0 - bne _0802CEAC - adds r0, r4, #0 - adds r1, r5, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F69C -_0802CEAC: - adds r0, r4, #0 - bl sub_0802CFD8 - adds r0, r4, #0 - bl GetNextFrame - adds r3, r4, #0 - adds r3, #0x5a - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - beq _0802CEDC - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - b _0802CEF0 - .align 2, 0 -_0802CED4: .4byte gPlayerState -_0802CED8: .4byte gPlayerEntity -_0802CEDC: - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0802CEF0 - strb r2, [r3] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r5, #0x18] -_0802CEF0: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802CEF4 -sub_0802CEF4: @ 0x0802CEF4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802CFD8 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802CF28 - bl sub_0805E5A8 - ldr r1, _0802CF20 @ =gUnk_0813AB1C - ldr r0, _0802CF24 @ =gArea - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl DoExitTransition - b _0802CF5A - .align 2, 0 -_0802CF20: .4byte gUnk_0813AB1C -_0802CF24: .4byte gArea -_0802CF28: - ldr r0, [r4, #0x34] - ldr r1, _0802CF5C @ =0xFFFE0000 - adds r0, r0, r1 - str r0, [r4, #0x34] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #0x30 - rsbs r0, r0, #0 - cmp r1, r0 - bge _0802CF4A - ldrb r0, [r4, #0x18] - movs r1, #0x31 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #0x10 - orrs r1, r0 - strb r1, [r4, #0x18] -_0802CF4A: - ldr r1, _0802CF60 @ =gPlayerState - ldrb r0, [r1, #0xa] - movs r2, #0x80 - orrs r0, r2 - strb r0, [r1, #0xa] - ldrb r0, [r1, #0x1a] - orrs r0, r2 - strb r0, [r1, #0x1a] -_0802CF5A: - pop {r4, pc} - .align 2, 0 -_0802CF5C: .4byte 0xFFFE0000 -_0802CF60: .4byte gPlayerState - - thumb_func_start sub_0802CF64 -sub_0802CF64: @ 0x0802CF64 - push {r4, lr} - adds r4, r0, #0 - bl sub_08049FA0 - cmp r0, #0 - beq _0802CF76 - bl Random - b _0802CF7E -_0802CF76: - adds r0, r4, #0 - bl sub_08049EE4 - adds r0, #2 -_0802CF7E: - movs r1, #0x1c - ands r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_0802CF8C - pop {r4, pc} - - thumb_func_start sub_0802CF8C -sub_0802CF8C: @ 0x0802CF8C - push {r4, lr} - adds r3, r0, #0 - ldrb r1, [r3, #0x15] - adds r2, r1, #2 - movs r0, #0x1c - ands r2, r0 - ldrb r4, [r3, #0x14] - lsls r0, r4, #2 - subs r0, r2, r0 - adds r0, #6 - cmp r0, #0xc - bls _0802CFA8 - lsrs r0, r2, #2 - b _0802CFB8 -_0802CFA8: - adds r0, r1, #1 - movs r1, #7 - ands r0, r1 - cmp r0, #2 - ble _0802CFD0 - lsrs r0, r2, #2 - cmp r0, r4 - beq _0802CFD0 -_0802CFB8: - strb r0, [r3, #0x14] - lsrs r0, r2, #3 - lsls r0, r0, #2 - ldr r1, _0802CFD4 @ =gUnk_080CD730 - adds r2, r0, r1 - ldrh r1, [r2] - adds r0, r3, #0 - adds r0, #0x74 - strh r1, [r0] - ldrh r1, [r2, #2] - adds r0, #2 - strh r1, [r0] -_0802CFD0: - pop {r4, pc} - .align 2, 0 -_0802CFD4: .4byte gUnk_080CD730 - - thumb_func_start sub_0802CFD8 -sub_0802CFD8: @ 0x0802CFD8 - push {lr} - mov ip, r0 - ldr r2, _0802D014 @ =gUnk_080CD740 - mov r3, ip - adds r3, #0x7a - ldrb r0, [r3] - adds r1, r0, #1 - strb r1, [r3] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1b - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - mov r0, ip - adds r0, #0x74 - movs r3, #0 - ldrsh r1, [r0, r3] - adds r1, r1, r2 - movs r0, #0x80 - lsls r0, r0, #1 - adds r2, r2, r0 - mov r0, ip - adds r0, #0x76 - ldrh r3, [r0] - mov r0, ip - bl sub_0805EC9C - pop {pc} - .align 2, 0 -_0802D014: .4byte gUnk_080CD740 diff --git a/data/data_080CC6FC.s b/data/data_080CC6FC.s index 47ff128e..39d44ac7 100644 --- a/data/data_080CC6FC.s +++ b/data/data_080CC6FC.s @@ -3,21 +3,6 @@ .section .rodata -gUnk_080CD6FC:: @ 080CD6FC - .incbin "baserom.gba", 0x0CD6FC, 0x0000018 - -gUnk_080CD714:: @ 080CD714 - .incbin "baserom.gba", 0x0CD714, 0x0000014 - -gUnk_080CD728:: @ 080CD728 - .incbin "baserom.gba", 0x0CD728, 0x0000008 - -gUnk_080CD730:: @ 080CD730 - .incbin "baserom.gba", 0x0CD730, 0x0000010 - -gUnk_080CD740:: @ 080CD740 - .incbin "baserom.gba", 0x0CD740, 0x0000008 - gUnk_080CD748:: @ 080CD748 .incbin "baserom.gba", 0x0CD748, 0x0000014 diff --git a/linker.ld b/linker.ld index f0d63b1c..b7e9253f 100644 --- a/linker.ld +++ b/linker.ld @@ -360,6 +360,7 @@ SECTIONS { src/enemy/helmasaur.o(.text); src/enemy/fallingBoulder.o(.text); src/enemy/bobomb.o(.text); + src/enemy/wallMaster2.o(.text); asm/wallMaster2.o(.text); asm/gleerok.o(.text); asm/vaatiEyesMacro.o(.text); @@ -972,6 +973,7 @@ SECTIONS { data/animations/fallingBoulder.o(.rodata); src/enemy/bobomb.o(.rodata); data/animations/bobomb.o(.rodata); + src/enemy/wallMaster2.o(.rodata); data/data_080CC6FC.o(.rodata); src/enemy.o(.rodata); data/data_080D3D94.o(.rodata); diff --git a/src/enemy/wallMaster2.c b/src/enemy/wallMaster2.c new file mode 100644 index 00000000..a788ad58 --- /dev/null +++ b/src/enemy/wallMaster2.c @@ -0,0 +1,205 @@ +#include "enemy.h" +#include "functions.h" +#include "area.h" + +extern void sub_08001328(Entity*); +extern u32 sub_0806FCB8(Entity*, u32, u32, u32); +extern void DoExitTransition(u32*); + +extern Entity* gUnk_020000B0; +extern u32* gUnk_0813AB1C[]; + +void sub_0802CF64(Entity*); +void sub_0802CF8C(Entity*); +void sub_0802CFD8(Entity*); + +extern void (*const gUnk_080CD6FC[])(Entity*); +extern void (*const gUnk_080CD714[])(Entity*); +extern const u16 gUnk_080CD728[]; +extern const u16 gUnk_080CD730[]; +extern const s8 gUnk_080CD740[]; + +void WallMaster2(Entity* this) { + gUnk_080CD6FC[GetNextFunction(this)](this); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_0802CC68(Entity* this) { + gUnk_080CD714[this->action](this); +} + +void sub_0802CC80(Entity* this) { + u8 bVar1 = this->bitfield & 0x7f; + switch (this->bitfield & 0x7f) { + case 0 ... 1: + case 0x1e: + this->action = 3; + this->flags &= ~0x80; + InitializeAnimation(this, 1); + gPlayerEntity.flags &= ~0x80; + break; + } + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + sub_0804AA30(this, gUnk_080CD6FC); +} + +void nullsub_151(Entity* this) { + /* ... */ +} + +void sub_0802CCE0(Entity* this) { + u32 tmp; + + sub_0804A720(this); + this->action = 1; + this->actionDelay = 60; + this->field_0xf = Random(); + this->spriteSettings.b.shadow = 2; + this->animationState = 0xff; + this->height.HALF.HI = -2; + this->collisionLayer = 3; + tmp = Random(); + this->field_0x7a.HALF.LO = tmp; + this->field_0x7a.HALF.HI = (tmp >> 8) & 0x60; + this->field_0x7c.HALF.LO = 0; + UpdateSpriteForCollisionLayer(this); + InitializeAnimation(this, 0); + sub_0802CF64(this); + sub_0802CFD8(this); +} + +void sub_0802CD54(Entity* this) { + GetNextFrame(this); + sub_0802CFD8(this); + + if ((this->field_0x7c.HALF_U.LO == 0 || --this->field_0x7c.HALF_U.LO == 0) && sub_08049FDC(this, 1)) { + if (this->field_0x7a.HALF.HI) { + --this->field_0x7a.HALF.HI; + } else { + u32 tmp; + + this->action = 2; + tmp = Random() >> 0x10; + this->actionDelay = tmp; + this->nonPlanarMovement = 0xc0; + this->field_0x78.HWORD = gUnk_080CD728[Random() & 3]; + this->field_0x7a.HALF.HI = (tmp >> 8) & 0x60; + return; + } + } + + if (--this->actionDelay == 0) { + this->actionDelay = 60; + sub_0802CF64(this); + } + sub_0806F69C(this); +} + +void sub_0802CDE8(Entity* this) { + if (--this->field_0x78.HWORD && sub_08049FDC(this, 1)) { + if ((this->actionDelay++ & 3) == 0) { + sub_08004596(this, GetFacingDirection(this, gUnk_020000B0)); + sub_0802CF8C(this); + } + sub_0806F69C(this); + } else { + this->action = 1; + this->actionDelay = 60; + this->nonPlanarMovement = 0x60; + this->field_0x7c.HALF.LO = (Random() & 0x38) + 0x96; + } + GetNextFrame(this); + sub_0802CFD8(this); +} + +void sub_0802CE68(Entity* this) { + u8 frames; + + gPlayerState.field_0xa |= 0x80; + gPlayerState.field_0x1a[0] |= 0x80; + gPlayerState.flags.all |= 0x100; + if (!sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 4)) { + this->direction = GetFacingDirection(this, &gPlayerEntity); + sub_0806F69C(this); + } + sub_0802CFD8(this); + GetNextFrame(this); + frames = this->frames.all & 0x80; + if (frames) { + this->action = 4; + this->actionDelay = 30; + } else if (this->frames.all & 1) { + this->frames.all = frames; + gPlayerEntity.spriteSettings.b.draw = 0; + } +} + +void sub_0802CEF4(Entity* this) { + sub_0802CFD8(this); + if (--this->actionDelay == 0) { + sub_0805E5A8(); + DoExitTransition(gUnk_0813AB1C[gArea.regret]); + } else { + this->height.WORD -= 0x20000; + if (this->height.HALF.HI < -0x30) { + this->spriteSettings.b.shadow = 1; + } + gPlayerState.field_0xa |= 0x80; + gPlayerState.field_0x1a[0] |= 0x80; + } +} + +void sub_0802CF64(Entity* this) { + if (sub_08049FA0(this)) { + this->direction = Direction8Round(Random()); + } else { + this->direction = Direction8RoundUp(sub_08049EE4(this)); + } + sub_0802CF8C(this); +} + +NAKED +void sub_0802CF8C(Entity* this) { + asm(".include \"asm/non_matching/wallMaster2/sub_0802CF8C.inc\""); +} + +void sub_0802CFD8(Entity* this) { + u32 unk = gUnk_080CD740[(this->field_0x7a.HALF.LO++ >> 3) & 7]; + sub_0805EC9C(this, (s16)this->field_0x74.HWORD + unk, 0x100 + unk, this->field_0x76.HWORD); +} + +// clang-format off +void (*const gUnk_080CD6FC[])(Entity*) = { + sub_0802CC68, + sub_0802CC80, + sub_08001328, + sub_0804A7D4, + sub_08001242, + nullsub_151, +}; + +void (*const gUnk_080CD714[])(Entity*) = { + sub_0802CCE0, + sub_0802CD54, + sub_0802CDE8, + sub_0802CE68, + sub_0802CEF4, +}; + +const u16 gUnk_080CD728[] = { + 120, 180, 240, 300, +}; + +const u16 gUnk_080CD730[] = { + 0xff00, 0x4000, + 0xff00, 0x0000, + 0x0100, 0x0000, + 0x0100, 0xc000, +}; + +const s8 gUnk_080CD740[] = { + -2, -4, -2, 0, 2, 4, 2, 0, +}; +// clang-format on