summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTal Hayon <talhayon1@gmail.com>2022-03-13 02:03:18 +0200
committerTal Hayon <talhayon1@gmail.com>2022-03-13 02:03:18 +0200
commit935a37b95335afea375a137cfb14c3f2e583d707 (patch)
tree82128f7c5182008b224d6d1b5b5ae608e76cdd88
parent710ede70d288c5a10b78805502c5a519247c44b4 (diff)
decompile object1F
-rw-r--r--asm/object/object1F.s208
-rw-r--r--assets/assets.json10
-rw-r--r--data/const/object/object1F.s16
-rw-r--r--linker.ld4
-rw-r--r--src/object/object1F.c102
5 files changed, 104 insertions, 236 deletions
diff --git a/asm/object/object1F.s b/asm/object/object1F.s
deleted file mode 100644
index db5a2968..00000000
--- a/asm/object/object1F.s
+++ /dev/null
@@ -1,208 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start Object1F
-Object1F: @ 0x08087690
- push {lr}
- ldr r2, _080876A4 @ =gUnk_08120A0C
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_080876A4: .4byte gUnk_08120A0C
-
- thumb_func_start sub_080876A8
-sub_080876A8: @ 0x080876A8
- push {lr}
- mov ip, r0
- movs r0, #1
- mov r1, ip
- strb r0, [r1, #0xc]
- movs r0, #0xb0
- lsls r0, r0, #0xa
- str r0, [r1, #0x20]
- ldrb r2, [r1, #0x14]
- lsls r0, r2, #2
- movs r1, #0x10
- eors r0, r1
- mov r3, ip
- strb r0, [r3, #0x15]
- lsls r2, r2, #0x18
- cmp r2, #0
- bne _080876E2
- adds r3, #0x29
- ldrb r2, [r3]
- lsls r1, r2, #0x1d
- lsrs r1, r1, #0x1d
- subs r1, #1
- movs r0, #7
- ands r1, r0
- movs r0, #8
- rsbs r0, r0, #0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_080876E2:
- ldr r1, _08087760 @ =gUnk_08120A20
- mov r2, ip
- ldrb r0, [r2, #0x14]
- adds r0, r0, r1
- ldrb r0, [r0]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- ldrh r3, [r2, #0x2e]
- adds r0, r0, r3
- strh r0, [r2, #0x2e]
- ldrb r0, [r2, #0x14]
- adds r0, #1
- adds r0, r0, r1
- ldrb r0, [r0]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- ldrh r1, [r2, #0x32]
- adds r0, r0, r1
- strh r0, [r2, #0x32]
- ldr r3, _08087764 @ =gUnk_08120A18
- ldrb r0, [r2, #0xf]
- lsls r0, r0, #2
- adds r0, r0, r3
- ldrb r1, [r0, #3]
- mov r0, ip
- adds r0, #0x60
- strh r1, [r0]
- ldrb r0, [r2, #0xf]
- lsls r0, r0, #2
- adds r0, r0, r3
- ldrb r1, [r0, #1]
- movs r0, #0xf
- ands r1, r0
- ldrb r2, [r2, #0x1a]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r2
- orrs r0, r1
- mov r2, ip
- strb r0, [r2, #0x1a]
- ldrb r0, [r2, #0xf]
- lsls r0, r0, #2
- adds r0, r0, r3
- ldrb r0, [r0, #2]
- str r0, [r2, #0x6c]
- ldr r0, _08087768 @ =gPlayerEntity
- adds r0, #0x38
- ldrb r1, [r0]
- mov r0, ip
- adds r0, #0x38
- strb r1, [r0]
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r2, #0x24]
- ldrb r0, [r2, #0xf]
- lsls r0, r0, #2
- adds r0, r0, r3
- ldrb r1, [r0]
- mov r0, ip
- bl InitializeAnimation
- pop {pc}
- .align 2, 0
-_08087760: .4byte gUnk_08120A20
-_08087764: .4byte gUnk_08120A18
-_08087768: .4byte gPlayerEntity
-
- thumb_func_start sub_0808776C
-sub_0808776C: @ 0x0808776C
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, [r4, #0x6c]
- cmp r0, #0
- beq _08087788
- subs r0, #1
- str r0, [r4, #0x6c]
- ldr r0, _08087784 @ =gPlayerState
- adds r0, #0x3d
- ldrb r0, [r0]
- b _08087798
- .align 2, 0
-_08087784: .4byte gPlayerState
-_08087788:
- adds r0, r4, #0
- bl ProcessMovement2
- movs r1, #0xa0
- lsls r1, r1, #6
- adds r0, r4, #0
- bl GravityUpdate
-_08087798:
- cmp r0, #0
- bne _080877A0
- movs r0, #2
- strb r0, [r4, #0xc]
-_080877A0:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_080877A4
-sub_080877A4: @ 0x080877A4
- push {r4, lr}
- adds r4, r0, #0
- bl sub_080B1B0C
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- adds r1, r0, #0
- cmp r0, #0x25
- beq _080877D0
- cmp r0, #0x25
- bgt _080877C4
- cmp r0, #0x21
- beq _080877CA
- cmp r0, #0x24
- beq _080877D6
- b _080877E2
-_080877C4:
- cmp r1, #0x30
- beq _080877D6
- b _080877E2
-_080877CA:
- adds r0, r4, #0
- movs r1, #0
- b _080877DA
-_080877D0:
- adds r0, r4, #0
- movs r1, #0xc
- b _080877DA
-_080877D6:
- adds r0, r4, #0
- movs r1, #0xb
-_080877DA:
- movs r2, #0
- bl CreateFx
- b _08087804
-_080877E2:
- ldrb r0, [r4, #0xb]
- cmp r0, #0
- beq _08087804
- cmp r0, #0xf
- bne _080877F8
- ldrb r1, [r4, #0xe]
- adds r0, r4, #0
- movs r2, #0x80
- bl CreateFx
- b _08087804
-_080877F8:
- ldrb r1, [r4, #0xb]
- ldrb r2, [r4, #0xe]
- adds r0, r4, #0
- movs r3, #0
- bl CreateObjectWithParent
-_08087804:
- bl DeleteThisEntity
- pop {r4, pc}
- .align 2, 0
diff --git a/assets/assets.json b/assets/assets.json
index d7eaee43..c376afe1 100644
--- a/assets/assets.json
+++ b/assets/assets.json
@@ -42866,16 +42866,6 @@
"type": "animation"
},
{
- "path": "object1F/gUnk_08120A18.bin",
- "start": 1182232,
- "size": 8
- },
- {
- "path": "object1F/gUnk_08120A20.bin",
- "start": 1182240,
- "size": 8
- },
- {
"path": "animations/gSpriteAnimations_FigurineDevice_0.bin",
"start": 1182440,
"size": 5,
diff --git a/data/const/object/object1F.s b/data/const/object/object1F.s
deleted file mode 100644
index 9a818cb1..00000000
--- a/data/const/object/object1F.s
+++ /dev/null
@@ -1,16 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnk_08120A0C:: @ 08120A0C
- .4byte sub_080876A8
- .4byte sub_0808776C
- .4byte sub_080877A4
-
-gUnk_08120A18:: @ 08120A18
- .incbin "object1F/gUnk_08120A18.bin"
-
-gUnk_08120A20:: @ 08120A20
- .incbin "object1F/gUnk_08120A20.bin"
diff --git a/linker.ld b/linker.ld
index 3900ebdc..8b88d7e5 100644
--- a/linker.ld
+++ b/linker.ld
@@ -651,7 +651,7 @@ SECTIONS {
src/object/object1C.o(.text);
src/object/object1D.o(.text);
src/object/object1E.o(.text);
- asm/object/object1F.o(.text);
+ src/object/object1F.o(.text);
src/object/object20.o(.text);
src/object/object21.o(.text);
src/object/figurineDevice.o(.text);
@@ -1372,7 +1372,7 @@ SECTIONS {
data/const/object/object1D.o(.rodata);
src/object/object1E.o(.rodata);
data/animations/object/object1E.o(.rodata);
- data/const/object/object1F.o(.rodata);
+ src/object/object1F.o(.rodata);
src/object/object20.o(.rodata);
src/object/object21.o(.rodata);
src/object/figurineDevice.o(.rodata);
diff --git a/src/object/object1F.c b/src/object/object1F.c
new file mode 100644
index 00000000..2c548d67
--- /dev/null
+++ b/src/object/object1F.c
@@ -0,0 +1,102 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "player.h"
+#include "functions.h"
+#include "asm.h"
+#include "effects.h"
+
+typedef struct {
+ Entity base;
+ u8 filler[0x4];
+ u32 unk6c;
+} Object1FEntity;
+
+void Object1F_Init(Object1FEntity*);
+void Object1F_Action1(Object1FEntity*);
+void Object1F_Action2(Object1FEntity*);
+
+void Object1F(Entity* this) {
+ static void (*const actionFuncs[])(Object1FEntity*) = {
+ Object1F_Init,
+ Object1F_Action1,
+ Object1F_Action2,
+ };
+
+ actionFuncs[this->action]((Object1FEntity*)this);
+}
+
+typedef struct {
+ u8 animationState;
+ u8 unk1;
+ u8 unk2;
+ u8 spriteVramOffset;
+} gUnk_08120A18_struct;
+
+void Object1F_Init(Object1FEntity* this) {
+ static const gUnk_08120A18_struct gUnk_08120A18[] = {
+ { 0x0, 0x2, 0xA, 0xE8 },
+ { 0x0, 0x5, 0x20, 0xE0 },
+ };
+ static const s8 gUnk_08120A20[] = { 0, -18, 16, 0, 0, 12, -16, 0 };
+
+ u32 temp;
+ super->action = 1;
+ super->zVelocity = 0x2c000;
+ super->direction = super->animationState << 2 ^ 0x10;
+ if (super->animationState == 0) {
+ super->spritePriority.b0--;
+ }
+ super->x.HALF.HI = gUnk_08120A20[super->animationState] + super->x.HALF.HI;
+ super->y.HALF.HI = gUnk_08120A20[super->animationState + 1] + super->y.HALF.HI;
+
+ super->spriteVramOffset = gUnk_08120A18[super->field_0xf].spriteVramOffset;
+ temp = gUnk_08120A18[super->field_0xf].unk1;
+ super->palette.b.b0 = temp;
+ this->unk6c = gUnk_08120A18[super->field_0xf].unk2;
+ super->collisionLayer = gPlayerEntity.collisionLayer;
+ super->speed = 0x100;
+ InitializeAnimation(super, gUnk_08120A18[super->field_0xf].animationState);
+}
+
+void Object1F_Action1(Object1FEntity* this) {
+ u32 uVar1;
+
+ if (this->unk6c) {
+ this->unk6c--;
+ uVar1 = gPlayerState.field_0x3c[1];
+ } else {
+ ProcessMovement2(super);
+ uVar1 = GravityUpdate(super, 0x2800);
+ }
+
+ if (uVar1 == 0) {
+ super->action = 2;
+ }
+}
+
+void Object1F_Action2(Object1FEntity* this) {
+ u8 bVar1;
+
+ bVar1 = sub_080B1B0C(super);
+ switch (bVar1) {
+ case 0x21:
+ CreateFx(super, FX_FALL_DOWN, 0);
+ break;
+ case 0x25:
+ CreateFx(super, FX_LAVA_SPLASH, 0);
+ break;
+ case 0x24:
+ case 0x30:
+ CreateFx(super, FX_WATER_SPLASH, 0);
+ break;
+ default:
+ if (super->type2 != 0) {
+ if (super->type2 == 15) {
+ CreateFx(super, super->actionDelay, 0x80);
+ } else {
+ CreateObjectWithParent(super, super->type2, super->actionDelay, 0);
+ }
+ }
+ }
+ DeleteThisEntity();
+}