From ae587390b4af257a39b3dfb6d2f656fdaed82d77 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Fri, 11 Mar 2022 17:08:40 +0100 Subject: [PATCH] Decompile ObjectB3 --- asm/object/objectB3.s | 197 ----------------------------------- data/const/object/objectB3.s | 19 ---- linker.ld | 4 +- src/object/objectB3.c | 106 +++++++++++++++++++ 4 files changed, 108 insertions(+), 218 deletions(-) delete mode 100644 asm/object/objectB3.s delete mode 100644 data/const/object/objectB3.s create mode 100644 src/object/objectB3.c diff --git a/asm/object/objectB3.s b/asm/object/objectB3.s deleted file mode 100644 index 41d6458f..00000000 --- a/asm/object/objectB3.s +++ /dev/null @@ -1,197 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectB3 -ObjectB3: @ 0x080A0A34 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _080A0A44 - cmp r0, #1 - beq _080A0A5C - b _080A0A5E -_080A0A44: - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - ldr r1, _080A0A54 @ =gUnk_08124A18 - cmp r0, #0 - beq _080A0A5E - ldr r1, _080A0A58 @ =gUnk_08124A10 - b _080A0A5E - .align 2, 0 -_080A0A54: .4byte gUnk_08124A18 -_080A0A58: .4byte gUnk_08124A10 -_080A0A5C: - ldr r1, _080A0AB8 @ =gUnk_08124A20 -_080A0A5E: - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080A0AB0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r3, #0x40 - orrs r0, r3 - strb r0, [r4, #0x19] - movs r0, #0x29 - adds r0, r0, r4 - mov ip, r0 - ldrb r2, [r0] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - mov r2, ip - strb r0, [r2] - ldrb r0, [r4, #0x1b] - ands r1, r0 - orrs r1, r3 - strb r1, [r4, #0x1b] - ldr r1, _080A0ABC @ =gUnk_080C9CBC - ldr r0, _080A0AC0 @ =gFuseInfo - ldrb r0, [r0, #3] - lsls r0, r0, #3 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - bl ChangeObjPalette -_080A0AB0: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 -_080A0AB8: .4byte gUnk_08124A20 -_080A0ABC: .4byte gUnk_080C9CBC -_080A0AC0: .4byte gFuseInfo - - thumb_func_start sub_080A0AC4 -sub_080A0AC4: @ 0x080A0AC4 - push {lr} - ldrb r1, [r0, #0xa] - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A0AD0 -sub_080A0AD0: @ 0x080A0AD0 - push {lr} - movs r1, #0x80 - bl GravityUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A0ADC -sub_080A0ADC: @ 0x080A0ADC - push {r4, lr} - adds r4, r0, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A0AF0 -sub_080A0AF0: @ 0x080A0AF0 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #5 - bne _080A0B1C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080A0B1C - bl DeleteThisEntity -_080A0B1C: - adds r0, r4, #0 - movs r1, #0x80 - bl GravityUpdate - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A0B28 -sub_080A0B28: @ 0x080A0B28 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x2e - ldrsh r2, [r4, r0] - movs r0, #0x32 - ldrsh r3, [r4, r0] - adds r0, r4, #0 - bl sub_0807DEDC - ldrh r0, [r4, #0x32] - subs r0, #0xb0 - strh r0, [r4, #0x32] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - pop {r4, pc} - - thumb_func_start sub_080A0B4C -sub_080A0B4C: @ 0x080A0B4C - push {lr} - movs r1, #0x78 - strh r1, [r0, #0x2e] - movs r1, #0x50 - strh r1, [r0, #0x32] - movs r1, #0 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A0B60 -sub_080A0B60: @ 0x080A0B60 - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _080A0B7C - movs r0, #2 - strb r0, [r2, #0xc] - movs r0, #0x9b - lsls r0, r0, #1 - bl SoundReq -_080A0B7C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A0B80 -sub_080A0B80: @ 0x080A0B80 - ldr r1, [r0, #0x30] - ldr r2, _080A0B8C @ =0xFFFD8000 - adds r1, r1, r2 - str r1, [r0, #0x30] - bx lr - .align 2, 0 -_080A0B8C: .4byte 0xFFFD8000 diff --git a/data/const/object/objectB3.s b/data/const/object/objectB3.s deleted file mode 100644 index 5a4925f1..00000000 --- a/data/const/object/objectB3.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124A10:: @ 08124A10 - .4byte sub_080A0ADC - .4byte sub_080A0AF0 - -gUnk_08124A18:: @ 08124A18 - .4byte sub_080A0AC4 - .4byte sub_080A0AD0 - -gUnk_08124A20:: @ 08124A20 - .4byte sub_080A0B4C - .4byte sub_080A0B60 - .4byte sub_080A0B80 - diff --git a/linker.ld b/linker.ld index c17c9c5f..9efe0cf3 100644 --- a/linker.ld +++ b/linker.ld @@ -803,7 +803,7 @@ SECTIONS { src/object/metalDoor.o(.text); src/object/jailBars.o(.text); src/object/objectB2.o(.text); - asm/object/objectB3.o(.text); + src/object/objectB3.o(.text); asm/object/objectB4.o(.text); src/object/objectB5.o(.text); asm/object/objectB6.o(.text); @@ -1558,7 +1558,7 @@ SECTIONS { data/const/object/jailBars.o(.rodata); data/animations/object/jailBars.o(.rodata); data/animations/object/objectB2.o(.rodata); - data/const/object/objectB3.o(.rodata); + src/object/objectB3.o(.rodata); data/animations/object/objectB3.o(.rodata); data/const/object/objectB4.o(.rodata); data/animations/object/objectB4.o(.rodata); diff --git a/src/object/objectB3.c b/src/object/objectB3.c new file mode 100644 index 00000000..770d4e27 --- /dev/null +++ b/src/object/objectB3.c @@ -0,0 +1,106 @@ +/** + * @file objectB3.c + * @ingroup Objects + * + * @brief ObjectB3 object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" +#include "kinstone.h" + +void sub_080A0ADC(Entity*); +void sub_080A0AF0(Entity*); +void sub_080A0AC4(Entity*); +void sub_080A0AD0(Entity*); +void sub_080A0B4C(Entity*); +void sub_080A0B60(Entity*); +void sub_080A0B80(Entity*); + +void ObjectB3(Entity* this) { + static void (*const gUnk_08124A10[])(Entity*) = { + sub_080A0ADC, + sub_080A0AF0, + }; + static void (*const gUnk_08124A18[])(Entity*) = { + sub_080A0AC4, + sub_080A0AD0, + }; + static void (*const gUnk_08124A20[])(Entity*) = { + sub_080A0B4C, + sub_080A0B60, + sub_080A0B80, + }; + void (*const* ptr)(Entity*); + + switch (this->type) { + case 0: + if ((this->flags & 2) != 0) { + ptr = gUnk_08124A10; + } else { + ptr = gUnk_08124A18; + } + break; + case 1: + ptr = gUnk_08124A20; + break; + } + ptr[this->action](this); + if (this->action == 0) { + this->action = 1; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 0; + this->spriteOrientation.flipY = 1; + ChangeObjPalette(this, gUnk_080C9CBC[gFuseInfo._3].unk0); + } + GetNextFrame(this); +} + +void sub_080A0AC4(Entity* this) { + InitializeAnimation(this, this->type); +} + +void sub_080A0AD0(Entity* this) { + GravityUpdate(this, 0x80); +} + +void sub_080A0ADC(Entity* this) { + sub_0807DD64(this); + ExecuteScriptForEntity(this, NULL); +} + +void sub_080A0AF0(Entity* this) { + ExecuteScriptForEntity(this, NULL); + GetNextFrame(this); + if (this->animIndex == 5) { + if ((this->frame & 0x80) != 0) { + DeleteThisEntity(); + } + } + GravityUpdate(this, 0x80); +} + +void sub_080A0B28(Entity* this, ScriptExecutionContext* context) { + sub_0807DEDC(this, context, this->x.HALF.HI, this->y.HALF.HI); + this->y.HALF.HI -= 0xb0; + this->spriteSettings.draw = 0; +} + +void sub_080A0B4C(Entity* this) { + this->x.HALF.HI = 0x78; + this->y.HALF.HI = 0x50; + InitializeAnimation(this, 0); +} + +void sub_080A0B60(Entity* this) { + if ((this->frame & 0x40) != 0) { + this->action = 2; + SoundReq(SFX_136); + } +} + +void sub_080A0B80(Entity* this) { + this->y.WORD -= 0x28000; +}