From 02d50d312b7811ae232ce64ad7d3399ee641e84c Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 7 Mar 2022 23:24:14 +0200 Subject: [PATCH] Decompile stoneTablet --- asm/object/stoneTablet.s | 97 --------------------------------- assets/assets.json | 10 ---- data/const/object/stoneTablet.s | 15 ----- include/functions.h | 2 +- linker.ld | 4 +- src/object/stoneTablet.c | 38 +++++++++++++ 6 files changed, 41 insertions(+), 125 deletions(-) delete mode 100644 asm/object/stoneTablet.s delete mode 100644 data/const/object/stoneTablet.s create mode 100644 src/object/stoneTablet.c diff --git a/asm/object/stoneTablet.s b/asm/object/stoneTablet.s deleted file mode 100644 index 77588487..00000000 --- a/asm/object/stoneTablet.s +++ /dev/null @@ -1,97 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start StoneTablet -StoneTablet: @ 0x080979B4 - push {lr} - ldr r2, _080979C8 @ =gUnk_081232E4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080979C8: .4byte gUnk_081232E4 - - thumb_func_start sub_080979CC -sub_080979CC: @ 0x080979CC - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldrb r0, [r5, #0xa] - cmp r0, #3 - bne _08097A20 - movs r0, #0 - strb r0, [r5, #0x1e] - ldr r0, _08097A18 @ =gUnk_081232FE - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08097A1C @ =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_0801AF18 - b _08097A4E - .align 2, 0 -_08097A18: .4byte gUnk_081232FE -_08097A1C: .4byte gRoomControls -_08097A20: - strb r0, [r5, #0x1e] - ldr r0, _08097A50 @ =gUnk_081232EC - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08097A54 @ =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_0801AF18 -_08097A4E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08097A50: .4byte gUnk_081232EC -_08097A54: .4byte gRoomControls - - thumb_func_start nullsub_529 -nullsub_529: @ 0x08097A58 - bx lr - .align 2, 0 diff --git a/assets/assets.json b/assets/assets.json index bd03a55c..a79c024c 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -44636,16 +44636,6 @@ "start": 1192608, "size": 4 }, - { - "path": "stoneTablet/gUnk_081232EC.bin", - "start": 1192684, - "size": 18 - }, - { - "path": "stoneTablet/gUnk_081232FE.bin", - "start": 1192702, - "size": 26 - }, { "path": "lilypadSmall/gUnk_08123318.bin", "start": 1192728, diff --git a/data/const/object/stoneTablet.s b/data/const/object/stoneTablet.s deleted file mode 100644 index 13bd0ece..00000000 --- a/data/const/object/stoneTablet.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081232E4:: @ 081232E4 - .4byte sub_080979CC - .4byte nullsub_529 - -gUnk_081232EC:: @ 081232EC - .incbin "stoneTablet/gUnk_081232EC.bin" - -gUnk_081232FE:: @ 081232FE - .incbin "stoneTablet/gUnk_081232FE.bin" diff --git a/include/functions.h b/include/functions.h index 3e57b8ec..07dd6438 100644 --- a/include/functions.h +++ b/include/functions.h @@ -101,7 +101,7 @@ extern void sub_08008796(Entity*, u32, u32, u32); extern void sub_08016AD2(Entity*); extern void sub_080171F0(void); extern u32 sub_0801766C(Entity*); -extern void sub_0801AF18(u8*, u32, u32); +extern void sub_0801AF18(const u8*, u32, u32); extern void sub_0801AFE4(void); extern void sub_0801C1D4(void); extern void sub_0801C25C(void); diff --git a/linker.ld b/linker.ld index 8afc2cc7..b6dc1965 100644 --- a/linker.ld +++ b/linker.ld @@ -739,7 +739,7 @@ SECTIONS { src/object/minishSizedArchway.o(.text); asm/object/object70.o(.text); src/object/pushableGrave.o(.text); - asm/object/stoneTablet.o(.text); + src/object/stoneTablet.o(.text); src/object/lilypadSmall.o(.text); asm/object/object74.o(.text); src/object/bell.o(.text); @@ -1483,7 +1483,7 @@ SECTIONS { data/const/object/mineralWaterSource.o(.rodata); data/const/object/object70.o(.rodata); src/object/pushableGrave.o(.rodata); - data/const/object/stoneTablet.o(.rodata); + src/object/stoneTablet.o(.rodata); data/const/object/lilypadSmall.o(.rodata); data/const/object/object74.o(.rodata); data/const/object/bell.o(.rodata); diff --git a/src/object/stoneTablet.c b/src/object/stoneTablet.c new file mode 100644 index 00000000..9216e9b8 --- /dev/null +++ b/src/object/stoneTablet.c @@ -0,0 +1,38 @@ +#include "entity.h" +#include "room.h" +#include "functions.h" + +void sub_080979CC(Entity*); +void nullsub_529(Entity*); + +void StoneTablet(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_080979CC, + nullsub_529, + }; + + actionFuncs[this->action](this); +} + +void sub_080979CC(Entity* this) { + static const u8 gUnk_081232EC[] = { + 0x22, 0x40, 0xFE, 0xFF, 0x22, 0x40, 0xFF, 0xFF, 0x22, 0x40, 0x0, 0x0, 0x22, 0x40, 0x1, 0x0, 0xFF, 0xFF, + }; + + static const u8 gUnk_081232FE[] = { + 0x65, 0x40, 0xBF, 0xFF, 0x22, 0x40, 0xC0, 0xFF, 0x66, 0x40, 0xC1, 0xFF, 0x29, + 0x40, 0xFF, 0xFF, 0x26, 0x40, 0x0, 0x0, 0x2A, 0x40, 0x1, 0x0, 0xFF, 0xFF, + }; + this->action = 1; + this->spriteSettings.draw = 1; + if (this->type == 3) { + this->frameIndex = 0; + sub_0801AF18(gUnk_081232FE, COORD_TO_TILE(this), this->collisionLayer); + } else { + this->frameIndex = this->type; + sub_0801AF18(gUnk_081232EC, COORD_TO_TILE(this), this->collisionLayer); + } +} + +void nullsub_529(Entity* this) { +}