From 28301855fd7ed39c0800096922227db8944b4013 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 26 Feb 2022 20:24:55 +0100 Subject: [PATCH] Decompile ObjectC1 --- asm/non_matching/ForceEquipItem.inc | 44 ----- asm/object/objectBF.s | 12 -- asm/object/objectC1.s | 272 ---------------------------- data/const/object/objectC1.s | 39 ---- include/object.h | 2 +- linker.ld | 6 +- src/object/objectBF.c | 4 + src/object/objectC1.c | 127 +++++++++++++ 8 files changed, 135 insertions(+), 371 deletions(-) delete mode 100644 asm/non_matching/ForceEquipItem.inc delete mode 100644 asm/object/objectBF.s delete mode 100644 asm/object/objectC1.s delete mode 100644 data/const/object/objectC1.s create mode 100644 src/object/objectBF.c create mode 100644 src/object/objectC1.c diff --git a/asm/non_matching/ForceEquipItem.inc b/asm/non_matching/ForceEquipItem.inc deleted file mode 100644 index e8edb78b..00000000 --- a/asm/non_matching/ForceEquipItem.inc +++ /dev/null @@ -1,44 +0,0 @@ - .syntax unified - .text - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - subs r0, r4, #1 - cmp r0, #0x1e - bhi _08054456 - cmp r1, #1 - bhi _08054456 - movs r2, #0 - cmp r1, #0 - bne _0805442A - movs r2, #1 -_0805442A: - ldr r0, _08054458 @ =gSave - adds r0, #0xb4 - adds r6, r1, r0 - ldrb r7, [r6] - adds r5, r2, r0 - ldrb r3, [r5] - ldr r2, _0805445C @ =gItemMetaData - lsls r1, r3, #3 - adds r1, r1, r2 - lsls r0, r4, #3 - adds r0, r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bne _0805444A - adds r3, r7, #0 -_0805444A: - strb r4, [r6] - strb r3, [r5] - ldr r1, _08054460 @ =gUnk_0200AF00 - movs r0, #0x7f - strb r0, [r1, #0x13] - strb r0, [r1, #0x14] -_08054456: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08054458: .4byte gSave -_0805445C: .4byte gItemMetaData -_08054460: .4byte gUnk_0200AF00 - .syntax divided diff --git a/asm/object/objectBF.s b/asm/object/objectBF.s deleted file mode 100644 index 0a53e6d6..00000000 --- a/asm/object/objectBF.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ObjectBF -ObjectBF: @ 0x080A2444 - bx lr - .align 2, 0 diff --git a/asm/object/objectC1.s b/asm/object/objectC1.s deleted file mode 100644 index d66a016b..00000000 --- a/asm/object/objectC1.s +++ /dev/null @@ -1,272 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectC1 -ObjectC1: @ 0x080A2560 - push {lr} - ldr r2, _080A2574 @ =gUnk_08125084 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080A2574: .4byte gUnk_08125084 - - thumb_func_start sub_080A2578 -sub_080A2578: @ 0x080A2578 - push {lr} - movs r1, #8 - strb r1, [r0, #0xc] - bl sub_080A259C - pop {pc} - - thumb_func_start sub_080A2584 -sub_080A2584: @ 0x080A2584 - push {lr} - bl ResetPlayerEventPriority - ldr r1, _080A2598 @ =gUnk_02034490 - movs r0, #0 - strb r0, [r1] - bl DeleteThisEntity - pop {pc} - .align 2, 0 -_080A2598: .4byte gUnk_02034490 - - thumb_func_start sub_080A259C -sub_080A259C: @ 0x080A259C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r5, _080A25DC @ =gPlayerEntity - ldrb r1, [r5, #0x10] - movs r7, #0x7f - adds r0, r7, #0 - ands r0, r1 - strb r0, [r5, #0x10] - ldrb r1, [r5, #0x18] - movs r6, #4 - rsbs r6, r6, #0 - adds r0, r6, #0 - ands r0, r1 - strb r0, [r5, #0x18] - ldrb r1, [r5, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1c - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0xd] - cmp r0, #1 - beq _080A269C - cmp r0, #1 - bgt _080A25E0 - cmp r0, #0 - beq _080A25E6 - b _080A273C - .align 2, 0 -_080A25DC: .4byte gPlayerEntity -_080A25E0: - cmp r0, #2 - beq _080A26B4 - b _080A273C -_080A25E6: - movs r0, #1 - movs r2, #1 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - adds r3, r4, #0 - adds r3, #0x29 - lsrs r1, r1, #0x1d - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r2, [r5, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r5, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r4, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r4, #0x1b] - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - movs r0, #4 - strb r0, [r4, #0x14] - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - ldr r0, _080A2670 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _080A2678 - ldrb r0, [r4, #0xa] - bl sub_080542AC - ldr r1, _080A2674 @ =0x0000045B - cmp r0, #0 - beq _080A2688 - adds r1, #3 - b _080A2688 - .align 2, 0 -_080A2670: .4byte gPlayerState -_080A2674: .4byte 0x0000045B -_080A2678: - ldrb r0, [r4, #0xa] - bl sub_080542AC - ldr r1, _080A2698 @ =0x000001B9 - cmp r0, #0 - beq _080A2688 - movs r1, #0xb8 - lsls r1, r1, #2 -_080A2688: - lsrs r0, r1, #8 - strh r0, [r4, #0x12] - movs r0, #0xff - ands r1, r0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _080A273C - .align 2, 0 -_080A2698: .4byte 0x000001B9 -_080A269C: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - beq _080A273C - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - b _080A273C -_080A26B4: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r0, _080A2764 @ =gMessage - ldrb r1, [r0] - adds r0, r7, #0 - ands r0, r1 - cmp r0, #0 - bne _080A2762 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080A273C - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - strb r0, [r5, #0x10] - adds r0, r4, #0 - adds r0, #0x68 - ldrb r1, [r0] - movs r0, #3 - ands r1, r0 - ldrb r2, [r5, #0x18] - adds r0, r6, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r0, r4, #0 - adds r0, #0x6a - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x3d - strb r1, [r0] - ldr r1, _080A2768 @ =gPlayerState - adds r0, r4, #0 - adds r0, #0x6b - ldrb r0, [r0] - strb r0, [r1, #7] - adds r0, r4, #0 - adds r0, #0x6c - ldrb r0, [r0] - strb r0, [r1, #0xb] - adds r0, r4, #0 - adds r0, #0x6d - ldrb r0, [r0] - strb r0, [r1, #0xa] - adds r0, r4, #0 - adds r0, #0x6e - ldrb r0, [r0] - adds r2, r1, #0 - adds r2, #0x27 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x6f - ldrb r0, [r0] - strb r0, [r1, #0x1a] - ldr r0, [r4, #0x70] - str r0, [r1, #0x30] - adds r0, r4, #0 - adds r0, #0x74 - ldrb r0, [r0] - adds r1, #0x8a - strb r0, [r1] -_080A273C: - ldr r5, [r4, #0x50] - cmp r5, #0 - beq _080A2762 - adds r0, r4, #0 - adds r1, r5, #0 - bl PositionEntityOnTop - ldrh r0, [r4, #0x12] - ldrb r1, [r4, #0x1e] - bl GetSpriteSubEntryOffsetDataPointer - ldrb r1, [r0] - adds r2, r5, #0 - adds r2, #0x62 - strb r1, [r2] - ldrb r1, [r0, #1] - adds r0, r5, #0 - adds r0, #0x63 - strb r1, [r0] -_080A2762: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A2764: .4byte gMessage -_080A2768: .4byte gPlayerState diff --git a/data/const/object/objectC1.s b/data/const/object/objectC1.s deleted file mode 100644 index 9df5c976..00000000 --- a/data/const/object/objectC1.s +++ /dev/null @@ -1,39 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08125084:: @ 08125084 - .4byte sub_080A2578 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A259C - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 - .4byte sub_080A2584 diff --git a/include/object.h b/include/object.h index 9ccb0b13..d06affcc 100644 --- a/include/object.h +++ b/include/object.h @@ -419,7 +419,7 @@ void ObjectBD(Entity*); void Pinwheel(Entity*); void ObjectBF(Entity*); void EnemyItem(); -void ObjectC1(Entity*); +void ObjectC1(); extern void (*const gObjectFunctions[194])(Entity*); diff --git a/linker.ld b/linker.ld index 83ed1277..f7b9b68b 100644 --- a/linker.ld +++ b/linker.ld @@ -838,9 +838,9 @@ SECTIONS { asm/object/litArea.o(.text); asm/object/objectBD.o(.text); src/object/pinwheel.o(.text); - asm/object/objectBF.o(.text); + src/object/objectBF.o(.text); src/object/enemyItem.o(.text); - asm/object/objectC1.o(.text); + src/object/objectC1.o(.text); /* END objects */ src/objectUtils.o(.text); asm/objectUtils.o(.text); @@ -1594,7 +1594,7 @@ SECTIONS { data/const/object/objectBD.o(.rodata); data/const/object/pinwheel.o(.rodata); data/animations/object/pinwheel.o(.rodata); - data/const/object/objectC1.o(.rodata); + src/object/objectC1.o(.rodata); src/objectDefinitions.o(.rodata); src/playerItemDefinitions.o(.rodata); data/data_08125104.o(.rodata); diff --git a/src/object/objectBF.c b/src/object/objectBF.c new file mode 100644 index 00000000..38cd26e6 --- /dev/null +++ b/src/object/objectBF.c @@ -0,0 +1,4 @@ +#include "entity.h" + +void ObjectBF(Entity* this) { +} diff --git a/src/object/objectC1.c b/src/object/objectC1.c new file mode 100644 index 00000000..780c1c78 --- /dev/null +++ b/src/object/objectC1.c @@ -0,0 +1,127 @@ +/** + * @file objectC1.c + * @ingroup Objects + * + * @brief ObjectC1 object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" +#include "message.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68; + /*0x69*/ u8 unk_69; + /*0x6a*/ u8 unk_6a; + /*0x6b*/ u8 unk_6b; + /*0x6c*/ u8 unk_6c; + /*0x6d*/ u8 unk_6d; + /*0x6e*/ u8 unk_6e; + /*0x6f*/ u8 unk_6f; + /*0x70*/ u32 unk_70; + /*0x74*/ u8 unk_74; +} ObjectC1Entity; + +void ObjectC1_Init(ObjectC1Entity*); +void ObjectC1_Action1(ObjectC1Entity*); +void ObjectC1_Action8(ObjectC1Entity*); + +void ObjectC1(ObjectC1Entity* this) { + static void (*const ObjectC1_Actions[])(ObjectC1Entity*) = { + ObjectC1_Init, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, + ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action8, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, + ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, + ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, + ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, ObjectC1_Action1, + ObjectC1_Action1, ObjectC1_Action1, + }; + ObjectC1_Actions[super->action](this); +} + +void ObjectC1_Init(ObjectC1Entity* this) { + super->action = 8; + ObjectC1_Action8(this); +} + +void ObjectC1_Action1(ObjectC1Entity* this) { + ResetPlayerEventPriority(); + gUnk_02034490.unk0 = 0; + DeleteThisEntity(); +} + +void ObjectC1_Action8(ObjectC1Entity* this) { + u32 one; + u32 tmp; + Entity* parent; + u8* ptr; + + gPlayerEntity.flags &= ~ENT_COLLIDE; + gPlayerEntity.spriteSettings.draw = 0; + super->palette.b.b0 = gPlayerEntity.palette.b.b0; + switch (super->subAction) { + case 0: + one = 1; + super->subAction = one; + super->spriteSettings.draw = one; + super->collisionLayer = gPlayerEntity.collisionLayer; + super->spritePriority.b0 = gPlayerEntity.spritePriority.b0; + + super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3; + super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; + super->spriteSettings.flipX = 0; + super->animationState = 4; + SetDefaultPriority(super, 6); + if ((gPlayerState.flags & PL_NO_CAP) != 0) { + if (sub_080542AC(super->type)) { + tmp = 0x45e; + } else { + tmp = 0x45b; + } + } else { + if (sub_080542AC(super->type)) { + tmp = 0x2e0; + } else { + tmp = 0x1b9; + } + } + super->spriteIndex = (tmp >> 8); + InitAnimationForceUpdate(super, tmp & 0xff); + break; + case 1: + UpdateAnimationSingleFrame(super); + if (super->frame != 0) { + super->subAction++; + } + break; + case 2: + UpdateAnimationSingleFrame(super); + if ((gMessage.doTextBox & 0x7f) != 0) { + return; + } + if ((super->frame & 0x80) != 0) { + super->action = 1; + gPlayerEntity.flags = this->unk_69; + gPlayerEntity.spriteSettings.draw = this->unk_68; + gPlayerEntity.iframes = this->unk_6a; + gPlayerState.field_0x7 = this->unk_6b; + gPlayerState.keepFacing = this->unk_6c; + gPlayerState.field_0xa = this->unk_6d; + gPlayerState.field_0x27[0] = this->unk_6e; + gPlayerState.mobility = this->unk_6f; + gPlayerState.flags = this->unk_70; + gPlayerState.field_0x82[8] = this->unk_74; + } + break; + } + + parent = super->parent; + if (parent != NULL) { + PositionEntityOnTop(super, parent); + ptr = GetSpriteSubEntryOffsetDataPointer((u16)super->spriteIndex, super->frameIndex); + parent->spriteOffsetX = *ptr; + parent->spriteOffsetY = ptr[1]; + } +}