From 935a37b95335afea375a137cfb14c3f2e583d707 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 13 Mar 2022 02:03:18 +0200 Subject: [PATCH] decompile object1F --- asm/object/object1F.s | 208 ----------------------------------- assets/assets.json | 10 -- data/const/object/object1F.s | 16 --- linker.ld | 4 +- src/object/object1F.c | 102 +++++++++++++++++ 5 files changed, 104 insertions(+), 236 deletions(-) delete mode 100644 asm/object/object1F.s delete mode 100644 data/const/object/object1F.s create mode 100644 src/object/object1F.c 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 @@ -42865,16 +42865,6 @@ "size": 44, "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, 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(); +}