From a462cd8daa576a6ee17f662e3b83739e70159317 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 28 Feb 2022 20:05:29 +0100 Subject: [PATCH] Decompile Object11 --- asm/object/object11.s | 347 ----------------------------------- assets/assets.json | 10 - data/const/object/object11.s | 24 --- include/coord.h | 2 +- include/object.h | 2 +- linker.ld | 4 +- src/coord.c | 6 +- src/object/object11.c | 142 ++++++++++++++ 8 files changed, 149 insertions(+), 388 deletions(-) delete mode 100644 asm/object/object11.s delete mode 100644 data/const/object/object11.s create mode 100644 src/object/object11.c diff --git a/asm/object/object11.s b/asm/object/object11.s deleted file mode 100644 index 596eb9dd..00000000 --- a/asm/object/object11.s +++ /dev/null @@ -1,347 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object11 -Object11: @ 0x08084D34 - push {r4, lr} - adds r4, r0, #0 - bl EntityIsDeleted - cmp r0, #0 - bne _08084D50 - ldr r0, _08084D54 @ =gUnk_0812057C - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08084D50: - pop {r4, pc} - .align 2, 0 -_08084D54: .4byte gUnk_0812057C - - thumb_func_start sub_08084D58 -sub_08084D58: @ 0x08084D58 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0xa] - cmp r0, #3 - bne _08084D6C - adds r0, r7, #0 - bl sub_08084F8C -_08084D6C: - adds r0, r7, #0 - bl sub_08004168 - ldrb r0, [r7, #0xa] - cmp r0, #4 - bne _08084D7E - adds r0, r7, #0 - bl sub_08084F8C -_08084D7E: - movs r0, #2 - strb r0, [r7, #0xc] - ldrb r0, [r7, #0x10] - movs r2, #0x80 - orrs r0, r2 - strb r0, [r7, #0x10] - ldrb r1, [r7, #0x19] - movs r5, #0x3f - adds r0, r5, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r7, #0x19] - ldr r0, _08084E48 @ =gUnk_08120588 - mov r8, r0 - ldrb r0, [r7, #0xa] - lsls r0, r0, #2 - add r0, r8 - ldrb r0, [r0, #1] - strb r0, [r7, #0x1d] - ldrb r0, [r7, #0xa] - lsls r0, r0, #2 - add r0, r8 - ldrb r0, [r0, #2] - strb r0, [r7, #0x1c] - movs r2, #0 - movs r0, #0x80 - strh r0, [r7, #0x24] - ldr r0, _08084E4C @ =gPlayerEntity - adds r0, #0x38 - ldrb r0, [r0] - adds r6, r7, #0 - adds r6, #0x38 - strb r0, [r6] - adds r1, r7, #0 - adds r1, #0x45 - movs r0, #1 - strb r0, [r1] - subs r1, #9 - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #0x6e - strb r0, [r1] - subs r1, #4 - movs r0, #4 - strb r0, [r1] - ldr r0, _08084E50 @ =gUnk_081205B4 - str r0, [r7, #0x48] - adds r0, r7, #0 - adds r0, #0x72 - strb r2, [r0] - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldr r4, _08084E54 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r5 - movs r2, #0x32 - ldrsh r1, [r7, r2] - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r6] - bl GetTileIndex - adds r1, r7, #0 - adds r1, #0x70 - strh r0, [r1] - ldr r0, _08084E58 @ =0x00004022 - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r4, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r5 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r6] - bl SetTile - ldrb r0, [r7, #0xa] - lsls r0, r0, #2 - add r0, r8 - ldrb r1, [r0] - adds r0, r7, #0 - bl InitializeAnimation - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08084E48: .4byte gUnk_08120588 -_08084E4C: .4byte gPlayerEntity -_08084E50: .4byte gUnk_081205B4 -_08084E54: .4byte gRoomControls -_08084E58: .4byte 0x00004022 - - thumb_func_start sub_08084E5C -sub_08084E5C: @ 0x08084E5C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08084EAC @ =gPlayerState - ldrb r1, [r0, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #1 - bne _08084E7A - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x13 - beq _08084EA8 -_08084E7A: - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _08084EB0 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r4, r5] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - bl DeleteThisEntity -_08084EA8: - pop {r4, r5, pc} - .align 2, 0 -_08084EAC: .4byte gPlayerState -_08084EB0: .4byte gRoomControls - - thumb_func_start sub_08084EB4 -sub_08084EB4: @ 0x08084EB4 - push {lr} - ldr r2, _08084EC8 @ =gUnk_0812059C - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08084EC8: .4byte gUnk_0812059C - - thumb_func_start sub_08084ECC -sub_08084ECC: @ 0x08084ECC - push {lr} - movs r1, #1 - strb r1, [r0, #0xd] - bl sub_08084ED8 - pop {pc} - - thumb_func_start sub_08084ED8 -sub_08084ED8: @ 0x08084ED8 - push {r4, lr} - adds r4, r0, #0 - bl sub_08084E5C - adds r0, r4, #0 - bl sub_0806F4E8 - ldrb r0, [r4, #0x1d] - cmp r0, #0 - beq _08084EFA - subs r0, #1 - strb r0, [r4, #0x1d] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08084EFA - movs r0, #2 - strb r0, [r4, #0xd] -_08084EFA: - pop {r4, pc} - - thumb_func_start sub_08084EFC -sub_08084EFC: @ 0x08084EFC - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x72 - ldrb r1, [r2] - cmp r1, #0 - bne _08084F42 - movs r0, #1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x62 - strb r1, [r0] - adds r0, #0xe - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08084F7C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl sub_0807B9B8 -_08084F42: - ldr r0, _08084F80 @ =gPlayerState - ldrb r1, [r0, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #1 - bne _08084F5C - adds r0, r5, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x13 - beq _08084F62 -_08084F5C: - adds r0, r5, #0 - bl sub_08084F8C -_08084F62: - adds r0, r5, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _08084F7A - ldrb r1, [r5, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #1 - bne _08084F7A - bl DeleteThisEntity -_08084F7A: - pop {r4, r5, r6, pc} - .align 2, 0 -_08084F7C: .4byte gRoomControls -_08084F80: .4byte gPlayerState - - thumb_func_start sub_08084F84 -sub_08084F84: @ 0x08084F84 - bx lr - .align 2, 0 - - thumb_func_start sub_08084F88 -sub_08084F88: @ 0x08084F88 - bx lr - .align 2, 0 - - thumb_func_start sub_08084F8C -sub_08084F8C: @ 0x08084F8C - push {lr} - ldrb r1, [r0, #0xb] - cmp r1, #0xf - beq _08084FA4 - cmp r1, #0xf - bgt _08084F9E - cmp r1, #0 - beq _08084FB8 - b _08084FAE -_08084F9E: - cmp r1, #0xff - bne _08084FAE - b _08084FB8 -_08084FA4: - ldrb r1, [r0, #0xe] - movs r2, #0x80 - bl CreateFx - b _08084FB8 -_08084FAE: - ldrb r1, [r0, #0xb] - ldrb r2, [r0, #0xe] - movs r3, #0 - bl CreateObjectWithParent -_08084FB8: - bl DeleteThisEntity - pop {pc} - .align 2, 0 diff --git a/assets/assets.json b/assets/assets.json index 7f922a35..7f4aafe6 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -42675,16 +42675,6 @@ "start": 1181044, "size": 8 }, - { - "path": "object11/gUnk_08120588.bin", - "start": 1181064, - "size": 20 - }, - { - "path": "object11/gUnk_081205B4.bin", - "start": 1181108, - "size": 8 - }, { "path": "animations/gSpriteAnimations_Railtrack_0.bin", "start": 1181156, diff --git a/data/const/object/object11.s b/data/const/object/object11.s deleted file mode 100644 index e641e2c8..00000000 --- a/data/const/object/object11.s +++ /dev/null @@ -1,24 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812057C:: @ 0812057C - .4byte sub_08084D58 - .4byte sub_08084E5C - .4byte sub_08084EB4 - -gUnk_08120588:: @ 08120588 - .incbin "object11/gUnk_08120588.bin" - -gUnk_0812059C:: @ 0812059C - .4byte sub_08084ECC - .4byte sub_08084ED8 - .4byte sub_08084EFC - .4byte sub_08084F84 - .4byte sub_08084F88 - .4byte sub_08084F8C - -gUnk_081205B4:: @ 081205B4 - .incbin "object11/gUnk_081205B4.bin" diff --git a/include/coord.h b/include/coord.h index 4bcf7262..31453184 100644 --- a/include/coord.h +++ b/include/coord.h @@ -16,7 +16,7 @@ void SortEntityAbove(Entity*, Entity*); void SortEntityBelow(Entity*, Entity*); u32 sub_0806F5A4(u32 idx); -u32 sub_0806F3E4(Entity*); +bool32 sub_0806F3E4(Entity*); void LinearMoveUpdate(Entity*); bool32 sub_0806FD54(Entity*); u32 sub_0806FCAC(Entity*, Entity*); diff --git a/include/object.h b/include/object.h index 740bbeb4..ce3bbaa8 100644 --- a/include/object.h +++ b/include/object.h @@ -243,7 +243,7 @@ void ObjectD(Entity*); void ObjectE(Entity*); void SpecialFx(Entity*); void Object10(Entity*); -void Object11(Entity*); +void Object11(); void Object12(Entity*); void Railtrack(Entity*); void LilypadLarge(); diff --git a/linker.ld b/linker.ld index 11fac862..d09260d4 100644 --- a/linker.ld +++ b/linker.ld @@ -637,7 +637,7 @@ SECTIONS { asm/object/objectE.o(.text); src/object/specialFx.o(.text); asm/object/object10.o(.text); - asm/object/object11.o(.text); + src/object/object11.o(.text); asm/object/object12.o(.text); src/object/railtrack.o(.text); src/object/lilypadLarge.o(.text); @@ -1355,7 +1355,7 @@ SECTIONS { src/object/specialFx.o(.rodata); data/animations/object/specialFx.o(.rodata); data/const/object/object10.o(.rodata); - data/const/object/object11.o(.rodata); + src/object/object11.o(.rodata); data/const/object/object12.o(.rodata); data/const/object/railtrack.o(.rodata); data/animations/object/railtrack.o(.rodata); diff --git a/src/coord.c b/src/coord.c index 760888cb..61cfb199 100644 --- a/src/coord.c +++ b/src/coord.c @@ -55,7 +55,7 @@ u32 sub_0806F39C(Entity* ent) { return 0; } -u32 sub_0806F3E4(Entity* ent) { +bool32 sub_0806F3E4(Entity* ent) { Entity tmp_ent; s8* p; @@ -95,9 +95,9 @@ u32 sub_0806F3E4(Entity* ent) { gPlayerState.item->type = 1; SoundReq(SFX_EF); } - return 1; + return TRUE; } - return 0; + return FALSE; } void sub_0806F4E8(Entity* ent) { diff --git a/src/object/object11.c b/src/object/object11.c new file mode 100644 index 00000000..ed7de0ed --- /dev/null +++ b/src/object/object11.c @@ -0,0 +1,142 @@ +/** + * @file object11.c + * @ingroup Objects + * + * @brief Object11 object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" +#include "hitbox.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[8]; + /*0x70*/ u16 unk_70; + /*0x72*/ u8 unk_72; +} Object11Entity; + +typedef struct { + u8 unk_0; + u8 unk_1; + u8 unk_2; +} struct_08120588; + +void Object11_Init(Object11Entity*); +void Object11_Action1(Object11Entity*); +void Object11_Action2(Object11Entity*); +void Object11_Action2SubAction0(Object11Entity*); +void Object11_Action2SubAction1(Object11Entity*); +void Object11_Action2SubAction2(Object11Entity*); +void Object11_Action2SubAction3(Object11Entity*); +void Object11_Action2SubAction4(Object11Entity*); +void Object11_Action2SubAction5(Object11Entity*); + +void Object11(Object11Entity* this) { + static void (*const Object11_Actions[])(Object11Entity*) = { + Object11_Init, + Object11_Action1, + Object11_Action2, + }; + if (!EntityIsDeleted(super)) { + Object11_Actions[super->action](this); + } +} + +extern const Hitbox gUnk_081205B4; +void Object11_Init(Object11Entity* this) { + static const struct_08120588 gUnk_08120588[] = { + { 0, 32, 1 }, { 0, 64, 2 }, { 0, 32, 2 }, { 13, 1, 0 }, { 22, 1, 0 }, + }; + if (super->type == 3) { + Object11_Action2SubAction5(this); + } + sub_08004168(super); + if (super->type == 4) { + Object11_Action2SubAction5(this); + } + super->action = 2; + super->flags |= ENT_COLLIDE; + super->spriteRendering.b3 = 2; + super->field_0x1d = gUnk_08120588[super->type].unk_1; + super->field_0x1c = gUnk_08120588[super->type].unk_2; + super->speed = 0x80; + super->collisionLayer = gPlayerEntity.collisionLayer; + super->health = 1; + super->field_0x3c = 7; + super->hitType = 0x6e; + super->flags2 = 4; + super->hitbox = (Hitbox*)&gUnk_081205B4; + this->unk_72 = 0; + this->unk_70 = GetTileIndex(COORD_TO_TILE(super), super->collisionLayer); + SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer); + InitializeAnimation(super, gUnk_08120588[super->type].unk_0); +} + +void Object11_Action1(Object11Entity* this) { + if (((gPlayerState.field_0x1c & 0xf) != 1) || ((super->bitfield & 0x7f) != 0x13)) { + sub_0807BA8C(COORD_TO_TILE(super), super->collisionLayer); + DeleteThisEntity(); + } +} + +void Object11_Action2(Object11Entity* this) { + static void (*const Object11_Action2SubActions[])(Object11Entity*) = { + Object11_Action2SubAction0, Object11_Action2SubAction1, Object11_Action2SubAction2, + Object11_Action2SubAction3, Object11_Action2SubAction4, Object11_Action2SubAction5, + }; + Object11_Action2SubActions[super->subAction](this); +} + +const Hitbox gUnk_081205B4 = { 0, 0, { 6, 3, 3, 6 }, 6, 6 }; + +void Object11_Action2SubAction0(Object11Entity* this) { + super->subAction = 1; + Object11_Action2SubAction1(this); +} + +void Object11_Action2SubAction1(Object11Entity* this) { + Object11_Action1(this); + sub_0806F4E8(super); + if ((super->field_0x1d != 0) && (--super->field_0x1d == 0)) { + super->subAction = 2; + } +} + +void Object11_Action2SubAction2(Object11Entity* this) { + if (this->unk_72 == 0) { + this->unk_72 = 1; + super->spriteOffsetX = 0; + sub_0807B9B8(this->unk_70, COORD_TO_TILE(super), super->collisionLayer); + } + if (((gPlayerState.field_0x1c & 0xf) != 1) || ((super->bitfield & 0x7f) != 0x13)) { + Object11_Action2SubAction5(this); + } + if (sub_0806F3E4(super) && ((super->field_0x1c & 0xf) == 1)) { + DeleteThisEntity(); + } +} + +void Object11_Action2SubAction3(Object11Entity* this) { +} + +void Object11_Action2SubAction4(Object11Entity* this) { +} + +void Object11_Action2SubAction5(Object11Entity* this) { + switch (super->type2) { + case 0xff: + break; + case 0xf: + CreateFx(super, super->actionDelay, 0x80); + break; + case 0: + break; + default: + CreateObjectWithParent(super, super->type2, super->actionDelay, 0); + break; + } + DeleteThisEntity(); +}