From ee11972a67d034707b53145f083094f0463f64f6 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 27 Feb 2022 15:54:12 +0200 Subject: [PATCH 1/6] decompile macroShoes --- asm/object/macroShoes.s | 67 ---------------------------------- assets/assets.json | 10 ----- data/const/object/macroShoes.s | 19 ---------- linker.ld | 4 +- src/object/macroShoes.c | 44 ++++++++++++++++++++++ 5 files changed, 46 insertions(+), 98 deletions(-) delete mode 100644 asm/object/macroShoes.s delete mode 100644 data/const/object/macroShoes.s create mode 100644 src/object/macroShoes.c diff --git a/asm/object/macroShoes.s b/asm/object/macroShoes.s deleted file mode 100644 index 606fb405..00000000 --- a/asm/object/macroShoes.s +++ /dev/null @@ -1,67 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MacroShoes -MacroShoes: @ 0x080984CC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080984E8 @ =gUnk_08123504 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0800445C - pop {r4, pc} - .align 2, 0 -_080984E8: .4byte gUnk_08123504 - - thumb_func_start sub_080984EC -sub_080984EC: @ 0x080984EC - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - ldr r2, _08098528 @ =gUnk_081234EC - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - str r1, [r0, #0x48] - ldrb r0, [r0, #0xb] - cmp r0, #1 - bne _08098524 - ldr r0, _0809852C @ =0x00004024 - movs r1, #0x82 - lsls r1, r1, #3 - movs r2, #1 - bl SetTile - ldr r0, _08098530 @ =0x00004026 - ldr r1, _08098534 @ =0x00000411 - movs r2, #1 - bl SetTile - ldr r0, _08098538 @ =0x00004025 - ldr r1, _0809853C @ =0x00000412 - movs r2, #1 - bl SetTile -_08098524: - pop {pc} - .align 2, 0 -_08098528: .4byte gUnk_081234EC -_0809852C: .4byte 0x00004024 -_08098530: .4byte 0x00004026 -_08098534: .4byte 0x00000411 -_08098538: .4byte 0x00004025 -_0809853C: .4byte 0x00000412 - - thumb_func_start nullsub_532 -nullsub_532: @ 0x08098540 - bx lr - .align 2, 0 diff --git a/assets/assets.json b/assets/assets.json index 410ef933..e0627f3f 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -44895,16 +44895,6 @@ "size": 23, "type": "animation" }, - { - "path": "macroShoes/gUnk_081234F4.bin", - "start": 1193204, - "size": 8 - }, - { - "path": "macroShoes/gUnk_081234FC.bin", - "start": 1193212, - "size": 8 - }, { "path": "animations/gSpriteAnimations_PicoBloom_0.bin", "start": 1193338, diff --git a/data/const/object/macroShoes.s b/data/const/object/macroShoes.s deleted file mode 100644 index c0201eea..00000000 --- a/data/const/object/macroShoes.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081234EC:: @ 081234EC - .4byte gUnk_081234F4 - .4byte gUnk_081234FC - -gUnk_081234F4:: @ 081234F4 - .incbin "macroShoes/gUnk_081234F4.bin" - -gUnk_081234FC:: @ 081234FC - .incbin "macroShoes/gUnk_081234FC.bin" - -gUnk_08123504:: @ 08123504 - .4byte sub_080984EC - .4byte nullsub_532 diff --git a/linker.ld b/linker.ld index 93cf0e43..e2ddbcb5 100644 --- a/linker.ld +++ b/linker.ld @@ -768,7 +768,7 @@ SECTIONS { asm/object/object79.o(.text); src/object/steam.o(.text); src/object/pushableLever.o(.text); - asm/object/macroShoes.o(.text); + src/object/macroShoes.o(.text); src/object/objectOnSpinyBeetle.o(.text); src/object/object7E.o(.text); asm/object/picoBloom.o(.text); @@ -1516,7 +1516,7 @@ SECTIONS { src/object/steam.o(.rodata); src/object/pushableLever.o(.rodata); data/animations/object/pushableLever.o(.rodata); - data/const/object/macroShoes.o(.rodata); + src/object/macroShoes.o(.rodata); src/object/objectOnSpinyBeetle.o(.rodata); data/const/object/picoBloom.o(.rodata); data/animations/object/picoBloom.o(.rodata); diff --git a/src/object/macroShoes.c b/src/object/macroShoes.c new file mode 100644 index 00000000..36cc84e5 --- /dev/null +++ b/src/object/macroShoes.c @@ -0,0 +1,44 @@ +#include "entity.h" +#include "asm.h" + +void sub_0800445C(Entity*); +void MacroShoes_Init(Entity*); +void MacroShoes_Idle(Entity*); + +static const Hitbox MacroShoes_Type0Hitbox; +static const Hitbox MacroShoes_Type1Hitbox; + +static const Hitbox* const MacroShoes_TypeHitboxes[] = { + &MacroShoes_Type0Hitbox, + &MacroShoes_Type1Hitbox, +}; + +static const Hitbox MacroShoes_Type0Hitbox = { + 0, 0, { 4, 0, 0, 0 }, 0x34, 0x20, +}; + +static const Hitbox MacroShoes_Type1Hitbox = { + 0, 0, { 4, 0, 0, 0 }, 0x30, 0x10, +}; + +void MacroShoes(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + MacroShoes_Init, + MacroShoes_Idle, + }; + actionFuncs[this->action](this); + sub_0800445C(this); +} + +void MacroShoes_Init(Entity* this) { + this->action = 1; + this->hitbox = (Hitbox*)MacroShoes_TypeHitboxes[this->type]; + if (this->type2 == 1) { + SetTile(0x4024, 0x410, 1); + SetTile(0x4026, 0x411, 1); + SetTile(0x4025, 0x412, 1); + } +} + +void MacroShoes_Idle(Entity* this) { +} From fd5562dad6c4714f848109f5058ecd9fb018fe5a Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 27 Feb 2022 16:48:19 +0200 Subject: [PATCH 2/6] decompile MacroDecoration --- asm/object/macroDecorations.s | 242 --------------------------- assets/assets.json | 5 - data/const/object/macroDecorations.s | 12 -- linker.ld | 4 +- src/object/macroDecorations.c | 112 +++++++++++++ 5 files changed, 114 insertions(+), 261 deletions(-) delete mode 100644 asm/object/macroDecorations.s delete mode 100644 data/const/object/macroDecorations.s create mode 100644 src/object/macroDecorations.c diff --git a/asm/object/macroDecorations.s b/asm/object/macroDecorations.s deleted file mode 100644 index 562923e6..00000000 --- a/asm/object/macroDecorations.s +++ /dev/null @@ -1,242 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MacroDecoration -MacroDecoration: @ 0x08097DD4 - push {lr} - ldr r2, _08097DE8 @ =gUnk_081233B8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08097DE8: .4byte gUnk_081233B8 - - thumb_func_start sub_08097DEC -sub_08097DEC: @ 0x08097DEC - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldrb r0, [r4, #0xa] - cmp r0, #1 - beq _08097E46 - cmp r0, #1 - bgt _08097E0A - cmp r0, #0 - beq _08097E1C - b _08097EA2 -_08097E0A: - cmp r0, #3 - bgt _08097EA2 - ldrb r0, [r4, #0xb] - strb r0, [r4, #0x1e] - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - b _08097E9C -_08097E1C: - ldrh r2, [r4, #0x2e] - movs r1, #0x10 - rsbs r1, r1, #0 - adds r0, r1, #0 - ands r0, r2 - strh r0, [r4, #0x2e] - ldrh r0, [r4, #0x32] - ands r1, r0 - strh r1, [r4, #0x32] - adds r0, r4, #0 - bl sub_08097EB8 - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _08097EA2 - adds r1, r0, #0 - adds r1, #0xb - adds r0, r4, #0 - bl ChangeObjPalette - b _08097EA2 -_08097E46: - ldrb r0, [r4, #0xb] - strb r0, [r4, #0x1e] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x19 - cmp r0, #1 - beq _08097E76 - cmp r0, #1 - bgt _08097E5C - cmp r0, #0 - beq _08097E68 - b _08097E9C -_08097E5C: - cmp r0, #2 - bne _08097E9C - adds r0, r4, #0 - movs r1, #0xd - bl ChangeObjPalette -_08097E68: - ldrb r0, [r4, #0x1b] - movs r1, #0x3f - ands r1, r0 - movs r0, #0x40 - orrs r1, r0 - strb r1, [r4, #0x1b] - b _08097E9C -_08097E76: - ldrb r1, [r4, #0x1b] - movs r0, #0x3f - ands r0, r1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x1b] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0xb - bl ChangeObjPalette -_08097E9C: - adds r0, r4, #0 - bl sub_08097F34 -_08097EA2: - pop {r4, pc} - - thumb_func_start sub_08097EA4 -sub_08097EA4: @ 0x08097EA4 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xa] - cmp r0, #0 - beq _08097EB4 - adds r0, r1, #0 - bl sub_08097F10 -_08097EB4: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08097EB8 -sub_08097EB8: @ 0x08097EB8 - push {r4, r5, r6, lr} - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r3, _08097F04 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r5, r1, #4 - movs r2, #0x3f - ands r5, r2 - movs r1, #0x32 - ldrsh r0, [r0, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r5, r0 - ldr r4, _08097F08 @ =gUnk_081233C0 - movs r2, #0 - ldrsh r0, [r4, r2] - ldr r1, _08097F0C @ =0x00007FFF - cmp r0, r1 - beq _08097F00 - adds r6, r1, #0 -_08097EE8: - ldrh r0, [r4, #2] - movs r2, #0 - ldrsh r1, [r4, r2] - adds r1, r5, r1 - movs r2, #1 - bl SetTile - adds r4, #4 - movs r1, #0 - ldrsh r0, [r4, r1] - cmp r0, r6 - bne _08097EE8 -_08097F00: - pop {r4, r5, r6, pc} - .align 2, 0 -_08097F04: .4byte gRoomControls -_08097F08: .4byte gUnk_081233C0 -_08097F0C: .4byte 0x00007FFF - - thumb_func_start sub_08097F10 -sub_08097F10: @ 0x08097F10 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08097F30 @ =gRoomControls - movs r2, #0xc - ldrsh r1, [r0, r2] - ldrh r0, [r0, #8] - subs r1, r1, r0 - adds r0, r4, #0 - bl sub_08097F60 - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - subs r1, r1, r0 - strh r1, [r4, #0x32] - pop {r4, pc} - .align 2, 0 -_08097F30: .4byte gRoomControls - - thumb_func_start sub_08097F34 -sub_08097F34: @ 0x08097F34 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x32 - ldrsh r1, [r4, r0] - ldr r0, _08097F5C @ =gRoomControls - ldrh r0, [r0, #8] - subs r1, r1, r0 - adds r0, r4, #0 - bl sub_08097F60 - ldrh r1, [r4, #0x32] - adds r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x70 - strh r1, [r0] - adds r0, r4, #0 - bl sub_08097F10 - pop {r4, pc} - .align 2, 0 -_08097F5C: .4byte gRoomControls - - thumb_func_start sub_08097F60 -sub_08097F60: @ 0x08097F60 - push {lr} - ldrb r2, [r0, #0xa] - cmp r2, #1 - bne _08097F74 - ldrb r0, [r0, #0x1e] - lsrs r0, r0, #1 - cmp r0, #1 - bne _08097F7C - asrs r1, r1, #3 - b _08097F7E -_08097F74: - cmp r2, #1 - blt _08097F7E - cmp r2, #3 - bgt _08097F7E -_08097F7C: - asrs r1, r1, #1 -_08097F7E: - adds r0, r1, #0 - pop {pc} - .align 2, 0 diff --git a/assets/assets.json b/assets/assets.json index e0627f3f..e7d05bde 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -44855,11 +44855,6 @@ "size": 4, "type": "animation" }, - { - "path": "macroDecorations/gUnk_081233C0.bin", - "start": 1192896, - "size": 80 - }, { "path": "animations/gSpriteAnimations_Object79_0.bin", "start": 1192994, diff --git a/data/const/object/macroDecorations.s b/data/const/object/macroDecorations.s deleted file mode 100644 index e449f6e0..00000000 --- a/data/const/object/macroDecorations.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081233B8:: @ 081233B8 - .4byte sub_08097DEC - .4byte sub_08097EA4 - -gUnk_081233C0:: @ 081233C0 - .incbin "macroDecorations/gUnk_081233C0.bin" diff --git a/linker.ld b/linker.ld index e2ddbcb5..d4aec18e 100644 --- a/linker.ld +++ b/linker.ld @@ -764,7 +764,7 @@ SECTIONS { src/object/lilypadSmall.o(.text); asm/object/object74.o(.text); src/object/bell.o(.text); - asm/object/macroDecorations.o(.text); + src/object/macroDecorations.o(.text); asm/object/object79.o(.text); src/object/steam.o(.text); src/object/pushableLever.o(.text); @@ -1510,7 +1510,7 @@ SECTIONS { data/const/object/object74.o(.rodata); data/const/object/bell.o(.rodata); data/animations/object/bell.o(.rodata); - data/const/object/macroDecorations.o(.rodata); + src/object/macroDecorations.o(.rodata); data/const/object/object79.o(.rodata); data/animations/object/object79.o(.rodata); src/object/steam.o(.rodata); diff --git a/src/object/macroDecorations.c b/src/object/macroDecorations.c new file mode 100644 index 00000000..d1e6038b --- /dev/null +++ b/src/object/macroDecorations.c @@ -0,0 +1,112 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "room.h" +#include "asm.h" + +typedef struct { + Entity base; + u8 filler[8]; + s16 y2; +} MacroDecorationEntity; + +void sub_08097DEC(MacroDecorationEntity*); +void sub_08097EA4(MacroDecorationEntity*); +void sub_08097EB8(MacroDecorationEntity*); +void sub_08097F34(MacroDecorationEntity*); +void sub_08097F10(MacroDecorationEntity*); +s32 sub_08097F60(MacroDecorationEntity*, s32); + +void MacroDecoration(Entity* this) { + static void (*const actionFuncs[])(MacroDecorationEntity*) = { + sub_08097DEC, + sub_08097EA4, + }; + actionFuncs[this->action]((MacroDecorationEntity*)this); +} + +void sub_08097DEC(MacroDecorationEntity* this) { + u32 bVar1; + u32 uVar2; + + super->action = 1; + UpdateSpriteForCollisionLayer(super); + switch (super->type) { + case 0: + super->x.HALF.HI &= 0xfff0; + super->y.HALF.HI &= 0xfff0; + sub_08097EB8(this); + if (super->type2 == 0) { + return; + } + ChangeObjPalette(super, super->type2 + 0xb); + return; + case 1: + bVar1 = super->frameIndex = super->type2; + bVar1 = (bVar1 << 0x18) >> 0x19; + switch ((s32)bVar1) { + case 2: + ChangeObjPalette(super, 0xd); + case 0: + super->spriteOrientation.flipY = 1; + break; + case 1: + super->spriteOrientation.flipY = 2; + super->spritePriority.b0 = 3; + ChangeObjPalette(super, 0xb); + break; + } + break; + case 2: + case 3: + super->frameIndex = super->type2; + super->spriteSettings.draw = 3; + break; + default: + return; + } + + sub_08097F34(this); +} + +void sub_08097EA4(MacroDecorationEntity* this) { + if (super->type) { + sub_08097F10(this); + } +} + +void sub_08097EB8(MacroDecorationEntity* this) { + static const s16 tilePosArray[] = { + 0xff7e, 0x4089, 0xff7f, 0x4022, 0xff80, 0x4022, 0xff81, 0x408a, 0xffbe, 0x4022, 0xffbf, 0x4022, 0xffc0, 0x4022, + 0xffc1, 0x4022, 0xfffe, 0x4022, 0xffff, 0x4022, 0, 0x4022, 1, 0x4022, 2, 0x408b, 0x3e, 0x4022, + 0x3f, 0x4022, 0x40, 0x4026, 0x41, 0x4022, 0x7e, 0x408c, 0x7f, 0x408c, 0x7fff, 0xffff, + }; + const s16* tilePosPtr; + u16 tile = COORD_TO_TILE(super); + for (tilePosPtr = tilePosArray; *tilePosPtr != 0x7fff; tilePosPtr += 2) { + SetTile((u16)tilePosPtr[1], tile + tilePosPtr[0], 1); + } +} + +void sub_08097F10(MacroDecorationEntity* this) { + super->y.HALF.HI = this->y2 - sub_08097F60(this, gRoomControls.scroll_y - gRoomControls.origin_y); +} + +void sub_08097F34(MacroDecorationEntity* this) { + this->y2 = super->y.HALF.HI + sub_08097F60(this, super->y.HALF.HI - gRoomControls.origin_y); + sub_08097F10(this); +} + +s32 sub_08097F60(MacroDecorationEntity* this, s32 arg2) { + switch (super->type) { + case 1: + if (super->frameIndex >> 1 == 1) { + arg2 >>= 3; + break; + } + case 2: + case 3: + arg2 >>= 1; + } + + return arg2; +} From 07d709e3a721fed177be1ac13d6398284d9b37c3 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 27 Feb 2022 19:21:45 +0200 Subject: [PATCH 3/6] decompile macroAcorn --- asm/object/macroAcorn.s | 323 --------------------------------- data/const/object/macroAcorn.s | 9 - linker.ld | 4 +- src/object/macroAcorn.c | 99 ++++++++++ 4 files changed, 101 insertions(+), 334 deletions(-) delete mode 100644 asm/object/macroAcorn.s delete mode 100644 data/const/object/macroAcorn.s create mode 100644 src/object/macroAcorn.c diff --git a/asm/object/macroAcorn.s b/asm/object/macroAcorn.s deleted file mode 100644 index d732db56..00000000 --- a/asm/object/macroAcorn.s +++ /dev/null @@ -1,323 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MacroAcorn -MacroAcorn: @ 0x0809E500 - push {lr} - ldr r2, _0809E514 @ =gUnk_081242C8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809E514: .4byte gUnk_081242C8 - - thumb_func_start sub_0809E518 -sub_0809E518: @ 0x0809E518 - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r1, #1 - strb r1, [r6, #0xc] - ldrb r2, [r6, #0xa] - adds r0, r2, #0 - cmp r0, #0xff - bne _0809E52E - ldrb r0, [r6, #0xb] - strb r0, [r6, #0x1e] - b _0809E5CA -_0809E52E: - ands r1, r2 - rsbs r0, r1, #0 - orrs r0, r1 - asrs r5, r0, #0x1f - movs r0, #4 - ands r5, r0 - movs r0, #2 - ands r0, r2 - cmp r0, #0 - beq _0809E5A4 - ldr r0, _0809E5A0 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x44 - bhi _0809E5B4 - strb r5, [r6, #0x1e] - adds r5, #1 - movs r0, #0x9a - movs r1, #0xff - adds r2, r5, #0 - bl CreateObject - adds r4, r0, #0 - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition - adds r5, #1 - movs r0, #0x9a - movs r1, #0xff - adds r2, r5, #0 - bl CreateObject - adds r4, r0, #0 - movs r3, #0x80 - lsls r3, r3, #9 - adds r0, r6, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xff - strb r0, [r1] - adds r5, #1 - movs r0, #0x9a - movs r1, #0xff - adds r2, r5, #0 - bl CreateObject - adds r4, r0, #0 - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition - b _0809E5C4 - .align 2, 0 -_0809E5A0: .4byte gEntCount -_0809E5A4: - adds r2, r5, #1 - movs r0, #0x9a - movs r1, #0xff - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - bne _0809E5BA -_0809E5B4: - bl DeleteThisEntity - b _0809E5C4 -_0809E5BA: - strb r5, [r6, #0x1e] - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition -_0809E5C4: - adds r0, r6, #0 - bl sub_0809E5F0 -_0809E5CA: - ldrb r1, [r6, #0x1e] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0809E5E8 - ldrb r0, [r6, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r6, #0x19] - adds r2, r6, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] -_0809E5E8: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start nullsub_125 -nullsub_125: @ 0x0809E5EC - bx lr - .align 2, 0 - - thumb_func_start sub_0809E5F0 -sub_0809E5F0: @ 0x0809E5F0 - push {r4, r5, lr} - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r4, _0809E628 @ =gRoomControls - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r5, r1, #4 - movs r3, #0x3f - ands r5, r3 - movs r2, #0x32 - ldrsh r1, [r0, r2] - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r5, r1 - adds r1, r0, #0 - adds r1, #0x80 - strh r5, [r1] - ldrb r0, [r0, #0xa] - cmp r0, #1 - beq _0809E708 - cmp r0, #1 - bgt _0809E62C - cmp r0, #0 - beq _0809E64E - b _0809E792 - .align 2, 0 -_0809E628: .4byte gRoomControls -_0809E62C: - cmp r0, #2 - beq _0809E636 - cmp r0, #3 - beq _0809E6F0 - b _0809E792 -_0809E636: - ldr r0, _0809E6DC @ =0x00004022 - adds r1, r5, #0 - subs r1, #0x3d - movs r2, #1 - bl SetTile - ldr r0, _0809E6E0 @ =0x0000406D - adds r1, r5, #0 - subs r1, #0x3c - movs r2, #1 - bl SetTile -_0809E64E: - ldr r0, _0809E6E4 @ =0x0000406C - adds r1, r5, #0 - subs r1, #0x42 - movs r2, #1 - bl SetTile - ldr r4, _0809E6DC @ =0x00004022 - adds r1, r5, #0 - subs r1, #0x41 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #0 - subs r1, #0x40 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #0 - subs r1, #0x3f - adds r0, r4, #0 - movs r2, #1 - bl SetTile - subs r1, r5, #2 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - subs r1, r5, #1 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #1 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - ldr r0, _0809E6E8 @ =0x0000406E - adds r1, r5, #0 - adds r1, #0x3e - movs r2, #1 - bl SetTile - adds r1, r5, #0 - adds r1, #0x3f - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #0 - adds r1, #0x40 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - ldr r0, _0809E6EC @ =0x0000406F - adds r1, r5, #0 - adds r1, #0x41 - movs r2, #1 - bl SetTile - b _0809E792 - .align 2, 0 -_0809E6DC: .4byte 0x00004022 -_0809E6E0: .4byte 0x0000406D -_0809E6E4: .4byte 0x0000406C -_0809E6E8: .4byte 0x0000406E -_0809E6EC: .4byte 0x0000406F -_0809E6F0: - ldr r0, _0809E794 @ =0x00004022 - adds r1, r5, #0 - subs r1, #0x44 - movs r2, #1 - bl SetTile - ldr r0, _0809E798 @ =0x0000406C - adds r1, r5, #0 - subs r1, #0x45 - movs r2, #1 - bl SetTile -_0809E708: - ldr r4, _0809E794 @ =0x00004022 - adds r1, r5, #0 - subs r1, #0x42 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #0 - subs r1, #0x41 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #0 - subs r1, #0x40 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - ldr r0, _0809E79C @ =0x0000406D - adds r1, r5, #0 - subs r1, #0x3f - movs r2, #1 - bl SetTile - subs r1, r5, #2 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - subs r1, r5, #1 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #1 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - ldr r0, _0809E7A0 @ =0x0000406E - adds r1, r5, #0 - adds r1, #0x3e - movs r2, #1 - bl SetTile - adds r1, r5, #0 - adds r1, #0x3f - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r1, r5, #0 - adds r1, #0x40 - adds r0, r4, #0 - movs r2, #1 - bl SetTile - ldr r0, _0809E7A4 @ =0x0000406F - adds r1, r5, #0 - adds r1, #0x41 - movs r2, #1 - bl SetTile -_0809E792: - pop {r4, r5, pc} - .align 2, 0 -_0809E794: .4byte 0x00004022 -_0809E798: .4byte 0x0000406C -_0809E79C: .4byte 0x0000406D -_0809E7A0: .4byte 0x0000406E -_0809E7A4: .4byte 0x0000406F diff --git a/data/const/object/macroAcorn.s b/data/const/object/macroAcorn.s deleted file mode 100644 index a0952a73..00000000 --- a/data/const/object/macroAcorn.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081242C8:: @ 081242C8 - .4byte sub_0809E518 - .4byte nullsub_125 diff --git a/linker.ld b/linker.ld index d4aec18e..919f8c2b 100644 --- a/linker.ld +++ b/linker.ld @@ -799,7 +799,7 @@ SECTIONS { src/object/keyStealingTakkuri.o(.text); asm/object/object98.o(.text); asm/object/object99.o(.text); - asm/object/macroAcorn.o(.text); + src/object/macroAcorn.o(.text); asm/object/object9B.o(.text); src/object/treeHidingPortal.o(.text); asm/object/treeHidingPortal.o(.text); @@ -1553,7 +1553,7 @@ SECTIONS { src/object/keyStealingTakkuri.o(.rodata); data/const/object/object98.o(.rodata); data/animations/object/object98.o(.rodata); - data/const/object/macroAcorn.o(.rodata); + src/object/macroAcorn.o(.rodata); data/const/object/object9B.o(.rodata); data/animations/object/object9B.o(.rodata); data/const/object/treeHidingPortal.o(.rodata); diff --git a/src/object/macroAcorn.c b/src/object/macroAcorn.c new file mode 100644 index 00000000..ca77f1b0 --- /dev/null +++ b/src/object/macroAcorn.c @@ -0,0 +1,99 @@ +#include "entity.h" +#include "coord.h" +#include "object.h" + +void sub_0809E518(Entity*); +void nullsub_125(Entity*); +void sub_0809E5F0(Entity*); + +void MacroAcorn(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_0809E518, + nullsub_125, + }; + actionFuncs[this->action](this); +} + +void sub_0809E518(Entity* this) { + u32 bVar2; + Entity* pEVar3; + + this->action = 1; + if (this->type == 0xff) { + this->frameIndex = this->type2; + } else { + bVar2 = (this->type & 1) ? 4 : 0; + if ((this->type & 2)) { + if (gEntCount < 0x45) { + this->frameIndex = bVar2; + pEVar3 = CreateObject(HUGE_ACORN, 0xff, ++bVar2); + CopyPosition(this, pEVar3); + pEVar3 = CreateObject(HUGE_ACORN, 0xff, ++bVar2); + PositionRelative(this, pEVar3, 0, 0x10000); + pEVar3->spriteOffsetY = -1; + pEVar3 = CreateObject(HUGE_ACORN, 0xff, ++bVar2); + CopyPosition(this, pEVar3); + } else { + DeleteThisEntity(); + } + } else { + pEVar3 = CreateObject(HUGE_ACORN, 0xff, bVar2 + 1); + if (pEVar3 == NULL) { + DeleteThisEntity(); + } else { + this->frameIndex = bVar2; + CopyPosition(this, pEVar3); + } + } + sub_0809E5F0(this); + } + + if ((this->frameIndex & 1) != 0) { + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; + } +} + +void nullsub_125(Entity* this) { +} + +void sub_0809E5F0(Entity* this) { + u32 position = COORD_TO_TILE(this); + this->field_0x80.HWORD = position; + switch (this->type) { + case 2: + SetTile(0x4022, position - 0x3d, 1); + SetTile(0x406d, position - 0x3c, 1); + case 0: + SetTile(0x406c, position - 0x42, 1); + SetTile(0x4022, position - 0x41, 1); + SetTile(0x4022, position - 0x40, 1); + SetTile(0x4022, position - 0x3f, 1); + SetTile(0x4022, position - 2, 1); + SetTile(0x4022, position - 1, 1); + SetTile(0x4022, position, 1); + SetTile(0x4022, position + 1, 1); + SetTile(0x406e, position + 0x3e, 1); + SetTile(0x4022, position + 0x3f, 1); + SetTile(0x4022, position + 0x40, 1); + SetTile(0x406f, position + 0x41, 1); + break; + case 3: + SetTile(0x4022, position - 0x44, 1); + SetTile(0x406c, position - 0x45, 1); + case 1: + SetTile(0x4022, position - 0x42, 1); + SetTile(0x4022, position - 0x41, 1); + SetTile(0x4022, position - 0x40, 1); + SetTile(0x406d, position - 0x3f, 1); + SetTile(0x4022, position - 2, 1); + SetTile(0x4022, position - 1, 1); + SetTile(0x4022, position, 1); + SetTile(0x4022, position + 1, 1); + SetTile(0x406e, position + 0x3e, 1); + SetTile(0x4022, position + 0x3f, 1); + SetTile(0x4022, position + 0x40, 1); + SetTile(0x406f, position + 0x41, 1); + break; + } +} From 675b5e314c9474a1b42ff6826bc6bad3c6c91a78 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 27 Feb 2022 22:45:17 +0200 Subject: [PATCH 4/6] decompile macroBook --- asm/object/macroBook.s | 471 ---------------------------------- assets/assets.json | 5 - data/const/object/macroBook.s | 14 - linker.ld | 4 +- src/object/macroBook.c | 208 +++++++++++++++ 5 files changed, 210 insertions(+), 492 deletions(-) delete mode 100644 asm/object/macroBook.s delete mode 100644 data/const/object/macroBook.s create mode 100644 src/object/macroBook.c diff --git a/asm/object/macroBook.s b/asm/object/macroBook.s deleted file mode 100644 index 2e6a0704..00000000 --- a/asm/object/macroBook.s +++ /dev/null @@ -1,471 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MacroBook -MacroBook: @ 0x0809A774 - push {lr} - ldr r2, _0809A788 @ =gUnk_08123C80 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809A788: .4byte gUnk_08123C80 - - thumb_func_start sub_0809A78C -sub_0809A78C: @ 0x0809A78C - push {r4, r5, lr} - adds r4, r0, #0 - movs r3, #0 - movs r0, #1 - strb r0, [r4, #0xc] - movs r2, #0x80 - strb r2, [r4, #0xe] - strb r3, [r4, #0xf] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r5, r4, #0 - adds r5, #0x80 - strh r2, [r5] - adds r0, r4, #0 - adds r0, #0x78 - strh r3, [r0] - ldrh r0, [r4, #0x2e] - subs r0, #4 - strh r0, [r4, #0x2e] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xfc - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - ldrh r2, [r5] - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0805EC9C - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldrb r1, [r4, #0xf] - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0809A958 - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0809A7F4 -sub_0809A7F4: @ 0x0809A7F4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0809AA00 - ldrb r0, [r4, #0xe] - adds r2, r0, #0 - cmp r2, #0 - beq _0809A810 - subs r0, #1 - strb r0, [r4, #0xe] - b _0809A840 -_0809A810: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809A840 - ldrb r0, [r4, #0xf] - cmp r0, #3 - bne _0809A838 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x5a - strb r0, [r4, #0xe] - strb r2, [r4, #0xf] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate - b _0809A840 -_0809A838: - ldrb r1, [r4, #0xf] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0809A840: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809A844 -sub_0809A844: @ 0x0809A844 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0809AA00 - ldrb r0, [r4, #0xf] - cmp r0, #1 - bhi _0809A85C - movs r1, #0 - b _0809A870 -_0809A85C: - ldrb r0, [r4, #0xe] - adds r2, r0, #0 - cmp r2, #0 - beq _0809A87C - subs r0, #1 - strb r0, [r4, #0xe] - ldr r0, _0809A878 @ =gPlayerClones - ldr r1, [r0] - cmp r1, #0 - bne _0809A8A0 -_0809A870: - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - b _0809A8A0 - .align 2, 0 -_0809A878: .4byte gPlayerClones -_0809A87C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809A8A0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r2, [r4, #0xe] - adds r0, r4, #0 - movs r1, #3 - bl InitAnimationForceUpdate - adds r0, r4, #0 - movs r1, #0x78 - bl RequestPriorityDuration -_0809A8A0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809A8A4 -sub_0809A8A4: @ 0x0809A8A4 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0xe0 - ands r0, r1 - cmp r0, #0x40 - beq _0809A8D4 - cmp r0, #0x40 - bgt _0809A8C0 - cmp r0, #0x20 - beq _0809A8E2 - b _0809A8FC -_0809A8C0: - cmp r0, #0x80 - bne _0809A8FC - adds r0, r4, #0 - adds r0, #0x59 - ldrb r0, [r0] - cmp r0, #0 - bne _0809A902 - bl DeleteThisEntity - b _0809A902 -_0809A8D4: - movs r0, #0xbf - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_0809A9D4 - b _0809A902 -_0809A8E2: - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - ldrb r1, [r2] - movs r0, #0xdf - ands r0, r1 - strb r0, [r2] - movs r0, #0xff - bl SetPlayerControl - movs r0, #0x2a - bl SetGlobalFlag -_0809A8FC: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_0809A902: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0809A92A - adds r1, r4, #0 - adds r1, #0x80 - ldrh r0, [r1] - adds r0, #8 - strh r0, [r1] - ldr r0, [r4, #0x2c] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r0, r2 - str r0, [r4, #0x2c] - ldrh r2, [r1] - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl sub_0805EC9C - b _0809A94E -_0809A92A: - ldr r1, [r4, #0x54] - adds r0, r4, #0 - movs r2, #0 - bl sub_0809AA9C - ldr r1, _0809A950 @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #1 - bl sub_0809AA9C - ldr r0, _0809A954 @ =gPlayerClones - ldr r1, [r0] - cmp r1, #0 - beq _0809A94E - adds r0, r4, #0 - movs r2, #1 - bl sub_0809AA9C -_0809A94E: - pop {r4, pc} - .align 2, 0 -_0809A950: .4byte gPlayerEntity -_0809A954: .4byte gPlayerClones - - thumb_func_start sub_0809A958 -sub_0809A958: @ 0x0809A958 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - movs r1, #0x2e - ldrsh r3, [r0, r1] - ldr r2, _0809A9CC @ =gRoomControls - ldrh r1, [r2, #6] - subs r1, #4 - subs r3, r3, r1 - asrs r3, r3, #4 - movs r4, #0x3f - ands r3, r4 - movs r5, #0x32 - ldrsh r1, [r0, r5] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - lsls r1, r1, #6 - orrs r3, r1 - adds r0, #0x82 - strh r3, [r0] - ldrh r0, [r0] - adds r5, r0, #0 - subs r5, #0x82 - ldr r6, _0809A9D0 @ =gUnk_08123C90 - movs r0, #0 - movs r1, #0x80 - lsls r1, r1, #7 - mov sb, r1 -_0809A996: - movs r4, #0 - adds r0, #1 - mov r8, r0 - adds r7, r5, #0 - adds r7, #0x40 -_0809A9A0: - ldrh r0, [r6] - mov r1, sb - ands r0, r1 - cmp r0, #0 - beq _0809A9B4 - ldrh r0, [r6] - adds r1, r5, r4 - movs r2, #1 - bl SetTile -_0809A9B4: - adds r4, #1 - adds r6, #2 - cmp r4, #3 - ble _0809A9A0 - mov r0, r8 - adds r5, r7, #0 - cmp r0, #4 - ble _0809A996 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809A9CC: .4byte gRoomControls -_0809A9D0: .4byte gUnk_08123C90 - - thumb_func_start sub_0809A9D4 -sub_0809A9D4: @ 0x0809A9D4 - push {r4, r5, r6, r7, lr} - adds r0, #0x82 - ldrh r0, [r0] - adds r5, r0, #0 - subs r5, #0x82 - movs r0, #0 -_0809A9E0: - movs r4, #0 - adds r7, r0, #1 - adds r6, r5, #0 - adds r6, #0x40 -_0809A9E8: - adds r0, r5, r4 - movs r1, #1 - bl sub_0807BA8C - adds r4, #1 - cmp r4, #3 - ble _0809A9E8 - adds r0, r7, #0 - adds r5, r6, #0 - cmp r0, #4 - ble _0809A9E0 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0809AA00 -sub_0809AA00: @ 0x0809AA00 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - movs r0, #0 - strb r0, [r5, #0xf] - ldr r1, [r5, #0x54] - cmp r1, #0 - bne _0809AA50 - movs r0, #7 - movs r1, #0x38 - movs r2, #7 - bl FindEntityByID - adds r4, r0, #0 - adds r7, r5, #0 - adds r7, #0x78 - cmp r4, #0 - beq _0809AA5C - movs r0, #0x80 - lsls r0, r0, #4 - mov r8, r0 - ldr r0, _0809AA4C @ =0x0000FFFF - adds r6, r0, #0 -_0809AA30: - ldrh r0, [r4, #0xa] - ands r0, r6 - cmp r0, r8 - bne _0809AA3A - str r4, [r5, #0x54] -_0809AA3A: - adds r0, r4, #0 - movs r1, #7 - bl FindNextDuplicateID - adds r4, r0, #0 - cmp r4, #0 - bne _0809AA30 - b _0809AA5C - .align 2, 0 -_0809AA4C: .4byte 0x0000FFFF -_0809AA50: - adds r0, r5, #0 - movs r2, #0 - bl sub_0809AA9C - adds r7, r5, #0 - adds r7, #0x78 -_0809AA5C: - ldr r4, _0809AA94 @ =gPlayerEntity - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x20 - movs r3, #0x22 - bl EntityInRectRadius - strh r0, [r7] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _0809AA8E - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #1 - bl sub_0809AA9C - ldr r0, _0809AA98 @ =gPlayerClones - ldr r4, [r0] - cmp r4, #0 - beq _0809AA8E - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #1 - bl sub_0809AA9C -_0809AA8E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809AA94: .4byte gPlayerEntity -_0809AA98: .4byte gPlayerClones - - thumb_func_start sub_0809AA9C -sub_0809AA9C: @ 0x0809AA9C - push {r4, lr} - adds r4, r0, #0 - adds r3, r1, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r1, #3 - ands r1, r0 - cmp r1, #1 - beq _0809AAB2 - cmp r1, #2 - bne _0809AABC -_0809AAB2: - adds r0, r3, #0 - adds r0, #0x63 - strb r1, [r0] - adds r2, r0, #0 - b _0809AAC6 -_0809AABC: - adds r1, r3, #0 - adds r1, #0x63 - movs r0, #0 - strb r0, [r1] - adds r2, r1, #0 -_0809AAC6: - movs r0, #0x2e - ldrsh r1, [r3, r0] - ldr r0, _0809AAE8 @ =gRoomControls - ldrh r0, [r0, #6] - movs r3, #0xad - lsls r3, r3, #1 - adds r0, r0, r3 - cmp r1, r0 - bgt _0809AAE4 - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] -_0809AAE4: - pop {r4, pc} - .align 2, 0 -_0809AAE8: .4byte gRoomControls diff --git a/assets/assets.json b/assets/assets.json index e7d05bde..a7f635fa 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -45066,11 +45066,6 @@ "size": 41, "type": "animation" }, - { - "path": "macroBook/gUnk_08123C90.bin", - "start": 1195152, - "size": 40 - }, { "path": "object91/gUnk_08123DDC.bin", "start": 1195484, diff --git a/data/const/object/macroBook.s b/data/const/object/macroBook.s deleted file mode 100644 index c83b6fed..00000000 --- a/data/const/object/macroBook.s +++ /dev/null @@ -1,14 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123C80:: @ 08123C80 - .4byte sub_0809A78C - .4byte sub_0809A7F4 - .4byte sub_0809A844 - .4byte sub_0809A8A4 - -gUnk_08123C90:: @ 08123C90 - .incbin "macroBook/gUnk_08123C90.bin" diff --git a/linker.ld b/linker.ld index 919f8c2b..9e610f27 100644 --- a/linker.ld +++ b/linker.ld @@ -780,7 +780,7 @@ SECTIONS { src/object/bigIceBlock.o(.text); src/object/object86.o(.text); src/object/octorokBossObject.o(.text); - asm/object/macroBook.o(.text); + src/object/macroBook.o(.text); asm/object/mazaalBossObject.o(.text); asm/object/cabinFurniture.o(.text); src/object/doubleBookshelf.o(.text); @@ -1533,7 +1533,7 @@ SECTIONS { data/const/object/object86.o(.rodata); data/animations/object/object86.o(.rodata); src/object/octorokBossObject.o(.rodata); - data/const/object/macroBook.o(.rodata); + src/object/macroBook.o(.rodata); data/animations/object/macroBook.o(.rodata); data/const/object/mazaalBossObject.o(.rodata); data/const/object/cabinFurniture.o(.rodata); diff --git a/src/object/macroBook.c b/src/object/macroBook.c new file mode 100644 index 00000000..462dfea1 --- /dev/null +++ b/src/object/macroBook.c @@ -0,0 +1,208 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "functions.h" +#include "flags.h" +#include "asm.h" +#include "npc.h" + +typedef struct { + Entity base; + u8 filler[0x10]; + u16 playerWithinRect; + u8 filler2[0x6]; + u16 unk80; + u16 tilePos; +} MacroBookEntity; + +void MacroBook_Init(MacroBookEntity*); +void MacroBook_Action1(MacroBookEntity*); +void MacroBook_Action2(MacroBookEntity*); +void MacroBook_Action3(MacroBookEntity*); +void sub_0809A958(MacroBookEntity*); +void sub_0809AA00(MacroBookEntity*); +void sub_0809A9D4(MacroBookEntity*); +void sub_0809AA9C(MacroBookEntity*, Entity*, u32); + +void MacroBook(Entity* this) { + static void (*const actionFuncs[])(MacroBookEntity*) = { + MacroBook_Init, + MacroBook_Action1, + MacroBook_Action2, + MacroBook_Action3, + }; + actionFuncs[this->action]((MacroBookEntity*)this); +} + +void MacroBook_Init(MacroBookEntity* this) { + super->action = 1; + super->actionDelay = 0x80; + super->field_0xf = 0; + super->spriteRendering.b0 = 3; + this->unk80 = 0x80; + this->playerWithinRect = 0; + super->x.HALF.HI -= 4; + super->spriteOffsetY = -4; + super->spritePriority.b0 = 7; + super->spriteRendering.b3 = 3; + sub_0805EC9C(super, this->unk80, this->unk80, 0); + UpdateSpriteForCollisionLayer(super); + InitAnimationForceUpdate(super, super->field_0xf); + sub_0809A958(this); +} + +void MacroBook_Action1(MacroBookEntity* this) { + UpdateAnimationSingleFrame(super); + sub_0809AA00(this); + if (super->actionDelay) { + super->actionDelay--; + } else { + if ((super->frame & 0x80) != 0) { + if (super->field_0xf == 3) { + super->action = 2; + super->actionDelay = 90; + super->field_0xf = 0; + InitAnimationForceUpdate(super, 2); + } else { + InitAnimationForceUpdate(super, super->field_0xf); + } + } + } +} + +void MacroBook_Action2(MacroBookEntity* this) { + UpdateAnimationSingleFrame(super); + sub_0809AA00(this); + if (super->field_0xf < 2) { + super->action = 1; + super->actionDelay = 0; + } else if (super->actionDelay) { + super->actionDelay--; + if (gPlayerClones[0] != 0) { + return; + } + super->action = 1; + super->actionDelay = 0; + } else { + if ((super->frame & 0x80) == 0) { + return; + } + super->action = 3; + super->actionDelay = 0; + InitAnimationForceUpdate(super, 3); + RequestPriorityDuration(super, 0x78); + } +} + +void MacroBook_Action3(MacroBookEntity* this) { + switch (super->frame & 0xe0) { + case 0x80: + if (super->frameDuration == 0) { + DeleteThisEntity(); + } + break; + case 0x40: + super->frame &= 0xbf; + sub_0809A9D4(this); + break; + case 0x20: + super->actionDelay++; + super->frame &= 0xdf; + SetPlayerControl(0xff); + SetGlobalFlag(0x2a); + default: + UpdateAnimationSingleFrame(super); + break; + } + + if (super->actionDelay) { + this->unk80 += 8; + super->x.WORD += 0x400; + sub_0805EC9C(super, this->unk80, this->unk80, 0); + } else { + sub_0809AA9C(this, super->child, 0); + sub_0809AA9C(this, &gPlayerEntity, 1); + if (gPlayerClones[0] != NULL) { + sub_0809AA9C(this, gPlayerClones[0], 1); + } + } +} + +void sub_0809A958(MacroBookEntity* this) { + + static const u16 tileIndices[] = { + 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, + 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0x4074, 0, 0, 0x4022, 0x4022, + }; + int index; + int index2; + int tilePos; + const u16* tileIndexPtr; + + this->tilePos = COORD_TO_TILE_OFFSET(super, -4, 0); + tilePos = this->tilePos - 0x82; + tileIndexPtr = tileIndices; + + for (index = 0; index < 5; index++, tilePos += 0x40) { + for (index2 = 0; index2 < 4; index2++, tileIndexPtr++) { + if ((*tileIndexPtr & 0x4000) != 0) { + SetTile(*tileIndexPtr, tilePos + index2, 1); + } + } + } +} + +void sub_0809A9D4(MacroBookEntity* this) { + int index; + int index2; + int tilePos; + + tilePos = this->tilePos - 0x82; + for (index = 0; index < 5; index++, tilePos += 0x40) { + for (index2 = 0; index2 < 4; index2++) { + sub_0807BA8C(tilePos + index2, 1); + } + } +} + +void sub_0809AA00(MacroBookEntity* this) { + Entity* ent; + + super->field_0xf = 0; + if (super->child == NULL) { + for (ent = FindEntityByID(NPC, TOWN_MINISH, 7); ent != NULL; ent = FindNextDuplicateID(ent, NPC)) { + if (ent->type == 0 && ent->type2 == 8) { + super->child = ent; + } + } + } else { + sub_0809AA9C(this, super->child, 0); + } + ent = &gPlayerEntity; + this->playerWithinRect = EntityInRectRadius(super, ent, 0x20, 0x22); + if (this->playerWithinRect != 0) { + sub_0809AA9C(this, ent, 1); + + ent = gPlayerClones[0]; + if (ent != NULL) { + sub_0809AA9C(this, ent, 1); + } + } +} + +void sub_0809AA9C(MacroBookEntity* this, Entity* ent, u32 arg3) { + u32 bVar1; + + bVar1 = super->frame & 3; + if (bVar1 == 1) { + ent->spriteOffsetY = bVar1; + } else if (bVar1 == 2) { + ent->spriteOffsetY = bVar1; + } else { + ent->spriteOffsetY = 0; + } + + if (ent->x.HALF.HI <= gRoomControls.origin_x + 0x15a) { + super->field_0xf++; + ent->spriteOffsetY++; + } +} From 4bf9c9b04d6af1071ebdbf369bcef004dda637bc Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 28 Feb 2022 00:54:42 +0200 Subject: [PATCH 5/6] decompile macroMushroomStalks --- asm/object/macroMushroomStalks.s | 20 -------------------- data/const/object/macroMushroomStalks.s | 9 --------- linker.ld | 4 ++-- src/object/macroMushroomStalks.c | 12 ++++++++++++ 4 files changed, 14 insertions(+), 31 deletions(-) delete mode 100644 asm/object/macroMushroomStalks.s delete mode 100644 data/const/object/macroMushroomStalks.s create mode 100644 src/object/macroMushroomStalks.c diff --git a/asm/object/macroMushroomStalks.s b/asm/object/macroMushroomStalks.s deleted file mode 100644 index 888b3fb2..00000000 --- a/asm/object/macroMushroomStalks.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start MacroMushromStalks -MacroMushromStalks: @ 0x0808C91C - push {lr} - ldr r2, _0808C930 @ =gUnk_08121668 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808C930: .4byte gUnk_08121668 diff --git a/data/const/object/macroMushroomStalks.s b/data/const/object/macroMushroomStalks.s deleted file mode 100644 index c00a69e3..00000000 --- a/data/const/object/macroMushroomStalks.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08121668:: @ 08121668 - .4byte sub_0808C964 - .4byte sub_0808CA10 diff --git a/linker.ld b/linker.ld index 9e610f27..c3cf8625 100644 --- a/linker.ld +++ b/linker.ld @@ -701,7 +701,7 @@ SECTIONS { src/object/jarPortal.o(.text); src/object/bossDoor.o(.text); asm/object/object3A.o(.text); - asm/object/macroMushroomStalks.o(.text); + src/object/macroMushroomStalks.o(.text); asm/object/object75.o(.text); /* 75 and 76 are mislocated in object table */ asm/object/object76.o(.text); asm/object/code_0808C964.o(.text); @@ -1437,7 +1437,7 @@ SECTIONS { src/object/bossDoor.o(.rodata); data/animations/object/bossDoor.o(.rodata); data/const/object/object3A.o(.rodata); - data/const/object/macroMushroomStalks.o(.rodata); + src/object/macroMushroomStalks.o(.rodata); data/const/object/object75.o(.rodata); data/const/object/object76.o(.rodata); data/const/object/macroPlayer.o(.rodata); diff --git a/src/object/macroMushroomStalks.c b/src/object/macroMushroomStalks.c new file mode 100644 index 00000000..4bc543b3 --- /dev/null +++ b/src/object/macroMushroomStalks.c @@ -0,0 +1,12 @@ +#include "entity.h" + +void sub_0808C964(Entity*); +void sub_0808CA10(Entity*); + +void MacroMushromStalks(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_0808C964, + sub_0808CA10, + }; + actionFuncs[this->action](this); +} From 644d044a1946bb10994350bebb7a151bf42ebc56 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 28 Feb 2022 02:32:53 +0200 Subject: [PATCH 6/6] Decompile macroPlayer --- asm/object/macroPlayer.s | 553 -------------------------------- assets/assets.json | 5 - data/const/object/macroPlayer.s | 25 -- linker.ld | 4 +- src/object/macroPlayer.c | 251 +++++++++++++++ 5 files changed, 253 insertions(+), 585 deletions(-) delete mode 100644 asm/object/macroPlayer.s delete mode 100644 data/const/object/macroPlayer.s create mode 100644 src/object/macroPlayer.c diff --git a/asm/object/macroPlayer.s b/asm/object/macroPlayer.s deleted file mode 100644 index c741786a..00000000 --- a/asm/object/macroPlayer.s +++ /dev/null @@ -1,553 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MacroPlayer -MacroPlayer: @ 0x0808CAE4 - push {lr} - ldr r2, _0808CAF8 @ =gUnk_08121680 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808CAF8: .4byte gUnk_08121680 - - thumb_func_start sub_0808CAFC -sub_0808CAFC: @ 0x0808CAFC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0808CB18 @ =gUnk_08121688 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0808CB9C - pop {r4, pc} - .align 2, 0 -_0808CB18: .4byte gUnk_08121688 - - thumb_func_start sub_0808CB1C -sub_0808CB1C: @ 0x0808CB1C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0808CB70 - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xa7 - strh r0, [r4, #0x12] - movs r0, #0xd - strb r0, [r4, #0x1e] - adds r0, r4, #0 - adds r0, #0x60 - strh r2, [r0] - ldrb r1, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r4, #0x1a] - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r4, #0x19] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - strb r0, [r3] - ldrb r0, [r4, #0x1b] - ands r1, r0 - movs r0, #0x80 - orrs r1, r0 - strb r1, [r4, #0x1b] -_0808CB70: - ldr r0, [r4, #0x50] - ldr r1, [r0, #0x2c] - str r1, [r4, #0x2c] - ldr r1, [r0, #0x30] - str r1, [r4, #0x30] - movs r5, #0 - str r5, [r4, #0x34] - adds r1, r4, #0 - bl SortEntityBelow - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0808CB98 - adds r0, r4, #0 - adds r0, #0x60 - movs r1, #0 - strh r5, [r0] - strb r1, [r4, #0xd] - movs r0, #4 - strb r0, [r4, #0x1e] -_0808CB98: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0808CB9C -sub_0808CB9C: @ 0x0808CB9C - push {r4, r5, lr} - adds r3, r0, #0 - adds r0, #0x68 - ldrh r1, [r0] - ldrb r4, [r0] - lsrs r5, r1, #8 - movs r2, #0 - ldrb r0, [r3, #0x14] - cmp r0, #4 - bls _0808CBB2 - movs r2, #1 -_0808CBB2: - lsls r2, r2, #6 - ldrb r1, [r3, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3, #0x18] - cmp r4, #0xb7 - bhi _0808CBCA - ldrb r0, [r3, #0x14] - lsrs r0, r0, #1 - adds r4, r4, r0 -_0808CBCA: - ldrh r0, [r3, #0x12] - cmp r5, r0 - bne _0808CBDA - adds r0, r3, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r4, r0 - beq _0808CBE4 -_0808CBDA: - strh r5, [r3, #0x12] - adds r0, r3, #0 - adds r1, r4, #0 - bl InitAnimationForceUpdate -_0808CBE4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0808CBE8 -sub_0808CBE8: @ 0x0808CBE8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r3, #4 - strb r3, [r4, #0x14] - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - 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 - movs r0, #0x80 - orrs r1, r0 - strb r1, [r4, #0x1b] - adds r1, r4, #0 - adds r1, #0x68 - movs r0, #0x8a - lsls r0, r0, #1 - strh r0, [r1] - subs r1, #0x10 - movs r0, #0xff - strb r0, [r1] - ldr r0, _0808CC80 @ =0x0000FF50 - strh r0, [r4, #0x36] - adds r0, r4, #0 - adds r0, #0x6a - strh r3, [r0] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - movs r1, #4 - movs r2, #4 - movs r3, #0 - bl sub_0805EC9C - ldr r0, _0808CC84 @ =gUnk_02018EB0 - str r4, [r0, #0x14] - movs r0, #0 - bl sub_0807A094 - adds r1, r0, #0 - adds r0, r4, #0 - bl ChangeObjPalette - movs r0, #0x3c - movs r1, #1 - movs r2, #0 - bl CreateObject - cmp r0, #0 - beq _0808CC7C - str r4, [r0, #0x50] - str r0, [r4, #0x54] -_0808CC7C: - pop {r4, pc} - .align 2, 0 -_0808CC80: .4byte 0x0000FF50 -_0808CC84: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CC88 -sub_0808CC88: @ 0x0808CC88 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r5, #0 - adds r4, #0x6a - ldrh r1, [r4] - ldr r0, _0808CCB8 @ =0x000003FF - cmp r1, r0 - bhi _0808CCB4 - adds r0, r1, #4 - strh r0, [r4] - ldrh r2, [r4] - adds r0, r5, #0 - adds r1, r2, #0 - movs r3, #0 - bl sub_0805EC9C - ldrh r1, [r4] - adds r0, r5, #0 - movs r2, #8 - movs r3, #2 - bl sub_0806FCF4 -_0808CCB4: - pop {r4, r5, pc} - .align 2, 0 -_0808CCB8: .4byte 0x000003FF - - thumb_func_start sub_0808CCBC -sub_0808CCBC: @ 0x0808CCBC - push {r4, lr} - adds r4, r0, #0 - bl sub_0808CC88 - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _0808CCFA - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x14 - strb r0, [r4, #0x15] - adds r0, #0xec - strh r0, [r4, #0x24] - movs r0, #0xc0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldrb r1, [r4, #0x18] - movs r0, #0x31 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x54] - movs r1, #1 - strb r1, [r0, #0xd] - ldr r0, _0808CCFC @ =gUnk_02018EB0 - strb r1, [r0, #0x18] -_0808CCFA: - pop {r4, pc} - .align 2, 0 -_0808CCFC: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CD00 -sub_0808CD00: @ 0x0808CD00 - push {r4, lr} - adds r4, r0, #0 - bl sub_0808CC88 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808CD24 - adds r0, r4, #0 - bl LinearMoveUpdate - b _0808CD3E -_0808CD24: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0xa - strb r0, [r4, #0x15] - movs r0, #0xc0 - strh r0, [r4, #0x24] - movs r0, #0xa0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldr r1, _0808CD40 @ =gUnk_02018EB0 - movs r0, #1 - strb r0, [r1, #0x19] -_0808CD3E: - pop {r4, pc} - .align 2, 0 -_0808CD40: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CD44 -sub_0808CD44: @ 0x0808CD44 - push {r4, lr} - adds r4, r0, #0 - bl sub_0808CC88 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808CD68 - adds r0, r4, #0 - bl LinearMoveUpdate - b _0808CD82 -_0808CD68: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x11 - strb r0, [r4, #0x15] - adds r0, #0xef - strh r0, [r4, #0x24] - movs r0, #0x90 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldr r1, _0808CD84 @ =gUnk_02018EB0 - movs r0, #1 - strb r0, [r1, #0x1a] -_0808CD82: - pop {r4, pc} - .align 2, 0 -_0808CD84: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CD88 -sub_0808CD88: @ 0x0808CD88 - push {r4, lr} - adds r4, r0, #0 - bl sub_0808CC88 - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808CDB8 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl LinearMoveUpdate - movs r1, #0x2e - ldrsh r0, [r4, r1] - cmp r0, #0x7f - bgt _0808CDD6 - movs r0, #0x80 - strh r0, [r4, #0x2e] - b _0808CDD6 -_0808CDB8: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x68 - ldr r0, _0808CDD8 @ =0x00000C04 - strh r0, [r1] - ldr r0, [r4, #0x54] - bl DeleteEntity - adds r0, r4, #0 - bl sub_0805EC60 -_0808CDD6: - pop {r4, pc} - .align 2, 0 -_0808CDD8: .4byte 0x00000C04 - - thumb_func_start sub_0808CDDC -sub_0808CDDC: @ 0x0808CDDC - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808CDF6 - ldrb r0, [r1, #0xc] - adds r0, #1 - strb r0, [r1, #0xc] - movs r0, #0x10 - strb r0, [r1, #0xe] -_0808CDF6: - pop {pc} - - thumb_func_start sub_0808CDF8 -sub_0808CDF8: @ 0x0808CDF8 - push {lr} - adds r3, r0, #0 - ldrb r0, [r3, #0xe] - subs r0, #1 - strb r0, [r3, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808CE2C - ldr r0, _0808CE30 @ =gArea - ldrb r1, [r0, #0x16] - ldrb r0, [r3, #0xc] - adds r0, #1 - adds r0, r0, r1 - strb r0, [r3, #0xc] - ldr r2, _0808CE34 @ =gUnk_081216B4 - lsls r1, r1, #1 - adds r0, r1, r2 - ldrb r0, [r0] - strb r0, [r3, #0x14] - adds r1, #1 - adds r1, r1, r2 - ldrb r0, [r1] - strb r0, [r3, #0x15] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r3, #0x24] -_0808CE2C: - pop {pc} - .align 2, 0 -_0808CE30: .4byte gArea -_0808CE34: .4byte gUnk_081216B4 - - thumb_func_start sub_0808CE38 -sub_0808CE38: @ 0x0808CE38 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl LinearMoveUpdate - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, #0xc7 - bgt _0808CE52 - movs r0, #0x18 - strb r0, [r4, #0x15] -_0808CE52: - movs r1, #0x2e - ldrsh r0, [r4, r1] - cmp r0, #0x2f - bgt _0808CE60 - ldr r1, _0808CE64 @ =gUnk_02018EB0 - movs r0, #1 - strb r0, [r1, #0x1b] -_0808CE60: - pop {r4, pc} - .align 2, 0 -_0808CE64: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CE68 -sub_0808CE68: @ 0x0808CE68 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl LinearMoveUpdate - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, #0xc7 - bgt _0808CE82 - movs r0, #8 - strb r0, [r4, #0x15] -_0808CE82: - movs r1, #0x2e - ldrsh r0, [r4, r1] - cmp r0, #0xd0 - ble _0808CE90 - ldr r1, _0808CE94 @ =gUnk_02018EB0 - movs r0, #1 - strb r0, [r1, #0x1b] -_0808CE90: - pop {r4, pc} - .align 2, 0 -_0808CE94: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CE98 -sub_0808CE98: @ 0x0808CE98 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl LinearMoveUpdate - movs r0, #0x32 - ldrsh r1, [r4, r0] - movs r0, #0x90 - lsls r0, r0, #1 - cmp r1, r0 - ble _0808CEB8 - ldr r1, _0808CEBC @ =gUnk_02018EB0 - movs r0, #1 - strb r0, [r1, #0x1b] -_0808CEB8: - pop {r4, pc} - .align 2, 0 -_0808CEBC: .4byte gUnk_02018EB0 - - thumb_func_start sub_0808CEC0 -sub_0808CEC0: @ 0x0808CEC0 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl LinearMoveUpdate - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, #0xc7 - bgt _0808CEDA - movs r0, #0x18 - strb r0, [r4, #0x15] -_0808CEDA: - movs r1, #0x2e - ldrsh r0, [r4, r1] - cmp r0, #0xf - bgt _0808CEE8 - ldr r1, _0808CEEC @ =gUnk_02018EB0 - movs r0, #1 - strb r0, [r1, #0x1b] -_0808CEE8: - pop {r4, pc} - .align 2, 0 -_0808CEEC: .4byte gUnk_02018EB0 diff --git a/assets/assets.json b/assets/assets.json index a7f635fa..a6862320 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -43544,11 +43544,6 @@ "start": 1185352, "size": 32 }, - { - "path": "macroPlayer/gUnk_081216B4.bin", - "start": 1185460, - "size": 8 - }, { "path": "object3D/gUnk_081216C8_EU.bin", "variants": [ diff --git a/data/const/object/macroPlayer.s b/data/const/object/macroPlayer.s deleted file mode 100644 index 1e573c65..00000000 --- a/data/const/object/macroPlayer.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08121680:: @ 08121680 - .4byte sub_0808CAFC - .4byte sub_0808CB1C - -gUnk_08121688:: @ 08121688 - .4byte sub_0808CBE8 - .4byte sub_0808CCBC - .4byte sub_0808CD00 - .4byte sub_0808CD44 - .4byte sub_0808CD88 - .4byte sub_0808CDDC - .4byte sub_0808CDF8 - .4byte sub_0808CE38 - .4byte sub_0808CE68 - .4byte sub_0808CE98 - .4byte sub_0808CEC0 - -gUnk_081216B4:: @ 081216B4 - .incbin "macroPlayer/gUnk_081216B4.bin" diff --git a/linker.ld b/linker.ld index c3cf8625..cf0fab77 100644 --- a/linker.ld +++ b/linker.ld @@ -705,7 +705,7 @@ SECTIONS { asm/object/object75.o(.text); /* 75 and 76 are mislocated in object table */ asm/object/object76.o(.text); asm/object/code_0808C964.o(.text); - asm/object/macroPlayer.o(.text); + src/object/macroPlayer.o(.text); asm/object/object3D.o(.text); src/object/object3E.o(.text); src/object/giantLeaf.o(.text); @@ -1440,7 +1440,7 @@ SECTIONS { src/object/macroMushroomStalks.o(.rodata); data/const/object/object75.o(.rodata); data/const/object/object76.o(.rodata); - data/const/object/macroPlayer.o(.rodata); + src/object/macroPlayer.o(.rodata); data/const/object/object3D.o(.rodata); src/object/object3E.o(.rodata); data/const/object/giantLeaf.o(.rodata); diff --git a/src/object/macroPlayer.c b/src/object/macroPlayer.c new file mode 100644 index 00000000..37cf06ce --- /dev/null +++ b/src/object/macroPlayer.c @@ -0,0 +1,251 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "coord.h" +#include "functions.h" +#include "object.h" +#include "area.h" + +typedef struct { + Entity base; + union SplitHWord unk68; + u16 unk6a; +} MacroPlayerEntity; + +extern u8 gUnk_02018EB0[]; +extern int sub_0807A094(int); + +void MacroPlayer_Type0(MacroPlayerEntity*); +void MacroPlayer_Type1(MacroPlayerEntity*); +void MacroPlayer_Type0_Init(MacroPlayerEntity*); +void MacroPlayer_Type0_Action1(MacroPlayerEntity*); +void MacroPlayer_Type0_Action2(MacroPlayerEntity*); +void MacroPlayer_Type0_Action3(MacroPlayerEntity*); +void MacroPlayer_Type0_Action4(MacroPlayerEntity*); +void MacroPlayer_Type0_Action5(MacroPlayerEntity*); +void MacroPlayer_Type0_Action6(MacroPlayerEntity*); +void MacroPlayer_Type0_Action7(MacroPlayerEntity*); +void MacroPlayer_Type0_Action8(MacroPlayerEntity*); +void MacroPlayer_Type0_Action9(MacroPlayerEntity*); +void MacroPlayer_Type0_Action10(MacroPlayerEntity*); +void sub_0808CB9C(MacroPlayerEntity*); + +void MacroPlayer(Entity* this) { + static void (*const typeFuncs[])(MacroPlayerEntity*) = { + MacroPlayer_Type0, + MacroPlayer_Type1, + }; + typeFuncs[this->type]((MacroPlayerEntity*)this); +} + +void MacroPlayer_Type0(MacroPlayerEntity* this) { + static void (*const actionFuncs[])(MacroPlayerEntity*) = { + MacroPlayer_Type0_Init, MacroPlayer_Type0_Action1, MacroPlayer_Type0_Action2, MacroPlayer_Type0_Action3, + MacroPlayer_Type0_Action4, MacroPlayer_Type0_Action5, MacroPlayer_Type0_Action6, MacroPlayer_Type0_Action7, + MacroPlayer_Type0_Action8, MacroPlayer_Type0_Action9, MacroPlayer_Type0_Action10, + }; + actionFuncs[super->action](this); + sub_0808CB9C(this); +} + +void MacroPlayer_Type1(MacroPlayerEntity* this) { + Entity* pEVar1; + + if (super->action == 0) { + super->action = 1; + super->spriteSettings.draw = 3; + super->spriteIndex = 0xa7; + super->frameIndex = 13; + super->spriteVramOffset = 1; + super->palette.b.b0 = 5; + super->spriteRendering.b3 = 0; + super->spritePriority.b0 = 0; + super->spriteOrientation.flipY = 2; + } + pEVar1 = super->parent; + super->x = pEVar1->x; + super->y = pEVar1->y; + super->z.WORD = 0; + SortEntityBelow(pEVar1, super); + if (super->subAction != 0) { + super->spriteVramOffset = 0; + super->subAction = 0; + super->frameIndex = 4; + } +} + +void sub_0808CB9C(MacroPlayerEntity* this) { + u32 uVar1; + u32 uVar2; + u32 uVar3; + u32 uVar4; + u32 val; + + uVar2 = this->unk68.HWORD; + uVar1 = this->unk68.HALF.LO; + uVar4 = uVar2 >> 8; + val = 0; + uVar3 = super->animationState; + val = uVar3 > 4; + super->spriteSettings.flipX = val; + if (uVar1 < 0xb8) { + uVar1 += super->animationState >> 1; + } + if ((uVar4 != (u16)super->spriteIndex) || (uVar1 != super->animIndex)) { + super->spriteIndex = uVar4; + InitAnimationForceUpdate(super, uVar1); + } +} + +void MacroPlayer_Type0_Init(MacroPlayerEntity* this) { + Entity* pEVar1; + u8* ptr; + + super->action++; + super->spriteSettings.draw = 1; + super->animationState = 4; + super->spriteRendering.b3 = 0; + super->spritePriority.b0 = 0; + super->spriteOrientation.flipY = 2; + this->unk68.HWORD = 0x114; + super->animIndex = 0xff; + super->z.HALF.HI = 0xff50; + this->unk6a = 4; + super->spriteRendering.b0 = 3; + sub_0805EC9C(super, 4, 4, 0); + ptr = gUnk_02018EB0; + *(Entity**)&ptr[0x14] = super; + ChangeObjPalette(super, sub_0807A094(0)); + pEVar1 = CreateObject(PORTAL_FALLING_PLAYER, 1, 0); + if (pEVar1 != NULL) { + pEVar1->parent = super; + super->child = pEVar1; + } +} + +void sub_0808CC88(MacroPlayerEntity* this) { + if (this->unk6a < 0x400) { + this->unk6a += 4; + sub_0805EC9C(super, this->unk6a, this->unk6a, 0); + sub_0806FCF4(super, this->unk6a, 8, 2); + } +} + +void MacroPlayer_Type0_Action1(MacroPlayerEntity* this) { + sub_0808CC88(this); + if (GravityUpdate(super, 0x1000) == 0) { + super->action++; + super->direction = DirectionSouthWest; + super->speed = 0x100; + super->zVelocity = 0x30000; + super->spriteSettings.shadow = 0; + super->child->subAction = 1; + gUnk_02018EB0[0x18] = 1; + } +} + +void MacroPlayer_Type0_Action2(MacroPlayerEntity* this) { + sub_0808CC88(this); + UpdateAnimationSingleFrame(super); + if (GravityUpdate(super, 0x2000)) { + LinearMoveUpdate(super); + } else { + super->action++; + super->direction = 10; + super->speed = 0xc0; + super->zVelocity = 0x28000; + gUnk_02018EB0[0x19] = 1; + } +} + +void MacroPlayer_Type0_Action3(MacroPlayerEntity* this) { + sub_0808CC88(this); + UpdateAnimationSingleFrame(super); + if (GravityUpdate(super, 0x2000)) { + LinearMoveUpdate(super); + } else { + super->action++; + super->direction = 17; + super->speed = 0x100; + super->zVelocity = 0x24000; + gUnk_02018EB0[0x1a] = 1; + } +} + +void MacroPlayer_Type0_Action4(MacroPlayerEntity* this) { + sub_0808CC88(this); + if (GravityUpdate(super, 0x1800)) { + UpdateAnimationSingleFrame(super); + LinearMoveUpdate(super); + if (super->x.HALF.HI < 0x80) { + super->x.HALF.HI = 0x80; + } + } else { + super->action++; + super->actionDelay = 60; + this->unk68.HWORD = 0xc04; + DeleteEntity(super->child); + sub_0805EC60(super); + } +} + +void MacroPlayer_Type0_Action5(MacroPlayerEntity* this) { + if (--super->actionDelay == 0) { + super->action++; + super->actionDelay = 0x10; + } +} + +void MacroPlayer_Type0_Action6(MacroPlayerEntity* this) { + static const u8 gUnk_081216B4[] = { 0, 0x1a, 0x2, 0x5, 0x4, 0x11, 0x6, 0x1a }; + u32 uVar2; + + if (--super->actionDelay == 0) { + uVar2 = gArea.curPortalExitDirection; + super->action += 1; + super->action += uVar2; + super->animationState = gUnk_081216B4[uVar2 * 2]; + super->direction = gUnk_081216B4[uVar2 * 2 + 1]; + super->speed = 0x140; + } +} + +void MacroPlayer_Type0_Action7(MacroPlayerEntity* this) { + UpdateAnimationSingleFrame(super); + LinearMoveUpdate(super); + if (super->y.HALF.HI < 200) { + super->direction = DirectionWest; + } + if (super->x.HALF.HI < 0x30) { + gUnk_02018EB0[0x1b] = 1; + } +} + +void MacroPlayer_Type0_Action8(MacroPlayerEntity* this) { + UpdateAnimationSingleFrame(super); + LinearMoveUpdate(super); + if (super->y.HALF.HI < 200) { + super->direction = DirectionEast; + } + if (super->x.HALF.HI > 0xd0) { + gUnk_02018EB0[0x1b] = 1; + } +} + +void MacroPlayer_Type0_Action9(MacroPlayerEntity* this) { + UpdateAnimationSingleFrame(super); + LinearMoveUpdate(super); + if (super->y.HALF.HI > 0x120) { + gUnk_02018EB0[0x1b] = 1; + } +} + +void MacroPlayer_Type0_Action10(MacroPlayerEntity* this) { + UpdateAnimationSingleFrame(super); + LinearMoveUpdate(super); + if (super->y.HALF.HI < 200) { + super->direction = DirectionWest; + } + if (super->x.HALF.HI < 0x10) { + gUnk_02018EB0[0x1b] = 1; + } +}