summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTal Hayon <talhayon1@gmail.com>2022-03-16 14:50:28 +0200
committerTal Hayon <talhayon1@gmail.com>2022-03-18 13:38:17 +0200
commitd93dfd2c59bdbb986e22a8420b5ea85768c4d080 (patch)
tree733f03efd910a69412aefe8e1838674ade8c0bf9
parentc8547ffe35e5fa601cf6b0307bf6566a33074456 (diff)
Decompile object98
-rw-r--r--asm/object/object98.s128
-rw-r--r--data/const/object/object98.s9
-rw-r--r--linker.ld4
-rw-r--r--src/object/object98.c68
4 files changed, 70 insertions, 139 deletions
diff --git a/asm/object/object98.s b/asm/object/object98.s
deleted file mode 100644
index 97ecdf3b..00000000
--- a/asm/object/object98.s
+++ /dev/null
@@ -1,128 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start Object98
-Object98: @ 0x0809E348
- push {lr}
- ldr r2, _0809E35C @ =gUnk_0812418C
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809E35C: .4byte gUnk_0812418C
-
- thumb_func_start sub_0809E360
-sub_0809E360: @ 0x0809E360
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r4, r0, #0
- ldrb r0, [r4, #0xe]
- cmp r0, #8
- bls _0809E372
- movs r0, #8
- strb r0, [r4, #0xe]
-_0809E372:
- ldrb r2, [r4, #0xe]
- movs r0, #0x48
- subs r0, r0, r2
- ldr r1, _0809E3E0 @ =gEntCount
- ldrb r1, [r1]
- cmp r0, r1
- ble _0809E3D8
- movs r5, #0
- adds r7, r4, #0
- adds r7, #0x7e
- movs r0, #0x76
- adds r0, r0, r4
- mov r8, r0
- cmp r5, r2
- bhs _0809E3A6
- movs r6, #0xe
-_0809E392:
- movs r0, #0x17
- bl CreateProjectile
- strb r6, [r0, #0xe]
- str r4, [r0, #0x50]
- adds r6, #0xc
- adds r5, #1
- ldrb r2, [r4, #0xe]
- cmp r5, r2
- blo _0809E392
-_0809E3A6:
- movs r0, #1
- strb r0, [r4, #0xc]
- ldrb r0, [r7]
- lsls r1, r0, #8
- mov r2, r8
- strh r1, [r2]
- lsls r0, r0, #6
- strb r0, [r4, #0x14]
- adds r0, r4, #0
- movs r1, #0
- bl SetDefaultPriority
- ldrb r0, [r4, #0xa]
- cmp r0, #0
- beq _0809E3D8
- bl GetCurrentRoomProperty
- str r0, [r4, #0x54]
- adds r1, r4, #0
- adds r1, #0x54
- adds r2, r4, #0
- adds r2, #0x74
- adds r0, r4, #0
- bl sub_080A2CC0
-_0809E3D8:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0809E3E0: .4byte gEntCount
-
- thumb_func_start sub_0809E3E4
-sub_0809E3E4: @ 0x0809E3E4
- push {r4, lr}
- adds r4, r0, #0
- adds r2, r4, #0
- adds r2, #0x76
- ldrb r0, [r4, #0xb]
- ldrh r1, [r2]
- adds r1, r1, r0
- strh r1, [r2]
- lsrs r1, r1, #2
- strb r1, [r4, #0x14]
- ldrb r0, [r4, #0xa]
- cmp r0, #0
- beq _0809E428
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _0809E40E
- adds r0, r4, #0
- bl LinearMoveUpdate
-_0809E40E:
- adds r2, r4, #0
- adds r2, #0x74
- ldrh r0, [r2]
- subs r0, #1
- strh r0, [r2]
- lsls r0, r0, #0x10
- cmp r0, #0
- bne _0809E428
- adds r1, r4, #0
- adds r1, #0x54
- adds r0, r4, #0
- bl sub_080A2CC0
-_0809E428:
- pop {r4, pc}
- .align 2, 0
diff --git a/data/const/object/object98.s b/data/const/object/object98.s
deleted file mode 100644
index 732233be..00000000
--- a/data/const/object/object98.s
+++ /dev/null
@@ -1,9 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnk_0812418C:: @ 0812418C
- .4byte sub_0809E360
- .4byte sub_0809E3E4
diff --git a/linker.ld b/linker.ld
index 5ca5a33c..4bf4c063 100644
--- a/linker.ld
+++ b/linker.ld
@@ -777,7 +777,7 @@ SECTIONS {
asm/object/bird.o(.text);
src/object/object96.o(.text);
src/object/keyStealingTakkuri.o(.text);
- asm/object/object98.o(.text);
+ src/object/object98.o(.text);
asm/object/object99.o(.text);
src/object/macroAcorn.o(.text);
src/object/object9B.o(.text);
@@ -1528,7 +1528,7 @@ SECTIONS {
data/animations/object/bird.o(.rodata);
src/object/object96.o(.rodata);
src/object/keyStealingTakkuri.o(.rodata);
- data/const/object/object98.o(.rodata);
+ src/object/object98.o(.rodata);
data/animations/object/object98.o(.rodata);
src/object/macroAcorn.o(.rodata);
src/object/object9B.o(.rodata);
diff --git a/src/object/object98.c b/src/object/object98.c
new file mode 100644
index 00000000..798836dc
--- /dev/null
+++ b/src/object/object98.c
@@ -0,0 +1,68 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "projectile.h"
+#include "room.h"
+#include "functions.h"
+
+typedef struct {
+ Entity base;
+ u8 filler[0xC];
+ u16 unk74;
+ u16 unk76;
+ u8 filler2[0x6];
+ u8 unk7e;
+} Object98Entity;
+
+void sub_0809E360(Object98Entity*);
+void sub_0809E3E4(Object98Entity*);
+
+void Object98(Entity* this) {
+ static void (*const actionFuncs[])(Object98Entity*) = {
+ sub_0809E360,
+ sub_0809E3E4,
+ };
+
+ actionFuncs[this->action]((Object98Entity*)this);
+}
+
+void sub_0809E360(Object98Entity* this) {
+ u32 bVar1;
+ Entity* projEnt;
+ u32 index;
+
+ if (8 < super->actionDelay) {
+ super->actionDelay = 8;
+ }
+
+ if (0x48 - super->actionDelay > gEntCount) {
+ for (index = 0; index < super->actionDelay; index++) {
+ projEnt = CreateProjectile(GURUGURU_BAR_PROJECTILE);
+ projEnt->actionDelay = 14 + 12 * index;
+ projEnt->parent = super;
+ }
+
+ super->action = 1;
+ bVar1 = this->unk7e;
+ this->unk76 = bVar1 << 8;
+ super->animationState = bVar1 << 6;
+ SetDefaultPriority(super, 0);
+ if (super->type != 0) {
+ super->child = (Entity*)GetCurrentRoomProperty(super->type);
+ sub_080A2CC0(super, (u16**)&super->child, &this->unk74);
+ }
+ }
+}
+
+void sub_0809E3E4(Object98Entity* this) {
+ this->unk76 += super->type2;
+ super->animationState = this->unk76 >> 2;
+ if (super->type != 0) {
+ if ((super->direction & 0x80) == 0) {
+ LinearMoveUpdate(super);
+ }
+
+ if (--this->unk74 == 0) {
+ sub_080A2CC0(super, (u16**)&super->child, &this->unk74);
+ }
+ }
+}