From ecaeaabdcae11f4dbd9c07a43e71b3222d61b2d5 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 25 Feb 2022 06:21:44 +0200 Subject: [PATCH 1/5] Decompile cabinFurniture --- asm/object/cabinFurniture.s | 215 ----------------------------- data/const/object/cabinFurniture.s | 10 -- linker.ld | 4 +- src/object/cabinFurniture.c | 83 +++++++++++ 4 files changed, 85 insertions(+), 227 deletions(-) delete mode 100644 asm/object/cabinFurniture.s delete mode 100644 data/const/object/cabinFurniture.s create mode 100644 src/object/cabinFurniture.c diff --git a/asm/object/cabinFurniture.s b/asm/object/cabinFurniture.s deleted file mode 100644 index e2799e52..00000000 --- a/asm/object/cabinFurniture.s +++ /dev/null @@ -1,215 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start CabinFurniture -CabinFurniture: @ 0x0809ADB4 - push {lr} - ldr r2, _0809ADC8 @ =gUnk_08123D4C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809ADC8: .4byte gUnk_08123D4C - - thumb_func_start sub_0809ADCC -sub_0809ADCC: @ 0x0809ADCC - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _0809AE14 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x32 - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r5, r4, #0 - adds r5, #0x80 - strh r1, [r5] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r7, [r0] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldrb r0, [r4, #0xa] - cmp r0, #1 - beq _0809AEBC - cmp r0, #1 - bgt _0809AE18 - cmp r0, #0 - beq _0809AE1E - b _0809AF46 - .align 2, 0 -_0809AE14: .4byte gRoomControls -_0809AE18: - cmp r0, #2 - beq _0809AF10 - b _0809AF46 -_0809AE1E: - movs r0, #2 - strb r0, [r4, #0xc] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0xa - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldrh r5, [r5] - subs r6, r5, #1 - ldr r4, _0809AEB8 @ =0x00004022 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r7, #0 - bl SetTile - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #1 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - adds r1, #0x3f - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - adds r1, #0x40 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - adds r1, #0x41 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r4, #0x1b - adds r1, r5, #0 - subs r1, #0x41 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - subs r1, #0x40 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - subs r4, #0x17 - adds r1, r5, #0 - subs r1, #0x3f - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - subs r1, #0x81 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - subs r1, #0x80 - adds r0, r4, #0 - b _0809AF04 - .align 2, 0 -_0809AEB8: .4byte 0x00004022 -_0809AEBC: - strb r0, [r4, #0xc] - ldrh r6, [r5] - ldr r4, _0809AEF4 @ =0x00004022 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r6, #0 - adds r1, #0x40 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - ldr r0, _0809AEF8 @ =0x00004025 - adds r1, r6, #0 - adds r1, #0x41 - adds r2, r7, #0 - bl SetTile - movs r0, #0x4f - bl CheckLocalFlag - cmp r0, #0 - bne _0809AF00 - ldr r0, _0809AEFC @ =0x0000402F - b _0809AF02 - .align 2, 0 -_0809AEF4: .4byte 0x00004022 -_0809AEF8: .4byte 0x00004025 -_0809AEFC: .4byte 0x0000402F -_0809AF00: - ldr r0, _0809AF0C @ =0x0000402D -_0809AF02: - adds r1, r6, #1 -_0809AF04: - adds r2, r7, #0 - bl SetTile - b _0809AF46 - .align 2, 0 -_0809AF0C: .4byte 0x0000402D -_0809AF10: - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r5, [r5] - adds r6, r5, #0 - subs r6, #0x41 - ldr r4, _0809AF48 @ =0x00004022 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r7, #0 - bl SetTile - adds r1, r5, #0 - subs r1, #0x40 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - subs r1, r5, #1 - adds r0, r4, #0 - adds r2, r7, #0 - bl SetTile - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r7, #0 - bl SetTile -_0809AF46: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809AF48: .4byte 0x00004022 - - thumb_func_start nullsub_535 -nullsub_535: @ 0x0809AF4C - bx lr - .align 2, 0 - - thumb_func_start sub_0809AF50 -sub_0809AF50: @ 0x0809AF50 - push {lr} - bl nullsub_2 - pop {pc} - - thumb_func_start nullsub_2 -nullsub_2: @ 0x0809AF58 - bx lr - .align 2, 0 diff --git a/data/const/object/cabinFurniture.s b/data/const/object/cabinFurniture.s deleted file mode 100644 index db3fb95d..00000000 --- a/data/const/object/cabinFurniture.s +++ /dev/null @@ -1,10 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123D4C:: @ 08123D4C - .4byte sub_0809ADCC - .4byte nullsub_535 - .4byte sub_0809AF50 diff --git a/linker.ld b/linker.ld index 3d0e875b..d0c4673c 100644 --- a/linker.ld +++ b/linker.ld @@ -782,7 +782,7 @@ SECTIONS { src/object/octorokBossObject.o(.text); asm/object/macroBook.o(.text); asm/object/mazaalBossObject.o(.text); - asm/object/cabinFurniture.o(.text); + src/object/cabinFurniture.o(.text); src/object/doubleBookshelf.o(.text); src/object/book.o(.text); src/object/fireplace.o(.text); @@ -1536,7 +1536,7 @@ SECTIONS { data/const/object/macroBook.o(.rodata); data/animations/object/macroBook.o(.rodata); data/const/object/mazaalBossObject.o(.rodata); - data/const/object/cabinFurniture.o(.rodata); + src/object/cabinFurniture.o(.rodata); src/object/doubleBookshelf.o(.rodata); src/object/book.o(.rodata); data/const/object/fireplace.o(.rodata); diff --git a/src/object/cabinFurniture.c b/src/object/cabinFurniture.c new file mode 100644 index 00000000..d3cff8fa --- /dev/null +++ b/src/object/cabinFurniture.c @@ -0,0 +1,83 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "room.h" +#include "flags.h" +#include "asm.h" + +typedef struct { + Entity base; + u8 filler[0x18]; + u16 tile; +} CabinFurnitureEntity; + +void CabinFurniture_Init(CabinFurnitureEntity* this); +void nullsub_535(CabinFurnitureEntity* this); +void nullsub_2a(CabinFurnitureEntity* this); +void nullsub_2(CabinFurnitureEntity* this); + +void CabinFurniture(Entity* this) { + static void (*const actionFuncs[])(CabinFurnitureEntity*) = { + CabinFurniture_Init, + nullsub_535, + nullsub_2a, + }; + actionFuncs[this->action]((CabinFurnitureEntity*)this); +} + +void CabinFurniture_Init(CabinFurnitureEntity* this) { + u32 uVar1; + u32 uVar6; + u32 uVar7; + + this->tile = COORD_TO_TILE(super); + uVar1 = super->collisionLayer; + UpdateSpriteForCollisionLayer(super); + switch (super->type) { + case 0: + super->action = 2; + super->spritePriority.b0 = 6; + uVar7 = this->tile; + uVar6 = uVar7 - 1; + SetTile(0x4022, uVar6, uVar1); + SetTile(0x4022, uVar7, uVar1); + SetTile(0x4022, uVar7 + 1, uVar1); + SetTile(0x4022, uVar7 + 0x3f, uVar1); + SetTile(0x4022, uVar7 + 0x40, uVar1); + SetTile(0x4022, uVar7 + 0x41, uVar1); + SetTile(0x403d, uVar7 - 0x41, uVar1); + SetTile(0x403d, uVar7 - 0x40, uVar1); + SetTile(0x4026, uVar7 - 0x3f, uVar1); + SetTile(0x4026, uVar7 - 0x81, uVar1); + SetTile(0x4026, uVar7 - 0x80, uVar1); + break; + case 1: + super->action = 1; + uVar6 = this->tile; + SetTile(0x4022, uVar6, uVar1); + SetTile(0x4022, uVar6 + 0x40, uVar1); + SetTile(0x4025, uVar6 + 0x41, uVar1); + if (CheckLocalFlag(0x4f) == 0) { + SetTile(0x402f, uVar6 + 1, uVar1); + } else { + SetTile(0x402d, uVar6 + 1, uVar1); + } + break; + case 2: + super->action = 1; + uVar7 = this->tile; + uVar6 = uVar7 - 0x41; + SetTile(0x4022, uVar6, uVar1); + SetTile(0x4022, uVar7 - 0x40, uVar1); + SetTile(0x4022, uVar7 - 1, uVar1); + SetTile(0x4022, uVar7, uVar1); + break; + } +} + +void nullsub_535(CabinFurnitureEntity* this) {} + +void nullsub_2a(CabinFurnitureEntity* this) { + nullsub_2(this); +} + +void nullsub_2(CabinFurnitureEntity* this) {} From 597f3d9721f6088c8b38486d66cd55119dc7dbb6 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 25 Feb 2022 06:47:54 +0200 Subject: [PATCH 2/5] Decompile board --- asm/object/board.s | 185 ------------------------------------ assets/assets.json | 5 - data/const/object/board.s | 12 --- linker.ld | 4 +- src/object/board.c | 77 +++++++++++++++ src/object/cabinFurniture.c | 6 +- 6 files changed, 83 insertions(+), 206 deletions(-) delete mode 100644 asm/object/board.s delete mode 100644 data/const/object/board.s create mode 100644 src/object/board.c diff --git a/asm/object/board.s b/asm/object/board.s deleted file mode 100644 index 01b22d8c..00000000 --- a/asm/object/board.s +++ /dev/null @@ -1,185 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Board -Board: @ 0x08098B10 - push {lr} - ldr r2, _08098B24 @ =gUnk_08123664 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08098B24: .4byte gUnk_08123664 - - thumb_func_start sub_08098B28 -sub_08098B28: @ 0x08098B28 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrb r2, [r5, #0xa] - lsls r2, r2, #1 - ldr r0, _08098BD4 @ =gUnk_0812366C - adds r2, r2, r0 - movs r3, #1 - movs r4, #1 - strb r4, [r5, #0xc] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r5, #0x18] - ldrb r0, [r5, #0xa] - strb r0, [r5, #0x1e] - ldrb r0, [r2] - adds r1, r5, #0 - adds r1, #0x82 - strb r0, [r1] - ldrb r0, [r2, #1] - adds r2, r5, #0 - adds r2, #0x83 - strb r0, [r2] - ldrb r0, [r1] - lsrs r0, r0, #1 - ldrh r1, [r5, #0x2e] - subs r1, r1, r0 - adds r0, r5, #0 - adds r0, #0x78 - strh r1, [r0] - ldrb r0, [r2] - lsrs r0, r0, #1 - ldrh r1, [r5, #0x32] - subs r1, r1, r0 - subs r2, #9 - strh r1, [r2] - movs r0, #0x2e - ldrsh r1, [r5, r0] - ldr r2, _08098BD8 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r6, #0x32 - ldrsh r0, [r5, r6] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r6, r5, #0 - adds r6, #0x80 - strh r1, [r6] - adds r7, r5, #0 - adds r7, #0x38 - strb r4, [r7] - adds r0, r5, #0 - bl UpdateSpriteForCollisionLayer - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r5, #0xa] - cmp r0, #0 - bne _08098BCA - ldr r0, _08098BDC @ =0x00004074 - ldrh r1, [r6] - subs r1, #0x40 - ldrb r2, [r7] - bl SetTile -_08098BCA: - adds r0, r5, #0 - bl sub_08098BE8 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08098BD4: .4byte gUnk_0812366C -_08098BD8: .4byte gRoomControls -_08098BDC: .4byte 0x00004074 - - thumb_func_start sub_08098BE0 -sub_08098BE0: @ 0x08098BE0 - push {lr} - bl sub_08098BE8 - pop {pc} - - thumb_func_start sub_08098BE8 -sub_08098BE8: @ 0x08098BE8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r6, _08098C28 @ =gPlayerState - ldr r0, [r6, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08098C26 - ldr r4, _08098C2C @ =gPlayerEntity - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_08098C30 - cmp r0, #0 - beq _08098C26 - bl sub_08079F8C - cmp r0, #0 - beq _08098C26 - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _08098C26 - movs r0, #1 - strb r0, [r6, #0x14] - adds r0, r5, #0 - adds r0, #0x80 - ldrh r1, [r0] - adds r0, r4, #0 - bl sub_0807AAF8 -_08098C26: - pop {r4, r5, r6, pc} - .align 2, 0 -_08098C28: .4byte gPlayerState -_08098C2C: .4byte gPlayerEntity - - thumb_func_start sub_08098C30 -sub_08098C30: @ 0x08098C30 - push {r4, lr} - adds r3, r0, #0 - movs r4, #0 - movs r0, #0x2e - ldrsh r2, [r1, r0] - adds r0, r3, #0 - adds r0, #0x78 - ldrh r0, [r0] - subs r2, r2, r0 - movs r0, #0x32 - ldrsh r1, [r1, r0] - adds r0, r3, #0 - adds r0, #0x7a - ldrh r0, [r0] - subs r1, r1, r0 - adds r0, r3, #0 - adds r0, #0x82 - ldrb r0, [r0] - cmp r2, r0 - bhi _08098C64 - adds r0, r3, #0 - adds r0, #0x83 - ldrb r0, [r0] - cmp r1, r0 - bhi _08098C64 - movs r4, #1 -_08098C64: - adds r0, r4, #0 - pop {r4, pc} diff --git a/assets/assets.json b/assets/assets.json index dc420540..96c698e5 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -44956,11 +44956,6 @@ "start": 1193332, "size": 6 }, - { - "path": "board/gUnk_0812366C.bin", - "start": 1193580, - "size": 8 - }, { "path": "animations/gSpriteAnimations_BigVortex_0.bin", "start": 1193624, diff --git a/data/const/object/board.s b/data/const/object/board.s deleted file mode 100644 index 2f569052..00000000 --- a/data/const/object/board.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123664:: @ 08123664 - .4byte sub_08098B28 - .4byte sub_08098BE0 - -gUnk_0812366C:: @ 0812366C - .incbin "board/gUnk_0812366C.bin" diff --git a/linker.ld b/linker.ld index d0c4673c..ef8253a1 100644 --- a/linker.ld +++ b/linker.ld @@ -772,7 +772,7 @@ SECTIONS { src/object/objectOnSpinyBeetle.o(.text); src/object/object7E.o(.text); asm/object/picoBloom.o(.text); - asm/object/board.o(.text); + src/object/board.o(.text); asm/object/object81.o(.text); src/object/bigVortex.o(.text); src/object/bigPushableLever.o(.text); @@ -1520,7 +1520,7 @@ SECTIONS { src/object/objectOnSpinyBeetle.o(.rodata); data/const/object/picoBloom.o(.rodata); data/animations/object/picoBloom.o(.rodata); - data/const/object/board.o(.rodata); + src/object/board.o(.rodata); data/const/object/object81.o(.rodata); data/const/object/bigVortex.o(.rodata); data/animations/object/bigVortex.o(.rodata); diff --git a/src/object/board.c b/src/object/board.c new file mode 100644 index 00000000..7c3607c3 --- /dev/null +++ b/src/object/board.c @@ -0,0 +1,77 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "room.h" +#include "asm.h" +#include "player.h" +#include "functions.h" + +typedef struct { + Entity base; + u8 filler[0x10]; + u16 unk78; + u16 unk7a; + u16 unk7c; + u16 unk7e; + u16 tile; + u8 unk82; + u8 unk83; +} BoardEntity; + +void Board_Init(BoardEntity*); +void sub_08098BE0(BoardEntity*); +void sub_08098BE8(BoardEntity*); +bool32 sub_08098C30(BoardEntity*, Entity*); +void sub_0807AAF8(Entity*, u32); + +void Board(Entity* this) { + static void (*const actionFuncs[])(BoardEntity*) = { + Board_Init, + sub_08098BE0, + }; + + actionFuncs[this->action]((BoardEntity*)this); +} + +void Board_Init(BoardEntity* this) { + static const u8 gUnk_0812366C[] = { 0x10, 0x1e, 0xc, 0x6, 0x10, 0x6, 0x0, 0x0 }; + const u8* pbVar2 = &gUnk_0812366C[super->type * 2]; + + super->action = 1; + super->spriteSettings.draw = 1; + super->frameIndex = super->type; + this->unk82 = pbVar2[0]; + this->unk83 = pbVar2[1]; + this->unk78 = super->x.HALF.HI - (this->unk82 >> 1); + this->unk7a = super->y.HALF.HI - (this->unk83 >> 1); + this->tile = COORD_TO_TILE(super); + super->collisionLayer = 1; + UpdateSpriteForCollisionLayer(super); + super->spritePriority.b0 = 6; + if (super->type == 0) { + SetTile(0x4074, this->tile - 0x40, super->collisionLayer); + } + sub_08098BE8(this); +} + +void sub_08098BE0(BoardEntity* this) { + sub_08098BE8(this); +} + +void sub_08098BE8(BoardEntity* this) { + if ((gPlayerState.flags & PL_MINISH) && sub_08098C30(this, &gPlayerEntity) && sub_08079F8C() && + gPlayerEntity.z.HALF.HI == 0) { + gPlayerState.field_0x14 = 1; + sub_0807AAF8(&gPlayerEntity, this->tile); + } +} + +bool32 sub_08098C30(BoardEntity* this, Entity* ent) { + u32 uVar1 = 0; + u32 diffx = ent->x.HALF.HI - this->unk78; + u32 diffy = ent->y.HALF.HI - this->unk7a; + + if (diffx <= this->unk82 && diffy <= this->unk83) { + uVar1 = 1; + } + return uVar1; +} diff --git a/src/object/cabinFurniture.c b/src/object/cabinFurniture.c index d3cff8fa..8fceff87 100644 --- a/src/object/cabinFurniture.c +++ b/src/object/cabinFurniture.c @@ -74,10 +74,12 @@ void CabinFurniture_Init(CabinFurnitureEntity* this) { } } -void nullsub_535(CabinFurnitureEntity* this) {} +void nullsub_535(CabinFurnitureEntity* this) { +} void nullsub_2a(CabinFurnitureEntity* this) { nullsub_2(this); } -void nullsub_2(CabinFurnitureEntity* this) {} +void nullsub_2(CabinFurnitureEntity* this) { +} From 0aa031f250998bd87bc6e2a2545d5af50f5b1e5c Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 25 Feb 2022 07:17:12 +0200 Subject: [PATCH 3/5] Decompile bollard --- asm/object/bollard.s | 236 ------------------------------------ data/const/object/bollard.s | 12 -- linker.ld | 4 +- src/object/bollard.c | 105 ++++++++++++++++ 4 files changed, 107 insertions(+), 250 deletions(-) delete mode 100644 asm/object/bollard.s delete mode 100644 data/const/object/bollard.s create mode 100644 src/object/bollard.c diff --git a/asm/object/bollard.s b/asm/object/bollard.s deleted file mode 100644 index f603aa02..00000000 --- a/asm/object/bollard.s +++ /dev/null @@ -1,236 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Bollard -Bollard: @ 0x0808B294 - push {lr} - ldr r2, _0808B2A8 @ =gUnk_08121300 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808B2A8: .4byte gUnk_08121300 - - thumb_func_start sub_0808B2AC -sub_0808B2AC: @ 0x0808B2AC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0808B2C4 - adds r0, r4, #0 - bl sub_0808B41C - adds r0, r4, #0 - bl sub_0808B3AC - b _0808B2CA -_0808B2C4: - adds r0, r4, #0 - bl sub_0808B42C -_0808B2CA: - pop {r4, pc} - - thumb_func_start sub_0808B2CC -sub_0808B2CC: @ 0x0808B2CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0808B2E6 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808B31C - b _0808B2F4 -_0808B2E6: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _0808B31C -_0808B2F4: - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - adds r0, r4, #0 - adds r0, #0x72 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - ldr r0, _0808B320 @ =0x000001A5 - bl EnqueueSFX -_0808B31C: - pop {r4, pc} - .align 2, 0 -_0808B320: .4byte 0x000001A5 - - thumb_func_start sub_0808B324 -sub_0808B324: @ 0x0808B324 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808B340 - adds r0, r4, #0 - bl sub_0808B42C -_0808B340: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808B344 -sub_0808B344: @ 0x0808B344 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0808B35E - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _0808B384 - b _0808B36C -_0808B35E: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808B384 -_0808B36C: - movs r0, #4 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0808B3AC - ldr r0, _0808B388 @ =0x000001A5 - bl EnqueueSFX -_0808B384: - pop {r4, pc} - .align 2, 0 -_0808B388: .4byte 0x000001A5 - - thumb_func_start sub_0808B38C -sub_0808B38C: @ 0x0808B38C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808B3A8 - adds r0, r4, #0 - bl sub_0808B41C -_0808B3A8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808B3AC -sub_0808B3AC: @ 0x0808B3AC - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r2, _0808B414 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r4, r6, #0 - adds r4, #0x70 - strh r1, [r4] - ldrh r0, [r4] - adds r5, r6, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x72 - strh r0, [r1] - ldrh r0, [r4] - ldrb r1, [r5] - bl sub_080002E0 - adds r1, r6, #0 - adds r1, #0x74 - strb r0, [r1] - ldr r0, _0808B418 @ =0x0000400B - ldrh r1, [r4] - ldrb r2, [r5] - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 -_0808B414: .4byte gRoomControls -_0808B418: .4byte 0x0000400B - - thumb_func_start sub_0808B41C -sub_0808B41C: @ 0x0808B41C - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #0 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_0808B42C -sub_0808B42C: @ 0x0808B42C - push {lr} - movs r1, #3 - strb r1, [r0, #0xc] - adds r3, r0, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r2, #7 - orrs r1, r2 - strb r1, [r3] - movs r1, #1 - bl InitializeAnimation - pop {pc} - .align 2, 0 diff --git a/data/const/object/bollard.s b/data/const/object/bollard.s deleted file mode 100644 index 338230dc..00000000 --- a/data/const/object/bollard.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08121300:: @ 08121300 - .4byte sub_0808B2AC - .4byte sub_0808B2CC - .4byte sub_0808B324 - .4byte sub_0808B344 - .4byte sub_0808B38C diff --git a/linker.ld b/linker.ld index ef8253a1..247eac9e 100644 --- a/linker.ld +++ b/linker.ld @@ -693,7 +693,7 @@ SECTIONS { asm/object/object30.o(.text); src/object/frozenFlower.o(.text); src/object/pullableMushroom.o(.text); - asm/object/bollard.o(.text); + src/object/bollard.o(.text); src/object/warpPoint.o(.text); asm/object/object35.o(.text); asm/object/object36.o(.text); @@ -1424,7 +1424,7 @@ SECTIONS { data/const/object/object31.o(.rodata); src/object/pullableMushroom.o(.rodata); data/animations/object/pullableMushroom.o(.rodata); - data/const/object/bollard.o(.rodata); + src/object/bollard.o(.rodata); data/animations/object/bollard.o(.rodata); src/object/warpPoint.o(.rodata); data/animations/object/warpPoint.o(.rodata); diff --git a/src/object/bollard.c b/src/object/bollard.c new file mode 100644 index 00000000..5f1b0bf7 --- /dev/null +++ b/src/object/bollard.c @@ -0,0 +1,105 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "flags.h" +#include "asm.h" +#include "sound.h" +#include "room.h" +#include "functions.h" + +typedef struct { + Entity base; + u8 filler[0x8]; + u16 tile; + u16 tileIndex; + u8 unk74; + u8 unk75; + u8 filler2[0x10]; + u16 flags; +} BollardEntity; + +void sub_0808B2AC(BollardEntity*); +void sub_0808B2CC(BollardEntity*); +void sub_0808B324(BollardEntity*); +void sub_0808B344(BollardEntity*); +void sub_0808B38C(BollardEntity*); +void sub_0808B41C(BollardEntity*); +void sub_0808B3AC(BollardEntity*); +void sub_0808B42C(BollardEntity*); + +void Bollard(Entity* this) { + static void (*const actionFuncs[])(BollardEntity*) = { + sub_0808B2AC, sub_0808B2CC, sub_0808B324, sub_0808B344, sub_0808B38C, + }; + + actionFuncs[this->action]((BollardEntity*)this); +} + +void sub_0808B2AC(BollardEntity* this) { + if (super->type2 == 0) { + sub_0808B41C(this); + sub_0808B3AC(this); + } else { + sub_0808B42C(this); + } +} + +void sub_0808B2CC(BollardEntity* this) { + if (super->type2 == 0) { + if (CheckFlags(this->flags) == 0) { + return; + } + } else if (CheckFlags(this->flags) != 0) { + return; + } + super->action = 2; + InitializeAnimation(super, 3); + SetTile(this->tileIndex, this->tile, super->collisionLayer); + EnqueueSFX(SFX_1A5); +} + +void sub_0808B324(BollardEntity* this) { + GetNextFrame(super); + if (super->frame & 0x80) { + sub_0808B42C(this); + } +} + +void sub_0808B344(BollardEntity* this) { + if (super->type2 == 0) { + if (CheckFlags(this->flags) != 0) { + return; + } + } else if (CheckFlags(this->flags) == 0) { + return; + } + super->action = 4; + InitializeAnimation(super, 2); + sub_0808B3AC(this); + EnqueueSFX(SFX_1A5); +} + +void sub_0808B38C(BollardEntity* this) { + GetNextFrame(super); + if (super->frame & 0x80) { + sub_0808B41C(this); + } +} + +void sub_0808B3AC(BollardEntity* this) { + super->spritePriority.b0 = 4; + this->tile = COORD_TO_TILE(super); + this->tileIndex = GetTileIndex(this->tile, super->collisionLayer); + this->unk74 = sub_080002E0(this->tile, super->collisionLayer); + SetTile(0x400b, this->tile, super->collisionLayer); +} + +void sub_0808B41C(BollardEntity* this) { + super->action = 1; + InitializeAnimation(super, 0); +} + +void sub_0808B42C(BollardEntity* this) { + super->action = 3; + super->spritePriority.b0 = 7; + InitializeAnimation(super, 1); +} From a08c9d00256a9c11e1c2b41632915cab1adcc7a3 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 25 Feb 2022 16:52:56 +0200 Subject: [PATCH 4/5] Decompile gentariCurtain --- asm/object/gentariCurtains.s | 294 ---------------------------- data/const/object/gentariCurtains.s | 11 -- linker.ld | 4 +- src/object/gentariCurtains.c | 135 +++++++++++++ 4 files changed, 137 insertions(+), 307 deletions(-) delete mode 100644 asm/object/gentariCurtains.s delete mode 100644 data/const/object/gentariCurtains.s create mode 100644 src/object/gentariCurtains.c diff --git a/asm/object/gentariCurtains.s b/asm/object/gentariCurtains.s deleted file mode 100644 index 2af6d699..00000000 --- a/asm/object/gentariCurtains.s +++ /dev/null @@ -1,294 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start GentariCurtain -GentariCurtain: @ 0x08092038 - push {lr} - ldr r2, _0809204C @ =gUnk_0812260C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809204C: .4byte gUnk_0812260C - - thumb_func_start sub_08092050 -sub_08092050: @ 0x08092050 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0809207A - movs r0, #3 - strb r0, [r6, #0xc] - ldrh r0, [r6, #0x2e] - adds r0, #2 - strh r0, [r6, #0x2e] - adds r0, r6, #0 - bl sub_0809223C - adds r0, r6, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _08092148 -_0809207A: - ldrb r0, [r6, #0xd] - cmp r0, #0 - bne _08092138 - movs r1, #1 - strb r1, [r6, #0xd] - adds r0, r6, #0 - adds r0, #0x38 - strb r1, [r0] - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldrh r0, [r6, #0x2e] - adds r0, #2 - strh r0, [r6, #0x2e] - adds r0, r6, #0 - bl UpdateSpriteForCollisionLayer - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r3, _08092130 @ =gRoomControls - ldrh r0, [r3, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r4, #0x3f - ands r2, r4 - movs r1, #0x32 - ldrsh r0, [r6, r1] - ldrh r1, [r3, #8] - adds r1, #8 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r4 - lsls r0, r0, #6 - orrs r2, r0 - adds r5, r6, #0 - adds r5, #0x70 - strh r2, [r5] - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldrh r0, [r3, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - ands r2, r4 - movs r1, #0x32 - ldrsh r0, [r6, r1] - ldrh r1, [r3, #8] - subs r1, #8 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r4 - lsls r0, r0, #6 - orrs r2, r0 - adds r7, r6, #0 - adds r7, #0x72 - strh r2, [r7] - ldrh r0, [r5] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x74 - strh r0, [r1] - ldrh r0, [r7] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - ldr r4, _08092134 @ =0x00004022 - ldrh r1, [r5] - adds r0, r4, #0 - movs r2, #1 - bl SetTile - ldrh r1, [r7] - adds r0, r4, #0 - movs r2, #1 - bl SetTile - adds r0, r6, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _08092148 - .align 2, 0 -_08092130: .4byte gRoomControls -_08092134: .4byte 0x00004022 -_08092138: - movs r0, #1 - strb r0, [r6, #0xc] - adds r0, r6, #0 - bl sub_080921BC - adds r0, r6, #0 - bl sub_080921F0 -_08092148: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0809214C -sub_0809214C: @ 0x0809214C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _08092160 - movs r0, #2 - strb r0, [r4, #0xc] -_08092160: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08092164 -sub_08092164: @ 0x08092164 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080921B6 - movs r0, #3 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x74 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - movs r2, #1 - bl SetTile - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x72 - ldrh r1, [r1] - movs r2, #1 - bl SetTile - adds r0, r4, #0 - bl sub_08092214 - adds r0, r4, #0 - bl sub_0809223C - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate -_080921B6: - pop {r4, pc} - - thumb_func_start nullsub_118 -nullsub_118: @ 0x080921B8 - bx lr - .align 2, 0 - - thumb_func_start sub_080921BC -sub_080921BC: @ 0x080921BC - push {lr} - adds r2, r0, #0 - ldr r1, _080921DC @ =gUnk_030011E8 - ldr r0, _080921E0 @ =0x000029F8 - adds r3, r1, r0 -_080921C6: - ldrb r0, [r1, #8] - cmp r0, #6 - bne _080921E4 - ldrb r0, [r1, #9] - cmp r0, #0x6f - bne _080921E4 - ldrb r0, [r1, #0xa] - cmp r0, #2 - bne _080921E4 - str r1, [r2, #0x54] - b _080921EE - .align 2, 0 -_080921DC: .4byte gUnk_030011E8 -_080921E0: .4byte 0x000029F8 -_080921E4: - adds r1, #0x88 - cmp r1, r3 - blo _080921C6 - movs r0, #0 - str r0, [r2, #0x54] -_080921EE: - pop {pc} - - thumb_func_start sub_080921F0 -sub_080921F0: @ 0x080921F0 - push {lr} - ldr r2, [r0, #0x54] - cmp r2, #0 - beq _08092212 - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] - adds r3, r2, #0 - adds r3, #0x29 - ldrb r0, [r3] - movs r1, #7 - orrs r0, r1 - strb r0, [r3] - adds r0, r2, #0 - bl UpdateSpriteForCollisionLayer -_08092212: - pop {pc} - - thumb_func_start sub_08092214 -sub_08092214: @ 0x08092214 - push {lr} - ldr r2, [r0, #0x54] - cmp r2, #0 - beq _0809223A - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - subs r0, #0xa - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r3] - adds r0, r2, #0 - bl UpdateSpriteForCollisionLayer -_0809223A: - pop {pc} - - thumb_func_start sub_0809223C -sub_0809223C: @ 0x0809223C - push {lr} - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #2 - strb r1, [r2] - adds r3, r0, #0 - adds r3, #0x29 - ldrb r2, [r3] - subs r1, #0xa - ands r1, r2 - movs r2, #3 - orrs r1, r2 - strb r1, [r3] - bl UpdateSpriteForCollisionLayer - pop {pc} diff --git a/data/const/object/gentariCurtains.s b/data/const/object/gentariCurtains.s deleted file mode 100644 index 2feb1184..00000000 --- a/data/const/object/gentariCurtains.s +++ /dev/null @@ -1,11 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812260C:: @ 0812260C - .4byte sub_08092050 - .4byte sub_0809214C - .4byte sub_08092164 - .4byte nullsub_118 diff --git a/linker.ld b/linker.ld index 247eac9e..3686cc5e 100644 --- a/linker.ld +++ b/linker.ld @@ -734,7 +734,7 @@ SECTIONS { asm/object/minecart.o(.text); src/object/thoughtBubble.o(.text); src/object/hiddenLadderDown.o(.text); - asm/object/gentariCurtains.o(.text); + src/object/gentariCurtains.o(.text); src/object/lavaPlatform.o(.text); asm/object/paper.o(.text); asm/object/object5B.o(.text); @@ -1475,7 +1475,7 @@ SECTIONS { data/const/object/thoughtBubble.o(.rodata); data/animations/object/thoughtBubble.o(.rodata); data/const/object/hiddenLadderDown.o(.rodata); - data/const/object/gentariCurtains.o(.rodata); + src/object/gentariCurtains.o(.rodata); data/animations/object/gentariCurtains.o(.rodata); src/object/lavaPlatform.o(.rodata); data/animations/object/lavaPlatform.o(.rodata); diff --git a/src/object/gentariCurtains.c b/src/object/gentariCurtains.c new file mode 100644 index 00000000..e3ff7b3a --- /dev/null +++ b/src/object/gentariCurtains.c @@ -0,0 +1,135 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "room.h" +#include "asm.h" +#include "flags.h" +#include "functions.h" +#include "object.h" + +typedef struct { + Entity base; + u8 filler[0x8]; + u16 tile; + u16 tile2; + u16 tileIndex; + u16 tileIndex2; + u8 filler2[0xe]; + u16 flags; +} GentariCurtainEntity; + +void sub_08092050(GentariCurtainEntity* this); +void sub_0809214C(GentariCurtainEntity* this); +void sub_08092164(GentariCurtainEntity* this); +void nullsub_118(GentariCurtainEntity* this); +void sub_0809223C(GentariCurtainEntity* this); +void sub_080921BC(GentariCurtainEntity* this); +void sub_080921F0(GentariCurtainEntity* this); +void sub_08092214(GentariCurtainEntity* this); + +extern Entity gUnk_030011E8[7]; +extern Entity gUnk_03003BE0; + +void GentariCurtain(Entity* this) { + static void (*const actionFuncs[])(GentariCurtainEntity*) = { + sub_08092050, + sub_0809214C, + sub_08092164, + nullsub_118, + }; + + actionFuncs[this->action]((GentariCurtainEntity*)this); +} + +void sub_08092050(GentariCurtainEntity* this) { + if (CheckFlags(this->flags)) { + super->action = 3; + super->x.HALF.HI += 2; + sub_0809223C(this); + InitAnimationForceUpdate(super, 1); + } else { + if (super->subAction == 0) { + super->subAction = 1; + super->collisionLayer = 1; + super->spritePriority.b0 = 6; + super->x.HALF.HI += 2; + UpdateSpriteForCollisionLayer(super); + this->tile = COORD_TO_TILE_OFFSET(super, 0, 8); + this->tile2 = COORD_TO_TILE_OFFSET(super, 0, -8); + this->tileIndex = GetTileIndex(this->tile, 1); + this->tileIndex2 = GetTileIndex(this->tile2, 1); + SetTile(0x4022, this->tile, 1); + SetTile(0x4022, this->tile2, 1); + InitAnimationForceUpdate(super, 0); + } else { + super->action = 1; + sub_080921BC(this); + sub_080921F0(this); + } + } +} + +void sub_0809214C(GentariCurtainEntity* this) { + if (CheckFlags(this->flags)) { + super->action = 2; + } +} + +void sub_08092164(GentariCurtainEntity* this) { + UpdateAnimationSingleFrame(super); + if ((super->frame & 0x80) != 0) { + super->action = 3; + SetTile(this->tileIndex, this->tile, 1); + SetTile(this->tileIndex2, this->tile2, 1); + sub_08092214(this); + sub_0809223C(this); + InitAnimationForceUpdate(super, 1); + } +} + +void nullsub_118(GentariCurtainEntity* this) { +} + +void sub_080921BC(GentariCurtainEntity* this) { + GenericEntity* pEVar1; + GenericEntity* end; + + pEVar1 = (GenericEntity*)gUnk_030011E8; + end = pEVar1 + 0x4f; + + do { + if (pEVar1->base.kind == OBJECT) { + if (pEVar1->base.id == MINISH_SIZED_ARCHWAY) { + if (pEVar1->base.type == 2) { + super->child = (Entity*)pEVar1; + return; + } + } + } + pEVar1++; + } while (pEVar1 < end); + super->child = NULL; +} + +void sub_080921F0(GentariCurtainEntity* this) { + Entity* pEVar1 = super->child; + if (pEVar1) { + pEVar1->collisionLayer = 1; + pEVar1->spritePriority.b0 = 7; + UpdateSpriteForCollisionLayer(pEVar1); + } +} + +void sub_08092214(GentariCurtainEntity* this) { + Entity* pEVar1 = super->child; + if (pEVar1) { + pEVar1->collisionLayer = 2; + pEVar1->spritePriority.b0 = 4; + UpdateSpriteForCollisionLayer(pEVar1); + } +} + +void sub_0809223C(GentariCurtainEntity* this) { + super->collisionLayer = 2; + super->spritePriority.b0 = 3; + UpdateSpriteForCollisionLayer(super); +} From 4341aba391f69531795c0f2bf5878506a765718a Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 25 Feb 2022 19:05:19 +0200 Subject: [PATCH 5/5] Decompile ladderUp --- asm/object/ladderUp.s | 534 ------------------------------------------ linker.ld | 2 +- src/object/ladderUp.c | 78 ++++++ 3 files changed, 79 insertions(+), 535 deletions(-) delete mode 100644 asm/object/ladderUp.s create mode 100644 src/object/ladderUp.c diff --git a/asm/object/ladderUp.s b/asm/object/ladderUp.s deleted file mode 100644 index cd53a0b7..00000000 --- a/asm/object/ladderUp.s +++ /dev/null @@ -1,534 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LadderUp -LadderUp: @ 0x0808DB54 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0xc] - cmp r0, #1 - beq _0808D4D8 - cmp r0, #1 - bgt _0808D518 - cmp r0, #0 - bne _0808D518 - ldrb r0, [r7, #0xe] - movs r1, #2 - cmp r0, #0 - beq _0808D46C - movs r1, #1 -_0808D46C: - strb r1, [r7, #0xc] - adds r1, r7, #0 - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #8 - strb r0, [r1] - adds r0, r7, #0 - movs r1, #0xa - bl InitializeAnimation - ldrb r0, [r7, #0xc] - cmp r0, #1 - bne _0808D48A - ldr r0, _0808D4CC @ =0x0000FF80 - strh r0, [r7, #0x36] -_0808D48A: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808D492 - b _0808D642 -_0808D492: - ldrh r1, [r7, #0x32] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - adds r0, #0xc - strh r0, [r7, #0x32] - ldr r0, _0808D4D0 @ =0x00004023 - movs r2, #0x2e - ldrsh r1, [r7, r2] - ldr r3, _0808D4D4 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r5, #0x32 - ldrsh r2, [r7, r5] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r7, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - b _0808D642 - .align 2, 0 -_0808D4CC: .4byte 0x0000FF80 -_0808D4D0: .4byte 0x00004023 -_0808D4D4: .4byte gRoomControls -_0808D4D8: - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r7, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808D4E8 - b _0808D642 -_0808D4E8: - adds r0, r7, #0 - movs r1, #0x46 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0808D4FE - ldrh r0, [r1, #0x32] - adds r0, #8 - strh r0, [r1, #0x32] -_0808D4FE: - movs r0, #0x1e - movs r1, #0 - bl InitScreenShake - ldr r0, _0808D514 @ =0x0000010B - bl SoundReq - movs r0, #2 - strb r0, [r7, #0xc] - b _0808D642 - .align 2, 0 -_0808D514: .4byte 0x0000010B -_0808D518: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808D520 - b _0808D642 -_0808D520: - ldr r0, _0808D598 @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r0, r2] - movs r3, #0x32 - ldrsh r0, [r7, r3] - cmp r1, r0 - bge _0808D5AC - ldr r0, _0808D59C @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _0808D538 - b _0808D642 -_0808D538: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r1, _0808D5A0 @ =0x00004017 - cmp r0, r1 - beq _0808D546 - b _0808D642 -_0808D546: - ldr r0, _0808D5A4 @ =0x00004023 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r4, _0808D5A8 @ =gRoomControls - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r5, #0x3f - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r4, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r5 - lsls r2, r2, #6 - orrs r1, r2 - adds r6, r7, #0 - adds r6, #0x38 - ldrb r2, [r6] - bl SetTile - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r5 - movs r2, #0x32 - ldrsh r1, [r7, r2] - ldrh r2, [r4, #8] - adds r2, #0x10 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r6] - bl sub_0807BA8C - b _0808D642 - .align 2, 0 -_0808D598: .4byte gPlayerEntity -_0808D59C: .4byte gPlayerState -_0808D5A0: .4byte 0x00004017 -_0808D5A4: .4byte 0x00004023 -_0808D5A8: .4byte gRoomControls -_0808D5AC: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r3, _0808D614 @ =0x00004017 - mov r8, r3 - cmp r0, r8 - beq _0808D642 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r5, _0808D618 @ =gRoomControls - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r4, r7, #0 - adds r4, #0x38 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - ldrb r0, [r7, #0xa] - cmp r0, #0 - bne _0808D61C - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - adds r2, #0x10 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - b _0808D642 - .align 2, 0 -_0808D614: .4byte 0x00004017 -_0808D618: .4byte gRoomControls -_0808D61C: - ldr r0, _0808D648 @ =0x00004014 - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r5, #8] - adds r3, #0x10 - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4] - bl SetTile -_0808D642: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808D648: .4byte 0x00004014 - - -.else - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0xc] - cmp r0, #1 - beq _0808DBE8 - cmp r0, #1 - bgt _0808DB6C - cmp r0, #0 - beq _0808DB72 - b _0808DC46 -_0808DB6C: - cmp r0, #2 - beq _0808DC2C - b _0808DC46 -_0808DB72: - ldrb r0, [r7, #0xe] - movs r1, #3 - cmp r0, #0 - beq _0808DB7C - movs r1, #1 -_0808DB7C: - strb r1, [r7, #0xc] - adds r1, r7, #0 - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #8 - strb r0, [r1] - adds r0, r7, #0 - movs r1, #0xa - bl InitializeAnimation - ldrb r0, [r7, #0xc] - cmp r0, #1 - bne _0808DB9A - ldr r0, _0808DBDC @ =0x0000FF80 - strh r0, [r7, #0x36] -_0808DB9A: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808DBA2 - b _0808DD72 -_0808DBA2: - ldrh r1, [r7, #0x32] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - adds r0, #0xc - strh r0, [r7, #0x32] - ldr r0, _0808DBE0 @ =0x00004023 - movs r2, #0x2e - ldrsh r1, [r7, r2] - ldr r3, _0808DBE4 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r5, #0x32 - ldrsh r2, [r7, r5] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r7, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - b _0808DD72 - .align 2, 0 -_0808DBDC: .4byte 0x0000FF80 -_0808DBE0: .4byte 0x00004023 -_0808DBE4: .4byte gRoomControls -_0808DBE8: - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r7, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808DBF8 - b _0808DD72 -_0808DBF8: - adds r0, r7, #0 - movs r1, #0x46 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0808DC0E - ldrh r0, [r1, #0x32] - adds r0, #8 - strh r0, [r1, #0x32] -_0808DC0E: - movs r0, #0x1e - movs r1, #0 - bl InitScreenShake - ldr r0, _0808DC28 @ =0x0000010B - bl SoundReq - movs r0, #2 - strb r0, [r7, #0xc] - movs r0, #0x3c - strb r0, [r7, #0xe] - b _0808DD72 - .align 2, 0 -_0808DC28: .4byte 0x0000010B -_0808DC2C: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _0808DC3A - b _0808DD72 -_0808DC3A: - movs r0, #3 - strb r0, [r7, #0xc] - movs r0, #0x73 - bl SoundReq - b _0808DD72 -_0808DC46: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808DC4E - b _0808DD72 -_0808DC4E: - ldr r0, _0808DCC8 @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r0, r2] - movs r3, #0x32 - ldrsh r0, [r7, r3] - cmp r1, r0 - bge _0808DCDC - ldr r0, _0808DCCC @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _0808DC66 - b _0808DD72 -_0808DC66: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r1, _0808DCD0 @ =0x00004017 - cmp r0, r1 - beq _0808DC74 - b _0808DD72 -_0808DC74: - ldr r0, _0808DCD4 @ =0x00004023 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r4, _0808DCD8 @ =gRoomControls - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r5, #0x3f - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r4, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r5 - lsls r2, r2, #6 - orrs r1, r2 - adds r6, r7, #0 - adds r6, #0x38 - ldrb r2, [r6] - bl SetTile - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r5 - movs r2, #0x32 - ldrsh r1, [r7, r2] - ldrh r2, [r4, #8] - adds r2, #0x10 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r6] - bl sub_0807BA8C - b _0808DD72 - .align 2, 0 -_0808DCC8: .4byte gPlayerEntity -_0808DCCC: .4byte gPlayerState -_0808DCD0: .4byte 0x00004017 -_0808DCD4: .4byte 0x00004023 -_0808DCD8: .4byte gRoomControls -_0808DCDC: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r3, _0808DD44 @ =0x00004017 - mov r8, r3 - cmp r0, r8 - beq _0808DD72 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r5, _0808DD48 @ =gRoomControls - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r4, r7, #0 - adds r4, #0x38 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - ldrb r0, [r7, #0xa] - cmp r0, #0 - bne _0808DD4C - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - adds r2, #0x10 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - b _0808DD72 - .align 2, 0 -_0808DD44: .4byte 0x00004017 -_0808DD48: .4byte gRoomControls -_0808DD4C: - ldr r0, _0808DD78 @ =0x00004014 - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r5, #8] - adds r3, #0x10 - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4] - bl SetTile -_0808DD72: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808DD78: .4byte 0x00004014 -.endif diff --git a/linker.ld b/linker.ld index 3686cc5e..2a41a4dd 100644 --- a/linker.ld +++ b/linker.ld @@ -710,7 +710,7 @@ SECTIONS { src/object/object3E.o(.text); src/object/giantLeaf.o(.text); src/object/fairy.o(.text); - asm/object/ladderUp.o(.text); + src/object/ladderUp.o(.text); asm/object/object42.o(.text); asm/object/object43.o(.text); asm/object/object44.o(.text); diff --git a/src/object/ladderUp.c b/src/object/ladderUp.c new file mode 100644 index 00000000..7cdd361b --- /dev/null +++ b/src/object/ladderUp.c @@ -0,0 +1,78 @@ +#include "entity.h" +#include "room.h" +#include "player.h" +#include "asm.h" +#include "sound.h" +#include "functions.h" +#include "effects.h" + +void LadderUp(Entity* this) { + Entity* fxEnt; + u32 uVar4; + + switch (this->action) { + case 0: + if (this->actionDelay) { + uVar4 = 1; + } else { +#ifndef EU + uVar4 = 3; +#else + uVar4 = 2; +#endif + } + this->action = uVar4; + this->spriteOffsetY += 8; + InitializeAnimation(this, 10); + if (this->action == 1) { + this->z.HALF.HI = 0xff80; + } + if (this->type2) { + return; + } + this->y.HALF.HI = (this->y.HALF.HI & 0xfff0) + 0xc; + SetTile(0x4023, COORD_TO_TILE(this), this->collisionLayer); + break; + case 1: + if (GravityUpdate(this, 0x1000) == 0) { + fxEnt = CreateFx(this, FX_GIANT_EXPLOSION, 0x40); + if (fxEnt) { + fxEnt->y.HALF.HI += 8; + } + InitScreenShake(0x1e, 0); + SoundReq(SFX_10B); + this->action = 2; +#ifndef EU + this->actionDelay = 0x3c; +#endif + } + break; + case 2: +#ifndef EU + if (--this->actionDelay) { + return; + } + this->action = 3; + SoundReq(SFX_SECRET_BIG); + break; +#endif + default: + if (this->type2 == 0) { + if (gPlayerEntity.y.HALF.HI < this->y.HALF.HI) { + if (gPlayerState.floor_type != 0x1e && (GetTileTypeByEntity(this) == 0x4017)) { + SetTile(0x4023, COORD_TO_TILE(this), this->collisionLayer); + sub_0807BA8C(COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer); + } + } else { + if (GetTileTypeByEntity(this) != 0x4017) { + SetTile(0x4017, COORD_TO_TILE(this), this->collisionLayer); + if (this->type == 0) { + SetTile(0x4017, COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer); + } else { + SetTile(0x4014, COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer); + } + } + } + } + } +}