diff --git a/asm/minishSizedEntrance.s b/asm/minishSizedEntrance.s deleted file mode 100644 index aa4edc0d..00000000 --- a/asm/minishSizedEntrance.s +++ /dev/null @@ -1,62 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08090F00 -sub_08090F00: @ 0x08090F00 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - cmp r1, #1 - bne _08090F1C - ldr r0, [r4, #0x50] - ldrb r2, [r4, #0xf] - lsls r1, r2 - ldr r0, [r0, #0x20] - ands r0, r1 - cmp r0, #0 - bne _08090F1C - bl DeleteThisEntity -_08090F1C: - ldr r6, _08090F64 @ =gPlayerState - ldr r0, [r6, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08090F62 - ldr r5, _08090F68 @ =gPlayerEntity - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #4 - movs r3, #4 - bl sub_080041A0 - cmp r0, #0 - beq _08090F62 - movs r1, #0x36 - ldrsh r0, [r5, r1] - cmp r0, #0 - bne _08090F62 - adds r2, r6, #0 - adds r2, #0x90 - ldr r1, _08090F6C @ =gUnk_0812225C - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r2] - ldrh r0, [r0] - ands r0, r1 - cmp r0, #0 - beq _08090F62 - ldrb r0, [r4, #0xe] - bl GetCurrentRoomProperty - bl DoExitTransition -_08090F62: - pop {r4, r5, r6, pc} - .align 2, 0 -_08090F64: .4byte gPlayerState -_08090F68: .4byte gPlayerEntity -_08090F6C: .4byte gUnk_0812225C diff --git a/linker.ld b/linker.ld index ba362d8e..44ee3fdf 100644 --- a/linker.ld +++ b/linker.ld @@ -755,7 +755,6 @@ SECTIONS { asm/pushableFurniture.o(.text); asm/furniture.o(.text); src/object/minishSizedEntrance.o(.text); - asm/minishSizedEntrance.o(.text); src/object/archway.o(.text); asm/giantRock.o(.text); asm/object51.o(.text); diff --git a/src/object/minishSizedEntrance.c b/src/object/minishSizedEntrance.c index 2f08f996..03467f41 100644 --- a/src/object/minishSizedEntrance.c +++ b/src/object/minishSizedEntrance.c @@ -1,9 +1,13 @@ #include "global.h" #include "entity.h" #include "game.h" +#include "player.h" #include "functions.h" +extern void DoExitTransition(void*); + extern void (*const gUnk_08122254[])(Entity*); +extern u16 gUnk_0812225C[]; void MinishSizedEntrance(Entity* this) { gUnk_08122254[this->action](this); @@ -20,3 +24,17 @@ void sub_08090EC0(Entity* this) { LoadFixedGFX(this, 0x184); } } + +void sub_08090F00(Entity* this) { + if (this->type == 1) { + Entity* parent = this->parent; + u32 mask = 1 << this->field_0xf; + if (!(parent->field_0x20 & mask)) { + DeleteThisEntity(); + } + } + if ((gPlayerState.flags.all & 0x80) && sub_080041A0(this, &gPlayerEntity, 4, 4) && + (gPlayerEntity.height.HALF.HI == 0) && (((u16)gPlayerState.field_0x90.HALF.LO) & gUnk_0812225C[this->type2])) { + DoExitTransition((Entity*)GetCurrentRoomProperty(this->actionDelay)); + } +}