mirror of https://github.com/zeldaret/tmc.git
commit
a767e16cba
|
@ -1,698 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0809D1F0
|
||||
sub_0809D1F0: @ 0x0809D1F0
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0xc]
|
||||
mov sb, r0
|
||||
cmp r0, #0
|
||||
beq _0809D224
|
||||
cmp r0, #1
|
||||
beq _0809D2B0
|
||||
bl sub_08078B48
|
||||
ldr r2, _0809D220 @ =gPlayerEntity
|
||||
ldrb r1, [r2, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
movs r1, #0x68
|
||||
adds r1, r1, r5
|
||||
mov r8, r1
|
||||
b _0809D3A8
|
||||
.align 2, 0
|
||||
_0809D220: .4byte gPlayerEntity
|
||||
_0809D224:
|
||||
ldrb r1, [r5, #0xe]
|
||||
cmp r1, #0
|
||||
beq _0809D234
|
||||
movs r0, #0xff
|
||||
strb r0, [r5, #0x1e]
|
||||
subs r0, r1, #1
|
||||
strb r0, [r5, #0xe]
|
||||
b _0809D488
|
||||
_0809D234:
|
||||
movs r1, #1
|
||||
strb r1, [r5, #0xc]
|
||||
mov r2, sb
|
||||
str r2, [r5, #0x20]
|
||||
ldr r0, _0809D2A0 @ =0xFFEC0000
|
||||
str r0, [r5, #0x34]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r5, #0x24]
|
||||
movs r0, #8
|
||||
strb r0, [r5, #0x15]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x38
|
||||
strb r1, [r0]
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r2, [r5, #0x19]
|
||||
movs r1, #0x3f
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strb r0, [r5, #0x19]
|
||||
ldrb r0, [r5, #0x1b]
|
||||
ands r1, r0
|
||||
movs r0, #0x40
|
||||
orrs r1, r0
|
||||
strb r1, [r5, #0x1b]
|
||||
ldr r0, _0809D2A4 @ =gRoomControls
|
||||
ldrh r0, [r0, #0xa]
|
||||
strh r0, [r5, #0x2e]
|
||||
ldr r0, _0809D2A8 @ =gPlayerEntity
|
||||
ldrh r0, [r0, #0x32]
|
||||
strh r0, [r5, #0x32]
|
||||
mov r3, sb
|
||||
str r3, [r5, #0x54]
|
||||
adds r0, r5, #0
|
||||
movs r1, #6
|
||||
bl SetDefaultPriority
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl InitAnimationForceUpdate
|
||||
ldr r0, _0809D2AC @ =0x00000123
|
||||
bl SoundReq
|
||||
movs r0, #0x68
|
||||
adds r0, r0, r5
|
||||
mov r8, r0
|
||||
b _0809D3A8
|
||||
.align 2, 0
|
||||
_0809D2A0: .4byte 0xFFEC0000
|
||||
_0809D2A4: .4byte gRoomControls
|
||||
_0809D2A8: .4byte gPlayerEntity
|
||||
_0809D2AC: .4byte 0x00000123
|
||||
_0809D2B0:
|
||||
ldr r6, _0809D430 @ =gPlayerEntity
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x38
|
||||
ldrb r1, [r0]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x38
|
||||
strb r1, [r0]
|
||||
ldrh r0, [r5, #0x24]
|
||||
adds r0, #8
|
||||
strh r0, [r5, #0x24]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #2
|
||||
mov sl, r1
|
||||
cmp r0, sl
|
||||
ble _0809D2D6
|
||||
mov r2, sl
|
||||
strh r2, [r5, #0x24]
|
||||
_0809D2D6:
|
||||
ldrb r1, [r6, #0x10]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
movs r3, #0x68
|
||||
adds r3, r3, r5
|
||||
mov r8, r3
|
||||
cmp r0, #0
|
||||
beq _0809D3A8
|
||||
ldr r0, _0809D434 @ =gMessage
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0809D3A8
|
||||
ldrb r0, [r6, #0xc]
|
||||
cmp r0, #0x1c
|
||||
beq _0809D3A8
|
||||
cmp r0, #6
|
||||
beq _0809D3A8
|
||||
cmp r0, #9
|
||||
beq _0809D3A8
|
||||
ldr r7, _0809D438 @ =gPlayerState
|
||||
adds r0, r7, #0
|
||||
adds r0, #0xa8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x18
|
||||
beq _0809D3A8
|
||||
cmp r0, #0xb
|
||||
beq _0809D3A8
|
||||
cmp r0, #8
|
||||
beq _0809D3A8
|
||||
bl sub_08079F8C
|
||||
cmp r0, #0
|
||||
beq _0809D3A8
|
||||
adds r0, r5, #0
|
||||
adds r1, r6, #0
|
||||
movs r2, #0xe
|
||||
movs r3, #0xe
|
||||
bl EntityInRectRadius
|
||||
cmp r0, #0
|
||||
beq _0809D3A8
|
||||
movs r1, #0x36
|
||||
ldrsh r0, [r6, r1]
|
||||
movs r2, #0x36
|
||||
ldrsh r1, [r5, r2]
|
||||
subs r0, r0, r1
|
||||
subs r0, #8
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
cmp r0, #0x1f
|
||||
bhi _0809D3A8
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x45
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0809D3A8
|
||||
movs r0, #0x95
|
||||
movs r1, #0xa
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _0809D3A8
|
||||
str r4, [r5, #0x54]
|
||||
movs r0, #2
|
||||
strb r0, [r5, #0xc]
|
||||
movs r0, #8
|
||||
strb r0, [r5, #0xe]
|
||||
mov r3, sl
|
||||
strh r3, [r5, #0x24]
|
||||
movs r0, #0xe0
|
||||
lsls r0, r0, #8
|
||||
mov r1, r8
|
||||
strh r0, [r1]
|
||||
bl sub_08079184
|
||||
bl sub_08078B48
|
||||
bl ResetPlayerAnimationAndAction
|
||||
bl sub_08077B20
|
||||
adds r0, r7, #0
|
||||
adds r0, #0x26
|
||||
movs r2, #0
|
||||
strb r2, [r0]
|
||||
strb r2, [r7, #2]
|
||||
ldrb r1, [r6, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r6, #0x10]
|
||||
ldrb r1, [r6, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r6, #0x18]
|
||||
ldr r1, _0809D43C @ =gPriorityHandler
|
||||
movs r0, #6
|
||||
strb r0, [r1]
|
||||
ldr r0, _0809D440 @ =gUnk_02034490
|
||||
mov r3, sb
|
||||
strb r3, [r0]
|
||||
_0809D3A8:
|
||||
adds r0, r5, #0
|
||||
bl LinearMoveUpdate
|
||||
mov r0, r8
|
||||
movs r2, #0
|
||||
ldrsh r1, [r0, r2]
|
||||
adds r0, r5, #0
|
||||
bl GravityUpdate
|
||||
adds r0, r5, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
ldr r4, [r5, #0x54]
|
||||
cmp r4, #0
|
||||
beq _0809D454
|
||||
ldr r2, _0809D430 @ =gPlayerEntity
|
||||
movs r3, #0x2e
|
||||
ldrsh r1, [r2, r3]
|
||||
movs r3, #0x2e
|
||||
ldrsh r0, [r5, r3]
|
||||
subs r0, #8
|
||||
cmp r1, r0
|
||||
bge _0809D3DA
|
||||
movs r0, #0
|
||||
strb r0, [r5, #0xe]
|
||||
_0809D3DA:
|
||||
ldrb r0, [r5, #0xe]
|
||||
cmp r0, #0
|
||||
bne _0809D448
|
||||
ldr r2, _0809D444 @ =0xFFF80000
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
movs r3, #0
|
||||
bl PositionRelative
|
||||
ldrh r0, [r4, #0x36]
|
||||
adds r0, #0x18
|
||||
strh r0, [r4, #0x36]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x29
|
||||
lsrs r1, r1, #0x1d
|
||||
ldrb r2, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
ldrb r2, [r5, #0x19]
|
||||
lsrs r2, r2, #6
|
||||
lsls r2, r2, #6
|
||||
ldrb r3, [r4, #0x19]
|
||||
movs r1, #0x3f
|
||||
adds r0, r1, #0
|
||||
ands r0, r3
|
||||
orrs r0, r2
|
||||
strb r0, [r4, #0x19]
|
||||
ldrb r0, [r5, #0x1b]
|
||||
lsrs r0, r0, #6
|
||||
lsls r0, r0, #6
|
||||
ldrb r2, [r4, #0x1b]
|
||||
ands r1, r2
|
||||
orrs r1, r0
|
||||
strb r1, [r4, #0x1b]
|
||||
b _0809D454
|
||||
.align 2, 0
|
||||
_0809D430: .4byte gPlayerEntity
|
||||
_0809D434: .4byte gMessage
|
||||
_0809D438: .4byte gPlayerState
|
||||
_0809D43C: .4byte gPriorityHandler
|
||||
_0809D440: .4byte gUnk_02034490
|
||||
_0809D444: .4byte 0xFFF80000
|
||||
_0809D448:
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
adds r0, r2, #0
|
||||
adds r1, r4, #0
|
||||
bl CopyPosition
|
||||
_0809D454:
|
||||
adds r0, r5, #0
|
||||
bl CheckOnScreen
|
||||
cmp r0, #0
|
||||
bne _0809D488
|
||||
ldrb r0, [r5, #0xc]
|
||||
cmp r0, #2
|
||||
bne _0809D478
|
||||
ldr r0, _0809D494 @ =gSave
|
||||
ldr r1, [r0, #0x40]
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #0x15
|
||||
orrs r1, r2
|
||||
str r1, [r0, #0x40]
|
||||
movs r0, #9
|
||||
movs r1, #0
|
||||
bl MenuFadeIn
|
||||
_0809D478:
|
||||
ldr r4, [r5, #0x54]
|
||||
cmp r4, #0
|
||||
beq _0809D484
|
||||
adds r0, r4, #0
|
||||
bl DeleteEntityAny
|
||||
_0809D484:
|
||||
bl DeleteThisEntity
|
||||
_0809D488:
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0809D494: .4byte gSave
|
||||
|
||||
thumb_func_start sub_0809D498
|
||||
sub_0809D498: @ 0x0809D498
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0809D548
|
||||
movs r2, #1
|
||||
movs r3, #1
|
||||
strb r3, [r5, #0xc]
|
||||
ldrb r1, [r5, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
strb r0, [r5, #0x18]
|
||||
ldr r0, _0809D534 @ =0xFFFD8000
|
||||
str r0, [r5, #0x20]
|
||||
ldr r0, _0809D538 @ =0xFFB4C000
|
||||
str r0, [r5, #0x34]
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x68
|
||||
movs r0, #0xf0
|
||||
lsls r0, r0, #8
|
||||
strh r0, [r4]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #2
|
||||
strh r0, [r5, #0x24]
|
||||
movs r0, #8
|
||||
strb r0, [r5, #0x15]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x38
|
||||
strb r3, [r0]
|
||||
adds r6, r5, #0
|
||||
adds r6, #0x29
|
||||
ldrb r1, [r6]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r6]
|
||||
ldrb r2, [r5, #0x19]
|
||||
movs r1, #0x3f
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strb r0, [r5, #0x19]
|
||||
ldrb r0, [r5, #0x1b]
|
||||
ands r1, r0
|
||||
movs r0, #0x40
|
||||
orrs r1, r0
|
||||
strb r1, [r5, #0x1b]
|
||||
adds r0, r5, #0
|
||||
movs r1, #6
|
||||
bl SetDefaultPriority
|
||||
ldr r0, _0809D53C @ =gRoomControls
|
||||
ldrh r0, [r0, #0xa]
|
||||
strh r0, [r5, #0x2e]
|
||||
ldr r0, _0809D540 @ =gPlayerEntity
|
||||
ldrh r0, [r0, #0x32]
|
||||
strh r0, [r5, #0x32]
|
||||
ldr r0, _0809D544 @ =0x00000123
|
||||
bl SoundReq
|
||||
ldrb r1, [r6]
|
||||
movs r0, #0x39
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #0x10
|
||||
orrs r0, r1
|
||||
strb r0, [r6]
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl InitAnimationForceUpdate
|
||||
bl sub_08078B48
|
||||
adds r7, r4, #0
|
||||
b _0809D62E
|
||||
.align 2, 0
|
||||
_0809D534: .4byte 0xFFFD8000
|
||||
_0809D538: .4byte 0xFFB4C000
|
||||
_0809D53C: .4byte gRoomControls
|
||||
_0809D540: .4byte gPlayerEntity
|
||||
_0809D544: .4byte 0x00000123
|
||||
_0809D548:
|
||||
adds r7, r5, #0
|
||||
adds r7, #0x68
|
||||
cmp r0, #1
|
||||
bne _0809D62E
|
||||
ldr r6, _0809D658 @ =gPlayerEntity
|
||||
ldrb r1, [r6, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
mov r8, r0
|
||||
ands r0, r1
|
||||
strb r0, [r6, #0x18]
|
||||
ldr r4, [r5, #0x54]
|
||||
cmp r4, #0
|
||||
beq _0809D5B0
|
||||
ldr r2, _0809D65C @ =0xFFF80000
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
movs r3, #0
|
||||
bl PositionRelative
|
||||
ldrh r0, [r4, #0x36]
|
||||
adds r0, #0x18
|
||||
strh r0, [r4, #0x36]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x29
|
||||
lsrs r1, r1, #0x1d
|
||||
ldrb r2, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
ldrb r2, [r5, #0x19]
|
||||
lsrs r2, r2, #6
|
||||
lsls r2, r2, #6
|
||||
ldrb r3, [r4, #0x19]
|
||||
movs r1, #0x3f
|
||||
adds r0, r1, #0
|
||||
ands r0, r3
|
||||
orrs r0, r2
|
||||
strb r0, [r4, #0x19]
|
||||
ldrb r0, [r5, #0x1b]
|
||||
lsrs r0, r0, #6
|
||||
lsls r0, r0, #6
|
||||
ldrb r2, [r4, #0x1b]
|
||||
ands r1, r2
|
||||
orrs r1, r0
|
||||
strb r1, [r4, #0x1b]
|
||||
_0809D5B0:
|
||||
bl sub_08078B48
|
||||
ldr r3, _0809D660 @ =gRoomControls
|
||||
movs r1, #0xa
|
||||
ldrsh r0, [r3, r1]
|
||||
adds r0, #0x78
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
cmp r0, r1
|
||||
bge _0809D62E
|
||||
ldrb r0, [r5, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x39
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #8
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
cmp r4, #0
|
||||
beq _0809D5E6
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
_0809D5E6:
|
||||
str r6, [r3, #0x30]
|
||||
ldrb r1, [r6, #0x18]
|
||||
mov r0, r8
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r6, #0x18]
|
||||
bl ResetPlayerAnimationAndAction
|
||||
bl ResetPlayerEventPriority
|
||||
ldr r1, _0809D664 @ =gUnk_02034490
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
movs r0, #0x52
|
||||
bl CheckGlobalFlag
|
||||
cmp r0, #0
|
||||
bne _0809D62E
|
||||
movs r0, #0x69
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _0809D62E
|
||||
ldr r1, _0809D668 @ =script_EzloTalkOcarina
|
||||
bl StartCutscene
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
str r0, [r1]
|
||||
movs r0, #0x52
|
||||
bl SetGlobalFlag
|
||||
_0809D62E:
|
||||
adds r0, r5, #0
|
||||
bl LinearMoveUpdate
|
||||
movs r0, #0
|
||||
ldrsh r1, [r7, r0]
|
||||
adds r0, r5, #0
|
||||
bl GravityUpdate
|
||||
adds r0, r5, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r5, #0
|
||||
bl CheckOnScreen
|
||||
cmp r0, #0
|
||||
bne _0809D652
|
||||
bl DeleteThisEntity
|
||||
_0809D652:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0809D658: .4byte gPlayerEntity
|
||||
_0809D65C: .4byte 0xFFF80000
|
||||
_0809D660: .4byte gRoomControls
|
||||
_0809D664: .4byte gUnk_02034490
|
||||
_0809D668: .4byte script_EzloTalkOcarina
|
||||
|
||||
thumb_func_start sub_0809D66C
|
||||
sub_0809D66C: @ 0x0809D66C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _0809D694 @ =gPlayerEntity
|
||||
ldrb r1, [r0, #0x1a]
|
||||
lsls r1, r1, #0x1c
|
||||
lsrs r1, r1, #0x1c
|
||||
ldrb r2, [r4, #0x1a]
|
||||
movs r0, #0x10
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1a]
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #1
|
||||
beq _0809D6EC
|
||||
cmp r0, #1
|
||||
bgt _0809D698
|
||||
cmp r0, #0
|
||||
beq _0809D6A2
|
||||
b _0809D6FE
|
||||
.align 2, 0
|
||||
_0809D694: .4byte gPlayerEntity
|
||||
_0809D698:
|
||||
cmp r0, #2
|
||||
beq _0809D6F4
|
||||
cmp r0, #3
|
||||
beq _0809D6FA
|
||||
b _0809D6FE
|
||||
_0809D6A2:
|
||||
movs r3, #1
|
||||
movs r2, #1
|
||||
strb r2, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
orrs r0, r3
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x38
|
||||
strb r2, [r0]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r2, [r4, #0x19]
|
||||
movs r1, #0x3f
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strb r0, [r4, #0x19]
|
||||
ldrb r0, [r4, #0x1b]
|
||||
ands r1, r0
|
||||
movs r0, #0x40
|
||||
orrs r1, r0
|
||||
strb r1, [r4, #0x1b]
|
||||
adds r0, r4, #0
|
||||
movs r1, #6
|
||||
bl SetDefaultPriority
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xe0
|
||||
bl InitAnimationForceUpdate
|
||||
_0809D6EC:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
b _0809D6FE
|
||||
_0809D6F4:
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
b _0809D6FE
|
||||
_0809D6FA:
|
||||
bl DeleteThisEntity
|
||||
_0809D6FE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start CreateBird
|
||||
CreateBird: @ 0x0809D700
|
||||
push {r4, lr}
|
||||
sub sp, #4
|
||||
.ifdef EU
|
||||
bl AreaIsOverworld @ TODO correct function?
|
||||
.else
|
||||
bl AreaAllowsWarp
|
||||
.endif
|
||||
cmp r0, #0
|
||||
beq _0809D732
|
||||
movs r0, #0
|
||||
str r0, [sp]
|
||||
movs r0, #6
|
||||
movs r1, #0x95
|
||||
movs r2, #6
|
||||
movs r3, #8
|
||||
bl FindEntity
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
bne _0809D732
|
||||
movs r0, #0x95
|
||||
movs r1, #8
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
cmp r0, #0
|
||||
beq _0809D732
|
||||
strb r4, [r0, #0xe]
|
||||
_0809D732:
|
||||
add sp, #4
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0809D738
|
||||
sub_0809D738: @ 0x0809D738
|
||||
push {r4, lr}
|
||||
movs r0, #0x95
|
||||
movs r1, #9
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _0809D77C
|
||||
ldr r1, _0809D774 @ =gRoomControls
|
||||
movs r0, #0
|
||||
str r0, [r1, #0x30]
|
||||
adds r0, r4, #0
|
||||
movs r1, #6
|
||||
bl SetDefaultPriority
|
||||
bl SetPlayerEventPriority
|
||||
movs r0, #0x95
|
||||
movs r1, #0xa
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
cmp r0, #0
|
||||
beq _0809D76C
|
||||
str r0, [r4, #0x54]
|
||||
_0809D76C:
|
||||
ldr r1, _0809D778 @ =gUnk_02034490
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
b _0809D780
|
||||
.align 2, 0
|
||||
_0809D774: .4byte gRoomControls
|
||||
_0809D778: .4byte gUnk_02034490
|
||||
_0809D77C:
|
||||
bl ResetPlayerAnimationAndAction
|
||||
_0809D780:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
|
@ -1,34 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08123EC0:: @ 08123EC0
|
||||
.4byte sub_0809CF3C
|
||||
.4byte sub_0809D030
|
||||
.4byte sub_0809D0F4
|
||||
.4byte sub_0809D178
|
||||
.4byte sub_0809D178
|
||||
.4byte sub_0809D178
|
||||
.4byte sub_0809D178
|
||||
.4byte sub_0809D178
|
||||
.4byte sub_0809D1F0
|
||||
.4byte sub_0809D498
|
||||
.4byte sub_0809D66C
|
||||
|
||||
gUnk_08123EEC:: @ 08123EEC
|
||||
.4byte sub_0809CF54
|
||||
.4byte sub_0809CFEC
|
||||
|
||||
gUnk_08123EF4:: @ 08123EF4
|
||||
.4byte sub_0809D048
|
||||
.4byte sub_0809D06C
|
||||
|
||||
gUnk_08123EFC:: @ 08123EFC
|
||||
.4byte sub_0809D084
|
||||
.4byte sub_0809D0AC
|
||||
|
||||
gUnk_08123F04:: @ 08123F04
|
||||
.4byte sub_0809D10C
|
||||
.4byte sub_0809D130
|
|
@ -773,7 +773,6 @@ SECTIONS {
|
|||
src/object/lamp.o(.text);
|
||||
src/object/windTribeFlag.o(.text);
|
||||
src/object/bird.o(.text);
|
||||
asm/object/bird.o(.text);
|
||||
src/object/object96.o(.text);
|
||||
src/object/keyStealingTakkuri.o(.text);
|
||||
src/object/object98.o(.text);
|
||||
|
@ -1523,7 +1522,7 @@ SECTIONS {
|
|||
data/animations/object/bakerOven.o(.rodata);
|
||||
src/object/lamp.o(.rodata);
|
||||
data/animations/object/lamp.o(.rodata);
|
||||
data/const/object/bird.o(.rodata);
|
||||
src/object/bird.o(.rodata);
|
||||
data/animations/object/bird.o(.rodata);
|
||||
src/object/object96.o(.rodata);
|
||||
src/object/keyStealingTakkuri.o(.rodata);
|
||||
|
|
|
@ -2,22 +2,45 @@
|
|||
#include "object.h"
|
||||
#include "functions.h"
|
||||
#include "item.h"
|
||||
#include "message.h"
|
||||
#include "game.h"
|
||||
|
||||
extern void (*const gUnk_08123EC0[])(Entity*);
|
||||
extern void (*const gUnk_08123EEC[])(Entity*);
|
||||
extern void (*const gUnk_08123EF4[])(Entity*);
|
||||
extern void (*const gUnk_08123EFC[])(Entity*);
|
||||
extern void (*const gUnk_08123F04[])(Entity*);
|
||||
extern u16 script_EzloTalkOcarina[];
|
||||
|
||||
void Bird_Type0(Entity*);
|
||||
void Bird_Type1(Entity*);
|
||||
void Bird_Type2(Entity*);
|
||||
void Bird_Type3(Entity*);
|
||||
void Bird_Type8(Entity*);
|
||||
void Bird_Type9(Entity*);
|
||||
void Bird_Type10(Entity*);
|
||||
void Bird_Type0_Init(Entity*);
|
||||
void Bird_Type0_Action1(Entity*);
|
||||
void Bird_Type1_Init(Entity*);
|
||||
void Bird_Type1_Action1(Entity*);
|
||||
void Bird_Type1_Action1_Subaction0(Entity*);
|
||||
void Bird_Type1_Action1_Subaction1(Entity*);
|
||||
void Bird_Type2_Init(Entity*);
|
||||
void Bird_Type2_Action1(Entity*);
|
||||
|
||||
void Bird(Entity* this) {
|
||||
gUnk_08123EC0[this->type](this);
|
||||
static void (*const typeFuncs[])(Entity*) = {
|
||||
Bird_Type0, Bird_Type1, Bird_Type2, Bird_Type3, Bird_Type3, Bird_Type3,
|
||||
Bird_Type3, Bird_Type3, Bird_Type8, Bird_Type9, Bird_Type10,
|
||||
};
|
||||
typeFuncs[this->type](this);
|
||||
}
|
||||
|
||||
void sub_0809CF3C(Entity* this) {
|
||||
gUnk_08123EEC[this->action](this);
|
||||
void Bird_Type0(Entity* this) {
|
||||
static void (*const actionFuncs[])(Entity*) = {
|
||||
Bird_Type0_Init,
|
||||
Bird_Type0_Action1,
|
||||
};
|
||||
|
||||
actionFuncs[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0809CF54(Entity* this) {
|
||||
void Bird_Type0_Init(Entity* this) {
|
||||
Entity* target;
|
||||
|
||||
this->action++;
|
||||
|
@ -42,8 +65,7 @@ void sub_0809CF54(Entity* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void sub_0809CFEC(Entity* this) {
|
||||
|
||||
void Bird_Type0_Action1(Entity* this) {
|
||||
LinearMoveUpdate(this);
|
||||
GravityUpdate(this, *(s16*)&this->field_0x68.HWORD);
|
||||
if (this->actionDelay != 0) {
|
||||
|
@ -56,22 +78,30 @@ void sub_0809CFEC(Entity* this) {
|
|||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
|
||||
void sub_0809D030(Entity* this) {
|
||||
gUnk_08123EF4[this->action](this);
|
||||
void Bird_Type1(Entity* this) {
|
||||
static void (*const actionFuncs[])(Entity*) = {
|
||||
Bird_Type1_Init,
|
||||
Bird_Type1_Action1,
|
||||
};
|
||||
actionFuncs[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0809D048(Entity* this) {
|
||||
void Bird_Type1_Init(Entity* this) {
|
||||
this->action++;
|
||||
this->collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
InitAnimationForceUpdate(this, 0x17);
|
||||
}
|
||||
|
||||
void sub_0809D06C(Entity* this) {
|
||||
gUnk_08123EFC[this->subAction](this);
|
||||
void Bird_Type1_Action1(Entity* this) {
|
||||
static void (*const subActionFuncs[])(Entity*) = {
|
||||
Bird_Type1_Action1_Subaction0,
|
||||
Bird_Type1_Action1_Subaction1,
|
||||
};
|
||||
subActionFuncs[this->subAction](this);
|
||||
}
|
||||
|
||||
void sub_0809D084(Entity* this) {
|
||||
void Bird_Type1_Action1_Subaction0(Entity* this) {
|
||||
u32 temp;
|
||||
|
||||
if (this->parent != NULL) {
|
||||
|
@ -85,7 +115,7 @@ void sub_0809D084(Entity* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void sub_0809D0AC(Entity* this) {
|
||||
void Bird_Type1_Action1_Subaction1(Entity* this) {
|
||||
Entity* fx;
|
||||
|
||||
if (sub_080044EC(this, 0x1800) < 2) {
|
||||
|
@ -102,28 +132,32 @@ void sub_0809D0AC(Entity* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void sub_0809D0F4(Entity* this) {
|
||||
gUnk_08123F04[this->action](this);
|
||||
void Bird_Type2(Entity* this) {
|
||||
static void (*const actionFuncs[])(Entity*) = {
|
||||
Bird_Type2_Init,
|
||||
Bird_Type2_Action1,
|
||||
};
|
||||
actionFuncs[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0809D10C(Entity* this) {
|
||||
void Bird_Type2_Init(Entity* this) {
|
||||
this->action++;
|
||||
this->collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
InitAnimationForceUpdate(this, 0x17);
|
||||
}
|
||||
|
||||
void sub_0809D130(Entity* this) {
|
||||
void Bird_Type2_Action1(Entity* this) {
|
||||
if ((gPlayerState.flags & PL_MINISH) != 0) {
|
||||
sub_0800445C(this);
|
||||
} else if (IsCollidingPlayer(this) != 0) {
|
||||
CreateItemEntity(0x17, 0, 0);
|
||||
CreateItemEntity(ITEM_OCARINA, 0, 0);
|
||||
gSave.windcrests |= 0x10000000;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0809D178(Entity* this) {
|
||||
void Bird_Type3(Entity* this) {
|
||||
|
||||
if (this->action == 0) {
|
||||
this->action++;
|
||||
|
@ -131,6 +165,7 @@ void sub_0809D178(Entity* this) {
|
|||
UpdateSpriteForCollisionLayer(this);
|
||||
this->frame = 0x80;
|
||||
}
|
||||
|
||||
if ((this->frame & ANIM_DONE) != 0) {
|
||||
InitializeAnimation(this, Random() & 3);
|
||||
this->frameDuration = (Random() & 0xf) + 0x10;
|
||||
|
@ -142,3 +177,225 @@ void sub_0809D178(Entity* this) {
|
|||
GetNextFrame(this);
|
||||
}
|
||||
}
|
||||
|
||||
void Bird_Type8(Entity* this) {
|
||||
Entity* pEVar5;
|
||||
|
||||
switch (this->action) {
|
||||
case 0:
|
||||
if (this->actionDelay != 0) {
|
||||
this->frameIndex = 0xff;
|
||||
this->actionDelay--;
|
||||
return;
|
||||
}
|
||||
this->action = 1;
|
||||
this->zVelocity = 0;
|
||||
this->z.WORD = Q_16_16(-20.0);
|
||||
this->speed = 0x180;
|
||||
this->direction = 8;
|
||||
this->collisionLayer = 1;
|
||||
this->spritePriority.b0 = 0;
|
||||
this->spriteRendering.b3 = 0;
|
||||
this->spriteOrientation.flipY = 1;
|
||||
this->x.HALF.HI = gRoomControls.scroll_x;
|
||||
this->y.HALF.HI = gPlayerEntity.y.HALF.HI;
|
||||
this->child = NULL;
|
||||
SetDefaultPriority(this, 6);
|
||||
InitAnimationForceUpdate(this, 0);
|
||||
SoundReq(0x123);
|
||||
break;
|
||||
case 1:
|
||||
this->collisionLayer = gPlayerEntity.collisionLayer;
|
||||
this->speed += 8;
|
||||
if (this->speed > 0x300) {
|
||||
this->speed = 0x300;
|
||||
}
|
||||
|
||||
if ((gPlayerEntity.flags & 0x80) != 0 && (gMessage.doTextBox & 0x7f) == 0 && gPlayerEntity.action != 28 &&
|
||||
gPlayerEntity.action != 6 && gPlayerEntity.action != 9 && gPlayerState.framestate != 24 &&
|
||||
gPlayerState.framestate != 11 && gPlayerState.framestate != 8 && sub_08079F8C() &&
|
||||
(EntityInRectRadius(this, &gPlayerEntity, 0xe, 0xe))) {
|
||||
s32 z = gPlayerEntity.z.HALF.HI - this->z.HALF.HI - 8;
|
||||
if ((u16)z < 0x20 && gPlayerEntity.health != 0) {
|
||||
pEVar5 = CreateObject(0x95, 10, 0);
|
||||
if (pEVar5 != NULL) {
|
||||
this->child = pEVar5;
|
||||
this->action = 2;
|
||||
this->actionDelay = 8;
|
||||
this->speed = 0x300;
|
||||
this->field_0x68.HWORD = 0xe000;
|
||||
sub_08079184();
|
||||
sub_08078B48();
|
||||
ResetPlayerAnimationAndAction();
|
||||
sub_08077B20();
|
||||
gPlayerState.swim_state = 0;
|
||||
gPlayerState.jump_status = 0;
|
||||
gPlayerEntity.flags &= 0x7f;
|
||||
gPlayerEntity.spriteSettings.draw = 0;
|
||||
gPriorityHandler.sys_priority = 6;
|
||||
gUnk_02034490.unk0 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
sub_08078B48();
|
||||
gPlayerEntity.spriteSettings.draw = 0;
|
||||
break;
|
||||
}
|
||||
LinearMoveUpdate(this);
|
||||
GravityUpdate(this, (s16)this->field_0x68.HWORD);
|
||||
UpdateAnimationSingleFrame(this);
|
||||
pEVar5 = this->child;
|
||||
if (pEVar5 != NULL) {
|
||||
if (gPlayerEntity.x.HALF.HI < this->x.HALF.HI - 8) {
|
||||
this->actionDelay = 0;
|
||||
}
|
||||
|
||||
if (this->actionDelay == 0) {
|
||||
PositionRelative(this, pEVar5, 0xfff80000, 0);
|
||||
pEVar5->z.HALF.HI += 0x18;
|
||||
pEVar5->spritePriority.b0 = this->spritePriority.b0;
|
||||
pEVar5->spriteRendering.b3 = this->spriteRendering.b3;
|
||||
pEVar5->spriteOrientation.flipY = this->spriteOrientation.flipY;
|
||||
} else {
|
||||
this->actionDelay--;
|
||||
CopyPosition(&gPlayerEntity, pEVar5);
|
||||
}
|
||||
}
|
||||
|
||||
if (CheckOnScreen(this) == 0) {
|
||||
if (this->action == 2) {
|
||||
gSave.windcrests |= 0x10000000;
|
||||
MenuFadeIn(9, 0);
|
||||
}
|
||||
pEVar5 = this->child;
|
||||
if (pEVar5 != NULL) {
|
||||
DeleteEntityAny(pEVar5);
|
||||
}
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void Bird_Type9(Entity* this) {
|
||||
Entity* pEVar1;
|
||||
Entity* child;
|
||||
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->spriteSettings.draw = 1;
|
||||
this->zVelocity = -0x28000;
|
||||
this->z.WORD = 0xffb4c000;
|
||||
this->field_0x68.HWORD = 0xf000;
|
||||
this->speed = 0x300;
|
||||
this->direction = 8;
|
||||
this->collisionLayer = 1;
|
||||
this->spritePriority.b0 = 0;
|
||||
this->spriteRendering.b3 = 0;
|
||||
this->spriteOrientation.flipY = 1;
|
||||
;
|
||||
SetDefaultPriority(this, 6);
|
||||
this->x.HALF.HI = gRoomControls.scroll_x;
|
||||
this->y.HALF.HI = gPlayerEntity.y.HALF.HI;
|
||||
SoundReq(SFX_123);
|
||||
this->spritePriority.b1 = 2;
|
||||
InitAnimationForceUpdate(this, 0);
|
||||
sub_08078B48();
|
||||
} else if (this->action == 1) {
|
||||
gPlayerEntity.spriteSettings.draw = 0;
|
||||
child = this->child;
|
||||
if (child != NULL) {
|
||||
PositionRelative(this, child, Q_16_16(-8), 0);
|
||||
child->z.HALF.HI += 0x18;
|
||||
child->spritePriority.b0 = this->spritePriority.b0;
|
||||
child->spriteRendering.b3 = this->spriteRendering.b3;
|
||||
child->spriteOrientation.flipY = this->spriteOrientation.flipY;
|
||||
}
|
||||
sub_08078B48();
|
||||
if (gRoomControls.scroll_x + 0x78 < this->x.HALF.HI) {
|
||||
this->action++;
|
||||
this->spritePriority.b1 = 1;
|
||||
if (child != NULL) {
|
||||
child->action++;
|
||||
}
|
||||
gRoomControls.camera_target = &gPlayerEntity;
|
||||
gPlayerEntity.spriteSettings.draw = 1;
|
||||
ResetPlayerAnimationAndAction();
|
||||
ResetPlayerEventPriority();
|
||||
gUnk_02034490.unk0 = 0;
|
||||
if (!CheckGlobalFlag(WARP_1ST)) {
|
||||
pEVar1 = CreateObject(OBJECT_69, 0, 0);
|
||||
if (pEVar1 != NULL) {
|
||||
*(ScriptExecutionContext**)&pEVar1->cutsceneBeh = StartCutscene(pEVar1, script_EzloTalkOcarina);
|
||||
SetGlobalFlag(WARP_1ST);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LinearMoveUpdate(this);
|
||||
GravityUpdate(this, (short)this->field_0x68.HWORD);
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (!CheckOnScreen(this)) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void Bird_Type10(Entity* this) {
|
||||
this->palette.b.b0 = gPlayerEntity.palette.b.b0;
|
||||
switch (this->action) {
|
||||
case 0:
|
||||
this->action = 1;
|
||||
this->spriteSettings.draw = 1;
|
||||
this->collisionLayer = 1;
|
||||
this->spritePriority.b0 = 0;
|
||||
this->spriteRendering.b3 = 0;
|
||||
this->spriteOrientation.flipY = 1;
|
||||
SetDefaultPriority(this, 6);
|
||||
InitAnimationForceUpdate(this, 0xe0);
|
||||
case 1:
|
||||
UpdateAnimationSingleFrame(this);
|
||||
break;
|
||||
case 2:
|
||||
this->action = 3;
|
||||
break;
|
||||
case 3:
|
||||
DeleteThisEntity();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CreateBird(void) {
|
||||
Entity* birdEnt;
|
||||
|
||||
#ifndef EU
|
||||
if (AreaAllowsWarp()) {
|
||||
#else
|
||||
if (AreaIsOverworld()) {
|
||||
#endif
|
||||
if (!FindEntity(OBJECT, BIRD, 6, 8, 0)) {
|
||||
birdEnt = CreateObject(BIRD, 8, 0);
|
||||
if (birdEnt != NULL) {
|
||||
birdEnt->actionDelay = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0809D738(void) {
|
||||
Entity* pEVar1;
|
||||
Entity* pEVar2;
|
||||
|
||||
pEVar1 = CreateObject(BIRD, 9, 0);
|
||||
if (pEVar1 != NULL) {
|
||||
gRoomControls.camera_target = NULL;
|
||||
SetDefaultPriority(pEVar1, 6);
|
||||
SetPlayerEventPriority();
|
||||
pEVar2 = CreateObject(BIRD, 10, 0);
|
||||
if (pEVar2 != NULL) {
|
||||
pEVar1->child = pEVar2;
|
||||
}
|
||||
gUnk_02034490.unk0 = 1;
|
||||
} else {
|
||||
ResetPlayerAnimationAndAction();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue