Merge remote-tracking branch 'upstream/master' into moreply

This commit is contained in:
theo3 2021-05-01 13:07:54 -07:00
commit 08fbc7c328
4 changed files with 330 additions and 759 deletions

View File

@ -1,726 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start LockedDoor
LockedDoor: @ 0x08083320
push {lr}
ldr r2, _08083334 @ =gUnk_0811F65C
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08083334: .4byte gUnk_0811F65C
thumb_func_start sub_08083338
sub_08083338: @ 0x08083338
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
adds r2, r4, #0
adds r2, #0x84
ldrh r1, [r2]
ldr r0, _08083400 @ =0x0000FFFF
cmp r1, r0
beq _08083356
adds r0, r1, #0
bl CheckFlags
cmp r0, #0
beq _08083356
bl DeleteThisEntity
_08083356:
adds r0, r4, #0
bl sub_080837B0
cmp r0, #0
bne _08083362
b _080834B2
_08083362:
ldrb r2, [r4, #0xa]
lsrs r0, r2, #2
movs r1, #3
ands r0, r1
strb r0, [r4, #0xb]
movs r7, #3
adds r0, r7, #0
ands r0, r2
strb r0, [r4, #0x1e]
movs r0, #0xc0
lsls r0, r0, #2
strh r0, [r4, #0x24]
ldrh r1, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x70
strh r1, [r0]
ldrh r0, [r4, #0x32]
adds r1, r4, #0
adds r1, #0x72
strh r0, [r1]
ldrb r1, [r4, #0xa]
adds r0, r7, #0
ands r0, r1
adds r6, r4, #0
adds r6, #0x7e
strb r0, [r6]
ldr r0, _08083404 @ =gUnk_080FD170
str r0, [r4, #0x48]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #5
orrs r0, r1
strb r0, [r2]
ldrb r1, [r4, #0xa]
movs r0, #0xf
ands r0, r1
adds r1, r4, #0
adds r1, #0x5a
strb r0, [r1]
movs r0, #0x2e
ldrsh r1, [r4, r0]
ldr r2, _08083408 @ =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, #0x76
strh r1, [r5]
ldrh r0, [r5]
adds r1, r4, #0
adds r1, #0x38
ldrb r1, [r1]
bl sub_080001DA
adds r1, r4, #0
adds r1, #0x74
strh r0, [r1]
ldrb r0, [r4, #0xb]
cmp r0, #1
beq _08083438
cmp r0, #1
bgt _0808340C
cmp r0, #0
beq _08083412
b _080834AE
.align 2, 0
_08083400: .4byte 0x0000FFFF
_08083404: .4byte gUnk_080FD170
_08083408: .4byte gRoomControls
_0808340C:
cmp r0, #2
beq _08083456
b _080834AE
_08083412:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
bne _0808342E
ldrb r1, [r4, #0xa]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _0808344E
strb r7, [r4, #0xc]
b _080834B2
_0808342E:
ldrb r1, [r4, #0xa]
movs r0, #0xef
ands r0, r1
strb r0, [r4, #0xa]
b _08083446
_08083438:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
bne _0808344E
_08083446:
adds r0, r4, #0
bl sub_08083638
b _080834B2
_0808344E:
adds r0, r4, #0
bl sub_080836A0
b _080834B2
_08083456:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
bne _080834A8
ldrb r0, [r4, #0x1e]
movs r1, #4
orrs r0, r1
strb r0, [r4, #0x1e]
ldrb r1, [r6]
ldrh r2, [r5]
adds r0, r4, #0
bl sub_080836DC
bl CheckIsDungeon
cmp r0, #0
bne _08083484
movs r0, #5
strb r0, [r4, #0xc]
b _080834B2
_08083484:
movs r0, #8
strb r0, [r4, #0xc]
adds r0, r4, #0
bl sub_080787CC
ldr r1, _080834A4 @ =gUnk_0811F740
ldrb r0, [r6]
adds r0, r0, r1
ldrb r2, [r0]
adds r0, r4, #0
movs r1, #0
movs r3, #0
bl sub_08078850
b _080834B2
.align 2, 0
_080834A4: .4byte gUnk_0811F740
_080834A8:
bl DeleteThisEntity
b _080834B2
_080834AE:
bl DeleteThisEntity
_080834B2:
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_080834B4
sub_080834B4: @ 0x080834B4
push {lr}
adds r2, r0, #0
ldrb r0, [r2, #0xe]
subs r0, #1
strb r0, [r2, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080834E6
movs r0, #2
strb r0, [r2, #0xc]
movs r0, #7
strb r0, [r2, #0xe]
adds r0, r2, #0
adds r0, #0x74
ldrh r0, [r0]
adds r1, r2, #0
adds r1, #0x76
ldrh r1, [r1]
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
ldr r0, _080834E8 @ =0x0000010B
bl EnqueueSFX
_080834E6:
pop {pc}
.align 2, 0
_080834E8: .4byte 0x0000010B
thumb_func_start sub_080834EC
sub_080834EC: @ 0x080834EC
push {r4, lr}
adds r4, r0, #0
bl sub_0806F69C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _08083516
ldrb r1, [r4, #0xa]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _08083512
adds r0, r4, #0
bl sub_08083638
b _08083516
_08083512:
bl DeleteThisEntity
_08083516:
pop {r4, pc}
thumb_func_start sub_08083518
sub_08083518: @ 0x08083518
push {r4, r5, lr}
adds r4, r0, #0
adds r5, r4, #0
adds r5, #0x7e
ldrb r1, [r5]
bl sub_08083734
cmp r0, #0
beq _0808353C
movs r0, #4
strb r0, [r4, #0xc]
ldrb r1, [r5]
adds r0, r4, #0
adds r0, #0x76
ldrh r2, [r0]
adds r0, r4, #0
bl sub_080836DC
_0808353C:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_08083540
sub_08083540: @ 0x08083540
push {r4, lr}
adds r4, r0, #0
bl sub_0806F69C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808358C
ldrb r1, [r4, #0xa]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _08083566
movs r0, #0xef
ands r0, r1
strb r0, [r4, #0xa]
b _0808356E
_08083566:
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _08083576
_0808356E:
adds r0, r4, #0
bl sub_080836A0
b _0808357A
_08083576:
movs r0, #5
strb r0, [r4, #0xc]
_0808357A:
adds r0, r4, #0
adds r0, #0x7e
ldrb r1, [r0]
adds r0, r4, #0
bl sub_08083814
ldr r0, _08083590 @ =0x0000010B
bl EnqueueSFX
_0808358C:
pop {r4, pc}
.align 2, 0
_08083590: .4byte 0x0000010B
thumb_func_start nullsub_513
nullsub_513: @ 0x08083594
bx lr
.align 2, 0
thumb_func_start sub_08083598
sub_08083598: @ 0x08083598
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xb]
cmp r0, #0
bne _080835B2
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _080835C6
b _080835C0
_080835B2:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
bne _080835C6
_080835C0:
adds r0, r4, #0
bl sub_08083658
_080835C6:
pop {r4, pc}
thumb_func_start sub_080835C8
sub_080835C8: @ 0x080835C8
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xb]
cmp r0, #0
bne _080835E2
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
bne _080835F4
b _080835F0
_080835E2:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _080835F4
_080835F0:
movs r0, #3
strb r0, [r4, #0xc]
_080835F4:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080835F8
sub_080835F8: @ 0x080835F8
push {r4, lr}
adds r4, r0, #0
adds r0, #0x39
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _08083616
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _08083636
_08083616:
movs r0, #1
strb r0, [r4, #0xc]
movs r0, #0x14
strb r0, [r4, #0xe]
adds r0, r4, #0
bl sub_08083658
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl SetFlag
movs r0, #1
rsbs r0, r0, #0
bl sub_080526F8
_08083636:
pop {r4, pc}
thumb_func_start sub_08083638
sub_08083638: @ 0x08083638
adds r2, r0, #0
movs r0, #7
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x18]
subs r0, #0xb
ands r0, r1
strb r0, [r2, #0x18]
adds r0, r2, #0
adds r0, #0x70
ldrh r0, [r0]
strh r0, [r2, #0x2e]
adds r0, r2, #0
adds r0, #0x72
ldrh r0, [r0]
strh r0, [r2, #0x32]
bx lr
thumb_func_start sub_08083658
sub_08083658: @ 0x08083658
push {lr}
movs r1, #1
strb r1, [r0, #0xc]
movs r1, #0x14
strb r1, [r0, #0xe]
adds r2, r0, #0
adds r2, #0x7e
ldrb r1, [r2]
lsls r1, r1, #3
strb r1, [r0, #0x15]
ldrb r2, [r2]
lsls r2, r2, #1
ldr r1, _08083698 @ =gUnk_0811F680
adds r2, r2, r1
movs r1, #0
ldrsb r1, [r2, r1]
ldrh r3, [r0, #0x2e]
adds r1, r1, r3
strh r1, [r0, #0x2e]
movs r1, #1
ldrsb r1, [r2, r1]
ldrh r2, [r0, #0x32]
adds r1, r1, r2
strh r1, [r0, #0x32]
movs r1, #0x3c
bl sub_0805E4E0
ldr r0, _0808369C @ =0x0000010B
bl SoundReq
pop {pc}
.align 2, 0
_08083698: .4byte gUnk_0811F680
_0808369C: .4byte 0x0000010B
thumb_func_start sub_080836A0
sub_080836A0: @ 0x080836A0
push {lr}
adds r2, r0, #0
movs r0, #6
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x18]
subs r0, #0xa
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r2, #0x18]
adds r0, r2, #0
adds r0, #0x70
ldrh r0, [r0]
strh r0, [r2, #0x2e]
adds r0, r2, #0
adds r0, #0x72
ldrh r0, [r0]
strh r0, [r2, #0x32]
ldr r0, _080836D8 @ =0x00004022
adds r1, r2, #0
adds r1, #0x76
ldrh r1, [r1]
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
pop {pc}
.align 2, 0
_080836D8: .4byte 0x00004022
thumb_func_start sub_080836DC
sub_080836DC: @ 0x080836DC
push {r4, r5, lr}
adds r5, r0, #0
adds r4, r1, #0
adds r1, r2, #0
ldr r0, _0808372C @ =0x00004022
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
movs r0, #7
strb r0, [r5, #0xe]
ldrb r1, [r5, #0x18]
subs r0, #0xb
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r5, #0x18]
lsls r0, r4, #3
movs r1, #0x10
eors r0, r1
strb r0, [r5, #0x15]
lsls r4, r4, #1
ldr r0, _08083730 @ =gUnk_0811F688
adds r4, r4, r0
ldrb r0, [r5, #0xb]
cmp r0, #2
beq _08083728
movs r0, #0
ldrsb r0, [r4, r0]
ldrh r1, [r5, #0x2e]
adds r0, r0, r1
strh r0, [r5, #0x2e]
movs r0, #1
ldrsb r0, [r4, r0]
ldrh r1, [r5, #0x32]
adds r0, r0, r1
strh r0, [r5, #0x32]
_08083728:
pop {r4, r5, pc}
.align 2, 0
_0808372C: .4byte 0x00004022
_08083730: .4byte gUnk_0811F688
thumb_func_start sub_08083734
sub_08083734: @ 0x08083734
push {lr}
adds r2, r0, #0
cmp r1, #1
beq _08083760
cmp r1, #1
blo _0808374A
cmp r1, #2
beq _08083774
cmp r1, #3
beq _08083790
b _080837AC
_0808374A:
adds r0, r2, #0
adds r0, #0x72
ldrh r1, [r0]
ldr r0, _0808375C @ =gPlayerEntity
movs r2, #0x32
ldrsh r0, [r0, r2]
subs r0, #0xd
b _0808379E
.align 2, 0
_0808375C: .4byte gPlayerEntity
_08083760:
ldr r0, _08083770 @ =gPlayerEntity
movs r1, #0x2e
ldrsh r0, [r0, r1]
adds r0, #0xb
adds r1, r2, #0
adds r1, #0x70
b _08083780
.align 2, 0
_08083770: .4byte gPlayerEntity
_08083774:
ldr r0, _0808378C @ =gPlayerEntity
movs r1, #0x32
ldrsh r0, [r0, r1]
adds r0, #8
adds r1, r2, #0
adds r1, #0x72
_08083780:
ldrh r1, [r1]
subs r0, r0, r1
cmp r0, #0
bge _080837AC
movs r0, #1
b _080837AE
.align 2, 0
_0808378C: .4byte gPlayerEntity
_08083790:
adds r0, r2, #0
adds r0, #0x70
ldrh r1, [r0]
ldr r0, _080837A8 @ =gPlayerEntity
movs r2, #0x2e
ldrsh r0, [r0, r2]
subs r0, #0xa
_0808379E:
subs r1, r1, r0
cmp r1, #0
bge _080837AC
movs r0, #1
b _080837AE
.align 2, 0
_080837A8: .4byte gPlayerEntity
_080837AC:
movs r0, #0
_080837AE:
pop {pc}
thumb_func_start sub_080837B0
sub_080837B0: @ 0x080837B0
push {r4, r5, lr}
adds r4, r0, #0
ldr r0, _080837C8 @ =gRoomControls
ldrb r2, [r0, #4]
cmp r2, #0x3f
bhi _080837DC
cmp r2, #0x25
beq _080837CC
cmp r2, #0x35
beq _080837D4
movs r5, #0xa
b _080837E8
.align 2, 0
_080837C8: .4byte gRoomControls
_080837CC:
ldr r5, _080837D0 @ =0x000001E7
b _080837E8
.align 2, 0
_080837D0: .4byte 0x000001E7
_080837D4:
ldr r5, _080837D8 @ =0x000001C3
b _080837E8
.align 2, 0
_080837D8: .4byte 0x000001C3
_080837DC:
ldr r1, _080837F8 @ =gUnk_0811F690
adds r0, r2, #0
subs r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
ldrh r5, [r0]
_080837E8:
cmp r2, #0x68
bne _080837FC
adds r0, r4, #0
movs r1, #0
bl sub_0801D2B4
b _08083808
.align 2, 0
_080837F8: .4byte gUnk_0811F690
_080837FC:
cmp r2, #0x88
bne _08083808
adds r0, r4, #0
movs r1, #1
bl sub_0801D2B4
_08083808:
adds r0, r4, #0
adds r1, r5, #0
bl LoadFixedGFX
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_08083814
sub_08083814: @ 0x08083814
push {r4, r5, lr}
adds r5, r0, #0
lsls r1, r1, #2
ldr r0, _08083868 @ =gUnk_0811F730
adds r4, r1, r0
adds r0, r5, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r2, r0, #0
cmp r2, #0
beq _08083842
movs r0, #0
ldrsb r0, [r4, r0]
ldrh r1, [r2, #0x2e]
adds r0, r0, r1
strh r0, [r2, #0x2e]
movs r0, #1
ldrsb r0, [r4, r0]
ldrh r1, [r2, #0x32]
adds r0, r0, r1
strh r0, [r2, #0x32]
_08083842:
adds r0, r5, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r2, r0, #0
cmp r2, #0
beq _08083866
movs r0, #2
ldrsb r0, [r4, r0]
ldrh r1, [r2, #0x2e]
adds r0, r0, r1
strh r0, [r2, #0x2e]
movs r0, #3
ldrsb r0, [r4, r0]
ldrh r1, [r2, #0x32]
adds r0, r0, r1
strh r0, [r2, #0x32]
_08083866:
pop {r4, r5, pc}
.align 2, 0
_08083868: .4byte gUnk_0811F730

View File

@ -1,31 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_0811F65C:: @ 0811F65C
.4byte sub_08083338
.4byte sub_080834B4
.4byte sub_080834EC
.4byte sub_08083518
.4byte sub_08083540
.4byte nullsub_513
.4byte sub_08083598
.4byte sub_080835C8
.4byte sub_080835F8
gUnk_0811F680:: @ 0811F680
.incbin "baserom.gba", 0x11F680, 0x0000008
gUnk_0811F688:: @ 0811F688
.incbin "baserom.gba", 0x11F688, 0x0000008
gUnk_0811F690:: @ 0811F690
.incbin "baserom.gba", 0x11F690, 0x00000A0
gUnk_0811F730:: @ 0811F730
.incbin "baserom.gba", 0x11F730, 0x0000010
gUnk_0811F740:: @ 0811F740
.incbin "baserom.gba", 0x11F740, 0x0000004

View File

@ -708,7 +708,7 @@ SECTIONS {
src/object/pot.o(.text);
asm/object6.o(.text);
asm/blockPushed.o(.text);
asm/lockedDoor.o(.text);
src/object/lockedDoor.o(.text);
asm/object9.o(.text);
src/object/objectA.o(.text);
asm/objectB.o(.text);
@ -1413,7 +1413,7 @@ SECTIONS {
data/const/object/object6.o(.rodata);
data/animations/object/object6.o(.rodata);
data/const/object/blockPushed.o(.rodata);
data/const/object/lockedDoor.o(.rodata);
src/object/lockedDoor.o(.rodata);
data/const/object/object9.o(.rodata);
data/animations/object/object9.o(.rodata);
data/const/object/objectB.o(.rodata);

328
src/object/lockedDoor.c Normal file
View File

@ -0,0 +1,328 @@
#include "global.h"
#include "entity.h"
#include "flags.h"
#include "game.h"
#include "audio.h"
#include "functions.h"
void sub_08083338(Entity*);
void sub_080834B4(Entity*);
void sub_080834EC(Entity*);
void sub_08083518(Entity*);
void sub_08083540(Entity*);
void nullsub_513(Entity*);
void sub_08083598(Entity*);
void sub_080835C8(Entity*);
void sub_080835F8(Entity*);
void sub_08083638(Entity*);
void sub_08083658(Entity*);
void sub_080836A0(Entity*);
void sub_080836DC(Entity*, u32, u32);
u32 sub_08083734(Entity*, u32);
u32 sub_080837B0(Entity*);
void sub_08083814(Entity*, u32);
void (*const gUnk_0811F65C[])(Entity*) = {
sub_08083338, sub_080834B4, sub_080834EC, sub_08083518, sub_08083540,
nullsub_513, sub_08083598, sub_080835C8, sub_080835F8,
};
void LockedDoor(Entity* this) {
gUnk_0811F65C[this->action](this);
}
extern Hitbox gUnk_080FD170;
extern u32 sub_080001DA(u32, u32);
extern void sub_08078850(Entity*, u32, u32, u32);
extern void sub_0805E4E0(Entity*, u32);
typedef struct PACKED {
s8 x;
s8 y;
} struct_0811F680;
const struct_0811F680 gUnk_0811F680[] = {
{ 0, -2 },
{ 2, 0 },
{ 0, 2 },
{ -2, 0 },
};
const struct_0811F680 gUnk_0811F688[] = {
{ 0, -21 },
{ 21, 0 },
{ 0, 21 },
{ -21, 0 },
};
const u16 gUnk_0811F690[] = {
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,
};
typedef struct {
struct_0811F680 unk_00;
struct_0811F680 unk_02;
} struct_0811F730;
const struct_0811F730 gUnk_0811F730[] = {
{ { 8, 8 }, { -8, 8 } },
{ { -8, 8 }, { -8, -8 } },
{ { 8, -8 }, { -8, -8 } },
{ { 8, 8 }, { 8, -8 } },
};
const u8 gUnk_0811F740[] = {
0xBE,
0x7D,
0xEB,
0xD7,
};
void sub_08083338(Entity* this) {
if (this->cutsceneBeh.HWORD != 0xFFFF && CheckFlags(this->cutsceneBeh.HWORD)) {
DeleteThisEntity();
}
if (!sub_080837B0(this))
return;
this->type2 = (this->type >> 2) & 3;
this->frameIndex = this->type & 3;
this->speed = 0x300;
this->field_0x70.HALF.LO = this->x.HALF.HI;
this->field_0x70.HALF.HI = this->y.HALF.HI;
this->field_0x7c.BYTES.byte2 = this->type & 3;
this->hitbox = &gUnk_080FD170;
this->spritePriority.b0 = 5;
this->frames.all = this->type & 0xF;
this->field_0x76.HWORD = TILE(this->x.HALF.HI, this->y.HALF.HI);
this->field_0x74.HWORD = sub_080001DA(this->field_0x76.HWORD, this->collisionLayer);
switch (this->type2) {
case 0:
if (!CheckFlags(this->field_0x86.HWORD)) {
if (this->type & 0x10) {
this->action = 3;
} else {
sub_080836A0(this);
}
} else {
this->type &= ~0x10;
sub_08083638(this);
}
break;
case 1:
if (!CheckFlags(this->field_0x86.HWORD)) {
sub_08083638(this);
} else {
sub_080836A0(this);
}
break;
case 2:
if (!CheckFlags(this->field_0x86.HWORD)) {
this->frameIndex |= 4;
sub_080836DC(this, this->field_0x7c.BYTES.byte2, this->field_0x76.HWORD);
if (!CheckIsDungeon()) {
this->action = 5;
} else {
this->action = 8;
sub_080787CC(this);
sub_08078850(this, 0, gUnk_0811F740[this->field_0x7c.BYTES.byte2], 0);
}
} else {
DeleteThisEntity();
}
break;
default:
DeleteThisEntity();
break;
}
}
void sub_080834B4(Entity* this) {
if (--this->actionDelay == 0) {
this->action = 2;
this->actionDelay = 7;
SetTile(this->field_0x74.HWORD, this->field_0x76.HWORD, this->collisionLayer);
EnqueueSFX(0x10b);
}
}
void sub_080834EC(Entity* this) {
sub_0806F69C(this);
if (--this->actionDelay == 0) {
if (this->type & 0x80) {
sub_08083638(this);
} else {
DeleteThisEntity();
}
}
}
void sub_08083518(Entity* this) {
if (sub_08083734(this, this->field_0x7c.BYTES.byte2)) {
this->action = 4;
sub_080836DC(this, this->field_0x7c.BYTES.byte2, this->field_0x76.HWORD);
}
}
void sub_08083540(Entity* this) {
sub_0806F69C(this);
if (!--this->actionDelay) {
if (this->type & 0x10) {
this->type &= ~0x10;
sub_080836A0(this);
} else {
if (this->type & 0x80) {
sub_080836A0(this);
} else {
this->action = 5;
}
}
sub_08083814(this, this->field_0x7c.BYTES.byte2);
EnqueueSFX(0x10b);
}
}
void nullsub_513(Entity* this) {
}
void sub_08083598(Entity* this) {
if (this->type2 == 0) {
if (!CheckFlags(this->field_0x86.HWORD))
return;
} else {
if (CheckFlags(this->field_0x86.HWORD))
return;
}
sub_08083658(this);
}
void sub_080835C8(Entity* this) {
if (this->type2 == 0) {
if (CheckFlags(this->field_0x86.HWORD))
return;
} else {
if (!CheckFlags(this->field_0x86.HWORD))
return;
}
this->action = 3;
}
void sub_080835F8(Entity* this) {
if (this->interactType == 0 && !CheckFlags(this->field_0x86.HWORD))
return;
this->action = 1;
this->actionDelay = 0x14;
sub_08083658(this);
SetFlag(this->field_0x86.HWORD);
sub_080526F8(-1);
}
void sub_08083638(Entity* this) {
this->action = 7;
this->spriteSettings.b.draw = 0;
this->x.HALF.HI = this->field_0x70.HALF.LO;
this->y.HALF.HI = this->field_0x70.HALF.HI;
}
void sub_08083658(Entity* this) {
const struct_0811F680* tmp;
this->action = 1;
this->actionDelay = 0x14;
this->direction = this->field_0x7c.BYTES.byte2 << 3;
tmp = &gUnk_0811F680[this->field_0x7c.BYTES.byte2];
this->x.HALF.HI += tmp->x;
this->y.HALF.HI += tmp->y;
sub_0805E4E0(this, 0x3c);
SoundReq(0x10b);
}
void sub_080836A0(Entity* this) {
this->action = 6;
this->spriteSettings.b.draw = 1;
this->x.HALF.HI = this->field_0x70.HALF.LO;
this->y.HALF.HI = this->field_0x70.HALF.HI;
SetTile(0x4022, this->field_0x76.HWORD, this->collisionLayer);
}
void sub_080836DC(Entity* this, u32 unk_0, u32 unk_1) {
const struct_0811F680* tmp;
SetTile(0x4022, unk_1, this->collisionLayer);
this->actionDelay = 7;
this->spriteSettings.b.draw = 1;
this->direction = (unk_0 << 3) ^ 0x10;
tmp = &gUnk_0811F688[unk_0];
if (this->type2 != 2) {
this->x.HALF.HI += tmp->x;
this->y.HALF.HI += tmp->y;
}
}
u32 sub_08083734(Entity* this, u32 unk0) {
switch (unk0) {
case 0:
if (this->field_0x70.HALF_U.HI + 0xd - gPlayerEntity.y.HALF.HI < 0)
return 1;
break;
case 1:
if (gPlayerEntity.x.HALF.HI - (this->field_0x70.HALF_U.LO - 0xb) < 0)
return 1;
break;
case 2:
if (gPlayerEntity.y.HALF.HI - (this->field_0x70.HALF_U.HI - 0x8) < 0)
return 1;
break;
case 3:
if (this->field_0x70.HALF_U.LO + 0xa - gPlayerEntity.x.HALF.HI < 0)
return 1;
break;
}
return 0;
}
u32 sub_080837B0(Entity* this) {
u32 tmp;
u32 tmp2 = gRoomControls.areaID;
if (tmp2 < 0x40) {
switch (tmp2) {
default:
tmp = 0xA;
break;
case 0x25:
tmp = 0x1e7;
break;
case 0x35:
tmp = 0x1c3;
break;
}
} else {
tmp = gUnk_0811F690[tmp2 - 0x40];
}
if (tmp2 == 0x68) {
sub_0801D2B4(this, 0);
} else {
if (tmp2 == 0x88) {
sub_0801D2B4(this, 1);
}
}
LoadFixedGFX(this, tmp);
}
void sub_08083814(Entity* this, u32 unk0) {
Entity* fx;
const struct_0811F730* tmp = &gUnk_0811F730[unk0];
fx = CreateFx(this, 0x11, 0x40);
if (fx) {
fx->x.HALF.HI += tmp->unk_00.x;
fx->y.HALF.HI += tmp->unk_00.y;
}
fx = CreateFx(this, 0x11, 0x40);
if (fx) {
fx->x.HALF.HI += tmp->unk_02.x;
fx->y.HALF.HI += tmp->unk_02.y;
}
}