From b4513a1b4f8d671ce42829cee79a3b01ace1c4e9 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Wed, 5 Aug 2020 17:34:18 +0200 Subject: [PATCH 01/19] add some entity functions --- asm/code_0805E744.s | 154 +------------------------------------------- linker.ld | 3 +- src/entity.c | 130 +++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 154 deletions(-) create mode 100644 src/entity.c diff --git a/asm/code_0805E744.s b/asm/code_0805E744.s index c57c1fd1..ae443c87 100644 --- a/asm/code_0805E744.s +++ b/asm/code_0805E744.s @@ -5,158 +5,6 @@ .text - thumb_func_start sub_0805E744 -sub_0805E744: @ 0x0805E744 - push {lr} - ldr r1, _0805E760 @ =gUnk_030011E8 - movs r0, #0xee - lsls r0, r0, #2 - adds r2, r1, r0 -_0805E74E: - ldr r0, [r1] - cmp r0, #0 - beq _0805E764 - adds r1, #0x88 - cmp r1, r2 - blo _0805E74E - movs r0, #0 - b _0805E766 - .align 2, 0 -_0805E760: .4byte gUnk_030011E8 -_0805E764: - adds r0, r1, #0 -_0805E766: - pop {pc} - - thumb_func_start sub_0805E768 -sub_0805E768: @ 0x0805E768 - push {lr} - ldr r1, _0805E778 @ =GetEmptyEntity - cmp r0, #9 - bne _0805E772 - ldr r1, _0805E77C @ =sub_0805E8D4 -_0805E772: - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805E778: .4byte GetEmptyEntity -_0805E77C: .4byte sub_0805E8D4 - - thumb_func_start DeleteThisEntity -DeleteThisEntity: @ 0x0805E780 - push {lr} - ldr r0, _0805E794 @ =gUnk_03003DD0 - ldr r0, [r0, #8] - bl sub_0805E79C - ldr r0, _0805E798 @ =gUnk_03005F24 - bl _call_via_r0 - pop {pc} - .align 2, 0 -_0805E794: .4byte gUnk_03003DD0 -_0805E798: .4byte gUnk_03005F24 - - thumb_func_start sub_0805E79C -sub_0805E79C: @ 0x0805E79C - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #8] - ldr r2, _0805E7B4 @ =DeleteEntity - cmp r0, #9 - bne _0805E7AA - ldr r2, _0805E7B8 @ =sub_0805E900 -_0805E7AA: - adds r0, r1, #0 - bl _call_via_r2 - pop {pc} - .align 2, 0 -_0805E7B4: .4byte DeleteEntity -_0805E7B8: .4byte sub_0805E900 - - thumb_func_start DeleteEntity -DeleteEntity: @ 0x0805E7BC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #4] - cmp r0, #0 - beq _0805E84A - adds r0, r4, #0 - bl sub_080AE068 - adds r0, r4, #0 - bl sub_0801D230 - adds r0, r4, #0 - bl sub_0806FE84 - adds r0, r4, #0 - bl sub_080788E0 - adds r0, r4, #0 - bl sub_08078954 - adds r0, r4, #0 - bl sub_0805EC60 - adds r0, r4, #0 - bl sub_08017744 - adds r0, r4, #0 - bl sub_0805E92C - adds r0, r4, #0 - bl sub_0807DB08 - adds r0, r4, #0 - bl sub_0806FBEC - ldr r0, [r4, #0x64] - bl sub_0801DA0C - movs r5, #0 - str r5, [r4, #0x64] - ldrb r0, [r4, #8] - cmp r0, #3 - bne _0805E818 - adds r0, r4, #0 - bl sub_0804AA1C -_0805E818: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x3c - strb r5, [r0] - adds r0, #5 - strb r5, [r0] - adds r0, #1 - strb r5, [r0] - adds r0, #3 - strb r5, [r0] - adds r0, r4, #0 - bl sub_0805EA98 - str r5, [r4, #4] - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r4] -_0805E84A: - pop {r4, r5, pc} - - thumb_func_start sub_0805E84C -sub_0805E84C: @ 0x0805E84C - push {r4, r5, lr} - ldr r4, _0805E86C @ =gLinkEntity - movs r0, #0xaa - lsls r0, r0, #6 - adds r5, r4, r0 -_0805E856: - ldr r0, [r4] - cmp r0, #0 - bge _0805E862 - adds r0, r4, #0 - bl sub_0805E870 -_0805E862: - adds r4, #0x88 - cmp r4, r5 - blo _0805E856 - pop {r4, r5, pc} - .align 2, 0 -_0805E86C: .4byte gLinkEntity - thumb_func_start sub_0805E870 sub_0805E870: @ 0x0805E870 sub sp, #4 @@ -2934,4 +2782,4 @@ _0805FD1C: bl DeleteThisEntity _0805FD20: pop {r4, r5, pc} - .align 2, 0 + .align 2, 0 \ No newline at end of file diff --git a/linker.ld b/linker.ld index 8720510b..6758bc9c 100644 --- a/linker.ld +++ b/linker.ld @@ -530,7 +530,8 @@ SECTIONS { src/sub_0805E3A0.o(.text); asm/code_0805E3B0.o(.text); asm/getEmptyEntity.o(.text); - asm/code_0805E744.o(.text); + src/entity.o(.text); + asm/code_0805E84C.o(.text); /* npcs */ src/npc/gentari.o(.text); src/npc/festari.o(.text); diff --git a/src/entity.c b/src/entity.c new file mode 100644 index 00000000..6030b7ac --- /dev/null +++ b/src/entity.c @@ -0,0 +1,130 @@ +#include "global.h" +#include "entity.h" + +extern Entity gUnk_030011E8[7]; + +Entity* sub_0805E744(void) + +{ + Entity* pEVar1 = gUnk_030011E8; + int i = 0; + + do { + if (pEVar1->field_0x0 == NULL) { + return pEVar1; + } + pEVar1 = pEVar1 + 1; + } while (pEVar1 < &gUnk_030011E8[7]); + return NULL; +} + +extern Entity* GetEmptyEntity(); +extern Entity* sub_0805E8D4(); + +Entity* sub_0805E768(int type) + +{ + Entity* (*getter)(void) = NULL; + if (type == 9) { + getter = sub_0805E8D4; + } else { + getter = GetEmptyEntity; + } + return getter(); +} +typedef struct { + int field_0x0; + int field_0x4; + Entity* field_0x8; + int field_0xc; +} struct_03003DD0; + +extern struct_03003DD0 gUnk_03003DD0; +extern u32 _call_via_r0(u32*); +extern void gUnk_03005F24(); +extern void sub_0805E79C(Entity*); + +void DeleteThisEntity(void) + +{ + sub_0805E79C(gUnk_03003DD0.field_0x8); + _call_via_r0((u32*)&gUnk_03005F24); + return; +} + +extern void DeleteEntity(Entity*); +extern void sub_0805E900(Entity*); + +void sub_0805E79C(Entity* ent) + +{ + void (*deleter)(Entity*) = NULL; + if (ent->entityType.type == 9) { + deleter = sub_0805E900; + } else { + deleter = DeleteEntity; + } + deleter(ent); +} + +extern void sub_080AE068(); +extern void sub_0801D230(); +extern void sub_0806FE84(); +extern void sub_080788E0(); +extern void sub_08078954(); +extern void sub_0805EC60(); +extern void sub_08017744(); +extern void sub_0805E92C(); +extern void sub_0807DB08(); +extern void sub_0806FBEC(); +extern void sub_0801DA0C(); +extern void sub_0804AA1C(); +extern void sub_0805EA98(); // Unlink + +void DeleteEntity(Entity* ent) + +{ + if (ent->field_0x4) { + sub_080AE068(ent); + sub_0801D230(ent); + sub_0806FE84(ent); + sub_080788E0(ent); + sub_08078954(ent); + sub_0805EC60(ent); + sub_08017744(ent); + sub_0805E92C(ent); + sub_0807DB08(ent); + sub_0806FBEC(ent); + sub_0801DA0C(ent->otherEntity); + ent->otherEntity = NULL; + if ((ent->entityType).type == '\x03') { + sub_0804AA1C(ent); + } + ent->flags = ent->flags & 0x7f; + ent->spriteSettings = ent->spriteSettings; + ent->spriteSettings.b.draw = 0; + ent->field_0x3c = 0; + ent->bitfield = 0; + ent->field_0x42 = 0; + ent->currentHealth = 0; + sub_0805EA98(ent); + ent->field_0x4 = NULL; + ent->field_0x0 = (u32*)0xffffffff; + } +} + +extern Entity gLinkEntity; +void sub_0805E870(Entity*); + +void sub_0805E84C(void) + +{ + Entity* pEVar1 = &gLinkEntity; + do { + if ((int)pEVar1->field_0x0 < 0) { + sub_0805E870(pEVar1); + } + pEVar1 = pEVar1 + 1; + } while (pEVar1 < (&gLinkEntity + 80)); + return; +} From b235f9ae3e291a0fcf330440241700730262bfd6 Mon Sep 17 00:00:00 2001 From: notyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com> Date: Wed, 5 Aug 2020 21:01:23 -0700 Subject: [PATCH 02/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f8ea57d6..04250606 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The Legend of Zelda: The Minish Cap -**Progress:** [⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 5% +**Progress:** [⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 10% ```diff - WARNING! - From 6250d7ce7218ed94cad33e52ab9f85ab52fa757e Mon Sep 17 00:00:00 2001 From: Behemoth Date: Thu, 6 Aug 2020 21:00:49 +0200 Subject: [PATCH 03/19] more entity stuff --- asm/code_0805E744.s | 530 -------------------------------------------- include/area.h | 4 + include/entity.h | 2 +- linker.ld | 2 +- src/entity.c | 339 +++++++++++++++++++++++++++- 5 files changed, 333 insertions(+), 544 deletions(-) diff --git a/asm/code_0805E744.s b/asm/code_0805E744.s index a4ec55ca..d1fca8c7 100644 --- a/asm/code_0805E744.s +++ b/asm/code_0805E744.s @@ -5,536 +5,6 @@ .text - thumb_func_start sub_0805E870 -sub_0805E870: @ 0x0805E870 - sub sp, #4 - movs r1, #0 - str r1, [sp] - ldr r1, _0805E890 @ =0x040000D4 - mov r2, sp - str r2, [r1] - str r0, [r1, #4] - ldr r0, _0805E894 @ =0x85000022 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r1, _0805E898 @ =gUnk_03003DBC - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - add sp, #4 - bx lr - .align 2, 0 -_0805E890: .4byte 0x040000D4 -_0805E894: .4byte 0x85000022 -_0805E898: .4byte gUnk_03003DBC - - thumb_func_start sub_0805E89C -sub_0805E89C: @ 0x0805E89C - push {r4, r5, r6, lr} - ldr r5, _0805E8CC @ =gUnk_03003D70 - ldr r0, [r5, #4] - cmp r0, #0 - beq _0805E8C8 -_0805E8A6: - ldr r0, [r5, #4] - adds r6, r5, #0 - adds r6, #8 - cmp r0, r5 - beq _0805E8BC -_0805E8B0: - ldr r4, [r0, #4] - bl sub_0805E79C - adds r0, r4, #0 - cmp r0, r5 - bne _0805E8B0 -_0805E8BC: - adds r5, r6, #0 - ldr r0, _0805E8D0 @ =gUnk_03003DB8 - cmp r5, r0 - blo _0805E8A6 - bl sub_0805E84C -_0805E8C8: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805E8CC: .4byte gUnk_03003D70 -_0805E8D0: .4byte gUnk_03003DB8 - - thumb_func_start sub_0805E8D4 -sub_0805E8D4: @ 0x0805E8D4 - push {lr} - ldr r1, _0805E8F0 @ =gUnk_02033290 - movs r2, #0x80 - lsls r2, r2, #4 - adds r0, r1, r2 - cmp r1, r0 - bhs _0805E8FA - adds r2, r0, #0 -_0805E8E4: - ldr r0, [r1] - cmp r0, #0 - bne _0805E8F4 - adds r0, r1, #0 - b _0805E8FC - .align 2, 0 -_0805E8F0: .4byte gUnk_02033290 -_0805E8F4: - adds r1, #0x40 - cmp r1, r2 - blo _0805E8E4 -_0805E8FA: - movs r0, #0 -_0805E8FC: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805E900 -sub_0805E900: @ 0x0805E900 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #4] - cmp r0, #0 - beq _0805E926 - adds r0, r4, #0 - bl sub_0805E92C - adds r0, r4, #0 - bl sub_0805EA98 - adds r0, r4, #0 - movs r1, #0x40 - bl _DmaZero - ldr r1, _0805E928 @ =gUnk_020354B4 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] -_0805E926: - pop {r4, pc} - .align 2, 0 -_0805E928: .4byte gUnk_020354B4 - - thumb_func_start sub_0805E92C -sub_0805E92C: @ 0x0805E92C - push {lr} - ldr r2, _0805E94C @ =gArea - ldr r1, _0805E950 @ =0x00000888 - adds r3, r2, r1 - ldr r1, [r3] - cmp r0, r1 - bne _0805E94A - movs r0, #0 - str r0, [r3] - ldr r3, _0805E954 @ =0x0000088C - adds r1, r2, r3 - str r0, [r1] - adds r3, #4 - adds r1, r2, r3 - str r0, [r1] -_0805E94A: - pop {pc} - .align 2, 0 -_0805E94C: .4byte gArea -_0805E950: .4byte 0x00000888 -_0805E954: .4byte 0x0000088C - - thumb_func_start sub_0805E958 -sub_0805E958: @ 0x0805E958 - push {lr} - ldr r0, _0805E96C @ =gUnk_03003D70 - ldr r1, _0805E970 @ =gUnk_020369F0 - movs r2, #0x48 - bl sub_0801D66C - bl sub_0805E98C - pop {pc} - .align 2, 0 -_0805E96C: .4byte gUnk_03003D70 -_0805E970: .4byte gUnk_020369F0 - - thumb_func_start sub_0805E974 -sub_0805E974: @ 0x0805E974 - push {lr} - ldr r0, _0805E984 @ =gUnk_020369F0 - ldr r1, _0805E988 @ =gUnk_03003D70 - movs r2, #0x48 - bl sub_0801D66C - pop {pc} - .align 2, 0 -_0805E984: .4byte gUnk_020369F0 -_0805E988: .4byte gUnk_03003D70 - - thumb_func_start sub_0805E98C -sub_0805E98C: @ 0x0805E98C - push {lr} - ldr r0, _0805E9A4 @ =gUnk_03003D70 - adds r1, r0, #0 - adds r1, #0x48 - cmp r0, r1 - bhs _0805E9A2 -_0805E998: - str r0, [r0] - str r0, [r0, #4] - adds r0, #8 - cmp r0, r1 - blo _0805E998 -_0805E9A2: - pop {pc} - .align 2, 0 -_0805E9A4: .4byte gUnk_03003D70 - - thumb_func_start sub_0805E9A8 -sub_0805E9A8: @ 0x0805E9A8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r3, _0805E9F0 @ =gUnk_03003D70 - movs r7, #0x10 - movs r0, #0x48 - adds r0, r0, r3 - mov r8, r0 -_0805E9B8: - ldr r2, [r3, #4] - adds r4, r3, #0 - adds r4, #8 - cmp r2, r3 - beq _0805E9E2 - movs r6, #0xfd - movs r5, #0x20 -_0805E9C6: - ldrb r0, [r2, #0x10] - adds r1, r6, #0 - ands r1, r0 - strb r1, [r2, #0x10] - adds r0, r1, #0 - ands r0, r5 - cmp r0, #0 - bne _0805E9DC - adds r0, r1, #0 - orrs r0, r7 - strb r0, [r2, #0x10] -_0805E9DC: - ldr r2, [r2, #4] - cmp r2, r3 - bne _0805E9C6 -_0805E9E2: - adds r3, r4, #0 - cmp r3, r8 - blo _0805E9B8 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805E9F0: .4byte gUnk_03003D70 - - thumb_func_start sub_0805E9F4 -sub_0805E9F4: @ 0x0805E9F4 - push {r4, r5, r6, lr} - ldr r5, _0805EA24 @ =gUnk_03003D70 -_0805E9F8: - ldr r2, [r5, #4] - adds r6, r5, #0 - adds r6, #8 - cmp r2, r5 - beq _0805EA1A -_0805EA02: - ldr r4, [r2, #4] - ldrb r1, [r2, #0x10] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0805EA14 - adds r0, r2, #0 - bl sub_0805E79C -_0805EA14: - adds r2, r4, #0 - cmp r2, r5 - bne _0805EA02 -_0805EA1A: - adds r5, r6, #0 - ldr r0, _0805EA28 @ =gUnk_03003DB8 - cmp r5, r0 - blo _0805E9F8 - pop {r4, r5, r6, pc} - .align 2, 0 -_0805EA24: .4byte gUnk_03003D70 -_0805EA28: .4byte gUnk_03003DB8 - - thumb_func_start sub_0805EA2C -sub_0805EA2C: @ 0x0805EA2C - push {lr} - adds r2, r0, #0 - lsls r1, r1, #3 - ldr r0, _0805EA5C @ =gUnk_03003D70 - adds r1, r1, r0 - str r1, [r2, #4] - ldr r0, [r1] - str r0, [r2] - str r2, [r0, #4] - str r2, [r1] - ldrb r0, [r2, #8] - cmp r0, #9 - beq _0805EA64 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r3] - ldr r1, _0805EA60 @ =gUnk_03003DBC - b _0805EA66 - .align 2, 0 -_0805EA5C: .4byte gUnk_03003D70 -_0805EA60: .4byte gUnk_03003DBC -_0805EA64: - ldr r1, _0805EA74 @ =gUnk_020354B4 -_0805EA66: - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - adds r0, r2, #0 - bl sub_0805E374 - pop {pc} - .align 2, 0 -_0805EA74: .4byte gUnk_020354B4 - - thumb_func_start sub_0805EA78 -sub_0805EA78: @ 0x0805EA78 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - bl sub_0805EA98 - lsls r4, r4, #3 - ldr r0, _0805EA94 @ =gUnk_03003D70 - adds r4, r4, r0 - str r4, [r5] - ldr r0, [r4, #4] - str r0, [r5, #4] - str r5, [r0] - str r5, [r4, #4] - pop {r4, r5, pc} - .align 2, 0 -_0805EA94: .4byte gUnk_03003D70 - - thumb_func_start sub_0805EA98 -sub_0805EA98: @ 0x0805EA98 - push {lr} - adds r2, r0, #0 - ldr r1, _0805EAB8 @ =gUnk_03003DD0 - ldr r0, [r1, #8] - cmp r2, r0 - bne _0805EAA8 - ldr r0, [r2] - str r0, [r1, #8] -_0805EAA8: - ldr r1, [r2] - ldr r0, [r2, #4] - str r0, [r1, #4] - ldr r1, [r2, #4] - ldr r0, [r2] - str r0, [r1] - pop {pc} - .align 2, 0 -_0805EAB8: .4byte gUnk_03003DD0 - - thumb_func_start sub_0805EABC -sub_0805EABC: @ 0x0805EABC - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldr r4, _0805EAE8 @ =gUnk_03003D70 - adds r7, r4, #0 - adds r7, #0x48 -_0805EAC6: - ldr r3, [r4, #4] - cmp r3, r4 - beq _0805EAF6 - ldr r5, _0805EAEC @ =0x0000FFFF -_0805EACE: - cmp r3, r6 - beq _0805EAF0 - ldrh r0, [r3, #8] - ldrh r2, [r6, #8] - adds r1, r5, #0 - ands r1, r0 - adds r0, r5, #0 - ands r0, r2 - cmp r1, r0 - bne _0805EAF0 - movs r0, #1 - b _0805EAFE - .align 2, 0 -_0805EAE8: .4byte gUnk_03003D70 -_0805EAEC: .4byte 0x0000FFFF -_0805EAF0: - ldr r3, [r3, #4] - cmp r3, r4 - bne _0805EACE -_0805EAF6: - adds r4, #8 - cmp r4, r7 - blo _0805EAC6 - movs r0, #0 -_0805EAFE: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0805EB00 -sub_0805EB00: @ 0x0805EB00 - push {r4, lr} - adds r3, r0, #0 - lsls r2, r2, #3 - ldr r0, _0805EB28 @ =gUnk_03003D70 - adds r2, r2, r0 - ldr r0, [r2, #4] - cmp r0, r2 - beq _0805EB22 -_0805EB10: - ldrb r4, [r0, #8] - cmp r3, r4 - bne _0805EB1C - ldrb r4, [r0, #9] - cmp r1, r4 - beq _0805EB24 -_0805EB1C: - ldr r0, [r0, #4] - cmp r0, r2 - bne _0805EB10 -_0805EB22: - movs r0, #0 -_0805EB24: - pop {r4, pc} - .align 2, 0 -_0805EB28: .4byte gUnk_03003D70 - - thumb_func_start sub_0805EB2C -sub_0805EB2C: @ 0x0805EB2C - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r5, [sp, #0x10] - lsls r2, r2, #3 - ldr r0, _0805EB60 @ =gUnk_03003D70 - adds r2, r2, r0 - ldr r0, [r2, #4] - cmp r0, r2 - beq _0805EB5C -_0805EB3E: - ldrb r6, [r0, #8] - cmp r4, r6 - bne _0805EB56 - ldrb r6, [r0, #9] - cmp r1, r6 - bne _0805EB56 - ldrb r6, [r0, #0xa] - cmp r3, r6 - bne _0805EB56 - ldrb r6, [r0, #0xb] - cmp r5, r6 - beq _0805EB5E -_0805EB56: - ldr r0, [r0, #4] - cmp r0, r2 - bne _0805EB3E -_0805EB5C: - movs r0, #0 -_0805EB5E: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805EB60: .4byte gUnk_03003D70 - - thumb_func_start sub_0805EB64 -sub_0805EB64: @ 0x0805EB64 - push {r4, r5, lr} - adds r4, r0, #0 - lsls r1, r1, #3 - ldr r0, _0805EB88 @ =gUnk_03003D70 - adds r3, r1, r0 - ldr r2, [r4, #4] - cmp r2, r3 - beq _0805EB96 - ldr r5, _0805EB8C @ =0x0000FFFF - ldrh r4, [r4, #8] -_0805EB78: - ldrh r1, [r2, #8] - adds r0, r5, #0 - ands r0, r1 - cmp r0, r4 - bne _0805EB90 - adds r0, r2, #0 - b _0805EB98 - .align 2, 0 -_0805EB88: .4byte gUnk_03003D70 -_0805EB8C: .4byte 0x0000FFFF -_0805EB90: - ldr r2, [r2, #4] - cmp r2, r3 - bne _0805EB78 -_0805EB96: - movs r0, #0 -_0805EB98: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0805EB9C -sub_0805EB9C: @ 0x0805EB9C - push {r4, r5, lr} - adds r3, r0, #0 - ldr r2, _0805EBC8 @ =gUnk_03003D70 - adds r4, r2, #0 - adds r4, #0x48 -_0805EBA6: - ldr r0, [r2, #4] - cmp r0, r2 - beq _0805EBBE -_0805EBAC: - ldrb r5, [r0, #8] - cmp r3, r5 - bne _0805EBB8 - ldrb r5, [r0, #9] - cmp r1, r5 - beq _0805EBC6 -_0805EBB8: - ldr r0, [r0, #4] - cmp r0, r2 - bne _0805EBAC -_0805EBBE: - adds r2, #8 - cmp r2, r4 - blo _0805EBA6 - movs r0, #0 -_0805EBC6: - pop {r4, r5, pc} - .align 2, 0 -_0805EBC8: .4byte gUnk_03003D70 - - thumb_func_start sub_0805EBCC -sub_0805EBCC: @ 0x0805EBCC - push {r4, r5, r6, lr} - ldr r5, _0805EBFC @ =gUnk_03003D70 -_0805EBD0: - ldr r1, [r5, #4] - adds r6, r5, #0 - adds r6, #8 - cmp r1, r5 - beq _0805EBEE -_0805EBDA: - ldr r4, [r1, #4] - ldrb r0, [r1, #8] - cmp r0, #3 - bne _0805EBE8 - adds r0, r1, #0 - bl DeleteEntity -_0805EBE8: - adds r1, r4, #0 - cmp r1, r5 - bne _0805EBDA -_0805EBEE: - adds r5, r6, #0 - ldr r0, _0805EC00 @ =gUnk_03003DB8 - cmp r5, r0 - blo _0805EBD0 - bl sub_0805E84C - pop {r4, r5, r6, pc} - .align 2, 0 -_0805EBFC: .4byte gUnk_03003D70 -_0805EC00: .4byte gUnk_03003DB8 - thumb_func_start sub_0805EC04 sub_0805EC04: @ 0x0805EC04 push {r4, r5, r6, r7, lr} diff --git a/include/area.h b/include/area.h index ce0b325c..e705944d 100644 --- a/include/area.h +++ b/include/area.h @@ -17,6 +17,10 @@ typedef struct { u8 filler4[0x835]; u32 musicIndex; u32 pMusicIndex; + u8 filler5[0x20]; + u32 unk2; + u32 unk3; + u32 unk4; } Area; extern Area gArea; diff --git a/include/entity.h b/include/entity.h index e717c9e1..0b76eaa5 100644 --- a/include/entity.h +++ b/include/entity.h @@ -26,7 +26,7 @@ typedef struct { } BoundingBox; typedef struct Entity { - /*0x00*/ u32* field_0x0; + /*0x00*/ struct Entity* field_0x0; /*0x04*/ struct Entity* field_0x4; /*0x08*/ EntityType entityType; /*0x0c*/ u8 action; diff --git a/linker.ld b/linker.ld index eb042eea..820bdbf1 100644 --- a/linker.ld +++ b/linker.ld @@ -531,7 +531,7 @@ SECTIONS { asm/code_0805E3B0.o(.text); asm/getEmptyEntity.o(.text); src/entity.o(.text); - asm/code_0805E84C.o(.text); + asm/code_0805E744.o(.text); /* npcs */ src/npc/gentari.o(.text); src/npc/festari.o(.text); diff --git a/src/entity.c b/src/entity.c index 6030b7ac..d1e87ff8 100644 --- a/src/entity.c +++ b/src/entity.c @@ -1,6 +1,13 @@ #include "global.h" #include "entity.h" +typedef struct OtherEntity { + struct OtherEntity* prev; + struct OtherEntity* next; + Entity* field_0x8; + u8 field_0xC[0x34]; +} OtherEntity; + extern Entity gUnk_030011E8[7]; Entity* sub_0805E744(void) @@ -19,16 +26,18 @@ Entity* sub_0805E744(void) } extern Entity* GetEmptyEntity(); -extern Entity* sub_0805E8D4(); +OtherEntity* sub_0805E8D4(); -Entity* sub_0805E768(int type) +typedef void* (*Getter)(void); + +void* sub_0805E768(int type) { - Entity* (*getter)(void) = NULL; + Getter getter = NULL; if (type == 9) { - getter = sub_0805E8D4; + getter = (Getter)sub_0805E8D4; } else { - getter = GetEmptyEntity; + getter = (Getter)GetEmptyEntity; } return getter(); } @@ -41,7 +50,7 @@ typedef struct { extern struct_03003DD0 gUnk_03003DD0; extern u32 _call_via_r0(u32*); -extern void gUnk_03005F24(); +extern u32 gUnk_03005F24; extern void sub_0805E79C(Entity*); void DeleteThisEntity(void) @@ -52,17 +61,19 @@ void DeleteThisEntity(void) return; } -extern void DeleteEntity(Entity*); -extern void sub_0805E900(Entity*); +void DeleteEntity(Entity*); +void sub_0805E900(OtherEntity*); + +typedef void (*Deleter)(void*); void sub_0805E79C(Entity* ent) { - void (*deleter)(Entity*) = NULL; + Deleter deleter = NULL; if (ent->entityType.type == 9) { - deleter = sub_0805E900; + deleter = (Deleter)sub_0805E900; } else { - deleter = DeleteEntity; + deleter = (Deleter)DeleteEntity; } deleter(ent); } @@ -109,7 +120,7 @@ void DeleteEntity(Entity* ent) ent->currentHealth = 0; sub_0805EA98(ent); ent->field_0x4 = NULL; - ent->field_0x0 = (u32*)0xffffffff; + ent->field_0x0 = (Entity*)0xffffffff; } } @@ -128,3 +139,307 @@ void sub_0805E84C(void) } while (pEVar1 < (&gLinkEntity + 80)); return; } + +extern u8 gUnk_03003DBC; + +void sub_0805E870(Entity* ent) + +{ + DmaClear32(3, ent, sizeof(Entity)); + gUnk_03003DBC--; +} + +typedef struct struct_03003D70 { + void* field_0x0; + void* field_0x4; +} struct_03003D70; + +extern struct_03003D70 gUnk_03003D70[9]; +extern EntityType gUnk_03003DB8; + +void sub_0805E89C(void) + +{ + Entity* pEVar1; + Entity* next; + struct_03003D70* it; + + it = gUnk_03003D70; + if (it->field_0x4 != 0) { + do { + next = it->field_0x4; + while (pEVar1 = next, (u32)pEVar1 != (u32)it) { + next = pEVar1->field_0x4; + sub_0805E79C(pEVar1); + } + it++; + } while (it < (gUnk_03003D70 + 9)); + sub_0805E84C(); + } +} + +extern OtherEntity gUnk_02033290; + +OtherEntity* sub_0805E8D4(void) + +{ + OtherEntity* it; + for (it = &gUnk_02033290; it < (&gUnk_02033290 + 32); it++) { + if (it->prev == 0) { + return it; + } + } + return NULL; +} + +extern void _DmaZero(void*, u32); +extern u8 gUnk_020354B4; + +void sub_0805E900(OtherEntity* ent) + +{ + if (!ent->next) + return; + + sub_0805E92C(ent); + sub_0805EA98(ent); + _DmaZero(ent, 0x40); + gUnk_020354B4--; +} + +#include "area.h" + +void sub_0805E92C(u32 param_1) + +{ + if (param_1 == gArea.unk2) { + gArea.unk2 = 0; + gArea.unk3 = 0; + gArea.unk4 = 0; + } +} + +extern Entity gUnk_020369F0; +extern void sub_0801D66C(void* dst, void* src, size_t size); // dma copy +extern void sub_0805E98C(void); + +void sub_0805E958(void) + +{ + sub_0801D66C(&gUnk_03003D70, &gUnk_020369F0, 0x48); + sub_0805E98C(); +} + +void sub_0805E974(void) + +{ + sub_0801D66C(&gUnk_020369F0, &gUnk_03003D70, 0x48); +} + +void sub_0805E98C(void) + +{ + struct_03003D70* it; + + for (it = gUnk_03003D70; it < &gUnk_03003D70[9]; it++) { + it->field_0x0 = it; + it->field_0x4 = (Entity*)it; + } +} + +void sub_0805E9A8(void) + +{ + Entity* entry; + struct_03003D70* it; + + it = gUnk_03003D70; + do { + for (entry = (Entity*)it->field_0x4; (u32)entry != (u32)it; entry = entry->field_0x4) { + entry->flags &= 0xfd; + if ((entry->flags & 0x20) == 0) { + entry->flags |= 0x10; + } + } + it++; + } while (it < (gUnk_03003D70 + 9)); +} + +void sub_0805E9F4(void) + +{ + Entity* pEVar1; + Entity* next; + struct_03003D70* it; + + it = gUnk_03003D70; + do { + next = it->field_0x4; + while (pEVar1 = next, (u32)pEVar1 != (u32)it) { + next = pEVar1->field_0x4; + if ((pEVar1->flags & 0x10) != 0) { + sub_0805E79C(pEVar1); + } + } + it++; + } while (it < (gUnk_03003D70 + 9)); +} + +extern void sub_0805E374(Entity*); + +void sub_0805EA2C(Entity* ent, int kind) + +{ + Entity* pEVar1; + struct_03003D70* pEVar2; + + pEVar2 = (gUnk_03003D70 + kind); + ent->field_0x4 = (Entity*)pEVar2; + pEVar1 = pEVar2->field_0x0; + ent->field_0x0 = pEVar1; + pEVar1->field_0x4 = ent; + pEVar2->field_0x0 = ent; + if ((ent->entityType).type != 9) { + ent->spritePriority.b0 = 4; + gUnk_03003DBC++; + } else { + gUnk_020354B4++; + } + sub_0805E374(ent); +} + +void sub_0805EA78(Entity* ent, int kind) + +{ + struct_03003D70* it; + + sub_0805EA98(ent); + it = &gUnk_03003D70[kind]; + ent->field_0x0 = (Entity*)it; + ent->field_0x4 = it->field_0x4; + ((Entity*)it->field_0x4)->field_0x0 = ent; + it->field_0x4 = ent; +} + +void sub_0805EA98(Entity* ent) + +{ + if (ent == gUnk_03003DD0.field_0x8) { + gUnk_03003DD0.field_0x8 = ent->field_0x0; + } + ent->field_0x0->field_0x4 = ent->field_0x4; + ent->field_0x4->field_0x0 = ent->field_0x0; +} + +int sub_0805EABC(Entity* ent) + +{ + Entity* psVar1; + struct_03003D70 *it, *end; + + it = gUnk_03003D70; + end = (gUnk_03003D70 + 9); + do { + psVar1 = (Entity*)it->field_0x4; + while ((u32)psVar1 != (u32)it) { + if ((u32)psVar1 != (u32)ent && psVar1->entityType.type == ent->entityType.type && + psVar1->entityType.subtype == ent->entityType.subtype) { + return 1; + } + psVar1 = psVar1->field_0x4; + } + it++; + } while (it < end); + + return 0; +} + +Entity* sub_0805EB00(int type, int subtype, int kind) + +{ + Entity* it; + struct_03003D70* node; + + node = &gUnk_03003D70[kind]; + it = (Entity*)node->field_0x4; + while ((u32)it != (u32)node) { + if ((type == (it->entityType).type) && (subtype == (it->entityType).subtype)) + return it; + it = it->field_0x4; + } + return NULL; +} + +Entity* sub_0805EB2C(int type, int subtype, int kind, int form, int parameter) + +{ + Entity* it; + struct_03003D70* node; + + node = &gUnk_03003D70[kind]; + it = (Entity*)node->field_0x4; + while ((u32)it != (u32)node) { + if (type == it->entityType.type && subtype == it->entityType.subtype && form == it->entityType.form && + parameter == it->entityType.parameter) + return it; + it = it->field_0x4; + } + return NULL; +} + +Entity* sub_0805EB64(Entity* ent, int kind) + +{ + Entity* it; + struct_03003D70* end; + + end = &gUnk_03003D70[kind]; + it = ent->field_0x4; + while ((u32)it != (u32)end) { + if (it->entityType.type == ent->entityType.type && it->entityType.subtype == ent->entityType.subtype) + return it; + it = it->field_0x4; + } + return NULL; +} + +Entity* sub_0805EB9C(int type, int subtype) + +{ + Entity* it2; + struct_03003D70 *it, *end; + + it = gUnk_03003D70; + end = (gUnk_03003D70 + 9); + do { + it2 = (Entity*)it->field_0x4; + while ((u32)it2 != (u32)it) { + if ((type == (it2->entityType).type) && (subtype == (it2->entityType).subtype)) + return it2; + it2 = it2->field_0x4; + } + it++; + } while (it < end); + + return 0; +} + +void sub_0805EBCC(void) + +{ + Entity* pEVar1; + Entity* next; + struct_03003D70* it; + + it = gUnk_03003D70; + do { + next = it->field_0x4; + while (pEVar1 = next, (u32)pEVar1 != (u32)it) { + next = pEVar1->field_0x4; + if (pEVar1->entityType.type == 3) + DeleteEntity(pEVar1); + } + it++; + } while (it < (gUnk_03003D70 + 9)); + sub_0805E84C(); +} From a8819bc449d1c401e2cceb8c168aeeaaf2b83505 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Thu, 6 Aug 2020 22:35:07 +0200 Subject: [PATCH 04/19] remove leftover assignment --- src/entity.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/entity.c b/src/entity.c index d1e87ff8..37de67e6 100644 --- a/src/entity.c +++ b/src/entity.c @@ -112,7 +112,6 @@ void DeleteEntity(Entity* ent) sub_0804AA1C(ent); } ent->flags = ent->flags & 0x7f; - ent->spriteSettings = ent->spriteSettings; ent->spriteSettings.b.draw = 0; ent->field_0x3c = 0; ent->bitfield = 0; From 2a36c16cf7ee7bbd8c1ae86d56dbe4d6441231dc Mon Sep 17 00:00:00 2001 From: Behemoth Date: Thu, 6 Aug 2020 23:27:46 +0200 Subject: [PATCH 05/19] cleanup --- src/entity.c | 121 +++++++++++++++++++++------------------------------ 1 file changed, 50 insertions(+), 71 deletions(-) diff --git a/src/entity.c b/src/entity.c index 37de67e6..deedca95 100644 --- a/src/entity.c +++ b/src/entity.c @@ -13,15 +13,14 @@ extern Entity gUnk_030011E8[7]; Entity* sub_0805E744(void) { - Entity* pEVar1 = gUnk_030011E8; - int i = 0; + Entity* ent = gUnk_030011E8; do { - if (pEVar1->field_0x0 == NULL) { - return pEVar1; + if (ent->field_0x0 == NULL) { + return ent; } - pEVar1 = pEVar1 + 1; - } while (pEVar1 < &gUnk_030011E8[7]); + } while (ent++, ent < &gUnk_030011E8[7]); + return NULL; } @@ -129,13 +128,12 @@ void sub_0805E870(Entity*); void sub_0805E84C(void) { - Entity* pEVar1 = &gLinkEntity; + Entity* ent = &gLinkEntity; do { - if ((int)pEVar1->field_0x0 < 0) { - sub_0805E870(pEVar1); + if ((int)ent->field_0x0 < 0) { + sub_0805E870(ent); } - pEVar1 = pEVar1 + 1; - } while (pEVar1 < (&gLinkEntity + 80)); + } while (ent++, ent < (&gLinkEntity + 80)); return; } @@ -159,20 +157,18 @@ extern EntityType gUnk_03003DB8; void sub_0805E89C(void) { - Entity* pEVar1; + Entity* ent; Entity* next; struct_03003D70* it; it = gUnk_03003D70; - if (it->field_0x4 != 0) { + if (it->field_0x4) { do { - next = it->field_0x4; - while (pEVar1 = next, (u32)pEVar1 != (u32)it) { - next = pEVar1->field_0x4; - sub_0805E79C(pEVar1); + for (ent = it->field_0x4; (u32)ent != (u32)it; ent = next) { + next = ent->field_0x4; + sub_0805E79C(ent); } - it++; - } while (it < (gUnk_03003D70 + 9)); + } while (it++, it < (gUnk_03003D70 + 9)); sub_0805E84C(); } } @@ -254,34 +250,30 @@ void sub_0805E9A8(void) it = gUnk_03003D70; do { - for (entry = (Entity*)it->field_0x4; (u32)entry != (u32)it; entry = entry->field_0x4) { + for (entry = it->field_0x4; (u32)entry != (u32)it; entry = entry->field_0x4) { entry->flags &= 0xfd; if ((entry->flags & 0x20) == 0) { entry->flags |= 0x10; } } - it++; - } while (it < (gUnk_03003D70 + 9)); + } while (it++, it < (gUnk_03003D70 + 9)); } void sub_0805E9F4(void) { - Entity* pEVar1; + Entity* ent; Entity* next; struct_03003D70* it; it = gUnk_03003D70; do { - next = it->field_0x4; - while (pEVar1 = next, (u32)pEVar1 != (u32)it) { - next = pEVar1->field_0x4; - if ((pEVar1->flags & 0x10) != 0) { - sub_0805E79C(pEVar1); - } + for (ent = it->field_0x4; (u32)ent != (u32)it; ent = next) { + next = ent->field_0x4; + if (ent->flags & 0x10) + sub_0805E79C(ent); } - it++; - } while (it < (gUnk_03003D70 + 9)); + } while (it++, it < (gUnk_03003D70 + 9)); } extern void sub_0805E374(Entity*); @@ -289,16 +281,16 @@ extern void sub_0805E374(Entity*); void sub_0805EA2C(Entity* ent, int kind) { - Entity* pEVar1; - struct_03003D70* pEVar2; + Entity* prev; + struct_03003D70* next; - pEVar2 = (gUnk_03003D70 + kind); - ent->field_0x4 = (Entity*)pEVar2; - pEVar1 = pEVar2->field_0x0; - ent->field_0x0 = pEVar1; - pEVar1->field_0x4 = ent; - pEVar2->field_0x0 = ent; - if ((ent->entityType).type != 9) { + next = (gUnk_03003D70 + kind); + ent->field_0x4 = (Entity*)next; + prev = next->field_0x0; + ent->field_0x0 = prev; + prev->field_0x4 = ent; + next->field_0x0 = ent; + if (ent->entityType.type != 9) { ent->spritePriority.b0 = 4; gUnk_03003DBC++; } else { @@ -333,22 +325,19 @@ void sub_0805EA98(Entity* ent) int sub_0805EABC(Entity* ent) { - Entity* psVar1; + Entity* ent2; struct_03003D70 *it, *end; it = gUnk_03003D70; end = (gUnk_03003D70 + 9); do { - psVar1 = (Entity*)it->field_0x4; - while ((u32)psVar1 != (u32)it) { - if ((u32)psVar1 != (u32)ent && psVar1->entityType.type == ent->entityType.type && - psVar1->entityType.subtype == ent->entityType.subtype) { + for (ent2 = (Entity*)it->field_0x4; (u32)ent2 != (u32)it; ent2 = ent2->field_0x4) { + if ((u32)ent2 != (u32)ent && ent2->entityType.type == ent->entityType.type && + ent2->entityType.subtype == ent->entityType.subtype) { return 1; } - psVar1 = psVar1->field_0x4; } - it++; - } while (it < end); + } while (it++, it < end); return 0; } @@ -360,11 +349,9 @@ Entity* sub_0805EB00(int type, int subtype, int kind) struct_03003D70* node; node = &gUnk_03003D70[kind]; - it = (Entity*)node->field_0x4; - while ((u32)it != (u32)node) { - if ((type == (it->entityType).type) && (subtype == (it->entityType).subtype)) + for (it = node->field_0x4; (u32)it != (u32)node; it = it->field_0x4) { + if (type == it->entityType.type && subtype == it->entityType.subtype) return it; - it = it->field_0x4; } return NULL; } @@ -376,12 +363,11 @@ Entity* sub_0805EB2C(int type, int subtype, int kind, int form, int parameter) struct_03003D70* node; node = &gUnk_03003D70[kind]; - it = (Entity*)node->field_0x4; - while ((u32)it != (u32)node) { + node = &gUnk_03003D70[kind]; + for (it = node->field_0x4; (u32)it != (u32)node; it = it->field_0x4) { if (type == it->entityType.type && subtype == it->entityType.subtype && form == it->entityType.form && parameter == it->entityType.parameter) return it; - it = it->field_0x4; } return NULL; } @@ -393,11 +379,9 @@ Entity* sub_0805EB64(Entity* ent, int kind) struct_03003D70* end; end = &gUnk_03003D70[kind]; - it = ent->field_0x4; - while ((u32)it != (u32)end) { + for (it = ent->field_0x4; (u32)it != (u32)end; it = it->field_0x4) { if (it->entityType.type == ent->entityType.type && it->entityType.subtype == ent->entityType.subtype) return it; - it = it->field_0x4; } return NULL; } @@ -411,14 +395,11 @@ Entity* sub_0805EB9C(int type, int subtype) it = gUnk_03003D70; end = (gUnk_03003D70 + 9); do { - it2 = (Entity*)it->field_0x4; - while ((u32)it2 != (u32)it) { + for (it2 = (Entity*)it->field_0x4; (u32)it2 != (u32)it; it2 = it2->field_0x4) { if ((type == (it2->entityType).type) && (subtype == (it2->entityType).subtype)) return it2; - it2 = it2->field_0x4; } - it++; - } while (it < end); + } while (it++, it < end); return 0; } @@ -426,19 +407,17 @@ Entity* sub_0805EB9C(int type, int subtype) void sub_0805EBCC(void) { - Entity* pEVar1; + Entity* ent; Entity* next; struct_03003D70* it; it = gUnk_03003D70; do { - next = it->field_0x4; - while (pEVar1 = next, (u32)pEVar1 != (u32)it) { - next = pEVar1->field_0x4; - if (pEVar1->entityType.type == 3) - DeleteEntity(pEVar1); + for (ent = it->field_0x4; (u32)ent != (u32)it; ent = next) { + next = ent->field_0x4; + if (ent->entityType.type == 3) + DeleteEntity(ent); } - it++; - } while (it < (gUnk_03003D70 + 9)); + } while (it++, it < (gUnk_03003D70 + 9)); sub_0805E84C(); } From ea7ff581cd5a3b0563cb87af8b7e65483e3e4719 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Fri, 7 Aug 2020 19:15:11 +0200 Subject: [PATCH 06/19] rename asm --- asm/{code_0805E744.s => code_0805EC04.s} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename asm/{code_0805E744.s => code_0805EC04.s} (100%) diff --git a/asm/code_0805E744.s b/asm/code_0805EC04.s similarity index 100% rename from asm/code_0805E744.s rename to asm/code_0805EC04.s From b3b7d65c7980c8f65f134b5dec2038f5502bcddc Mon Sep 17 00:00:00 2001 From: Behemoth Date: Fri, 7 Aug 2020 19:16:57 +0200 Subject: [PATCH 07/19] fix linker --- linker.ld | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker.ld b/linker.ld index b5d32309..ef1ede16 100644 --- a/linker.ld +++ b/linker.ld @@ -530,7 +530,7 @@ SECTIONS { asm/code_0805E3B0.o(.text); asm/getEmptyEntity.o(.text); src/entity.o(.text); - asm/code_0805E744.o(.text); + asm/code_0805EC04.o(.text); /* npcs */ src/npc/gentari.o(.text); src/npc/festari.o(.text); From eae5cb65219bccac66baeb3f1c49b2242da64a88 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 16:46:56 -0500 Subject: [PATCH 08/19] Match asm/non_matching/postman/sub_08060700.inc --- asm/non_matching/postman/sub_08060700.inc | 51 ----------------------- src/npc/postman.c | 34 ++++++++------- 2 files changed, 19 insertions(+), 66 deletions(-) delete mode 100644 asm/non_matching/postman/sub_08060700.inc diff --git a/asm/non_matching/postman/sub_08060700.inc b/asm/non_matching/postman/sub_08060700.inc deleted file mode 100644 index 326e221b..00000000 --- a/asm/non_matching/postman/sub_08060700.inc +++ /dev/null @@ -1,51 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - ldr r3, _0806074C @ =gUnk_0810A918 - adds r2, r0, #0 - adds r2, #0x68 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - lsls r2, r2, #2 - adds r2, r2, r3 - ldr r2, [r2] - adds r3, r0, #0 - adds r3, #0x69 - ldrb r3, [r3] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r2, r2, r3 - movs r3, #0 - ldrsb r3, [r2, r3] - lsls r3, r3, #2 - ldr r2, _08060750 @ =gUnk_0810A66C - adds r3, r3, r2 - ldr r4, _08060754 @ =gRoomControls - movs r5, #0 - ldrsh r2, [r3, r5] - ldrh r5, [r4, #6] - adds r2, r2, r5 - movs r5, #2 - ldrsh r3, [r3, r5] - ldrh r4, [r4, #8] - adds r3, r3, r4 - bl sub_0807DEDC - ldr r2, _08060758 @ =gUnk_02033280 - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, r5, pc} - .align 2, 0 -_0806074C: .4byte gUnk_0810A918 -_08060750: .4byte gUnk_0810A66C -_08060754: .4byte gRoomControls -_08060758: .4byte gUnk_02033280 - .syntax divided \ No newline at end of file diff --git a/src/npc/postman.c b/src/npc/postman.c index d920cba8..c26dc457 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -4,6 +4,7 @@ #include "npc.h" #include "textbox.h" #include "link.h" +#include "room.h" #include "structures.h" typedef struct { @@ -34,10 +35,16 @@ extern void sub_0800451C(Entity*); extern void sub_08078784(Entity*, u32); extern void sub_0807DEDC(Entity*, u32, u32, u32); +typedef struct { + s16 x; + s16 y; +} Coords16; + +extern Coords16 gUnk_0810A66C[]; +extern s8* gUnk_0810A918[]; + extern void (*const gUnk_0810AA24[])(Entity*); extern u32 gUnk_0810AA30[]; -extern u32** gUnk_0810A66C; -extern u32 gUnk_0810A918[]; extern struct_02033280 gUnk_02033280; void Postman(Entity* this) { @@ -208,21 +215,18 @@ void sub_080606D8(Entity* this) ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]); } -#if 0 -void sub_08060700(Entity *arg0, u32 arg1) +void sub_08060700(Entity *entity, u32 arg1) { - sub_0807DEDC(arg0,arg1, - gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginX], - gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginY + 2]); - gUnk_02033280.unk |= 1; -} -#endif -NAKED void sub_08060700(Entity *arg0, u32 arg1) { - asm(".include \"asm/non_matching/postman/sub_08060700.inc\""); + s8* var0 = gUnk_0810A918[(s8)entity->field_0x68.HALF.LO]; + Coords16* coords = &gUnk_0810A66C[var0[(s8)entity->field_0x68.HALF.HI]]; + u32 x = coords->x + gRoomControls.roomOriginX; + u32 y = coords->y + gRoomControls.roomOriginY; + sub_0807DEDC(entity, arg1, x, y); + gUnk_02033280.unk |= 1; } void sub_0806075C(Entity *this) { - this->field_0x68.HALF.LO = 0xb; - this->field_0x68.HALF.HI = 0xff; -} \ No newline at end of file + this->field_0x68.HALF.LO = 0xb; + this->field_0x68.HALF.HI = 0xff; +} From 57198666432a4ab60588f7aed33cdd5f2b84ae93 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 17:33:23 -0500 Subject: [PATCH 09/19] Match bigGoron/sub_0806CF30 --- asm/non_matching/bigGoron/sub_0806CF30.inc | 115 --------------------- src/npc/bigGoron.c | 54 ++++------ 2 files changed, 21 insertions(+), 148 deletions(-) delete mode 100644 asm/non_matching/bigGoron/sub_0806CF30.inc diff --git a/asm/non_matching/bigGoron/sub_0806CF30.inc b/asm/non_matching/bigGoron/sub_0806CF30.inc deleted file mode 100644 index 49f33c3c..00000000 --- a/asm/non_matching/bigGoron/sub_0806CF30.inc +++ /dev/null @@ -1,115 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _0806CF5E - movs r0, #1 - strb r0, [r5, #0xc] - strb r0, [r5, #0xd] - ldrh r1, [r5, #0x2e] - adds r0, r5, #0 - adds r0, #0x68 - strh r1, [r0] - adds r0, r5, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r5, #0 - bl sub_0806D0B0 - adds r0, r5, #0 - bl sub_0807DD64 - b _0806CF6C -_0806CF5E: - adds r0, r5, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r5, #0 - bl sub_0807DDE4 -_0806CF6C: - ldrb r0, [r5, #0xd] - cmp r0, #2 - beq _0806CFD4 - cmp r0, #2 - bgt _0806D000 - cmp r0, #0 - blt _0806D000 - ldr r0, _0806CFCC @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0806D000 - ldr r0, _0806CFD0 @ =gLinkEntity - movs r1, #0x2e - ldrsh r2, [r0, r1] - ldrh r3, [r5, #0x2e] - movs r4, #0x2e - ldrsh r1, [r5, r4] - adds r4, r0, #0 - cmp r2, r1 - bge _0806CFA8 - adds r0, r5, #0 - adds r0, #0x68 - ldrh r0, [r0] - subs r0, #0x20 - cmp r0, r1 - bge _0806CFA8 - subs r0, r3, #1 - strh r0, [r5, #0x2e] -_0806CFA8: - movs r3, #0x2e - ldrsh r1, [r4, r3] - ldrh r2, [r5, #0x2e] - movs r4, #0x2e - ldrsh r0, [r5, r4] - cmp r1, r0 - ble _0806D000 - adds r0, r5, #0 - adds r0, #0x68 - ldrh r0, [r0] - adds r0, #0x20 - movs r3, #0x2e - ldrsh r1, [r5, r3] - cmp r0, r1 - ble _0806D000 - adds r0, r2, #1 - strh r0, [r5, #0x2e] - b _0806D000 - .align 2, 0 -_0806CFCC: .4byte gScreenTransition -_0806CFD0: .4byte gLinkEntity -_0806CFD4: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806D000 - bl Random - adds r4, r0, #0 - ldr r1, _0806D008 @ =gUnk_081140CC - movs r0, #3 - ands r0, r4 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - bl PlaySFX - movs r0, #7 - ands r4, r0 - lsls r4, r4, #4 - adds r4, #0x80 - strb r4, [r5, #0xe] -_0806D000: - adds r0, r5, #0 - bl sub_0806D02C - pop {r4, r5, pc} - .align 2, 0 -_0806D008: .4byte gUnk_081140CC - .syntax divided \ No newline at end of file diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index 5096dfa0..3b3a5101 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -1,11 +1,11 @@ #include "global.h" #include "entity.h" #include "link.h" +#include "structures.h" extern void (*gUnk_081140D4[])(Entity*); extern u16 gUnk_081140CC[]; -extern u32 gScreenTransition; extern void sub_0805E3A0(Entity*, u32); extern void sub_0806D0B0(Entity*); extern void sub_0807DD64(Entity*); @@ -20,16 +20,11 @@ void BigGoron(Entity* this) { gUnk_081140D4[this->entityType.form](this); } -#ifdef NON_MATCHING void sub_0806CF30(Entity* this) { - u8 bVar1; - u32 uVar2; - int iVar3; - if (this->action == 0) { this->action = 1; this->previousActionFlag = 1; - this->field_0x68 = (this->x).HALF.HI; + this->field_0x68.HWORD = this->x.HALF.HI; sub_0805E3A0(this, 2); sub_0806D0B0(this); sub_0807DD64(this); @@ -37,39 +32,32 @@ void sub_0806CF30(Entity* this) { sub_0807DDAC(this, 0); sub_0807DDE4(this); } - if (this->previousActionFlag != 2) { - if (this->previousActionFlag < 3) { - if ((gScreenTransition & 3) == 0) { - iVar3 = this->x.HALF.HI; - if (gLinkEntity.x.HALF.HI < iVar3) { - if ((this->field_0x68 - 32) < iVar3) { - this->x.HALF.HI = -1; - } + switch (this->previousActionFlag) { + case 0: + case 1: + if (gScreenTransition.frameCount % 4 == 0) { + if (gLinkEntity.x.HALF.HI < this->x.HALF.HI && this->field_0x68.HWORD - 32 < this->x.HALF.HI) { + this->x.HALF.HI--; } - if (this->x.HALF.HI > gLinkEntity.x.HALF.HI) { - if (this->x.HALF.HI < (this->field_0x68 + 32)) { - this->x.HALF.HI += 1; - } + if (gLinkEntity.x.HALF.HI > this->x.HALF.HI && this->field_0x68.HWORD + 32 > this->x.HALF.HI) { + this->x.HALF.HI++; } } - } - } else { - bVar1 = this->actionDelay -= 1; - if (bVar1 == 0) { - uVar2 = Random(); - PlaySFX(gUnk_081140CC[uVar2 & 3]); - this->actionDelay = ((u8)uVar2 & 7) * 10 + 128; - } + break; + case 2: + if (--this->actionDelay == 0) { + u32 uVar2 = Random(); + PlaySFX(gUnk_081140CC[uVar2 % 4]); + this->actionDelay = ((u8)uVar2 & 7) * 16; + this->actionDelay += 128; + } + break; + case 3: + break; } sub_0806D02C(this); } -#else -NAKED -void sub_0806CF30(Entity* this) { - asm(".include \"asm/non_matching/bigGoron/sub_0806CF30.inc\""); -} -#endif void sub_0806D00C(Entity* this) { Entity* pEVar1; From 5963472d01c0789b3c4b85c7a62a8643cd19fdca Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 17:38:08 -0500 Subject: [PATCH 10/19] Match cloud/sub_0809F770 --- asm/non_matching/cloud/sub_0809F770.inc | 45 ------------------------- src/object/cloud.c | 19 ++++------- 2 files changed, 6 insertions(+), 58 deletions(-) delete mode 100644 asm/non_matching/cloud/sub_0809F770.inc diff --git a/asm/non_matching/cloud/sub_0809F770.inc b/asm/non_matching/cloud/sub_0809F770.inc deleted file mode 100644 index a2c06235..00000000 --- a/asm/non_matching/cloud/sub_0809F770.inc +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0xa3 - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809F7B6 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionEntityOnTop - bl Random - ldrh r2, [r4, #0x2e] - subs r2, #0x10 - movs r3, #0x1f - adds r1, r0, #0 - ands r1, r3 - adds r2, r2, r1 - strh r2, [r4, #0x2e] - ldrh r2, [r4, #0x32] - subs r2, #0x10 - asrs r1, r0, #8 - ands r1, r3 - adds r2, r2, r1 - strh r2, [r4, #0x32] - asrs r0, r0, #0x10 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0x1e] - movs r0, #0xff - strb r0, [r4, #0x15] -_0809F7B6: - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 - .syntax divided \ No newline at end of file diff --git a/src/object/cloud.c b/src/object/cloud.c index 96ffc659..54fa6621 100644 --- a/src/object/cloud.c +++ b/src/object/cloud.c @@ -156,28 +156,21 @@ void sub_0809F700(Entity* this) { } } -#ifdef NON_MATCHING Entity* sub_0809F770(Entity* this) { Entity* cloud; - s32 uVar1; + int uVar1; cloud = CreateObject(163, 1, 0); - if (cloud != NULL) { + if (cloud) { PositionEntityOnTop(this, cloud); uVar1 = Random(); - cloud->x.HALF.HI = ((cloud->x.HALF.HI - 16) + (uVar1 >> 0)) & 31; - cloud->y.HALF.HI = ((cloud->y.HALF.HI - 16) + (uVar1 >> 8)) & 31; - cloud->animationList = (u8)(uVar1 >> 16) & 3; - cloud->direction = 255; + cloud->x.HALF.HI += ((uVar1 >> 0) & 31) - 16; + cloud->y.HALF.HI += ((uVar1 >> 8) & 31) - 16; + cloud->frameIndex = (uVar1 >> 16) & 3; + cloud->direction = 0xFF; } return cloud; } -#else -NAKED -Entity* sub_0809F770(Entity* this) { - asm(".include \"asm/non_matching/cloud/sub_0809F770.inc\""); -} -#endif void sub_0809F7BC(Entity* this) { Entity* cloud; From 122084a78eb0a1e474fc791153f054529eebb606 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 17:45:48 -0500 Subject: [PATCH 11/19] Match festari/sub_0805FE48 --- asm/non_matching/festari/sub_0805FE48.inc | 110 ---------------------- src/npc/festari.c | 84 ++++++++--------- 2 files changed, 40 insertions(+), 154 deletions(-) delete mode 100644 asm/non_matching/festari/sub_0805FE48.inc diff --git a/asm/non_matching/festari/sub_0805FE48.inc b/asm/non_matching/festari/sub_0805FE48.inc deleted file mode 100644 index 0f7ff560..00000000 --- a/asm/non_matching/festari/sub_0805FE48.inc +++ /dev/null @@ -1,110 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0805FE80 - movs r0, #0 - strb r1, [r5, #0xc] - strb r0, [r2] - ldr r1, _0805FE7C @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r5, #0 - bl InitAnimationForceUpdate - adds r0, r5, #0 - bl sub_0806F118 - b _0805FF14 - .align 2, 0 -_0805FE7C: .4byte gLinkEntity -_0805FE80: - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - adds r0, r5, #0 - bl ExecuteScriptCommandSet - ldr r1, [r4] - adds r0, r5, #0 - bl sub_0805FF2C - adds r0, r5, #0 - adds r0, #0x80 - ldrh r3, [r0] - adds r7, r0, #0 - adds r6, r5, #0 - adds r6, #0x82 - cmp r3, #7 - bhi _0805FEC6 - ldrh r1, [r6] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805FEBA - movs r1, #0xfc - ands r1, r3 - ldrb r0, [r5, #0xf] - lsrs r0, r0, #1 - adds r3, r1, r0 - b _0805FEC6 -_0805FEBA: - movs r0, #0xfc - ands r0, r3 - ldrb r2, [r5, #0x14] - lsrs r1, r2, #1 - adds r3, r0, r1 - strb r2, [r5, #0xf] -_0805FEC6: - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - cmp r3, r0 - beq _0805FED8 - adds r0, r5, #0 - adds r1, r3, #0 - bl InitAnimationForceUpdate -_0805FED8: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805FF02 - ldrb r0, [r4] - cmp r0, #8 - beq _0805FEFE - cmp r0, #8 - blt _0805FF02 - cmp r0, #0xc - bgt _0805FF02 - cmp r0, #0xa - blt _0805FF02 -_0805FEFE: - movs r0, #0 - strh r0, [r7] -_0805FF02: - ldrh r1, [r6] - mvns r0, r1 - adds r0, #1 - ands r1, r0 - cmp r1, #2 - bne _0805FF14 - adds r0, r5, #0 - bl sub_0806ED78 -_0805FF14: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided \ No newline at end of file diff --git a/src/npc/festari.c b/src/npc/festari.c index b362359e..310db3fa 100644 --- a/src/npc/festari.c +++ b/src/npc/festari.c @@ -1,5 +1,6 @@ #include "global.h" #include "entity.h" +#include "functions.h" #include "npc.h" #include "link.h" @@ -30,58 +31,53 @@ void sub_0805FE10(Entity *this) sub_0807DD50(this); } -#if NON_MATCHING void sub_0805FE48(Entity *this) { - u8 bVar1; - u16 uVar2; - u32 uVar3; - u32 uVar4; + u8 bVar1; + u16 uVar2; + u32 uVar3; + u32 uVar4; - if (this->interactType == 2) { - this->action = 2; - this->interactType = 0; - InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); - sub_0806F118(this); - } - else { - ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh); - sub_0805FF2C(this, *(void **)&this->cutsceneBeh); - if (this->field_0x80 < 8) { - if ((this->field_0x82 & 1) != 0) { - uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1); - } - else { - uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1); - this->field_0xf = this->animationState; - } + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); } - if (uVar4 != this->animIndex) { - InitAnimationForceUpdate(this, uVar4); - } - UpdateAnimationSingleFrame(this); + else { + ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh); + sub_0805FF2C(this, *(void **)&this->cutsceneBeh); + uVar4 = this->field_0x80.HWORD; + if (uVar4 < 8) { + if ((this->field_0x82.HWORD & 1) != 0) { + uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1); + } + else { + uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1); + this->field_0xf = this->animationState; + } + } + if (uVar4 != this->animIndex) { + InitAnimationForceUpdate(this, uVar4); + } + UpdateAnimationSingleFrame(this); - if (this->frames.b.f3) - { - switch (this->animIndex) { - case 8: - case 10: - case 11: - case 12: - this->field_0x80 = 0; + if (this->frames.b.f3) + { + switch (this->animIndex) { + case 8: + case 10: + case 11: + case 12: + this->field_0x80.HWORD = 0; + break; + } + } + if ((this->field_0x82.HWORD & (~this->field_0x82.HWORD + 1)) == 2) { + sub_0806ED78(this); } } - if ((this->field_0x82 & (~this->field_0x82 + 1)) == 2) { - sub_0806ED78(this); - } - } } -#else -NAKED -void sub_0805FE48(Entity *this) { - asm(".include \"asm/non_matching/festari/sub_0805FE48.inc\""); -} -#endif void sub_0805FF18(Entity *this) { From d21e39060f74769183fd66315a99906ed539a0a5 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Sat, 8 Aug 2020 02:18:04 +0200 Subject: [PATCH 12/19] manager6.c ok --- asm/manager6.s | 87 ------------------------------------------ linker.ld | 2 +- src/manager/manager6.c | 49 ++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 88 deletions(-) delete mode 100644 asm/manager6.s create mode 100644 src/manager/manager6.c diff --git a/asm/manager6.s b/asm/manager6.s deleted file mode 100644 index 34066ffa..00000000 --- a/asm/manager6.s +++ /dev/null @@ -1,87 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08057CB4 -sub_08057CB4: @ 0x08057CB4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08057CD6 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - bl GetCurrentRoomProperty - str r0, [r4, #0x20] - cmp r0, #0 - bne _08057CD6 - adds r0, r4, #0 - bl sub_0805E900 - b _08057D42 -_08057CD6: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08057CE4 - ldr r0, _08057D44 @ =gLinkState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _08057D42 -_08057CE4: - ldr r4, [r4, #0x20] - ldrh r0, [r4] - ldr r1, _08057D48 @ =0x0000FFFF - cmp r0, r1 - beq _08057D42 - ldr r5, _08057D4C @ =gLinkEntity - adds r6, r1, #0 -_08057CF2: - ldrb r2, [r4, #7] - movs r0, #3 - ands r0, r2 - adds r1, r5, #0 - adds r1, #0x38 - ldrb r1, [r1] - ands r0, r1 - cmp r0, #0 - beq _08057D3A - ldr r0, _08057D44 @ =gLinkState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08057D18 - movs r0, #0x10 - ands r0, r2 - cmp r0, #0 - beq _08057D3A -_08057D18: - ldrh r0, [r4] - ldrh r1, [r4, #2] - ldrb r2, [r4, #4] - ldrb r3, [r4, #5] - bl CheckPlayerInRegion - cmp r0, #0 - beq _08057D3A - movs r1, #0x36 - ldrsh r0, [r5, r1] - cmp r0, #0 - bne _08057D3A - ldrb r0, [r4, #6] - bl GetCurrentRoomProperty - bl DoExitTransition -_08057D3A: - adds r4, #8 - ldrh r0, [r4] - cmp r0, r6 - bne _08057CF2 -_08057D42: - pop {r4, r5, r6, pc} - .align 2, 0 -_08057D44: .4byte gLinkState -_08057D48: .4byte 0x0000FFFF -_08057D4C: .4byte gLinkEntity diff --git a/linker.ld b/linker.ld index 024820ac..24d6147c 100644 --- a/linker.ld +++ b/linker.ld @@ -472,7 +472,7 @@ SECTIONS { asm/manager3.o(.text); asm/manager4.o(.text); asm/manager5.o(.text); - asm/manager6.o(.text); + src/manager/manager6.o(.text); asm/manager7.o(.text); asm/manager8.o(.text); asm/manager9.o(.text); diff --git a/src/manager/manager6.c b/src/manager/manager6.c new file mode 100644 index 00000000..4532cce1 --- /dev/null +++ b/src/manager/manager6.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "entity.h" +#include "link.h" + +extern void* GetCurrentRoomProperty(u8); +extern u32 CheckPlayerInRegion(u16, u16, u8, u8); +extern void DoExitTransition(void*); +extern void sub_0805E900(Entity*); + +typedef struct { + u16 field_0x00; + u16 field_0x02; + u8 field_0x04; + u8 field_0x05; + u8 field_0x06; + union { + u8 all; + struct { + u8 layer : 2; + u8 unk1 : 2; + u8 unk2 : 1; + u8 unk3 : 3; + } PACKED b; + } PACKED field_0x07; +} unknownStruct; + +void sub_08057CB4(Entity * this) { + u32 tmp; + unknownStruct* i; + if (this->action == 0){ + this->action = 1; + this->field_0x20 = (s32) GetCurrentRoomProperty(this->entityType.form); + if (this->field_0x20 == 0) { + sub_0805E900(this); + return; + } + } + if (this->actionDelay == 0 || gLinkState.field_0x10[2] == 0x1e) { + for (i = ((unknownStruct*) this->field_0x20);i->field_0x00 != 0xFFFF; i++) { + tmp = (i->field_0x07.all & 0x3); + if (((tmp & (gLinkEntity.collisionLayer)) != 0) && + (((gLinkState.flags.all & 0x80) != 0) || ((i->field_0x07.b.unk2) != 0)) && + (CheckPlayerInRegion(i->field_0x00,i->field_0x02,i->field_0x04,i->field_0x05) != 0) && + (gLinkEntity.height.HALF.HI == 0)) { + DoExitTransition(GetCurrentRoomProperty(i->field_0x06)); + } + } + } +} From 6bf6cc2d6a7f4753ea2559cc6d6b8d1dd146ba44 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Sat, 8 Aug 2020 02:57:52 +0200 Subject: [PATCH 13/19] Added manager.h Moved the unknown struct from manager6.c to new header manager.h --- include/manager.h | 23 +++++++++++++++++++++++ src/manager/manager6.c | 22 +++------------------- 2 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 include/manager.h diff --git a/include/manager.h b/include/manager.h new file mode 100644 index 00000000..66b1c363 --- /dev/null +++ b/include/manager.h @@ -0,0 +1,23 @@ +#ifndef MANAGER_H +#define MANAGER_H + +#include "global.h" + +typedef struct { + u16 field_0x00; + u16 field_0x02; + u8 field_0x04; + u8 field_0x05; + u8 field_0x06; + union { + u8 all; + struct { + u8 layer : 2; + u8 unk1 : 2; + u8 unk2 : 1; + u8 unk3 : 3; + } PACKED b; + } PACKED field_0x07; +} UnkManagerHelperStruct; + +#endif diff --git a/src/manager/manager6.c b/src/manager/manager6.c index 4532cce1..deb44026 100644 --- a/src/manager/manager6.c +++ b/src/manager/manager6.c @@ -1,32 +1,16 @@ #include "global.h" #include "entity.h" #include "link.h" +#include "manager.h" extern void* GetCurrentRoomProperty(u8); extern u32 CheckPlayerInRegion(u16, u16, u8, u8); extern void DoExitTransition(void*); extern void sub_0805E900(Entity*); -typedef struct { - u16 field_0x00; - u16 field_0x02; - u8 field_0x04; - u8 field_0x05; - u8 field_0x06; - union { - u8 all; - struct { - u8 layer : 2; - u8 unk1 : 2; - u8 unk2 : 1; - u8 unk3 : 3; - } PACKED b; - } PACKED field_0x07; -} unknownStruct; - void sub_08057CB4(Entity * this) { u32 tmp; - unknownStruct* i; + UnkManagerHelperStruct* i; if (this->action == 0){ this->action = 1; this->field_0x20 = (s32) GetCurrentRoomProperty(this->entityType.form); @@ -36,7 +20,7 @@ void sub_08057CB4(Entity * this) { } } if (this->actionDelay == 0 || gLinkState.field_0x10[2] == 0x1e) { - for (i = ((unknownStruct*) this->field_0x20);i->field_0x00 != 0xFFFF; i++) { + for (i = ((UnkManagerHelperStruct*) this->field_0x20);i->field_0x00 != 0xFFFF; i++) { tmp = (i->field_0x07.all & 0x3); if (((tmp & (gLinkEntity.collisionLayer)) != 0) && (((gLinkState.flags.all & 0x80) != 0) || ((i->field_0x07.b.unk2) != 0)) && From 2c0b39832e30964515fdfad3e1a3e3047fbd17d7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 8 Aug 2020 09:06:54 -0500 Subject: [PATCH 14/19] Match keaton/sub_08032574 --- asm/non_matching/keaton/sub_08032574.inc | 50 ------------------------ src/enemy/keaton.c | 30 ++++++-------- 2 files changed, 13 insertions(+), 67 deletions(-) delete mode 100644 asm/non_matching/keaton/sub_08032574.inc diff --git a/asm/non_matching/keaton/sub_08032574.inc b/asm/non_matching/keaton/sub_08032574.inc deleted file mode 100644 index c6caea9d..00000000 --- a/asm/non_matching/keaton/sub_08032574.inc +++ /dev/null @@ -1,50 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _0803258A - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080325A4 -_0803258A: - adds r5, r4, #0 - adds r5, #0x76 - ldrh r0, [r5] - subs r0, #1 - strh r0, [r5] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _080325A4 - adds r0, r4, #0 - bl sub_080AEFE0 - cmp r0, #0 - bne _080325AC -_080325A4: - adds r0, r4, #0 - bl sub_0803275C - b _080325C2 -_080325AC: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrh r1, [r5] - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _080325C2 - adds r0, r4, #0 - bl sub_08032794 -_080325C2: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c index 7c960ac7..b30c65df 100644 --- a/src/enemy/keaton.c +++ b/src/enemy/keaton.c @@ -115,26 +115,22 @@ void sub_080324FC(Entity* this) { } } -#if NON_MATCHING // r4-r5 register swap void sub_08032574(Entity* this) { - if (this->attachedEntity == NULL || !(this->attachedEntity->bitfield & 0x80)) { - (this->field_0x76)--; - if ((this->field_0x76 == 0) || (sub_080AEFE0(this) == 0)) { - sub_0803275C(this); - } else { - UpdateAnimationSingleFrame(this); - if (!(this->field_0x76 & 0x7)) { - sub_08032794(this); - } - } + if (this->attachedEntity && (this->attachedEntity->bitfield & 0x80)) { + sub_0803275C(this); + return; + } + + if (--this->field_0x76 == 0 || !sub_080AEFE0(this)) { + sub_0803275C(this); + return; + } + + UpdateAnimationSingleFrame(this); + if ((this->field_0x76 & 0x7) == 0) { + sub_08032794(this); } } -#else -NAKED -void sub_08032574(Entity* this) { - asm(".include \"asm/non_matching/keaton/sub_08032574.inc\""); -} -#endif void sub_080325C4(Entity* this) { this->actionDelay--; From 57acabe4c25d913ac9315e25dba9d68e0548e544 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 8 Aug 2020 10:06:40 -0500 Subject: [PATCH 15/19] Match minecart/sub_080919AC --- asm/non_matching/minecart/sub_080919AC.inc | 287 --------------------- src/object/minecart.c | 187 +++++++------- 2 files changed, 89 insertions(+), 385 deletions(-) delete mode 100644 asm/non_matching/minecart/sub_080919AC.inc diff --git a/asm/non_matching/minecart/sub_080919AC.inc b/asm/non_matching/minecart/sub_080919AC.inc deleted file mode 100644 index a3dfeadd..00000000 --- a/asm/non_matching/minecart/sub_080919AC.inc +++ /dev/null @@ -1,287 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldr r1, _080919D4 @ =gRoomControls - movs r0, #0 - mov r8, r0 - movs r0, #7 - strb r0, [r1, #0xe] - ldr r0, _080919D8 @ =gLinkState - ldr r0, [r0, #0x30] - movs r1, #0x80 - lsls r1, r1, #5 - ands r0, r1 - cmp r0, #0 - bne _080919DC - movs r0, #1 - strb r0, [r5, #0xc] - b _08091C04 - .align 2, 0 -_080919D4: .4byte gRoomControls -_080919D8: .4byte gLinkState -_080919DC: - ldr r4, _08091A14 @ =gLinkEntity - adds r6, r4, #0 - adds r6, #0x5a - ldrb r1, [r6] - movs r7, #0xf - adds r0, r7, #0 - ands r0, r1 - cmp r0, #0 - bne _08091A22 - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldrb r1, [r6] - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0x10 - bne _08091A18 - adds r1, r5, #0 - adds r1, #0x63 - movs r0, #1 - strb r0, [r1] - b _08091C04 - .align 2, 0 -_08091A14: .4byte gLinkEntity -_08091A18: - adds r0, r5, #0 - adds r0, #0x63 - mov r1, r8 - strb r1, [r0] - b _08091C04 -_08091A22: - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - mov r0, r8 - strh r0, [r4, #0x24] - adds r0, r5, #0 - bl sub_0806F69C - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - adds r0, r5, #0 - bl sub_08091DDC - cmp r0, #0 - beq _08091A68 - b _08091C04 -_08091A68: - ldr r0, _08091AD8 @ =gScreenTransition - ldr r0, [r0] - ands r0, r7 - cmp r0, #0 - bne _08091A7A - movs r0, #0x9c - lsls r0, r0, #1 - bl PlaySFX -_08091A7A: - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08091A92 - movs r0, #0x7b - bl PlaySFX - movs r0, #0x3c - strb r0, [r5, #0xf] -_08091A92: - ldr r2, _08091ADC @ =gUnk_081223C8 - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r0, r5, #0 - bl sub_080002B4 - adds r4, r0, #0 - ldr r1, _08091AE0 @ =gUnk_081223D8 - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_08007DD6 - cmp r0, #0 - bne _08091AE4 - ldrb r0, [r5, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r5, #0x15] - ldrb r0, [r5, #0x14] - movs r1, #2 - eors r0, r1 - strb r0, [r5, #0x14] - b _08091BD8 - .align 2, 0 -_08091AD8: .4byte gScreenTransition -_08091ADC: .4byte gUnk_081223C8 -_08091AE0: .4byte gUnk_081223D8 -_08091AE4: - adds r0, r4, #0 - subs r0, #0x64 - cmp r0, #0xb - bhi _08091BD8 - lsls r0, r0, #2 - ldr r1, _08091AF8 @ =_08091AFC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08091AF8: .4byte _08091AFC -_08091AFC: @ jump table - .4byte _08091B2C @ case 0 - .4byte _08091BD8 @ case 1 - .4byte _08091BD8 @ case 2 - .4byte _08091BB8 @ case 3 - .4byte _08091BB8 @ case 4 - .4byte _08091BB8 @ case 5 - .4byte _08091BB8 @ case 6 - .4byte _08091BD8 @ case 7 - .4byte _08091BB8 @ case 8 - .4byte _08091BB8 @ case 9 - .4byte _08091BB8 @ case 10 - .4byte _08091BB8 @ case 11 -_08091B2C: - ldrb r1, [r5, #0x10] - movs r0, #0xdf - ands r0, r1 - strb r0, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #1 - strb r0, [r1] - subs r1, #3 - movs r0, #0x47 - strb r0, [r1] - adds r1, #4 - movs r0, #0x44 - strb r0, [r1] - subs r1, #5 - movs r4, #0x80 - movs r0, #0x80 - strb r0, [r1] - movs r0, #6 - strb r0, [r5, #0xc] - adds r0, r5, #0 - bl sub_08017744 - ldr r2, _08091BAC @ =gLinkState - movs r0, #0x41 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #5 - eors r0, r1 - movs r1, #0x80 - lsls r1, r1, #0x13 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r1, _08091BB0 @ =gLinkEntity - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r1, #0x20] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r1, #0x24] - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - strb r0, [r1, #0x14] - ldrb r0, [r5, #0x15] - strb r0, [r1, #0x15] - ldrb r0, [r1, #0x10] - orrs r4, r0 - strb r4, [r1, #0x10] - adds r0, r5, #0 - bl sub_08004168 - ldrb r1, [r5, #0x14] - adds r1, #0xc - adds r0, r5, #0 - bl InitAnimationForceUpdate - movs r0, #0x78 - bl PlaySFX - ldr r0, _08091BB4 @ =0x00000139 - bl PlaySFX - b _08091C04 - .align 2, 0 -_08091BAC: .4byte gLinkState -_08091BB0: .4byte gLinkEntity -_08091BB4: .4byte 0x00000139 -_08091BB8: - adds r0, r5, #0 - bl sub_080002B8 - cmp r4, r0 - bne _08091BD8 - adds r0, r5, #0 - bl sub_08091C0C - ldr r1, _08091BD4 @ =gLinkEntity - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - strb r0, [r1, #0x14] - b _08091C04 - .align 2, 0 -_08091BD4: .4byte gLinkEntity -_08091BD8: - ldr r2, _08091BF8 @ =gLinkEntity - ldrb r0, [r5, #0x14] - lsls r1, r0, #1 - strb r1, [r2, #0x14] - adds r1, r5, #0 - adds r1, #0x58 - ldrb r1, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - bne _08091BFC - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - b _08091C04 - .align 2, 0 -_08091BF8: .4byte gLinkEntity -_08091BFC: - ldrb r1, [r5, #0x14] - adds r0, r5, #0 - bl InitAnimationForceUpdate -_08091C04: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided \ No newline at end of file diff --git a/src/object/minecart.c b/src/object/minecart.c index 5bf59c5d..bc434ff7 100644 --- a/src/object/minecart.c +++ b/src/object/minecart.c @@ -3,6 +3,13 @@ #include "functions.h" #include "room.h" +extern u32 sub_08091DDC(Entity*); +extern u32 sub_080002B4(Entity*, u32, u32); +extern u32 sub_08007DD6(u32, u32); +extern void sub_08017744(Entity*); +extern u32 sub_080002B8(Entity*); +extern void sub_08091C0C(Entity*); + typedef struct { u16 field_0x0; u16 field_0x2; @@ -17,6 +24,9 @@ extern void (*const gUnk_081223A8[])(Entity*); extern struct_030010EC gUnk_030010EC[]; extern BoundingBox gUnk_080FD310; +extern const s8 gUnk_081223C8[]; +extern const u32 gUnk_081223D8[]; + void Minecart(Entity* this) { gUnk_081223A8[this->action](this); this->bitfield = 0; @@ -115,111 +125,92 @@ void sub_080918A4(Entity *this) } } -#if 0 - -typedef struct { - u8 field_0x0; - u8 field_0x1; -} struct_081223C8; - -extern struct_081223C8 gUnk_081223C8[]; - -extern u32 gUnk_081223D8[]; - void sub_080919AC(Entity *this) { - u32 iVar2; - u32 uVar3; - u32 uVar4; - struct_081223C8* temp; + u32 iVar2; + u32 uVar3; - gRoomControls.unk5 = 7; - if ((gLinkState.flags.all & 0x1000) == 0) { - this->action = 1; - } - else { - if ((gLinkEntity.frames.all & 0xf) == 0) { - this->flags = this->flags & 0x7f; - CopyPosition(this,&gLinkEntity); - if ((gLinkEntity.frames.all & 0xf0) == 0x10) { - this->spriteOffsetY = 1; - } - else { - this->spriteOffsetY = 0; - } + gRoomControls.unk5 = 7; + if ((gLinkState.flags.all & 0x1000) == 0) { + this->action = 1; + return; } - else { - this->flags = this->flags | 0x80; - gLinkEntity.nonPlanarMovement = 0; - sub_0806F69C(this); - CopyPosition(this,&gLinkEntity); - gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1; - if (!sub_08091DDC(this)) { - if ((gScreenTransition.field_0x0 & 0xf) == 0) { - PlaySFX(0x138); - } - if (--this->field_0xf == 0xff) { - PlaySFX(0x7b); - this->field_0xf = 0x3c; + if ((gLinkEntity.frames.all & 0xf) == 0) { + this->flags = this->flags & 0x7f; + CopyPosition(this,&gLinkEntity); + if ((gLinkEntity.frames.all & 0xf0) == 0x10) { + this->spriteOffsetY = 1; + } else { + this->spriteOffsetY = 0; } - uVar3 = sub_03005800(this, gUnk_081223C8[this->animationState].field_0x0, gUnk_081223C8[this->animationState].field_0x1); - iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]); - if (iVar2 == 0) { - this->direction = this->direction ^ 0x10; - this->animationState = this->animationState ^ 2; - } - else { - switch(uVar3) { - case 100: - this->flags = this->flags & 0xdf; - this->damageType = 1; - this->field_0x3c = 0x47; - this->field_0x40 = 0x44; - this->flags2 = 0x80; - this->action = 6; - sub_08017744(this); - gLinkState.jumpStatus = 0x41; - gLinkState.flags.all = (gLinkState.flags.all ^ 0x1000) | 0x4000000; - gLinkEntity.field_0x20 = 0x20000; - gLinkEntity.nonPlanarMovement = 0x200; - gLinkEntity.animationState = this->animationState << 1; - gLinkEntity.direction = this->direction; - gLinkEntity.flags |= 0x80; - sub_08004168(this); - InitAnimationForceUpdate(this, this->animationState + 0xc); - PlaySFX(0x78); - PlaySFX(0x139); - return; - case 0x67: - case 0x68: - case 0x69: - case 0x6a: - case 0x6c: - case 0x6d: - case 0x6e: - case 0x6f: - if (uVar3 == sub_080002B8()) { - sub_08091C0C(this); - gLinkEntity.animationState *= 2; - return; - } + } else { + this->flags = this->flags | 0x80; + gLinkEntity.nonPlanarMovement = 0; + sub_0806F69C(this); + CopyPosition(this,&gLinkEntity); + gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1; + if (!sub_08091DDC(this)) { + if ((gScreenTransition.frameCount & 0xf) == 0) { + PlaySFX(0x138); + } + + if (--this->field_0xf == 0xff) { + PlaySFX(0x7b); + this->field_0xf = 0x3c; + } + + uVar3 = sub_080002B4(this, gUnk_081223C8[this->animationState * 2], gUnk_081223C8[this->animationState * 2 + 1]); + iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]); + if (iVar2 == 0) { + this->direction = this->direction ^ 0x10; + this->animationState = this->animationState ^ 2; + } else { + switch (uVar3) { + case 0x64: + this->flags = this->flags & 0xdf; + this->damageType = 1; + this->field_0x3c = 0x47; + this->field_0x40 = 0x44; + this->flags2 = 0x80; + this->action = 6; + sub_08017744(this); + gLinkState.jumpStatus = 0x41; + gLinkState.flags.all = (gLinkState.flags.all ^ 0x1000) | 0x4000000; + gLinkEntity.field_0x20 = 0x20000; + gLinkEntity.nonPlanarMovement = 0x200; + gLinkEntity.animationState = this->animationState << 1; + gLinkEntity.direction = this->direction; + gLinkEntity.flags |= 0x80; + sub_08004168(this); + InitAnimationForceUpdate(this, this->animationState + 0xc); + PlaySFX(0x78); + PlaySFX(0x139); + return; + case 0x67: + case 0x68: + case 0x69: + case 0x6a: + case 0x6c: + case 0x6d: + case 0x6e: + case 0x6f: + if (uVar3 == sub_080002B8(this)) { + sub_08091C0C(this); + gLinkEntity.animationState = this->animationState << 1; + return; + } + break; + } + } + + gLinkEntity.animationState = this->animationState << 1; + if (this->animIndex == this->animationState) { + UpdateAnimationSingleFrame(this); + } + else { + InitAnimationForceUpdate(this, this->animationState); } } - gLinkEntity.animationState *= 2; - if (this->animIndex == this->animationState) { - UpdateAnimationSingleFrame(this); - } - else { - InitAnimationForceUpdate(this, this->animationState); - } - } } - } } -#else -NAKED -void sub_080919AC(Entity *this) { - asm(".include \"asm/non_matching/minecart/sub_080919AC.inc\""); -} -#endif \ No newline at end of file From d53fdf3f473728c2e399253beb4e65838f5dfd56 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 8 Aug 2020 10:54:50 -0500 Subject: [PATCH 16/19] Match railtrack/sub_080854A8 --- asm/non_matching/railtrack/sub_080854A8.inc | 36 --------------------- src/object/railtrack.c | 24 +++++++++++--- 2 files changed, 20 insertions(+), 40 deletions(-) delete mode 100644 asm/non_matching/railtrack/sub_080854A8.inc diff --git a/asm/non_matching/railtrack/sub_080854A8.inc b/asm/non_matching/railtrack/sub_080854A8.inc deleted file mode 100644 index aa5bed89..00000000 --- a/asm/non_matching/railtrack/sub_080854A8.inc +++ /dev/null @@ -1,36 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r2, _080854E0 @ =gUnk_081205E0 - ldrb r1, [r0, #0x14] - lsrs r1, r1, #1 - lsls r1, r1, #1 - adds r2, r1, r2 - ldrh r3, [r2] - adds r4, r3, #0 - ldr r2, _080854E4 @ =gUnk_080B4488 - adds r1, r1, r2 - ldr r2, [r0, #0x70] - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r1, r0, #1 - subs r0, r2, r1 - ldrh r0, [r0] - cmp r3, r0 - bne _080854E8 - ldrh r0, [r2] - cmp r3, r0 - bne _080854E8 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r4, r0 - bne _080854E8 - movs r0, #0 - b _080854EA - .align 2, 0 -_080854E0: .4byte gUnk_081205E0 -_080854E4: .4byte gUnk_080B4488 -_080854E8: - movs r0, #1 -_080854EA: - pop {r4, pc} - .syntax divided \ No newline at end of file diff --git a/src/object/railtrack.c b/src/object/railtrack.c index 95c418f4..f2e9a10a 100644 --- a/src/object/railtrack.c +++ b/src/object/railtrack.c @@ -12,8 +12,8 @@ extern void SetTile(u32, u32, u32); extern void (*const gUnk_081205D0[])(Entity*); +extern s8 gUnk_080B4488[][2]; extern u16 gUnk_081205E0[]; -extern s8 gUnk_080B4488[]; void Railtrack(Entity* this) { gUnk_081205D0[this->action](this); @@ -135,14 +135,30 @@ void sub_0808543C(Entity *this) u32 uVar2; s8 temp; - temp = gUnk_080B4488[(this->animationState >> 1) << 1]; + temp = gUnk_080B4488[this->animationState / 2][0]; uVar2 = COORD_TO_TILE(this); SetTile(this->field_0x74, uVar2 - temp, this->collisionLayer); SetTile(this->field_0x76, uVar2, this->collisionLayer); SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer); } -NAKED u32 sub_080854A8(Entity *this) { - asm(".include \"asm/non_matching/railtrack/sub_080854A8.inc\""); + u16 var0; + u16* var1; + s8* var2; + + var0 = gUnk_081205E0[this->animationState / 2]; + var2 = gUnk_080B4488[this->animationState / 2]; + var1 = (u16 *)this->field_0x70.WORD; + if (var0 != *(var1 - var2[0])) { + return TRUE; + } + if (var0 != *var1) { + return TRUE; + } + if (var0 != *(var1 + var2[0])) { + return TRUE; + } + + return FALSE; } \ No newline at end of file From 50a10e854900d783678da9086093531c41be6fcc Mon Sep 17 00:00:00 2001 From: Behemoth Date: Sat, 8 Aug 2020 19:17:22 +0200 Subject: [PATCH 17/19] non-matching guard --- asm/non_matching/guard/sub_08063D44.inc | 69 ------ asm/non_matching/guard/sub_08063E90.inc | 73 ------ src/npc/guard.c | 312 ++++++++++++++---------- 3 files changed, 178 insertions(+), 276 deletions(-) delete mode 100644 asm/non_matching/guard/sub_08063D44.inc delete mode 100644 asm/non_matching/guard/sub_08063E90.inc diff --git a/asm/non_matching/guard/sub_08063D44.inc b/asm/non_matching/guard/sub_08063D44.inc deleted file mode 100644 index 201f79c0..00000000 --- a/asm/non_matching/guard/sub_08063D44.inc +++ /dev/null @@ -1,69 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08063DA0 @ =gUnk_03003DBC - ldrb r0, [r0] - cmp r0, #0x46 - bhi _08063DC6 - ldrb r0, [r4, #9] - movs r1, #0x15 - eors r0, r1 - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f - lsls r1, r1, #4 - ldr r0, _08063DA4 @ =gUnk_0810F524 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08063DC6 - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - ldr r0, _08063DA8 @ =gUnk_0810F6BC - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - movs r2, #0 - bl sub_0806EE04 - ldrb r0, [r4, #0xa] - cmp r0, #0 - blt _08063DB6 - cmp r0, #3 - bgt _08063DAC - movs r0, #0xc - bl sub_080A7EE0 - str r4, [r0, #0x50] - movs r1, #0x3c - strb r1, [r0, #0xf] - b _08063DB6 - .align 2, 0 -_08063DA0: .4byte gUnk_03003DBC -_08063DA4: .4byte gUnk_0810F524 -_08063DA8: .4byte gUnk_0810F6BC -_08063DAC: - cmp r0, #5 - bgt _08063DB6 - adds r0, r4, #0 - bl sub_08078778 -_08063DB6: - ldrb r0, [r4, #0xc] - adds r0, #1 - movs r1, #0 - strb r0, [r4, #0xc] - strb r1, [r4, #0xa] - adds r0, r4, #0 - bl sub_08063DC8 -_08063DC6: - pop {r4, pc} - .syntax divided \ No newline at end of file diff --git a/asm/non_matching/guard/sub_08063E90.inc b/asm/non_matching/guard/sub_08063E90.inc deleted file mode 100644 index 76e3d4a5..00000000 --- a/asm/non_matching/guard/sub_08063E90.inc +++ /dev/null @@ -1,73 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #9] - movs r1, #0x15 - eors r0, r1 - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f - lsls r1, r1, #4 - ldr r0, _08063EC8 @ =gUnk_0810F524 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08063F1E - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xe] - cmp r1, #0 - beq _08063ECC - adds r1, r4, #0 - adds r1, #0x70 - movs r0, #8 - strb r0, [r1] - b _08063ED2 - .align 2, 0 -_08063EC8: .4byte gUnk_0810F524 -_08063ECC: - adds r0, r4, #0 - adds r0, #0x70 - strb r1, [r0] -_08063ED2: - movs r0, #0 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_0805ACC0 - adds r2, r0, #0 - cmp r2, #0 - bne _08063EF2 - ldrh r0, [r4, #0x2e] - adds r1, r4, #0 - adds r1, #0x68 - strh r0, [r1] - ldrh r0, [r4, #0x32] - adds r1, #2 - strh r0, [r1] - b _08063EFE -_08063EF2: - lsrs r1, r2, #0x10 - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - adds r0, #2 - strh r2, [r0] -_08063EFE: - adds r1, r4, #0 - adds r1, #0x71 - movs r0, #0 - strb r0, [r1] - subs r1, #0x39 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_08063F20 -_08063F1E: - pop {r4, pc} - .syntax divided \ No newline at end of file diff --git a/src/npc/guard.c b/src/npc/guard.c index a2cd0b25..60fa3fb4 100644 --- a/src/npc/guard.c +++ b/src/npc/guard.c @@ -30,6 +30,12 @@ extern u32 sub_0805ACC0(Entity*); extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_0807000C(Entity*); +extern void sub_0806EE04(Entity*, void*, u32); +extern Entity* sub_080A7EE0(int); +extern void sub_08078778(Entity*); +extern void sub_0807DD64(Entity*); +void sub_08063DC8(Entity*); +void sub_08063F20(Entity*); extern void (*const gUnk_0810F544[])(Entity*); extern void (*const gUnk_0810F550[])(Entity*); @@ -40,157 +46,195 @@ extern SpriteLoadData gUnk_0810F524[]; extern void* gUnk_0810F6BC[]; extern ScreenTransition gScreenTransition; -void Guard(Entity *this) -{ - if ((this->flags & 2) != 0) { - gUnk_0810F544[this->action](this); - } - else { - sub_08063D24(this); - } +void Guard(Entity* this) { + if ((this->flags & 2) != 0) { + gUnk_0810F544[this->action](this); + } else { + sub_08063D24(this); + } } -void sub_08063D24(Entity *this) -{ - gUnk_0810F550[this->action](this); - sub_0806ED78(this); +void sub_08063D24(Entity* this) { + gUnk_0810F550[this->action](this); + sub_0806ED78(this); } -NAKED void sub_08063D44(Entity* this) { - asm(".include \"asm/non_matching/guard/sub_08063D44.inc\""); -} + Entity* ent; + u32 temp, idx; -void sub_08063DC8(Entity *this) -{ - if ((this->entityType).form == 0xff) { - this->action = 2; - this->actionDelay = 0x1e; - this->animationState = sub_0806F5A4(GetFacingDirection(this,&gLinkEntity)); - InitAnimationForceUpdate(this, this->animationState + 4); - } - else { - sub_0806EE20(this); - if (this->field_0x3e != this->animationState) { - this->animationState = this->field_0x3e; - InitializeAnimation(this, this->animationState + 4); + if (gUnk_03003DBC > 0x46) + return; + + temp = this->entityType.subtype; + temp ^= 0x15; + idx = ((-temp | temp) >> 0x1f) * 4; + if (!LoadExtraSpriteData(this, &gUnk_0810F524[idx])) + return; + + InitializeAnimation(this, 4); + sub_0806EE04(this, gUnk_0810F6BC[this->entityType.form], 0); + switch (this->entityType.form) { + case 0 ... 3: + ent = sub_080A7EE0(0xc); + ent->parent = this; + ent->field_0xf = 0x3c; + break; + case 4 ... 5: + sub_08078778(this); + break; } - else { - GetNextFrame(this); - } - if (this->interactType != 0) { - this->action = 3; - this->interactType = 0; - InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this,&gLinkEntity))); - sub_08064428(this); - } - } -} - -void sub_08063E54(Entity *this) -{ - if (--this->actionDelay == 0) { - SetRoomFlag(0xf); - } -} - -void sub_08063E6C(Entity *this) -{ - if ((gTextBox.doTextBox & 0x7f) == 0) { - this->action = 1; - InitializeAnimation(this, this->animationState + 4); - } -} - -NAKED -void sub_08063E90(Entity* this) { - asm(".include \"asm/non_matching/guard/sub_08063E90.inc\""); -} - -void sub_08063F20(Entity *this) -{ - sub_0807DDAC(this, 0); - sub_0807DDE4(this); - GetNextFrame(this); - if (this->interactType != 0) { this->action++; - this->interactType = 0; - InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + *(s8 *)&this->field_0x70); - sub_08064428(this); - } + this->entityType.form = 0; + sub_08063DC8(this); } -void sub_08063F78(Entity *this) -{ - if ((gTextBox.doTextBox & 0x7f) == 0) { - this->action = this->action - 1; - InitializeAnimation(this,(this->animationState >> 1) + 4 + *(s8 *)&this->field_0x70); - } -} - -void Guard_Head(Entity *this) -{ - u8 bVar1; - u32 uVar2; - u32 pbVar3; - u32 uVar4; - u32 pbVar5; - - uVar2 = this->frames.all & 0x3f; - pbVar5 = (this->frameIndex & 0x3f); - uVar4 = this->frameSpriteSettings & 0x3f; - if ((this->entityType).subtype == 0x15) { - if ((this->frameIndex & 0x40) != 0) { - pbVar5 = pbVar5 + 0x21; - pbVar3 = 0xffffffff; - uVar4 = 0; +void sub_08063DC8(Entity* this) { + if ((this->entityType).form == 0xff) { + this->action = 2; + this->actionDelay = 0x1e; + this->animationState = sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)); + InitAnimationForceUpdate(this, this->animationState + 4); + } else { + sub_0806EE20(this); + if (this->field_0x3e != this->animationState) { + this->animationState = this->field_0x3e; + InitializeAnimation(this, this->animationState + 4); + } else { + GetNextFrame(this); + } + if (this->interactType != 0) { + this->action = 3; + this->interactType = 0; + InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_08064428(this); + } } - else { - pbVar3 = (uVar2 + 0x19); - if ((this->frameSpriteSettings & 0x3f) != 0) { - uVar4 += 0x1f; - } +} + +void sub_08063E54(Entity* this) { + if (--this->actionDelay == 0) { + SetRoomFlag(0xf); } - } - else { - pbVar3 = (uVar2 + 0x46); - pbVar5 = pbVar5 + 0x2d; - if ((this->frameSpriteSettings & 0x3f) != 0) { - uVar4 += 0x4c; +} + +void sub_08063E6C(Entity* this) { + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = 1; + InitializeAnimation(this, this->animationState + 4); } - } - uVar4--; - SetExtraSpriteFrame(this, 0, pbVar3); - SetExtraSpriteFrame(this, 1, pbVar5); - SetExtraSpriteFrame(this, 2, uVar4); - SetSpriteSubEntryOffsetData1(this, 1, 0); - SetSpriteSubEntryOffsetData2(this, 1, 2); - sub_0807000C(this); } -void sub_08064030(Entity *arg0,Entity *arg1) -{ - *(u32*)&arg1->animationState = (-gRoomVars.greatFairyState | gRoomVars.greatFairyState) >> 0x1f; +void sub_08063E90(Entity* this) { + Entity* ent; + u32 temp, idx; + u32 unk; + + temp = this->entityType.subtype; + temp ^= 0x15; + idx = ((-temp | temp) >> 0x1f) * 4; + if (!LoadExtraSpriteData(this, &gUnk_0810F524[idx])) + return; + + this->action++; + if (this->actionDelay) { + this->field_0x70.BYTES.byte0 = 8; + } else { + this->field_0x70.BYTES.byte0 = 0; + } + this->actionDelay = 0; + + unk = sub_0805ACC0(this); + if (unk == 0) { + this->field_0x68.HWORD = this->x.HALF.HI; + this->field_0x6a.HWORD = this->y.HALF.HI; + } else { + this->field_0x68.HWORD = unk >> 0x10; + this->field_0x6a.HWORD = unk; + } + this->field_0x70.BYTES.byte1 = 0; + this->collisionLayer = 1; + UpdateSpriteForCollisionLayer(this); + sub_0807DD64(this); + sub_08063F20(this); } -void sub_08064044(void) -{ - gScreenTransition.unk = 1; +void sub_08063F20(Entity* this) { + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + GetNextFrame(this); + if (this->interactType != 0) { + this->action++; + this->interactType = 0; + InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + *(s8*)&this->field_0x70); + sub_08064428(this); + } } -void sub_08064050(Entity *arg0, struct_08064050 *arg1) -{ - u32 unk; - - arg1->unk2 = 0; - switch (arg0->entityType.parameter) { - case 0x11: - arg1->unk2 = 1; - break; - case 0x12: - arg1->unk2 = 2; - break; - case 0x13: - arg1->unk2 = 3; - } +void sub_08063F78(Entity* this) { + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = this->action - 1; + InitializeAnimation(this, (this->animationState >> 1) + 4 + *(s8*)&this->field_0x70); + } +} + +void Guard_Head(Entity* this) { + u8 bVar1; + u32 uVar2; + u32 pbVar3; + u32 uVar4; + u32 pbVar5; + + uVar2 = this->frames.all & 0x3f; + pbVar5 = (this->frameIndex & 0x3f); + uVar4 = this->frameSpriteSettings & 0x3f; + if ((this->entityType).subtype == 0x15) { + if ((this->frameIndex & 0x40) != 0) { + pbVar5 = pbVar5 + 0x21; + pbVar3 = 0xffffffff; + uVar4 = 0; + } else { + pbVar3 = (uVar2 + 0x19); + if ((this->frameSpriteSettings & 0x3f) != 0) { + uVar4 += 0x1f; + } + } + } else { + pbVar3 = (uVar2 + 0x46); + pbVar5 = pbVar5 + 0x2d; + if ((this->frameSpriteSettings & 0x3f) != 0) { + uVar4 += 0x4c; + } + } + uVar4--; + SetExtraSpriteFrame(this, 0, pbVar3); + SetExtraSpriteFrame(this, 1, pbVar5); + SetExtraSpriteFrame(this, 2, uVar4); + SetSpriteSubEntryOffsetData1(this, 1, 0); + SetSpriteSubEntryOffsetData2(this, 1, 2); + sub_0807000C(this); +} + +void sub_08064030(Entity* arg0, Entity* arg1) { + *(u32*)&arg1->animationState = (-gRoomVars.greatFairyState | gRoomVars.greatFairyState) >> 0x1f; +} + +void sub_08064044(void) { + gScreenTransition.unk = 1; +} + +void sub_08064050(Entity* arg0, struct_08064050* arg1) { + u32 unk; + + arg1->unk2 = 0; + switch (arg0->entityType.parameter) { + case 0x11: + arg1->unk2 = 1; + break; + case 0x12: + arg1->unk2 = 2; + break; + case 0x13: + arg1->unk2 = 3; + } } \ No newline at end of file From 4a04881d095f8c1754cbde764da43fa614455cf5 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Sat, 8 Aug 2020 19:17:42 +0200 Subject: [PATCH 18/19] non-matching leever --- asm/non_matching/leever/sub_0801FED4.inc | 72 ------- src/enemy/leever.c | 263 ++++++++++------------- 2 files changed, 118 insertions(+), 217 deletions(-) delete mode 100644 asm/non_matching/leever/sub_0801FED4.inc diff --git a/asm/non_matching/leever/sub_0801FED4.inc b/asm/non_matching/leever/sub_0801FED4.inc deleted file mode 100644 index 70d3ea26..00000000 --- a/asm/non_matching/leever/sub_0801FED4.inc +++ /dev/null @@ -1,72 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - bne _0801FEEA - adds r1, r4, #0 - adds r1, #0x74 - movs r0, #1 - strh r0, [r1] -_0801FEEA: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0xf - adds r1, r2, #0 - ands r1, r0 - lsls r1, r1, #5 - strh r1, [r4, #0x24] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0801FF28 - ldrb r1, [r4, #0xf] - adds r0, r1, #1 - strb r0, [r4, #0xf] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _0801FF4E - ldr r0, _0801FF24 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_0800132C - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - b _0801FF4E - .align 2, 0 -_0801FF24: .4byte gUnk_020000B0 -_0801FF28: - adds r0, r1, #0 - adds r0, #0x40 - strh r0, [r4, #0x24] - ldrb r1, [r4, #0xf] - adds r0, r1, #1 - strb r0, [r4, #0xf] - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _0801FF4E - ldr r0, _0801FF58 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_0800132C - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 -_0801FF4E: - adds r0, r4, #0 - bl sub_080AEF88 - pop {r4, pc} - .align 2, 0 -_0801FF58: .4byte gUnk_020000B0 -.syntax divided \ No newline at end of file diff --git a/src/enemy/leever.c b/src/enemy/leever.c index baefa4fd..93db5f00 100644 --- a/src/enemy/leever.c +++ b/src/enemy/leever.c @@ -22,115 +22,100 @@ extern Entity* gUnk_020000B0; extern u8 gUnk_080CA4C8[]; extern u16 gUnk_080CA4CA[]; extern s16 gSineTable[]; -void Leever(Entity *this) -{ - EnemyFunctionHandler(this, gUnk_080CA49C); - SetChildOffset(this, 0, 1, -0x10); +void Leever(Entity* this) { + EnemyFunctionHandler(this, gUnk_080CA49C); + SetChildOffset(this, 0, 1, -0x10); } -void sub_0801FC28(Entity *this) -{ - gUnk_080CA4B4[this->action](this); +void sub_0801FC28(Entity* this) { + gUnk_080CA4B4[this->action](this); } -void sub_0801FC40(Entity *this) -{ - if (this->bitfield == 0x80) { - if (this->action == 3) { - this->field_0x74 = 1; +void sub_0801FC40(Entity* this) { + if (this->bitfield == 0x80) { + if (this->action == 3) { + this->field_0x74 = 1; + } + } else { + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } } - } - else { - if (this->field_0x43 != 0) { - sub_0804A9FC(this, 0x1c); - } - } - sub_0804AA30(this, gUnk_080CA49C); + sub_0804AA30(this, gUnk_080CA49C); } -void sub_0801FC7C(Entity *this) -{ - if ((this->entityType).form == 0) { - sub_0804A7D4(this); - } - else { - CreateDeathFx(this, 0xf1, 0); - } -} - -void sub_0801FC9C(Entity *this) -{ - sub_0804A720(this); - this->action = 1; - this->actionDelay = Random(); -} - -void sub_0801FCB0(Entity *this) -{ - if (--this->actionDelay == 0) { - if (sub_0801FE68(this, Random() & 0x1f) != 0) { - this->action = 2; - this->spriteSettings.b.draw = TRUE; - this->direction = (GetFacingDirection(this, gUnk_020000B0) + gUnk_080CA4C8[Random() & 1]) & 0x1f; - InitializeAnimation(this, 0); - UpdateSpriteForCollisionLayer(this); - } - else { - this->actionDelay = (Random() & 0x18) + 8; - } - } -} - -void sub_0801FD2C(Entity *this) -{ - - GetNextFrame(this); - - if (this->frames.b.f3 != 0) { - this->action = 3; - if (this->entityType.form == 0) { - this->field_0x74 = 0xb4; - } - else { - this->field_0x74 = 0x6e; - } - InitializeAnimation(this,2); - } - else if (this->frames.b.f0 != 0) { - this->frames.all &= 0xfe; - this->flags |= 0x80; +void sub_0801FC7C(Entity* this) { + if ((this->entityType).form == 0) { + sub_0804A7D4(this); + } else { + CreateDeathFx(this, 0xf1, 0); } } -void sub_0801FD80(Entity *this) -{ - - sub_0801FED4(this); - GetNextFrame(this); - - if (--this->field_0x74 == 0) { - this->action = 4; - this->flags &= 0x7f; - InitializeAnimation(this, 1); - } -} - -void sub_0801FDB4(Entity *this) -{ - sub_0801FED4(this); - GetNextFrame(this); - if ((this->frames.b.f3) != 0) { +void sub_0801FC9C(Entity* this) { + sub_0804A720(this); this->action = 1; - this->actionDelay = 0xf0; - this->spriteSettings.b.draw = FALSE; - } + this->actionDelay = Random(); } -u32 sub_0801FDE4(Entity *ent, s32 x, s32 y) -{ +void sub_0801FCB0(Entity* this) { + if (--this->actionDelay == 0) { + if (sub_0801FE68(this, Random() & 0x1f) != 0) { + this->action = 2; + this->spriteSettings.b.draw = TRUE; + this->direction = (GetFacingDirection(this, gUnk_020000B0) + gUnk_080CA4C8[Random() & 1]) & 0x1f; + InitializeAnimation(this, 0); + UpdateSpriteForCollisionLayer(this); + } else { + this->actionDelay = (Random() & 0x18) + 8; + } + } +} + +void sub_0801FD2C(Entity* this) { + + GetNextFrame(this); + + if (this->frames.b.f3 != 0) { + this->action = 3; + if (this->entityType.form == 0) { + this->field_0x74 = 0xb4; + } else { + this->field_0x74 = 0x6e; + } + InitializeAnimation(this, 2); + } else if (this->frames.b.f0 != 0) { + this->frames.all &= 0xfe; + this->flags |= 0x80; + } +} + +void sub_0801FD80(Entity* this) { + + sub_0801FED4(this); + GetNextFrame(this); + + if (--this->field_0x74 == 0) { + this->action = 4; + this->flags &= 0x7f; + InitializeAnimation(this, 1); + } +} + +void sub_0801FDB4(Entity* this) { + sub_0801FED4(this); + GetNextFrame(this); + if ((this->frames.b.f3) != 0) { + this->action = 1; + this->actionDelay = 0xf0; + this->spriteSettings.b.draw = FALSE; + } +} + +u32 sub_0801FDE4(Entity* ent, s32 x, s32 y) { u32 uVar3; - u16 *puVar4; - + u16* puVar4; + if (sub_080002D4(x, y, gUnk_020000B0->collisionLayer) != 0) { return 0; } else { @@ -147,60 +132,48 @@ u32 sub_0801FDE4(Entity *ent, s32 x, s32 y) } } -bool32 sub_0801FE68(Entity *ent, s32 arg2) -{ - s32 sin, cos; - s32 x, y; - u32 i; +bool32 sub_0801FE68(Entity* ent, s32 arg2) { + s32 sin, cos; + s32 x, y; + u32 i; - - if (sub_08049FDC(ent, 1) == 0) { - return 0; - } - else { - x = gUnk_020000B0->x.WORD; - y = gUnk_020000B0->y.WORD; - sin = gSineTable[arg2 * 8] << 11; - cos = gSineTable[arg2 * 8 + 0x40] << 11; - for (i = 0; i < 8; i++) { - x += sin; - y += -cos; - if (sub_0801FDE4(ent, x >> 0x10, y >> 0x10) == 0) { - return 0; - } + if (sub_08049FDC(ent, 1) == 0) { + return 0; + } else { + x = gUnk_020000B0->x.WORD; + y = gUnk_020000B0->y.WORD; + sin = gSineTable[arg2 * 8] << 11; + cos = gSineTable[arg2 * 8 + 0x40] << 11; + for (i = 0; i < 8; i++) { + x += sin; + y += -cos; + if (sub_0801FDE4(ent, x >> 0x10, y >> 0x10) == 0) { + return 0; + } + } + return 1; } - return 1; - } } -#if NON_MATCHING -void sub_0801FED4(Entity *this) -{ - s16 sVar2; - - if (sub_08049FDC(this, 1) == 0) { - this->field_0x74 = 1; - } - sVar2 = (this->frames.all & 0xf) * 0x20; - this->nonPlanarMovement = sVar2; - if (this->entityType.form == 0) { - this->field_0xf++; - if ((this->field_0xf & 0xf) == 0) { - sub_08004596(this, sub_0800132C(this, gUnk_020000B0)); +extern u32 sub_0800132C(Entity*, Entity*); + +void sub_0801FED4(Entity* this) { + s16 sVar2; + + if (sub_08049FDC(this, 1) == 0) { + this->field_0x74 = 1; } - } - else { - this->nonPlanarMovement = sVar2 + 0x40; - this->field_0xf++; - if ((this->field_0xf & 0x7) == 0) { - sub_08004596(this, sub_0800132C(this, gUnk_020000B0)); + sVar2 = (this->frames.all & 0xf) * 0x20; + this->nonPlanarMovement = sVar2; + if (this->entityType.form == 0) { + if ((this->field_0xf++ & 0xf) == 0) { + sub_08004596(this, sub_0800132C(this, gUnk_020000B0)); + } + } else { + this->nonPlanarMovement = sVar2 + 0x40; + if ((this->field_0xf++ & 0x7) == 0) { + sub_08004596(this, sub_0800132C(this, gUnk_020000B0)); + } } - } - sub_080AEF88(this); + sub_080AEF88(this); } -#else -NAKED -void sub_0801FED4(Entity *this) { - asm(".include \"asm/non_matching/leever/sub_0801FED4.inc\""); -} -#endif \ No newline at end of file From 6a68cca275c05355743fad27e40835953430d40e Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 8 Aug 2020 16:49:10 -0500 Subject: [PATCH 19/19] Start decompiling pot.c --- asm/pot.s | 532 ----------------------------------------- include/entity.h | 5 +- include/functions.h | 2 +- include/link.h | 4 +- linker.ld | 1 + src/enemy/bombPeahat.c | 2 +- src/enemy/keese.c | 2 +- src/enemy/octorok.c | 2 +- src/enemy/rupeeLike.c | 2 +- src/enemy/smallPesto.c | 2 +- src/enemy/wisp.c | 2 +- src/object/pot.c | 169 +++++++++++++ 12 files changed, 182 insertions(+), 543 deletions(-) create mode 100755 src/object/pot.c diff --git a/asm/pot.s b/asm/pot.s index e24373d3..68d9597e 100644 --- a/asm/pot.s +++ b/asm/pot.s @@ -6,538 +6,6 @@ .text - - thumb_func_start Pot -Pot: @ 0x0808220C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08082228 @ =gUnk_0811F090 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r4, #0x41 - movs r0, #0 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 -_08082228: .4byte gUnk_0811F090 - - thumb_func_start sub_0808222C -sub_0808222C: @ 0x0808222C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0808224C - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808224C - bl DeleteThisEntity -_0808224C: - movs r2, #1 - strb r2, [r4, #0xc] - ldr r0, _08082308 @ =gUnk_080FD338 - str r0, [r4, #0x48] - movs r1, #0 - movs r0, #0x80 - strh r0, [r4, #0x24] - ldrh r0, [r4, #0x32] - adds r0, #3 - strh r0, [r4, #0x32] - strb r1, [r4, #0x16] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x45 - strb r2, [r0] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #0x6e - strb r0, [r1] - subs r1, #4 - movs r0, #0x84 - strb r0, [r1] - movs r0, #0x12 - strb r0, [r4, #0x1c] - adds r5, r4, #0 - adds r5, #0x38 - ldrb r0, [r5] - cmp r0, #0 - bne _08082298 - adds r0, r4, #0 - bl sub_08016A30 -_08082298: - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r7, _0808230C @ =gRoomControls - ldrh r1, [r7, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r6, #0x3f - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r5] - bl sub_080001DA - adds r1, r4, #0 - adds r1, #0x70 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #7 - mov r8, r1 - cmp r0, r8 - bne _080822D6 - bl DeleteThisEntity -_080822D6: - movs r2, #0x2e - ldrsh r1, [r4, r2] - ldrh r0, [r7, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r5] - mov r0, r8 - bl SetTile - adds r0, r4, #0 - movs r1, #5 - bl InitializeAnimation - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08082308: .4byte gUnk_080FD338 -_0808230C: .4byte gRoomControls - - thumb_func_start sub_08082310 -sub_08082310: @ 0x08082310 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r6, #0x7f - adds r1, r6, #0 - ands r1, r0 - cmp r1, #0x13 - beq _08082342 - cmp r1, #0x1d - beq _0808234C - adds r0, r5, #0 - bl GetTileTypeByEntity - adds r4, r0, #0 - movs r0, #0x80 - lsls r0, r0, #7 - cmp r4, r0 - bne _08082338 - b _080824F0 -_08082338: - adds r0, #1 - cmp r4, r0 - bhs _08082340 - b _08082484 -_08082340: - b _080823C4 -_08082342: - movs r1, #0 - movs r0, #3 - strb r0, [r5, #0xc] - strb r1, [r5, #0xd] - b _080824F6 -_0808234C: - adds r0, r5, #0 - adds r0, #0x70 - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _080823C0 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r7, #0x32 - ldrsh r2, [r5, r7] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - movs r1, #0 - movs r0, #5 - strb r0, [r5, #0xc] - movs r0, #0xa8 - lsls r0, r0, #0xa - str r0, [r5, #0x20] - adds r0, r5, #0 - adds r0, #0x63 - strb r1, [r0] - ldrb r1, [r5, #0x18] - movs r0, #0x31 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x10 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r5, #0x10] - adds r0, r6, #0 - ands r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - bl sub_08082824 - b _080824F6 - .align 2, 0 -_080823C0: .4byte gRoomControls -_080823C4: - ldr r0, _080823D4 @ =0x00004004 - cmp r4, r0 - bls _080823D8 - adds r0, #0x63 - cmp r4, r0 - beq _08082448 - b _08082484 - .align 2, 0 -_080823D4: .4byte 0x00004004 -_080823D8: - ldr r1, _08082438 @ =0xFFFFBFFF - adds r0, r4, r1 - lsls r0, r0, #3 - strb r0, [r5, #0x15] - movs r0, #0x20 - strb r0, [r5, #0xe] - movs r0, #4 - strb r0, [r5, #0xc] - ldr r0, _0808243C @ =gLinkState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08082400 - ldrh r0, [r5, #0x24] - lsls r0, r0, #0x10 - asrs r0, r0, #0x11 - strh r0, [r5, #0x24] - movs r0, #0x40 - strb r0, [r5, #0xe] -_08082400: - adds r0, r5, #0 - adds r0, #0x70 - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08082440 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - ldr r0, _08082444 @ =0x0000010F - bl sub_08004488 - b _080824F6 - .align 2, 0 -_08082438: .4byte 0xFFFFBFFF -_0808243C: .4byte gLinkState -_08082440: .4byte gRoomControls -_08082444: .4byte 0x0000010F -_08082448: - adds r0, r5, #0 - adds r0, #0x70 - ldrh r0, [r0] - movs r7, #0x2e - ldrsh r1, [r5, r7] - ldr r3, _08082480 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - bl DeleteThisEntity - b _080824F6 - .align 2, 0 -_08082480: .4byte gRoomControls -_08082484: - adds r0, r5, #0 - bl sub_080002B8 - cmp r0, #0xd - bne _0808249A - adds r0, r5, #0 - movs r1, #0 - movs r2, #0 - bl CreateFx - b _080824D8 -_0808249A: - ldr r0, _080824E4 @ =0x00004005 - cmp r4, r0 - bne _080824D8 - ldr r0, _080824E8 @ =gLinkState - adds r0, #0xab - movs r1, #4 - strb r1, [r0] - adds r0, r5, #0 - adds r0, #0x70 - ldrh r0, [r0] - movs r7, #0x2e - ldrsh r1, [r5, r7] - ldr r3, _080824EC @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_080824D8: - adds r0, r5, #0 - movs r1, #0 - bl sub_08082850 - b _080824F6 - .align 2, 0 -_080824E4: .4byte 0x00004005 -_080824E8: .4byte gLinkState -_080824EC: .4byte gRoomControls -_080824F0: - adds r0, r5, #0 - bl sub_08078930 -_080824F6: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080824F8 -sub_080824F8: @ 0x080824F8 - push {lr} - ldr r2, _0808250C @ =gUnk_0811F0A8 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808250C: .4byte gUnk_0811F0A8 - - thumb_func_start sub_08082510 -sub_08082510: @ 0x08082510 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0x10] - movs r0, #0x80 - movs r2, #0 - orrs r0, r1 - strb r0, [r5, #0x10] - ldr r0, _08082578 @ =gUnk_080FD340 - str r0, [r5, #0x48] - adds r1, r5, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #1 - strb r0, [r1] - ldr r0, _0808257C @ =gLinkEntity - adds r0, #0x3b - ldrb r0, [r0] - subs r1, #4 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x63 - strb r2, [r0] - adds r0, #0xd - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08082580 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - ldrb r0, [r5, #0xd] - adds r0, #1 - strb r0, [r5, #0xd] - pop {r4, r5, r6, pc} - .align 2, 0 -_08082578: .4byte gUnk_080FD340 -_0808257C: .4byte gLinkEntity -_08082580: .4byte gRoomControls - - thumb_func_start nullsub_511 -nullsub_511: @ 0x08082584 - bx lr - .align 2, 0 - - thumb_func_start sub_08082588 -sub_08082588: @ 0x08082588 - adds r0, #0x29 - ldrb r2, [r0] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #0x18 - orrs r1, r2 - strb r1, [r0] - bx lr - .align 2, 0 - - thumb_func_start sub_0808259C -sub_0808259C: @ 0x0808259C - push {r4, lr} - adds r4, r0, #0 - bl sub_080043E8 - cmp r0, #2 - beq _080825B8 - cmp r0, #2 - bhi _080825B2 - cmp r0, #1 - beq _080825BE - b _080825D0 -_080825B2: - cmp r0, #3 - beq _080825C4 - b _080825D0 -_080825B8: - adds r0, r4, #0 - movs r1, #0xb - b _080825C8 -_080825BE: - adds r0, r4, #0 - movs r1, #0 - b _080825C8 -_080825C4: - adds r0, r4, #0 - movs r1, #0xc -_080825C8: - movs r2, #0 - bl CreateFx - b _080825E0 -_080825D0: - ldr r1, _080825DC @ =gLinkEntity - adds r0, r4, #0 - bl sub_08082850 - b _080825E4 - .align 2, 0 -_080825DC: .4byte gLinkEntity -_080825E0: - bl DeleteThisEntity -_080825E4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080825E8 -sub_080825E8: @ 0x080825E8 - push {lr} - bl DeleteThisEntity - pop {pc} - - thumb_func_start sub_080825F0 -sub_080825F0: @ 0x080825F0 - push {lr} - adds r1, r0, #0 - ldr r0, _08082604 @ =gLinkState - ldrb r0, [r0, #5] - cmp r0, #0 - bne _08082602 - adds r0, r1, #0 - bl sub_08082608 -_08082602: - pop {pc} - .align 2, 0 -_08082604: .4byte gLinkState - - thumb_func_start sub_08082608 -sub_08082608: @ 0x08082608 - movs r2, #0 - movs r1, #1 - strb r1, [r0, #0xc] - strb r2, [r0, #0xd] - bx lr - .align 2, 0 - thumb_func_start sub_08082614 sub_08082614: @ 0x08082614 push {r4, r5, r6, r7, lr} diff --git a/include/entity.h b/include/entity.h index 0b76eaa5..bc27562f 100644 --- a/include/entity.h +++ b/include/entity.h @@ -47,8 +47,7 @@ typedef struct Entity { /* */ u8 draw : 2; // 1-2 /* */ u8 ss2 : 1; // 4 /* */ u8 ss3 : 1; // 8 - /* */ u8 bigShadow : 1; //0x10 - /* */ u8 giantShadow : 1; //0x20 + /* */ u8 shadow : 2; //0x10 /* */ u8 flipX : 1; //0x40 /* */ u8 flipY : 1; //0x80 /* */ } PACKED b; @@ -71,7 +70,7 @@ typedef struct Entity { /* */ u8 flipX : 2; //0x10 /* */ u8 flipY : 2; //0x40 /* */ } PACKED spriteOrientation; - /*0x1c*/ u8 filler[1]; + /*0x1c*/ u8 field_0x1c; /*0x1d*/ u8 field_0x1d; /*0x1e*/ u8 frameIndex; /*0x1f*/ u8 lastFrameIndex; diff --git a/include/functions.h b/include/functions.h index dcfcf70d..f4db40c4 100644 --- a/include/functions.h +++ b/include/functions.h @@ -192,7 +192,7 @@ extern void sub_080A70AC(void*); extern void sub_080A7114(u32); extern void sub_08001242(void); extern u32 sub_08003FC4(Entity*, u32); -extern u8 sub_080043E8(Entity*); +extern u32 sub_080043E8(Entity*); extern void sub_08001290(Entity*, u32); extern void sub_08004488(u32); extern void sub_08004596(Entity*, u32); diff --git a/include/link.h b/include/link.h index 5a7a73a2..93075787 100644 --- a/include/link.h +++ b/include/link.h @@ -35,7 +35,9 @@ typedef struct { /* */ u32 noMinishCap : 1; /* */ u32 pullingState : 1; /* */ u32 windyState : 1; - /* */ u32 filler10 : 4; + /* */ u32 filler6 : 1; + /* */ u32 unk7 : 1; + /* */ u32 filler8 : 2; /* */ u32 slipperyState : 1; /* */ u32 filler11 : 5; /* */ u32 filler11b : 16; diff --git a/linker.ld b/linker.ld index d8c259aa..e9a2b4a7 100644 --- a/linker.ld +++ b/linker.ld @@ -673,6 +673,7 @@ SECTIONS { asm/itemForSale.o(.text); asm/button.o(.text); asm/object4.o(.text); + src/object/pot.o(.text); asm/pot.o(.text); asm/object6.o(.text); asm/blockPushed.o(.text); diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index 1dc3d30f..176480a0 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -57,7 +57,7 @@ void sub_0802A8C8(Entity* this) void sub_0802A8E0(Entity *this) { this->previousActionFlag = 1; - this->filler[1] = 0x3c; + this->field_0x1d = 0x3c; } void sub_0802A8EC(Entity *this) diff --git a/src/enemy/keese.c b/src/enemy/keese.c index ea25214b..d9dd7991 100644 --- a/src/enemy/keese.c +++ b/src/enemy/keese.c @@ -73,7 +73,7 @@ void sub_08021DF0(Entity *this) this->height.HALF.HI = -0x10; } this->direction = Random() & 0x1f; - this->filler[0] = 1; + this->field_0x1c = 1; this->spritePriority.b0 = 3; this->collisionLayer = 3; UpdateSpriteForCollisionLayer(this); diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c index 57fc25e3..a5b63f96 100644 --- a/src/enemy/octorok.c +++ b/src/enemy/octorok.c @@ -62,7 +62,7 @@ void sub_0801EB2C(Entity* ent) { void sub_0801EB68(Entity* ent) { ent->previousActionFlag = 1; - ent->filler[1] = 60; + ent->field_0x1d = 60; } void sub_0801EB74(Entity* ent) { diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c index cbd991c4..79f127e0 100644 --- a/src/enemy/rupeeLike.c +++ b/src/enemy/rupeeLike.c @@ -25,7 +25,7 @@ void RupeeLike(Entity* this) { u32 uVar1; if (this->entityType.parameter == 0) { - uVar1 = sub_080043E8(this); + uVar1 = (u8)sub_080043E8(this); if (uVar1 != 0) { if (this->action == 4) { sub_080296D8(this); diff --git a/src/enemy/smallPesto.c b/src/enemy/smallPesto.c index c29fe80c..94eb8822 100644 --- a/src/enemy/smallPesto.c +++ b/src/enemy/smallPesto.c @@ -46,7 +46,7 @@ void sub_0803169C(Entity *this) void sub_080316DC(Entity *this) { this->previousActionFlag = 1; - this->filler[1] = 0x3c; + this->field_0x1d = 0x3c; } void sub_080316E8(Entity *this) diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c index d6729201..9b95541c 100644 --- a/src/enemy/wisp.c +++ b/src/enemy/wisp.c @@ -85,7 +85,7 @@ void sub_08033674(Entity* this) { sub_0804A720(this); this->actionDelay = 0; this->action = 1; - this->filler[0] = 1; + this->field_0x1c = 1; this->field_0x80.HWORD = this->x.HALF.HI; this->field_0x82.HWORD = this->y.HALF.HI; sub_08033744(this); diff --git a/src/object/pot.c b/src/object/pot.c new file mode 100755 index 00000000..25d82b50 --- /dev/null +++ b/src/object/pot.c @@ -0,0 +1,169 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "flags.h" +#include "link.h" +#include "room.h" + +extern void (*const gUnk_0811F090[])(Entity*); +extern void (*const gUnk_0811F0A8[])(Entity*); + +extern BoundingBox gUnk_080FD338; // TODO: should be const +extern BoundingBox gUnk_080FD340; // TODO: should be const + +extern u32 sub_08016A30(Entity*); +extern u32 sub_080001DA(u32, u32); +extern u32 GetTileTypeByEntity(Entity*); +extern void sub_08078930(Entity*); +extern void sub_08082824(Entity*); +extern u32 sub_080002B8(Entity*); +extern void sub_08082850(Entity*, Entity*); +extern void sub_08082608(Entity*); + +void Pot(Entity* this) { + gUnk_0811F090[this->action](this); + this->bitfield = 0; +} + +void sub_0808222C(Entity* this) { + if (this->entityType.parameter == 1 && CheckFlags(this->field_0x86)) { + DeleteThisEntity(); + } + + this->action = 1; + this->boundingBox = &gUnk_080FD338; + this->nonPlanarMovement = 0x80; + this->y.HALF.HI += 3; + this->possibleBool = 0; + this->flags |= 0x80; + this->currentHealth = 1; + this->field_0x3c = 7; + this->damageType = 0x6E; + this->flags2 = 0x84; + this->field_0x1c = 0x12; + if (this->collisionLayer == 0) { + sub_08016A30(this); + } + + this->field_0x70.HALF.LO = sub_080001DA(COORD_TO_TILE(this), this->collisionLayer); + if ((u16)this->field_0x70.HALF.LO == 0x4000) { + DeleteThisEntity(); + } + + SetTile(0x4000, COORD_TO_TILE(this), this->collisionLayer); + InitializeAnimation(this, 5); +} + +void sub_08082310(Entity* this) { + u32 tileType; + u32 var0 = this->bitfield & 0x7F; + switch (var0) { + case 0x13: + this->action = 3; + this->previousActionFlag = 0; + break; + case 0x1D: + SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + this->action = 5; + this->field_0x20 = 0x2A000; + this->spriteOffsetY = 0; + this->spriteSettings.b.shadow = 1; + this->spritePriority.b1 = 3; + this->flags &= 0x7F; + sub_08082824(this); + break; + default: + tileType = GetTileTypeByEntity(this); + if (tileType != 0x4000) { + switch (tileType) { + case 0x4004: + case 0x4003: + case 0x4002: + case 0x4001: + this->direction = (tileType - 0x4001) * 8; + this->actionDelay = 32; + this->action = 4; + if (gLinkState.flags.all & 0x80) { + this->nonPlanarMovement >>= 1; + this->actionDelay = 64; + } + SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + sub_08004488(0x10F); + break; + case 0x4067: + SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + DeleteThisEntity(); + break; + default: + if (sub_080002B8(this) == 13) { + CreateFx(this, 0, 0); + } else if (tileType == 0x4005) { + gLinkState.field_0xab = 4; + SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + } + sub_08082850(this, NULL); + break; + } + } else { + sub_08078930(this); + } + break; + } +} + +void sub_080824F8(Entity* this) { + gUnk_0811F0A8[this->previousActionFlag](this); +} + +void sub_08082510(Entity* this) { + this->flags |= 0x80; + this->boundingBox = &gUnk_080FD340; + this->field_0x3c = 7; + this->damageType = 1; + this->flags2 = gLinkEntity.flags2; + this->spriteOffsetY = 0; + SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + this->previousActionFlag++; +} + + +void nullsub_511(Entity* this) { +} + +void sub_08082588(Entity* this) { + this->spritePriority.b1 = 3; +} + +void sub_0808259C(Entity* this) { + switch (sub_080043E8(this)) { + case 2: + CreateFx(this, 11, 0); + break; + case 1: + CreateFx(this, 0, 0); + break; + case 3: + CreateFx(this, 12, 0); + break; + default: + sub_08082850(this, &gLinkEntity); + return; + } + + DeleteThisEntity(); +} + +void sub_080825E8(Entity* this) { + DeleteThisEntity(); +} + +void sub_080825F0(Entity* this) { + if (gLinkState.heldObject == 0) { + sub_08082608(this); + } +} + +void sub_08082608(Entity* this) { + this->action = 1; + this->previousActionFlag = 0; +}