From 6b192c31a437a9f186cca30408c214fd8829f2d3 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 16 Mar 2022 23:48:02 +0200 Subject: [PATCH] Decompile objectAD --- asm/object/objectAD.s | 117 ----------------------------------- data/const/object/objectAD.s | 9 --- linker.ld | 4 +- src/object/objectAD.c | 54 ++++++++++++++++ 4 files changed, 56 insertions(+), 128 deletions(-) delete mode 100644 asm/object/objectAD.s delete mode 100644 data/const/object/objectAD.s create mode 100644 src/object/objectAD.c diff --git a/asm/object/objectAD.s b/asm/object/objectAD.s deleted file mode 100644 index fac47835..00000000 --- a/asm/object/objectAD.s +++ /dev/null @@ -1,117 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectAD -ObjectAD: @ 0x080A048C - push {lr} - ldr r2, _080A04A0 @ =gUnk_081248BC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080A04A0: .4byte gUnk_081248BC - - thumb_func_start sub_080A04A4 -sub_080A04A4: @ 0x080A04A4 - push {r4, lr} - movs r3, #0 - movs r1, #1 - strb r1, [r0, #0xc] - movs r4, #4 - movs r1, #4 - strb r1, [r0, #0x1e] - strb r3, [r0, #0xe] - ldrb r1, [r0, #0x19] - movs r2, #0xc0 - orrs r1, r2 - strb r1, [r0, #0x19] - movs r1, #0x29 - adds r1, r1, r0 - mov ip, r1 - ldrb r1, [r1] - movs r2, #7 - orrs r1, r2 - mov r2, ip - strb r1, [r2] - str r3, [r0, #0x34] - ldrb r2, [r0, #0x19] - movs r1, #0xd - rsbs r1, r1, #0 - ands r1, r2 - orrs r1, r4 - strb r1, [r0, #0x19] - bl sub_080A04E8 - pop {r4, pc} - - thumb_func_start sub_080A04E0 -sub_080A04E0: @ 0x080A04E0 - push {lr} - bl sub_080A04E8 - pop {pc} - - thumb_func_start sub_080A04E8 -sub_080A04E8: @ 0x080A04E8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x50] - movs r1, #0x36 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _080A04F8 - rsbs r0, r0, #0 -_080A04F8: - movs r1, #0x80 - lsls r1, r1, #1 - adds r4, r0, r1 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r4, #0 - movs r3, #0 - bl SetAffineInfo - movs r1, #0xe0 - lsls r1, r1, #1 - subs r1, r1, r4 - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r1, r4, #0 - bl __divsi3 - adds r4, r0, #0 - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xa] - cmp r0, #0x41 - bne _080A0538 - lsls r3, r4, #1 - cmp r3, #0xc - bls _080A052E - movs r3, #0xc -_080A052E: - movs r0, #0x10 - subs r0, r0, r4 - lsls r4, r0, #8 - orrs r4, r3 - b _080A0540 -_080A0538: - movs r0, #0x10 - subs r0, r0, r4 - lsls r0, r0, #8 - orrs r4, r0 -_080A0540: - ldr r0, _080A054C @ =0x0000FFFF - ands r4, r0 - ldr r0, _080A0550 @ =gScreen - adds r0, #0x68 - strh r4, [r0] - pop {r4, r5, pc} - .align 2, 0 -_080A054C: .4byte 0x0000FFFF -_080A0550: .4byte gScreen diff --git a/data/const/object/objectAD.s b/data/const/object/objectAD.s deleted file mode 100644 index a569ed91..00000000 --- a/data/const/object/objectAD.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081248BC:: @ 081248BC - .4byte sub_080A04A4 - .4byte sub_080A04E0 diff --git a/linker.ld b/linker.ld index 55cc76e7..c087b85e 100644 --- a/linker.ld +++ b/linker.ld @@ -798,7 +798,7 @@ SECTIONS { src/object/waterfallOpening.o(.text); src/object/objectAB.o(.text); src/object/fourElements.o(.text); - asm/object/objectAD.o(.text); + src/object/objectAD.o(.text); src/object/floatingBlock.o(.text); src/object/objectAF.o(.text); src/object/metalDoor.o(.text); @@ -1552,7 +1552,7 @@ SECTIONS { src/object/objectAB.o(.rodata); data/animations/object/objectAB.o(.rodata); src/object/fourElements.o(.rodata); - data/const/object/objectAD.o(.rodata); + src/object/objectAD.o(.rodata); data/const/object/objectAF.o(.rodata); data/animations/object/objectAF.o(.rodata); data/const/object/metalDoor.o(.rodata); diff --git a/src/object/objectAD.c b/src/object/objectAD.c new file mode 100644 index 00000000..ca73277e --- /dev/null +++ b/src/object/objectAD.c @@ -0,0 +1,54 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "functions.h" +#include "screen.h" + +void sub_080A04A4(Entity*); +void sub_080A04E0(Entity*); +void sub_080A04E8(); + +void ObjectAD(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_080A04A4, + sub_080A04E0, + }; + + actionFuncs[this->action]((Entity*)this); +} + +void sub_080A04A4(Entity* this) { + this->action = 1; + this->frameIndex = 4; + this->actionDelay = 0; + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; + this->z.WORD = 0; + this->spriteRendering.alphaBlend = 1; + sub_080A04E8(); +} + +void sub_080A04E0(Entity* this) { + sub_080A04E8(); +} + +void sub_080A04E8(Entity* this) { + int iVar2; + u32 uVar3; + + iVar2 = (this->parent->z.HALF.HI < 0 ? -this->parent->z.HALF.HI : this->parent->z.HALF.HI) + 0x100; + SetAffineInfo(this, iVar2, iVar2, 0); + iVar2 = ((0x1c0 - iVar2) * 10) / iVar2; + if (this->parent->type == 0x41) { + uVar3 = iVar2 * 2; + if (0xc < uVar3) { + uVar3 = 0xc; + } + iVar2 = (0x10 - iVar2) * 0x100; + iVar2 |= uVar3; + iVar2 &= 0xffff; + } else { + iVar2 |= (0x10 - iVar2) * 0x100; + iVar2 &= 0xffff; + } + gScreen.controls.alphaBlend = iVar2; +}