From 5eb9894caf7f375e1fdcc89aaf94ec93ae115bbf Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Thu, 29 Apr 2021 17:22:39 +0200 Subject: [PATCH 1/3] lockedDoor.c: ok --- asm/lockedDoor.s | 726 ---------------------------------------- linker.ld | 2 +- src/object/lockedDoor.c | 277 +++++++++++++++ 3 files changed, 278 insertions(+), 727 deletions(-) delete mode 100644 asm/lockedDoor.s create mode 100644 src/object/lockedDoor.c diff --git a/asm/lockedDoor.s b/asm/lockedDoor.s deleted file mode 100644 index f59c48ab..00000000 --- a/asm/lockedDoor.s +++ /dev/null @@ -1,726 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LockedDoor -LockedDoor: @ 0x08083320 - push {lr} - ldr r2, _08083334 @ =gUnk_0811F65C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08083334: .4byte gUnk_0811F65C - - thumb_func_start sub_08083338 -sub_08083338: @ 0x08083338 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x84 - ldrh r1, [r2] - ldr r0, _08083400 @ =0x0000FFFF - cmp r1, r0 - beq _08083356 - adds r0, r1, #0 - bl CheckFlags - cmp r0, #0 - beq _08083356 - bl DeleteThisEntity -_08083356: - adds r0, r4, #0 - bl sub_080837B0 - cmp r0, #0 - bne _08083362 - b _080834B2 -_08083362: - ldrb r2, [r4, #0xa] - lsrs r0, r2, #2 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0xb] - movs r7, #3 - adds r0, r7, #0 - ands r0, r2 - strb r0, [r4, #0x1e] - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x70 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x72 - strh r0, [r1] - ldrb r1, [r4, #0xa] - adds r0, r7, #0 - ands r0, r1 - adds r6, r4, #0 - adds r6, #0x7e - strb r0, [r6] - ldr r0, _08083404 @ =gUnk_080FD170 - str r0, [r4, #0x48] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, #0xa] - movs r0, #0xf - ands r0, r1 - adds r1, r4, #0 - adds r1, #0x5a - strb r0, [r1] - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _08083408 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x32 - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r5, r4, #0 - adds r5, #0x76 - strh r1, [r5] - ldrh r0, [r5] - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080001DA - adds r1, r4, #0 - adds r1, #0x74 - strh r0, [r1] - ldrb r0, [r4, #0xb] - cmp r0, #1 - beq _08083438 - cmp r0, #1 - bgt _0808340C - cmp r0, #0 - beq _08083412 - b _080834AE - .align 2, 0 -_08083400: .4byte 0x0000FFFF -_08083404: .4byte gUnk_080FD170 -_08083408: .4byte gRoomControls -_0808340C: - cmp r0, #2 - beq _08083456 - b _080834AE -_08083412: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _0808342E - ldrb r1, [r4, #0xa] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0808344E - strb r7, [r4, #0xc] - b _080834B2 -_0808342E: - ldrb r1, [r4, #0xa] - movs r0, #0xef - ands r0, r1 - strb r0, [r4, #0xa] - b _08083446 -_08083438: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _0808344E -_08083446: - adds r0, r4, #0 - bl sub_08083638 - b _080834B2 -_0808344E: - adds r0, r4, #0 - bl sub_080836A0 - b _080834B2 -_08083456: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _080834A8 - ldrb r0, [r4, #0x1e] - movs r1, #4 - orrs r0, r1 - strb r0, [r4, #0x1e] - ldrb r1, [r6] - ldrh r2, [r5] - adds r0, r4, #0 - bl sub_080836DC - bl CheckIsDungeon - cmp r0, #0 - bne _08083484 - movs r0, #5 - strb r0, [r4, #0xc] - b _080834B2 -_08083484: - movs r0, #8 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_080787CC - ldr r1, _080834A4 @ =gUnk_0811F740 - ldrb r0, [r6] - adds r0, r0, r1 - ldrb r2, [r0] - adds r0, r4, #0 - movs r1, #0 - movs r3, #0 - bl sub_08078850 - b _080834B2 - .align 2, 0 -_080834A4: .4byte gUnk_0811F740 -_080834A8: - bl DeleteThisEntity - b _080834B2 -_080834AE: - bl DeleteThisEntity -_080834B2: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080834B4 -sub_080834B4: @ 0x080834B4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080834E6 - movs r0, #2 - strb r0, [r2, #0xc] - movs r0, #7 - strb r0, [r2, #0xe] - adds r0, r2, #0 - adds r0, #0x74 - ldrh r0, [r0] - adds r1, r2, #0 - adds r1, #0x76 - ldrh r1, [r1] - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - ldr r0, _080834E8 @ =0x0000010B - bl EnqueueSFX -_080834E6: - pop {pc} - .align 2, 0 -_080834E8: .4byte 0x0000010B - - thumb_func_start sub_080834EC -sub_080834EC: @ 0x080834EC - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08083516 - ldrb r1, [r4, #0xa] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08083512 - adds r0, r4, #0 - bl sub_08083638 - b _08083516 -_08083512: - bl DeleteThisEntity -_08083516: - pop {r4, pc} - - thumb_func_start sub_08083518 -sub_08083518: @ 0x08083518 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x7e - ldrb r1, [r5] - bl sub_08083734 - cmp r0, #0 - beq _0808353C - movs r0, #4 - strb r0, [r4, #0xc] - ldrb r1, [r5] - adds r0, r4, #0 - adds r0, #0x76 - ldrh r2, [r0] - adds r0, r4, #0 - bl sub_080836DC -_0808353C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08083540 -sub_08083540: @ 0x08083540 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808358C - ldrb r1, [r4, #0xa] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08083566 - movs r0, #0xef - ands r0, r1 - strb r0, [r4, #0xa] - b _0808356E -_08083566: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08083576 -_0808356E: - adds r0, r4, #0 - bl sub_080836A0 - b _0808357A -_08083576: - movs r0, #5 - strb r0, [r4, #0xc] -_0808357A: - adds r0, r4, #0 - adds r0, #0x7e - ldrb r1, [r0] - adds r0, r4, #0 - bl sub_08083814 - ldr r0, _08083590 @ =0x0000010B - bl EnqueueSFX -_0808358C: - pop {r4, pc} - .align 2, 0 -_08083590: .4byte 0x0000010B - - thumb_func_start nullsub_513 -nullsub_513: @ 0x08083594 - bx lr - .align 2, 0 - - thumb_func_start sub_08083598 -sub_08083598: @ 0x08083598 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _080835B2 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _080835C6 - b _080835C0 -_080835B2: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _080835C6 -_080835C0: - adds r0, r4, #0 - bl sub_08083658 -_080835C6: - pop {r4, pc} - - thumb_func_start sub_080835C8 -sub_080835C8: @ 0x080835C8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _080835E2 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _080835F4 - b _080835F0 -_080835E2: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _080835F4 -_080835F0: - movs r0, #3 - strb r0, [r4, #0xc] -_080835F4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080835F8 -sub_080835F8: @ 0x080835F8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _08083616 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _08083636 -_08083616: - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x14 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_08083658 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - movs r0, #1 - rsbs r0, r0, #0 - bl sub_080526F8 -_08083636: - pop {r4, pc} - - thumb_func_start sub_08083638 -sub_08083638: @ 0x08083638 - adds r2, r0, #0 - movs r0, #7 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - subs r0, #0xb - ands r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - adds r0, #0x70 - ldrh r0, [r0] - strh r0, [r2, #0x2e] - adds r0, r2, #0 - adds r0, #0x72 - ldrh r0, [r0] - strh r0, [r2, #0x32] - bx lr - - thumb_func_start sub_08083658 -sub_08083658: @ 0x08083658 - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #0x14 - strb r1, [r0, #0xe] - adds r2, r0, #0 - adds r2, #0x7e - ldrb r1, [r2] - lsls r1, r1, #3 - strb r1, [r0, #0x15] - ldrb r2, [r2] - lsls r2, r2, #1 - ldr r1, _08083698 @ =gUnk_0811F680 - adds r2, r2, r1 - movs r1, #0 - ldrsb r1, [r2, r1] - ldrh r3, [r0, #0x2e] - adds r1, r1, r3 - strh r1, [r0, #0x2e] - movs r1, #1 - ldrsb r1, [r2, r1] - ldrh r2, [r0, #0x32] - adds r1, r1, r2 - strh r1, [r0, #0x32] - movs r1, #0x3c - bl sub_0805E4E0 - ldr r0, _0808369C @ =0x0000010B - bl SoundReq - pop {pc} - .align 2, 0 -_08083698: .4byte gUnk_0811F680 -_0808369C: .4byte 0x0000010B - - thumb_func_start sub_080836A0 -sub_080836A0: @ 0x080836A0 - push {lr} - adds r2, r0, #0 - movs r0, #6 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - subs r0, #0xa - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - adds r0, #0x70 - ldrh r0, [r0] - strh r0, [r2, #0x2e] - adds r0, r2, #0 - adds r0, #0x72 - ldrh r0, [r0] - strh r0, [r2, #0x32] - ldr r0, _080836D8 @ =0x00004022 - adds r1, r2, #0 - adds r1, #0x76 - ldrh r1, [r1] - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - pop {pc} - .align 2, 0 -_080836D8: .4byte 0x00004022 - - thumb_func_start sub_080836DC -sub_080836DC: @ 0x080836DC - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r1, r2, #0 - ldr r0, _0808372C @ =0x00004022 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - movs r0, #7 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x18] - subs r0, #0xb - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - lsls r0, r4, #3 - movs r1, #0x10 - eors r0, r1 - strb r0, [r5, #0x15] - lsls r4, r4, #1 - ldr r0, _08083730 @ =gUnk_0811F688 - adds r4, r4, r0 - ldrb r0, [r5, #0xb] - cmp r0, #2 - beq _08083728 - movs r0, #0 - ldrsb r0, [r4, r0] - ldrh r1, [r5, #0x2e] - adds r0, r0, r1 - strh r0, [r5, #0x2e] - movs r0, #1 - ldrsb r0, [r4, r0] - ldrh r1, [r5, #0x32] - adds r0, r0, r1 - strh r0, [r5, #0x32] -_08083728: - pop {r4, r5, pc} - .align 2, 0 -_0808372C: .4byte 0x00004022 -_08083730: .4byte gUnk_0811F688 - - thumb_func_start sub_08083734 -sub_08083734: @ 0x08083734 - push {lr} - adds r2, r0, #0 - cmp r1, #1 - beq _08083760 - cmp r1, #1 - blo _0808374A - cmp r1, #2 - beq _08083774 - cmp r1, #3 - beq _08083790 - b _080837AC -_0808374A: - adds r0, r2, #0 - adds r0, #0x72 - ldrh r1, [r0] - ldr r0, _0808375C @ =gPlayerEntity - movs r2, #0x32 - ldrsh r0, [r0, r2] - subs r0, #0xd - b _0808379E - .align 2, 0 -_0808375C: .4byte gPlayerEntity -_08083760: - ldr r0, _08083770 @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r0, r1] - adds r0, #0xb - adds r1, r2, #0 - adds r1, #0x70 - b _08083780 - .align 2, 0 -_08083770: .4byte gPlayerEntity -_08083774: - ldr r0, _0808378C @ =gPlayerEntity - movs r1, #0x32 - ldrsh r0, [r0, r1] - adds r0, #8 - adds r1, r2, #0 - adds r1, #0x72 -_08083780: - ldrh r1, [r1] - subs r0, r0, r1 - cmp r0, #0 - bge _080837AC - movs r0, #1 - b _080837AE - .align 2, 0 -_0808378C: .4byte gPlayerEntity -_08083790: - adds r0, r2, #0 - adds r0, #0x70 - ldrh r1, [r0] - ldr r0, _080837A8 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r0, [r0, r2] - subs r0, #0xa -_0808379E: - subs r1, r1, r0 - cmp r1, #0 - bge _080837AC - movs r0, #1 - b _080837AE - .align 2, 0 -_080837A8: .4byte gPlayerEntity -_080837AC: - movs r0, #0 -_080837AE: - pop {pc} - - thumb_func_start sub_080837B0 -sub_080837B0: @ 0x080837B0 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _080837C8 @ =gRoomControls - ldrb r2, [r0, #4] - cmp r2, #0x3f - bhi _080837DC - cmp r2, #0x25 - beq _080837CC - cmp r2, #0x35 - beq _080837D4 - movs r5, #0xa - b _080837E8 - .align 2, 0 -_080837C8: .4byte gRoomControls -_080837CC: - ldr r5, _080837D0 @ =0x000001E7 - b _080837E8 - .align 2, 0 -_080837D0: .4byte 0x000001E7 -_080837D4: - ldr r5, _080837D8 @ =0x000001C3 - b _080837E8 - .align 2, 0 -_080837D8: .4byte 0x000001C3 -_080837DC: - ldr r1, _080837F8 @ =gUnk_0811F690 - adds r0, r2, #0 - subs r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r5, [r0] -_080837E8: - cmp r2, #0x68 - bne _080837FC - adds r0, r4, #0 - movs r1, #0 - bl sub_0801D2B4 - b _08083808 - .align 2, 0 -_080837F8: .4byte gUnk_0811F690 -_080837FC: - cmp r2, #0x88 - bne _08083808 - adds r0, r4, #0 - movs r1, #1 - bl sub_0801D2B4 -_08083808: - adds r0, r4, #0 - adds r1, r5, #0 - bl LoadFixedGFX - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08083814 -sub_08083814: @ 0x08083814 - push {r4, r5, lr} - adds r5, r0, #0 - lsls r1, r1, #2 - ldr r0, _08083868 @ =gUnk_0811F730 - adds r4, r1, r0 - adds r0, r5, #0 - movs r1, #0x11 - movs r2, #0x40 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _08083842 - movs r0, #0 - ldrsb r0, [r4, r0] - ldrh r1, [r2, #0x2e] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - movs r0, #1 - ldrsb r0, [r4, r0] - ldrh r1, [r2, #0x32] - adds r0, r0, r1 - strh r0, [r2, #0x32] -_08083842: - adds r0, r5, #0 - movs r1, #0x11 - movs r2, #0x40 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _08083866 - movs r0, #2 - ldrsb r0, [r4, r0] - ldrh r1, [r2, #0x2e] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - movs r0, #3 - ldrsb r0, [r4, r0] - ldrh r1, [r2, #0x32] - adds r0, r0, r1 - strh r0, [r2, #0x32] -_08083866: - pop {r4, r5, pc} - .align 2, 0 -_08083868: .4byte gUnk_0811F730 diff --git a/linker.ld b/linker.ld index 638f9b5e..0a9554d9 100644 --- a/linker.ld +++ b/linker.ld @@ -709,7 +709,7 @@ SECTIONS { src/object/pot.o(.text); asm/object6.o(.text); asm/blockPushed.o(.text); - asm/lockedDoor.o(.text); + src/object/lockedDoor.o(.text); asm/object9.o(.text); src/object/objectA.o(.text); asm/objectB.o(.text); diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c new file mode 100644 index 00000000..eba11da7 --- /dev/null +++ b/src/object/lockedDoor.c @@ -0,0 +1,277 @@ +#include "global.h" +#include "entity.h" +#include "flags.h" +#include "game.h" +#include "audio.h" +#include "functions.h" + +extern void (* const gUnk_0811F65C[])(Entity*); + +void LockedDoor(Entity* this) { + gUnk_0811F65C[this->action](this); +} + +extern u32 sub_080837B0(Entity*); +extern Hitbox gUnk_080FD170; +extern void sub_08083638(Entity*); +extern void sub_080836A0(Entity*); +extern u8 gUnk_0811F740[]; +extern u32 sub_080001DA(u32, u32); +extern void sub_080836DC(Entity*, u32, u32); +extern void sub_08078850(Entity*, u32, u32, u32); + +extern u32 sub_08083734(Entity*, u32); + +extern void sub_08083814(Entity*, u32); + +extern void sub_08083658(Entity*); + +extern void sub_0805E4E0(Entity*, u32); + +typedef struct PACKED { + s8 x; + s8 y; +} struct_0811F680; +extern const struct_0811F680 gUnk_0811F680[]; +extern const struct_0811F680 gUnk_0811F688[]; + +extern const u16 gUnk_0811F690[]; + +typedef struct { + struct_0811F680 unk_00; + struct_0811F680 unk_02; +} struct_0811F730; + +extern const struct_0811F730 gUnk_0811F730[]; + +void sub_08083338(Entity *this) { + if (this->cutsceneBeh.HWORD != 0xFFFF && CheckFlags(this->cutsceneBeh.HWORD)) { + DeleteThisEntity(); + } + if (!sub_080837B0(this)) return; + this->type2 = (this->type >> 2) & 3; + this->frameIndex = this->type & 3; + this->speed = 0x300; + this->field_0x70.HALF.LO = this->x.HALF.HI; + this->field_0x70.HALF.HI = this->y.HALF.HI; + this->field_0x7c.BYTES.byte2 = this->type & 3; + this->hitbox = &gUnk_080FD170; + this->spritePriority.b0 = 5; + this->frames.all = this->type & 0xF; + this->field_0x76.HWORD = TILE(this->x.HALF.HI, this->y.HALF.HI); + this->field_0x74.HWORD = sub_080001DA(this->field_0x76.HWORD, this->collisionLayer); + switch (this->type2) { + case 0: + if (!CheckFlags(this->field_0x86.HWORD)) { + if (this->type & 0x10) { + this->action = 3; + } else { + sub_080836A0(this); + } + } else { + this->type &= ~0x10; + sub_08083638(this); + } + break; + case 1: + if (!CheckFlags(this->field_0x86.HWORD)) { + sub_08083638(this); + } else { + sub_080836A0(this); + } + break; + case 2: + if (!CheckFlags(this->field_0x86.HWORD)) { + this->frameIndex |= 4; + sub_080836DC(this, this->field_0x7c.BYTES.byte2, this->field_0x76.HWORD); + if (!CheckIsDungeon()) { + this->action = 5; + } else { + this->action = 8; + sub_080787CC(this); + sub_08078850(this, 0, gUnk_0811F740[this->field_0x7c.BYTES.byte2], 0); + } + } else { + DeleteThisEntity(); + } + break; + default: + DeleteThisEntity(); + break; + } +} + +void sub_080834B4(Entity *this) { + if (--this->actionDelay == 0) { + this->action = 2; + this->actionDelay = 7; + SetTile(this->field_0x74.HWORD, this->field_0x76.HWORD, this->collisionLayer); + EnqueueSFX(0x10b); + } +} + +void sub_080834EC(Entity *this) { + sub_0806F69C(this); + if (--this->actionDelay == 0) { + if (this->type & 0x80) { + sub_08083638(this); + } else { + DeleteThisEntity(); + } + } +} + +void sub_08083518(Entity *this) { + if (sub_08083734(this, this->field_0x7c.BYTES.byte2)) { + this->action = 4; + sub_080836DC(this, this->field_0x7c.BYTES.byte2, this->field_0x76.HWORD); + } +} + +void sub_08083540(Entity *this) { + sub_0806F69C(this); + if (!--this->actionDelay) { + if (this->type & 0x10) { + this->type &= ~0x10; + sub_080836A0(this); + } else { + if (this->type & 0x80) { + sub_080836A0(this); + } else { + this->action = 5; + } + } + sub_08083814(this, this->field_0x7c.BYTES.byte2); + EnqueueSFX(0x10b); + } +} + +void nullsub_513(Entity* this) {} + +void sub_08083598(Entity *this) { + if (this->type2 == 0) { + if (!CheckFlags(this->field_0x86.HWORD)) return; + } else { + if (CheckFlags(this->field_0x86.HWORD)) return; + } + sub_08083658(this); +} + +void sub_080835C8(Entity *this) { + if (this->type2 == 0) { + if (CheckFlags(this->field_0x86.HWORD)) return; + } else { + if (!CheckFlags(this->field_0x86.HWORD)) return; + } + this->action = 3; +} + +void sub_080835F8(Entity *this) { + if (this->interactType == 0 && !CheckFlags(this->field_0x86.HWORD)) return; + this->action = 1; + this->actionDelay = 0x14; + sub_08083658(this); + SetFlag(this->field_0x86.HWORD); + sub_080526F8(-1); +} + +void sub_08083638(Entity *this) { + this->action = 7; + this->spriteSettings.b.draw = 0; + this->x.HALF.HI = this->field_0x70.HALF.LO; + this->y.HALF.HI = this->field_0x70.HALF.HI; +} + +void sub_08083658(Entity *this) { + const struct_0811F680 * tmp; + this->action = 1; + this->actionDelay = 0x14; + this->direction = this->field_0x7c.BYTES.byte2 << 3; + tmp = &gUnk_0811F680[this->field_0x7c.BYTES.byte2]; + this->x.HALF.HI += tmp->x; + this->y.HALF.HI += tmp->y; + sub_0805E4E0(this, 0x3c); + SoundReq(0x10b); +} + +void sub_080836A0(Entity *this) { + this->action = 6; + this->spriteSettings.b.draw = 1; + this->x.HALF.HI = this->field_0x70.HALF.LO; + this->y.HALF.HI = this->field_0x70.HALF.HI; + SetTile(0x4022, this->field_0x76.HWORD, this->collisionLayer); +} + +void sub_080836DC(Entity *this, u32 unk_0, u32 unk_1) { + const struct_0811F680* tmp; + SetTile(0x4022, unk_1, this->collisionLayer); + this->actionDelay = 7; + this->spriteSettings.b.draw = 1; + this->direction = (unk_0 << 3) ^ 0x10; + tmp = &gUnk_0811F688[unk_0]; + if (this->type2 != 2) { + this->x.HALF.HI += tmp->x; + this->y.HALF.HI += tmp->y; + } +} + +u32 sub_08083734(Entity *this, u32 unk0) { + switch (unk0) { + case 0: + if (this->field_0x70.HALF_U.HI + 0xd - gPlayerEntity.y.HALF.HI < 0) return 1; + break; + case 1: + if (gPlayerEntity.x.HALF.HI - (this->field_0x70.HALF_U.LO - 0xb) < 0) return 1; + break; + case 2: + if (gPlayerEntity.y.HALF.HI - (this->field_0x70.HALF_U.HI - 0x8) < 0) return 1; + break; + case 3: + if (this->field_0x70.HALF_U.LO + 0xa - gPlayerEntity.x.HALF.HI < 0) return 1; + break; + } + return 0; +} + +u32 sub_080837B0(Entity *this) { + u32 tmp; + u32 tmp2 = gRoomControls.areaID; + if (tmp2 < 0x40) { + switch (tmp2) { + default: + tmp = 0xA; + break; + case 0x25: + tmp = 0x1e7; + break; + case 0x35: + tmp = 0x1c3; + break; + } + } else { + tmp = gUnk_0811F690[tmp2 - 0x40]; + } + if (tmp2 == 0x68) { + sub_0801D2B4(this, 0); + } else { + if (tmp2 == 0x88) { + sub_0801D2B4(this, 1); + } + } + LoadFixedGFX(this, tmp); +} + +void sub_08083814(Entity *this, u32 unk0) { + Entity* fx; + const struct_0811F730 * tmp = &gUnk_0811F730[unk0]; + fx = CreateFx(this, 0x11, 0x40); + if (fx) { + fx->x.HALF.HI += tmp->unk_00.x; + fx->y.HALF.HI += tmp->unk_00.y; + } + fx = CreateFx(this, 0x11, 0x40); + if (fx) { + fx->x.HALF.HI += tmp->unk_02.x; + fx->y.HALF.HI += tmp->unk_02.y; + } +} From da68765792475a9fcaaf7047501ced92d718f9ca Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Thu, 29 Apr 2021 17:56:10 +0200 Subject: [PATCH 2/3] lockedDoor.c: move rodata --- data/const/object/lockedDoor.s | 31 ------------- linker.ld | 2 +- src/object/lockedDoor.c | 83 +++++++++++++++++++++++++++------- 3 files changed, 67 insertions(+), 49 deletions(-) delete mode 100644 data/const/object/lockedDoor.s diff --git a/data/const/object/lockedDoor.s b/data/const/object/lockedDoor.s deleted file mode 100644 index 18f12a60..00000000 --- a/data/const/object/lockedDoor.s +++ /dev/null @@ -1,31 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0811F65C:: @ 0811F65C - .4byte sub_08083338 - .4byte sub_080834B4 - .4byte sub_080834EC - .4byte sub_08083518 - .4byte sub_08083540 - .4byte nullsub_513 - .4byte sub_08083598 - .4byte sub_080835C8 - .4byte sub_080835F8 - -gUnk_0811F680:: @ 0811F680 - .incbin "baserom.gba", 0x11F680, 0x0000008 - -gUnk_0811F688:: @ 0811F688 - .incbin "baserom.gba", 0x11F688, 0x0000008 - -gUnk_0811F690:: @ 0811F690 - .incbin "baserom.gba", 0x11F690, 0x00000A0 - -gUnk_0811F730:: @ 0811F730 - .incbin "baserom.gba", 0x11F730, 0x0000010 - -gUnk_0811F740:: @ 0811F740 - .incbin "baserom.gba", 0x11F740, 0x0000004 diff --git a/linker.ld b/linker.ld index 0a9554d9..fcf63a1a 100644 --- a/linker.ld +++ b/linker.ld @@ -1414,7 +1414,7 @@ SECTIONS { data/const/object/object6.o(.rodata); data/animations/object/object6.o(.rodata); data/const/object/blockPushed.o(.rodata); - data/const/object/lockedDoor.o(.rodata); + src/object/lockedDoor.o(.rodata); data/const/object/object9.o(.rodata); data/animations/object/object9.o(.rodata); data/const/object/objectB.o(.rodata); diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c index eba11da7..14af2ab7 100644 --- a/src/object/lockedDoor.c +++ b/src/object/lockedDoor.c @@ -5,44 +5,93 @@ #include "audio.h" #include "functions.h" -extern void (* const gUnk_0811F65C[])(Entity*); +void sub_08083338(Entity*); +void sub_080834B4(Entity*); +void sub_080834EC(Entity*); +void sub_08083518(Entity*); +void sub_08083540(Entity*); +void nullsub_513(Entity*); +void sub_08083598(Entity*); +void sub_080835C8(Entity*); +void sub_080835F8(Entity*); + +void sub_08083638(Entity*); +void sub_08083658(Entity*); +void sub_080836A0(Entity*); +void sub_080836DC(Entity*, u32, u32); +u32 sub_08083734(Entity*, u32); +u32 sub_080837B0(Entity*); +void sub_08083814(Entity*, u32); + +void (* const gUnk_0811F65C[])(Entity*) = { + sub_08083338, + sub_080834B4, + sub_080834EC, + sub_08083518, + sub_08083540, + nullsub_513, + sub_08083598, + sub_080835C8, + sub_080835F8 +}; void LockedDoor(Entity* this) { gUnk_0811F65C[this->action](this); } -extern u32 sub_080837B0(Entity*); extern Hitbox gUnk_080FD170; -extern void sub_08083638(Entity*); -extern void sub_080836A0(Entity*); -extern u8 gUnk_0811F740[]; + extern u32 sub_080001DA(u32, u32); -extern void sub_080836DC(Entity*, u32, u32); extern void sub_08078850(Entity*, u32, u32, u32); - -extern u32 sub_08083734(Entity*, u32); - -extern void sub_08083814(Entity*, u32); - -extern void sub_08083658(Entity*); - extern void sub_0805E4E0(Entity*, u32); typedef struct PACKED { s8 x; s8 y; } struct_0811F680; -extern const struct_0811F680 gUnk_0811F680[]; -extern const struct_0811F680 gUnk_0811F688[]; -extern const u16 gUnk_0811F690[]; +const struct_0811F680 gUnk_0811F680[] = { + {0, -2}, + {2, 0}, + {0, 2}, + {-2, 0} +}; + +const struct_0811F680 gUnk_0811F688[] = { + {0, -21}, + {21, 0}, + {0, 21}, + {-21, 0} +}; + +const u16 gUnk_0811F690[] = { + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, + 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, + 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, + 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59 +}; typedef struct { struct_0811F680 unk_00; struct_0811F680 unk_02; } struct_0811F730; -extern const struct_0811F730 gUnk_0811F730[]; +const struct_0811F730 gUnk_0811F730[] = { + {{ 8, 8}, {-8, 8}}, + {{-8, 8}, {-8,-8}}, + {{ 8,-8}, {-8,-8}}, + {{ 8, 8}, { 8,-8}} +}; + +const u8 gUnk_0811F740[] = { + 0xBE, 0x7D, 0xEB, 0xD7 +}; void sub_08083338(Entity *this) { if (this->cutsceneBeh.HWORD != 0xFFFF && CheckFlags(this->cutsceneBeh.HWORD)) { From 08399f1be44b3a2d5667c5f5fce3be113e417ac6 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Thu, 29 Apr 2021 19:31:10 +0200 Subject: [PATCH 3/3] lockedDoor.c: clang-format --- src/object/lockedDoor.c | 124 ++++++++++++++++++++-------------------- 1 file changed, 63 insertions(+), 61 deletions(-) diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c index 14af2ab7..f7918284 100644 --- a/src/object/lockedDoor.c +++ b/src/object/lockedDoor.c @@ -23,16 +23,9 @@ u32 sub_08083734(Entity*, u32); u32 sub_080837B0(Entity*); void sub_08083814(Entity*, u32); -void (* const gUnk_0811F65C[])(Entity*) = { - sub_08083338, - sub_080834B4, - sub_080834EC, - sub_08083518, - sub_08083540, - nullsub_513, - sub_08083598, - sub_080835C8, - sub_080835F8 +void (*const gUnk_0811F65C[])(Entity*) = { + sub_08083338, sub_080834B4, sub_080834EC, sub_08083518, sub_08083540, + nullsub_513, sub_08083598, sub_080835C8, sub_080835F8, }; void LockedDoor(Entity* this) { @@ -51,30 +44,25 @@ typedef struct PACKED { } struct_0811F680; const struct_0811F680 gUnk_0811F680[] = { - {0, -2}, - {2, 0}, - {0, 2}, - {-2, 0} + { 0, -2 }, + { 2, 0 }, + { 0, 2 }, + { -2, 0 }, }; const struct_0811F680 gUnk_0811F688[] = { - {0, -21}, - {21, 0}, - {0, 21}, - {-21, 0} + { 0, -21 }, + { 21, 0 }, + { 0, 21 }, + { -21, 0 }, }; const u16 gUnk_0811F690[] = { - 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, - 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, - 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, - 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59 + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, + 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, + 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, }; typedef struct { @@ -83,21 +71,25 @@ typedef struct { } struct_0811F730; const struct_0811F730 gUnk_0811F730[] = { - {{ 8, 8}, {-8, 8}}, - {{-8, 8}, {-8,-8}}, - {{ 8,-8}, {-8,-8}}, - {{ 8, 8}, { 8,-8}} + { { 8, 8 }, { -8, 8 } }, + { { -8, 8 }, { -8, -8 } }, + { { 8, -8 }, { -8, -8 } }, + { { 8, 8 }, { 8, -8 } }, }; const u8 gUnk_0811F740[] = { - 0xBE, 0x7D, 0xEB, 0xD7 + 0xBE, + 0x7D, + 0xEB, + 0xD7, }; -void sub_08083338(Entity *this) { +void sub_08083338(Entity* this) { if (this->cutsceneBeh.HWORD != 0xFFFF && CheckFlags(this->cutsceneBeh.HWORD)) { DeleteThisEntity(); } - if (!sub_080837B0(this)) return; + if (!sub_080837B0(this)) + return; this->type2 = (this->type >> 2) & 3; this->frameIndex = this->type & 3; this->speed = 0x300; @@ -150,7 +142,7 @@ void sub_08083338(Entity *this) { } } -void sub_080834B4(Entity *this) { +void sub_080834B4(Entity* this) { if (--this->actionDelay == 0) { this->action = 2; this->actionDelay = 7; @@ -159,7 +151,7 @@ void sub_080834B4(Entity *this) { } } -void sub_080834EC(Entity *this) { +void sub_080834EC(Entity* this) { sub_0806F69C(this); if (--this->actionDelay == 0) { if (this->type & 0x80) { @@ -170,14 +162,14 @@ void sub_080834EC(Entity *this) { } } -void sub_08083518(Entity *this) { +void sub_08083518(Entity* this) { if (sub_08083734(this, this->field_0x7c.BYTES.byte2)) { this->action = 4; sub_080836DC(this, this->field_0x7c.BYTES.byte2, this->field_0x76.HWORD); } } -void sub_08083540(Entity *this) { +void sub_08083540(Entity* this) { sub_0806F69C(this); if (!--this->actionDelay) { if (this->type & 0x10) { @@ -195,28 +187,34 @@ void sub_08083540(Entity *this) { } } -void nullsub_513(Entity* this) {} +void nullsub_513(Entity* this) { +} -void sub_08083598(Entity *this) { +void sub_08083598(Entity* this) { if (this->type2 == 0) { - if (!CheckFlags(this->field_0x86.HWORD)) return; + if (!CheckFlags(this->field_0x86.HWORD)) + return; } else { - if (CheckFlags(this->field_0x86.HWORD)) return; + if (CheckFlags(this->field_0x86.HWORD)) + return; } sub_08083658(this); } -void sub_080835C8(Entity *this) { +void sub_080835C8(Entity* this) { if (this->type2 == 0) { - if (CheckFlags(this->field_0x86.HWORD)) return; + if (CheckFlags(this->field_0x86.HWORD)) + return; } else { - if (!CheckFlags(this->field_0x86.HWORD)) return; + if (!CheckFlags(this->field_0x86.HWORD)) + return; } this->action = 3; } -void sub_080835F8(Entity *this) { - if (this->interactType == 0 && !CheckFlags(this->field_0x86.HWORD)) return; +void sub_080835F8(Entity* this) { + if (this->interactType == 0 && !CheckFlags(this->field_0x86.HWORD)) + return; this->action = 1; this->actionDelay = 0x14; sub_08083658(this); @@ -224,15 +222,15 @@ void sub_080835F8(Entity *this) { sub_080526F8(-1); } -void sub_08083638(Entity *this) { +void sub_08083638(Entity* this) { this->action = 7; this->spriteSettings.b.draw = 0; this->x.HALF.HI = this->field_0x70.HALF.LO; this->y.HALF.HI = this->field_0x70.HALF.HI; } -void sub_08083658(Entity *this) { - const struct_0811F680 * tmp; +void sub_08083658(Entity* this) { + const struct_0811F680* tmp; this->action = 1; this->actionDelay = 0x14; this->direction = this->field_0x7c.BYTES.byte2 << 3; @@ -243,7 +241,7 @@ void sub_08083658(Entity *this) { SoundReq(0x10b); } -void sub_080836A0(Entity *this) { +void sub_080836A0(Entity* this) { this->action = 6; this->spriteSettings.b.draw = 1; this->x.HALF.HI = this->field_0x70.HALF.LO; @@ -251,7 +249,7 @@ void sub_080836A0(Entity *this) { SetTile(0x4022, this->field_0x76.HWORD, this->collisionLayer); } -void sub_080836DC(Entity *this, u32 unk_0, u32 unk_1) { +void sub_080836DC(Entity* this, u32 unk_0, u32 unk_1) { const struct_0811F680* tmp; SetTile(0x4022, unk_1, this->collisionLayer); this->actionDelay = 7; @@ -264,25 +262,29 @@ void sub_080836DC(Entity *this, u32 unk_0, u32 unk_1) { } } -u32 sub_08083734(Entity *this, u32 unk0) { +u32 sub_08083734(Entity* this, u32 unk0) { switch (unk0) { case 0: - if (this->field_0x70.HALF_U.HI + 0xd - gPlayerEntity.y.HALF.HI < 0) return 1; + if (this->field_0x70.HALF_U.HI + 0xd - gPlayerEntity.y.HALF.HI < 0) + return 1; break; case 1: - if (gPlayerEntity.x.HALF.HI - (this->field_0x70.HALF_U.LO - 0xb) < 0) return 1; + if (gPlayerEntity.x.HALF.HI - (this->field_0x70.HALF_U.LO - 0xb) < 0) + return 1; break; case 2: - if (gPlayerEntity.y.HALF.HI - (this->field_0x70.HALF_U.HI - 0x8) < 0) return 1; + if (gPlayerEntity.y.HALF.HI - (this->field_0x70.HALF_U.HI - 0x8) < 0) + return 1; break; case 3: - if (this->field_0x70.HALF_U.LO + 0xa - gPlayerEntity.x.HALF.HI < 0) return 1; + if (this->field_0x70.HALF_U.LO + 0xa - gPlayerEntity.x.HALF.HI < 0) + return 1; break; } return 0; } -u32 sub_080837B0(Entity *this) { +u32 sub_080837B0(Entity* this) { u32 tmp; u32 tmp2 = gRoomControls.areaID; if (tmp2 < 0x40) { @@ -310,9 +312,9 @@ u32 sub_080837B0(Entity *this) { LoadFixedGFX(this, tmp); } -void sub_08083814(Entity *this, u32 unk0) { +void sub_08083814(Entity* this, u32 unk0) { Entity* fx; - const struct_0811F730 * tmp = &gUnk_0811F730[unk0]; + const struct_0811F730* tmp = &gUnk_0811F730[unk0]; fx = CreateFx(this, 0x11, 0x40); if (fx) { fx->x.HALF.HI += tmp->unk_00.x;