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) { +}