summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/objectA.s126
-rw-r--r--include/functions.h2
-rw-r--r--linker.ld2
-rw-r--r--src/object/objectA.c39
4 files changed, 42 insertions, 127 deletions
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