diff --git a/asm/objectA.s b/asm/objectA.s deleted file mode 100644 index 67c4c78a..00000000 --- a/asm/objectA.s +++ /dev/null @@ -1,126 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectA -ObjectA: @ 0x08083A94 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - ldrb r0, [r6, #0xc] - cmp r0, #0 - bne _08083B24 - movs r0, #1 - mov r8, r0 - mov r2, r8 - strb r2, [r6, #0xc] - ldr r0, _08083B10 @ =gUnk_080FD170 - str r0, [r6, #0x48] - adds r7, r6, #0 - adds r7, #0x38 - ldrb r0, [r7] - movs r1, #0x34 - cmp r0, #1 - bne _08083ABC - movs r1, #0x26 -_08083ABC: - adds r4, r6, #0 - adds r4, #0x70 - strh r1, [r4] - adds r0, r6, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _08083B1C - ldrh r0, [r4] - movs r3, #0x2e - ldrsh r1, [r6, r3] - ldr r5, _08083B14 @ =gRoomControls - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r6, r3] - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r7] - bl SetTileType - ldrh r1, [r5] - mov r0, r8 - ands r0, r1 - cmp r0, #0 - beq _08083B08 - ldr r1, _08083B18 @ =gUnk_02000070 - movs r0, #0 - strb r0, [r1] -_08083B08: - bl DeleteThisEntity - b _08083B7E - .align 2, 0 -_08083B10: .4byte gUnk_080FD170 -_08083B14: .4byte gRoomControls -_08083B18: .4byte gUnk_02000070 -_08083B1C: - adds r0, r6, #0 - bl sub_080787CC - b _08083B7E -_08083B24: - adds r0, r6, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _08083B7E - adds r0, r6, #0 - adds r0, #0x70 - ldrh r0, [r0] - movs r5, #0x2e - ldrsh r1, [r6, r5] - ldr r3, _08083B84 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r5, #0x32 - ldrsh r2, [r6, r5] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r6, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTileType - adds r0, r6, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - adds r0, r6, #0 - bl sub_080A29BC - movs r0, #1 - rsbs r0, r0, #0 - bl sub_080526F8 - bl DeleteThisEntity -_08083B7E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08083B84: .4byte gRoomControls diff --git a/include/functions.h b/include/functions.h index b30661d2..efcf8087 100644 --- a/include/functions.h +++ b/include/functions.h @@ -248,4 +248,6 @@ extern void sub_080A2BE4(Entity*, u32); extern u32 sub_08097ADC(Entity*); extern void sub_08097B24(Entity*); extern u32 sub_08079F8C(void); +extern void sub_080787CC(Entity*); +extern void sub_080526F8(s32); #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index c4c76599..f3d2b8a3 100644 --- a/linker.ld +++ b/linker.ld @@ -677,7 +677,7 @@ SECTIONS { asm/blockPushed.o(.text); asm/lockedDoor.o(.text); asm/object9.o(.text); - asm/objectA.o(.text); + src/object/objectA.o(.text); asm/objectB.o(.text); src/object/chestSpawner.o(.text); asm/chestSpawner.o(.text); diff --git a/src/object/objectA.c b/src/object/objectA.c new file mode 100644 index 00000000..c68d503b --- /dev/null +++ b/src/object/objectA.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "entity.h" +#include "room.h" +#include "flags.h" +#include "functions.h" + +extern BoundingBox gUnk_080FD170; + +extern u8 gUnk_02000070; + +void ObjectA(Entity *this) { + u32 uVar2; + + if (this->action == 0) { + this->action = 1; + this->boundingBox = &gUnk_080FD170; + if (this->collisionLayer == 1) { + uVar2 = 0x26; + } else { + uVar2 = 0x34; + } + this->field_0x70.HALF.LO = uVar2; + if (CheckFlags(this->field_0x86) != 0) { + SetTileType(*(u16*)&this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + if ((gRoomControls.unk2 & 1) != 0) { + gUnk_02000070 = 0; + } + DeleteThisEntity(); + } else { + sub_080787CC(this); + } + } else if (this->interactType != 0) { + SetTileType(*(u16*)&this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); + SetFlag(this->field_0x86); + sub_080A29BC(this); + sub_080526F8(-1); + DeleteThisEntity(); + } +} \ No newline at end of file