mirror of
https://github.com/zeldaret/tmc
synced 2026-07-08 14:36:41 -04:00
-101
@@ -1,101 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_080672C8
|
||||
sub_080672C8: @ 0x080672C8
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
movs r4, #0
|
||||
movs r0, #0x11
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
bne _080672E4
|
||||
movs r0, #0x15
|
||||
bl CheckGlobalFlag
|
||||
rsbs r1, r0, #0
|
||||
orrs r1, r0
|
||||
lsrs r4, r1, #0x1f
|
||||
_080672E4:
|
||||
ldr r3, _08067300 @ =gUnk_08110CE8
|
||||
lsls r1, r4, #1
|
||||
ldrb r2, [r5, #0xa]
|
||||
lsls r0, r2, #1
|
||||
adds r0, r0, r2
|
||||
lsls r0, r0, #1
|
||||
adds r1, r1, r0
|
||||
adds r1, r1, r3
|
||||
ldrh r0, [r1]
|
||||
adds r1, r5, #0
|
||||
bl TextboxNoOverlap
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08067300: .4byte gUnk_08110CE8
|
||||
|
||||
thumb_func_start sub_08067304
|
||||
sub_08067304: @ 0x08067304
|
||||
push {lr}
|
||||
ldr r1, _08067310 @ =gUnk_08110D00
|
||||
bl ShowNPCDialogue
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08067310: .4byte gUnk_08110D00
|
||||
|
||||
thumb_func_start sub_08067314
|
||||
sub_08067314: @ 0x08067314
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0801E99C
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_08078784
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start Carpenter_Fusion
|
||||
Carpenter_Fusion: @ 0x0806732C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _08067378
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #4
|
||||
ldr r0, _08067374 @ =gUnk_08110CA8
|
||||
adds r1, r1, r0
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _0806737E
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #3
|
||||
adds r1, #2
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _0806737E
|
||||
.align 2, 0
|
||||
_08067374: .4byte gUnk_08110CA8
|
||||
_08067378:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_0806737E:
|
||||
pop {r4, pc}
|
||||
@@ -1,857 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_080677EC
|
||||
sub_080677EC: @ 0x080677EC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0x15]
|
||||
movs r0, #0x80
|
||||
strh r0, [r4, #0x24]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x3c
|
||||
movs r0, #7
|
||||
strb r0, [r1]
|
||||
adds r1, #4
|
||||
movs r0, #0x48
|
||||
strb r0, [r1]
|
||||
subs r1, #1
|
||||
movs r0, #0xa8
|
||||
strb r0, [r1]
|
||||
subs r1, #4
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
adds r1, #0x2e
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
ldr r0, _0806783C @ =gPlayerEntity
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r4, r2]
|
||||
movs r2, #0x2e
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r1, r0
|
||||
bge _08067840
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
b _08067848
|
||||
.align 2, 0
|
||||
_0806783C: .4byte gPlayerEntity
|
||||
_08067840:
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
_08067848:
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
bl sub_0801E99C
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
strb r0, [r1]
|
||||
ldr r0, _0806786C @ =gUnk_08110EF0
|
||||
str r0, [r4, #0x48]
|
||||
adds r0, r4, #0
|
||||
bl sub_0805ACC0
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
bne _08067870
|
||||
movs r0, #0x2e
|
||||
ldrsh r2, [r4, r0]
|
||||
b _08067872
|
||||
.align 2, 0
|
||||
_0806786C: .4byte gUnk_08110EF0
|
||||
_08067870:
|
||||
lsrs r2, r2, #0x10
|
||||
_08067872:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6c
|
||||
movs r1, #0
|
||||
strh r2, [r0]
|
||||
ldrb r0, [r4, #0xe]
|
||||
adds r0, r0, r2
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x6e
|
||||
strh r0, [r2]
|
||||
strb r1, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x75
|
||||
strb r1, [r0]
|
||||
bl Random
|
||||
movs r1, #0x7f
|
||||
ands r0, r1
|
||||
adds r0, #0x1e
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x74
|
||||
strb r0, [r1]
|
||||
subs r1, #0xb
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B08
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_080678AC
|
||||
sub_080678AC: @ 0x080678AC
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_08067D20
|
||||
cmp r0, #0
|
||||
beq _080678C2
|
||||
adds r0, r4, #0
|
||||
movs r1, #5
|
||||
bl sub_08067B80
|
||||
b _08067900
|
||||
_080678C2:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x72
|
||||
ldrh r0, [r2]
|
||||
cmp r0, #0
|
||||
beq _080678D0
|
||||
subs r0, #1
|
||||
strh r0, [r2]
|
||||
_080678D0:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
adds r5, r0, #0
|
||||
cmp r1, #1
|
||||
bne _080678EA
|
||||
ldrh r0, [r2]
|
||||
cmp r0, #0
|
||||
bne _080678EA
|
||||
adds r0, r4, #0
|
||||
bl sub_08067AAC
|
||||
b _08067900
|
||||
_080678EA:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
ldrb r1, [r5]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08067900
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B34
|
||||
_08067900:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08067904
|
||||
sub_08067904: @ 0x08067904
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_08067D20
|
||||
cmp r0, #0
|
||||
beq _0806791A
|
||||
adds r0, r4, #0
|
||||
movs r1, #8
|
||||
bl sub_08067B80
|
||||
b _08067978
|
||||
_0806791A:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x72
|
||||
ldrh r0, [r1]
|
||||
subs r0, #1
|
||||
strh r0, [r1]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bne _08067932
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B70
|
||||
b _08067978
|
||||
_08067932:
|
||||
ldrb r0, [r4, #0x15]
|
||||
cmp r0, #8
|
||||
bne _08067952
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x6e
|
||||
ldrh r1, [r1]
|
||||
cmp r0, r1
|
||||
ble _0806796C
|
||||
movs r0, #0x18
|
||||
strb r0, [r4, #0x15]
|
||||
ldrb r1, [r4, #0x18]
|
||||
subs r0, #0x59
|
||||
ands r0, r1
|
||||
b _0806796A
|
||||
_08067952:
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6c
|
||||
ldrh r0, [r0]
|
||||
cmp r1, r0
|
||||
bge _0806796C
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0x15]
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
_0806796A:
|
||||
strb r0, [r4, #0x18]
|
||||
_0806796C:
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F69C
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
_08067978:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0806797C
|
||||
sub_0806797C: @ 0x0806797C
|
||||
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 _08067998
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B08
|
||||
_08067998:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0806799C
|
||||
sub_0806799C: @ 0x0806799C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
ldr r0, _080679C0 @ =gTextBox
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080679BE
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B08
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl sub_0805E3A0
|
||||
_080679BE:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080679C0: .4byte gTextBox
|
||||
|
||||
thumb_func_start sub_080679C4
|
||||
sub_080679C4: @ 0x080679C4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x74
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _080679E6
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
beq _080679E6
|
||||
adds r0, r4, #0
|
||||
bl sub_08067D20
|
||||
cmp r0, #0
|
||||
bne _080679EE
|
||||
_080679E6:
|
||||
adds r0, r4, #0
|
||||
bl sub_08067C24
|
||||
b _08067A0A
|
||||
_080679EE:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
bl sub_08067BD4
|
||||
adds r0, r4, #0
|
||||
bl sub_08067D74
|
||||
cmp r0, #0
|
||||
beq _08067A0A
|
||||
adds r0, r4, #0
|
||||
bl sub_08067C18
|
||||
_08067A0A:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08067A0C
|
||||
sub_08067A0C: @ 0x08067A0C
|
||||
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 _08067A44
|
||||
adds r0, r4, #0
|
||||
bl sub_08067D20
|
||||
cmp r0, #0
|
||||
beq _08067A3C
|
||||
adds r0, r4, #0
|
||||
movs r1, #5
|
||||
bl sub_08067B80
|
||||
ldrb r0, [r4, #0xe]
|
||||
adds r0, #0x14
|
||||
strb r0, [r4, #0xe]
|
||||
b _08067A76
|
||||
_08067A3C:
|
||||
adds r0, r4, #0
|
||||
bl sub_08067C24
|
||||
b _08067A76
|
||||
_08067A44:
|
||||
movs r2, #7
|
||||
ands r2, r1
|
||||
cmp r2, #0
|
||||
beq _08067A70
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
ldr r1, _08067A6C @ =gUnk_08111154
|
||||
ldrb r0, [r4, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
lsrs r0, r0, #0x1f
|
||||
lsls r0, r0, #2
|
||||
subs r0, #1
|
||||
adds r0, r2, r0
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
str r0, [r4, #0x48]
|
||||
b _08067A76
|
||||
.align 2, 0
|
||||
_08067A6C: .4byte gUnk_08111154
|
||||
_08067A70:
|
||||
adds r0, r4, #0
|
||||
bl sub_08067DDC
|
||||
_08067A76:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08067A78
|
||||
sub_08067A78: @ 0x08067A78
|
||||
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 _08067A94
|
||||
adds r0, r4, #0
|
||||
bl sub_08067AAC
|
||||
_08067A94:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08067A98
|
||||
sub_08067A98: @ 0x08067A98
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateFuseInteraction
|
||||
cmp r0, #0
|
||||
beq _08067AAA
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B08
|
||||
_08067AAA:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08067AAC
|
||||
sub_08067AAC: @ 0x08067AAC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
ldr r2, _08067AFC @ =gUnk_081110FC
|
||||
movs r1, #3
|
||||
ands r1, r0
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r2
|
||||
ldrh r0, [r1]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x72
|
||||
strh r0, [r1]
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #4
|
||||
movs r0, #1
|
||||
eors r1, r0
|
||||
ands r1, r0
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
movs r1, #3
|
||||
bl sub_08067DCC
|
||||
ldr r0, _08067B00 @ =gUnk_0811110C
|
||||
ldrb r2, [r0, #2]
|
||||
ldr r3, _08067B04 @ =gUnk_0811110F
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_08078850
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08067AFC: .4byte gUnk_081110FC
|
||||
_08067B00: .4byte gUnk_0811110C
|
||||
_08067B04: .4byte gUnk_0811110F
|
||||
|
||||
thumb_func_start sub_08067B08
|
||||
sub_08067B08: @ 0x08067B08
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
ldr r2, _08067B30 @ =gUnk_08111104
|
||||
movs r1, #3
|
||||
ands r1, r0
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r2
|
||||
ldrh r0, [r1]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x72
|
||||
strh r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_08067B34
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08067B30: .4byte gUnk_08111104
|
||||
|
||||
thumb_func_start sub_08067B34
|
||||
sub_08067B34: @ 0x08067B34
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #0
|
||||
bl sub_08067DCC
|
||||
bl Random
|
||||
movs r1, #0x30
|
||||
ands r0, r1
|
||||
adds r0, #0xb4
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x59
|
||||
strb r0, [r1]
|
||||
ldr r1, _08067B68 @ =gUnk_0811110C
|
||||
ldrb r0, [r4, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
lsrs r0, r0, #0x1f
|
||||
adds r0, r0, r1
|
||||
ldrb r2, [r0]
|
||||
ldr r3, _08067B6C @ =gUnk_0811110F
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_08078850
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08067B68: .4byte gUnk_0811110C
|
||||
_08067B6C: .4byte gUnk_0811110F
|
||||
|
||||
thumb_func_start sub_08067B70
|
||||
sub_08067B70: @ 0x08067B70
|
||||
push {lr}
|
||||
movs r1, #3
|
||||
strb r1, [r0, #0xc]
|
||||
movs r1, #4
|
||||
bl sub_08067DCC
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08067B80
|
||||
sub_08067B80: @ 0x08067B80
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
movs r0, #5
|
||||
strb r0, [r5, #0xc]
|
||||
movs r0, #0x14
|
||||
strb r0, [r5, #0xe]
|
||||
bl Random
|
||||
movs r1, #0x7f
|
||||
ands r0, r1
|
||||
adds r0, #0x1e
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x74
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r5, #0
|
||||
bl sub_08067DDC
|
||||
ldr r0, _08067BC4 @ =gPlayerEntity
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
movs r2, #0x2e
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r1, r0
|
||||
bge _08067BC8
|
||||
ldrb r0, [r5, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
b _08067BD0
|
||||
.align 2, 0
|
||||
_08067BC4: .4byte gPlayerEntity
|
||||
_08067BC8:
|
||||
ldrb r1, [r5, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
_08067BD0:
|
||||
strb r0, [r5, #0x18]
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_08067BD4
|
||||
sub_08067BD4: @ 0x08067BD4
|
||||
push {r4, lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r3, [r2, #0x18]
|
||||
lsls r0, r3, #0x19
|
||||
cmp r0, #0
|
||||
bge _08067BFC
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r2, r1]
|
||||
subs r0, #4
|
||||
ldr r1, _08067BF8 @ =gPlayerEntity
|
||||
movs r4, #0x2e
|
||||
ldrsh r1, [r1, r4]
|
||||
cmp r0, r1
|
||||
ble _08067C12
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r3
|
||||
b _08067C10
|
||||
.align 2, 0
|
||||
_08067BF8: .4byte gPlayerEntity
|
||||
_08067BFC:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r2, r1]
|
||||
adds r0, #4
|
||||
ldr r1, _08067C14 @ =gPlayerEntity
|
||||
movs r4, #0x2e
|
||||
ldrsh r1, [r1, r4]
|
||||
cmp r0, r1
|
||||
bge _08067C12
|
||||
movs r0, #0x40
|
||||
orrs r0, r3
|
||||
_08067C10:
|
||||
strb r0, [r2, #0x18]
|
||||
_08067C12:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08067C14: .4byte gPlayerEntity
|
||||
|
||||
thumb_func_start sub_08067C18
|
||||
sub_08067C18: @ 0x08067C18
|
||||
push {lr}
|
||||
movs r1, #6
|
||||
strb r1, [r0, #0xc]
|
||||
bl InitAnimationForceUpdate
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08067C24
|
||||
sub_08067C24: @ 0x08067C24
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #7
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x75
|
||||
movs r0, #0x14
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_08067DDC
|
||||
adds r0, r4, #0
|
||||
movs r1, #7
|
||||
bl InitAnimationForceUpdate
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08067C44
|
||||
sub_08067C44: @ 0x08067C44
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _08067C6C @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
rsbs r0, r0, #0
|
||||
lsrs r5, r0, #0x1f
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x69
|
||||
ldrb r0, [r0]
|
||||
cmp r5, r0
|
||||
beq _08067C7C
|
||||
cmp r5, #0
|
||||
bne _08067C70
|
||||
adds r0, r4, #0
|
||||
bl sub_08078778
|
||||
b _08067C7C
|
||||
.align 2, 0
|
||||
_08067C6C: .4byte gPlayerState
|
||||
_08067C70:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_080787A8
|
||||
_08067C7C:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x69
|
||||
strb r5, [r0]
|
||||
subs r0, #0x30
|
||||
movs r1, #0
|
||||
ldrsb r1, [r0, r1]
|
||||
adds r5, r0, #0
|
||||
cmp r1, #0
|
||||
beq _08067D1C
|
||||
ldr r1, _08067CB4 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
bl sub_0806FCA0
|
||||
adds r2, r0, #0
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _08067CA6
|
||||
cmp r0, #3
|
||||
beq _08067CB8
|
||||
_08067CA6:
|
||||
cmp r2, #2
|
||||
bne _08067CDA
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl InitAnimationForceUpdate
|
||||
b _08067CEC
|
||||
.align 2, 0
|
||||
_08067CB4: .4byte gPlayerEntity
|
||||
_08067CB8:
|
||||
cmp r2, #1
|
||||
bne _08067CC4
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
b _08067CD4
|
||||
_08067CC4:
|
||||
ldrb r1, [r4, #0x18]
|
||||
lsls r0, r1, #0x19
|
||||
lsrs r0, r0, #0x1f
|
||||
cmp r0, #3
|
||||
bne _08067CD6
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
_08067CD4:
|
||||
strb r0, [r4, #0x18]
|
||||
_08067CD6:
|
||||
cmp r2, #2
|
||||
beq _08067CE4
|
||||
_08067CDA:
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl InitAnimationForceUpdate
|
||||
b _08067CEC
|
||||
_08067CE4:
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl InitAnimationForceUpdate
|
||||
_08067CEC:
|
||||
movs r0, #0
|
||||
ldrsb r0, [r5, r0]
|
||||
cmp r0, #2
|
||||
bne _08067D00
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F118
|
||||
b _08067D12
|
||||
_08067D00:
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
bl sub_08067790
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
_08067D12:
|
||||
movs r0, #0
|
||||
strb r0, [r5]
|
||||
movs r0, #0xd2
|
||||
bl SoundReq
|
||||
_08067D1C:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08067D20
|
||||
sub_08067D20: @ 0x08067D20
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x75
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _08067D34
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
b _08067D70
|
||||
_08067D34:
|
||||
movs r0, #2
|
||||
bl sub_08049DF4
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _08067D70
|
||||
ldrb r0, [r4, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
movs r3, #0x28
|
||||
cmp r0, #0
|
||||
bge _08067D4C
|
||||
movs r3, #0x10
|
||||
_08067D4C:
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r5, #0x2e
|
||||
ldrsh r0, [r4, r5]
|
||||
subs r0, r0, r3
|
||||
subs r1, r1, r0
|
||||
cmp r1, #0x30
|
||||
bhi _08067D70
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r2, r1]
|
||||
adds r0, #4
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
subs r0, r0, r1
|
||||
cmp r0, #0x38
|
||||
bhi _08067D70
|
||||
movs r0, #1
|
||||
b _08067D72
|
||||
_08067D70:
|
||||
movs r0, #0
|
||||
_08067D72:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_08067D74
|
||||
sub_08067D74: @ 0x08067D74
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #5
|
||||
beq _08067DC8
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _08067D88
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
_08067D88:
|
||||
movs r0, #2
|
||||
bl sub_08049DF4
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _08067DC8
|
||||
ldrb r0, [r4, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
movs r3, #0x18
|
||||
cmp r0, #0
|
||||
bge _08067DA0
|
||||
movs r3, #8
|
||||
_08067DA0:
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r5, #0x2e
|
||||
ldrsh r0, [r4, r5]
|
||||
subs r0, r0, r3
|
||||
subs r1, r1, r0
|
||||
cmp r1, #0x1e
|
||||
bhi _08067DC8
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r2, r1]
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
subs r0, r0, r1
|
||||
cmp r0, #0x16
|
||||
bhi _08067DC8
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
bne _08067DC8
|
||||
movs r0, #1
|
||||
b _08067DCA
|
||||
_08067DC8:
|
||||
movs r0, #0
|
||||
_08067DCA:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_08067DCC
|
||||
sub_08067DCC: @ 0x08067DCC
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
adds r2, #0x71
|
||||
strb r1, [r2]
|
||||
bl InitAnimationForceUpdate
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08067DDC
|
||||
sub_08067DDC: @ 0x08067DDC
|
||||
adds r2, r0, #0
|
||||
ldrb r1, [r2, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
movs r1, #0
|
||||
strb r0, [r2, #0x10]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x41
|
||||
strb r1, [r0]
|
||||
subs r0, #4
|
||||
strb r1, [r0]
|
||||
ldr r0, _08067DF8 @ =gUnk_08110EF0
|
||||
str r0, [r2, #0x48]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08067DF8: .4byte gUnk_08110EF0
|
||||
|
||||
thumb_func_start Cat_Fusion
|
||||
Cat_Fusion: @ 0x08067DFC
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #0xc]
|
||||
cmp r0, #0
|
||||
bne _08067E22
|
||||
adds r0, #1
|
||||
strb r0, [r2, #0xc]
|
||||
ldrb r1, [r2, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
adds r0, r2, #0
|
||||
movs r1, #5
|
||||
bl InitAnimationForceUpdate
|
||||
b _08067E28
|
||||
_08067E22:
|
||||
adds r0, r2, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
_08067E28:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
@@ -1,887 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Dog
|
||||
Dog: @ 0x08069B1C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08069B40 @ =gUnk_08111D88
|
||||
ldrb r0, [r4, #0xc]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
adds r0, r4, #0
|
||||
bl sub_0806ED78
|
||||
adds r0, r4, #0
|
||||
bl sub_08069FE8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08069B40: .4byte gUnk_08111D88
|
||||
|
||||
thumb_func_start sub_08069B44
|
||||
sub_08069B44: @ 0x08069B44
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
bl sub_08069EF0
|
||||
cmp r0, #0
|
||||
beq _08069C30
|
||||
adds r0, r5, #0
|
||||
bl sub_0805ACC0
|
||||
cmp r0, #0
|
||||
bne _08069B64
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r5, r0]
|
||||
movs r2, #0x32
|
||||
ldrsh r4, [r5, r2]
|
||||
b _08069B68
|
||||
_08069B64:
|
||||
lsrs r1, r0, #0x10
|
||||
adds r4, r0, #0
|
||||
_08069B68:
|
||||
ldrb r0, [r5, #0xe]
|
||||
movs r3, #0x20
|
||||
cmp r0, #0
|
||||
beq _08069B72
|
||||
adds r3, r0, #0
|
||||
_08069B72:
|
||||
subs r0, r1, r3
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x6e
|
||||
strh r0, [r2]
|
||||
adds r1, r1, r3
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x6c
|
||||
strh r1, [r0]
|
||||
adds r1, r4, #0
|
||||
subs r1, #8
|
||||
adds r0, #4
|
||||
strh r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #8
|
||||
adds r2, #4
|
||||
strh r0, [r2]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r5, #0x24]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r5, #0xe]
|
||||
movs r4, #2
|
||||
strb r4, [r5, #0x14]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x6a
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
bl sub_0801E99C
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x74
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
adds r0, r5, #0
|
||||
movs r1, #0xa
|
||||
bl InitAnimationForceUpdate
|
||||
ldrb r0, [r5, #0x10]
|
||||
ands r4, r0
|
||||
cmp r4, #0
|
||||
beq _08069BD2
|
||||
adds r0, r5, #0
|
||||
bl sub_0807DD50
|
||||
_08069BD2:
|
||||
ldrb r0, [r5, #0xa]
|
||||
cmp r0, #0
|
||||
bne _08069BF2
|
||||
ldr r0, _08069C34 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08069BF2
|
||||
movs r0, #0x36
|
||||
bl GetInventoryValue
|
||||
cmp r0, #2
|
||||
beq _08069BF2
|
||||
movs r0, #4
|
||||
strb r0, [r5, #0xc]
|
||||
_08069BF2:
|
||||
ldrb r0, [r5, #0xa]
|
||||
cmp r0, #2
|
||||
bne _08069C30
|
||||
movs r0, #0xcf
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _08069C30
|
||||
ldr r0, _08069C38 @ =0x00004072
|
||||
movs r6, #0x2e
|
||||
ldrsh r1, [r5, r6]
|
||||
ldr r3, _08069C3C @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
movs r4, #0x3f
|
||||
ands r1, r4
|
||||
movs r6, #0x32
|
||||
ldrsh r2, [r5, r6]
|
||||
ldrh r3, [r3, #8]
|
||||
adds r3, #8
|
||||
subs r2, r2, r3
|
||||
asrs r2, r2, #4
|
||||
ands r2, r4
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
_08069C30:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08069C34: .4byte gPlayerState
|
||||
_08069C38: .4byte 0x00004072
|
||||
_08069C3C: .4byte gRoomControls
|
||||
|
||||
thumb_func_start sub_08069C40
|
||||
sub_08069C40: @ 0x08069C40
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
bl sub_08069F90
|
||||
cmp r0, #0
|
||||
beq _08069C80
|
||||
ldr r0, _08069C68 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08069C6C
|
||||
adds r0, r4, #0
|
||||
bl sub_08069CB8
|
||||
b _08069C7A
|
||||
.align 2, 0
|
||||
_08069C68: .4byte gPlayerState
|
||||
_08069C6C:
|
||||
adds r0, r4, #0
|
||||
bl GetAnimationState
|
||||
strb r0, [r4, #0x14]
|
||||
adds r0, r4, #0
|
||||
bl sub_08069D00
|
||||
_08069C7A:
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
b _08069CB2
|
||||
_08069C80:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _08069CB2
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
adds r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
bl Random
|
||||
ldr r2, _08069CB4 @ =gUnk_08111DA8
|
||||
movs r1, #7
|
||||
ands r1, r0
|
||||
adds r1, r1, r2
|
||||
ldrb r0, [r1]
|
||||
strb r0, [r4, #0x15]
|
||||
adds r0, r4, #0
|
||||
bl sub_08069F6C
|
||||
_08069CB2:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08069CB4: .4byte gUnk_08111DA8
|
||||
|
||||
thumb_func_start sub_08069CB8
|
||||
sub_08069CB8: @ 0x08069CB8
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08069CF8 @ =gPlayerEntity
|
||||
bl GetFacingDirection
|
||||
ldr r2, _08069CFC @ =gUnk_08111DB0
|
||||
ldrb r1, [r4, #0x14]
|
||||
lsls r1, r1, #5
|
||||
adds r0, r0, r1
|
||||
adds r0, r0, r2
|
||||
ldrb r1, [r0]
|
||||
lsrs r0, r1, #6
|
||||
strb r0, [r4, #0x14]
|
||||
movs r0, #0x3f
|
||||
ands r1, r0
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x6b
|
||||
strb r1, [r5]
|
||||
adds r0, r4, #0
|
||||
bl sub_0806A028
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
ldrb r1, [r5]
|
||||
cmp r0, r1
|
||||
beq _08069CF6
|
||||
ldrb r1, [r5]
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_08069CF6:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08069CF8: .4byte gPlayerEntity
|
||||
_08069CFC: .4byte gUnk_08111DB0
|
||||
|
||||
thumb_func_start sub_08069D00
|
||||
sub_08069D00: @ 0x08069D00
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x6b
|
||||
movs r7, #8
|
||||
strb r7, [r5]
|
||||
bl sub_0806A028
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x58
|
||||
ldrb r0, [r6]
|
||||
cmp r0, #0x1f
|
||||
bls _08069D2A
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08069D4E
|
||||
strb r7, [r5]
|
||||
_08069D2A:
|
||||
bl Random
|
||||
ldr r1, _08069D50 @ =0x000001FF
|
||||
ands r1, r0
|
||||
cmp r1, #2
|
||||
bhi _08069D3C
|
||||
adds r0, r4, #0
|
||||
bl sub_08069FBC
|
||||
_08069D3C:
|
||||
ldrb r2, [r6]
|
||||
ldrb r1, [r5]
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r1, r1, r0
|
||||
cmp r2, r1
|
||||
beq _08069D4E
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_08069D4E:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08069D50: .4byte 0x000001FF
|
||||
|
||||
thumb_func_start sub_08069D54
|
||||
sub_08069D54: @ 0x08069D54
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_08069F90
|
||||
cmp r0, #0
|
||||
bne _08069DD8
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
beq _08069DD8
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement
|
||||
ldrh r1, [r4, #0x2a]
|
||||
movs r0, #0x2e
|
||||
ldrsh r2, [r4, r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6e
|
||||
ldrh r0, [r0]
|
||||
cmp r2, r0
|
||||
bge _08069D92
|
||||
adds r0, #1
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r1, #0xe0
|
||||
lsls r1, r1, #4
|
||||
b _08069DA4
|
||||
_08069D92:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6c
|
||||
ldrh r0, [r0]
|
||||
cmp r2, r0
|
||||
ble _08069DA4
|
||||
subs r0, #1
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r1, #0xe0
|
||||
lsls r1, r1, #8
|
||||
_08069DA4:
|
||||
movs r0, #0x32
|
||||
ldrsh r2, [r4, r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x70
|
||||
ldrh r0, [r0]
|
||||
cmp r2, r0
|
||||
bge _08069DBA
|
||||
adds r0, #1
|
||||
strh r0, [r4, #0x32]
|
||||
movs r1, #0xe
|
||||
b _08069DCA
|
||||
_08069DBA:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x72
|
||||
ldrh r0, [r0]
|
||||
cmp r2, r0
|
||||
ble _08069DCA
|
||||
subs r0, #1
|
||||
strh r0, [r4, #0x32]
|
||||
movs r1, #0xe0
|
||||
_08069DCA:
|
||||
adds r0, r4, #0
|
||||
bl sub_0800417E
|
||||
adds r0, r4, #0
|
||||
bl sub_08069F6C
|
||||
b _08069DF6
|
||||
_08069DD8:
|
||||
adds r0, r4, #0
|
||||
bl sub_08069F90
|
||||
cmp r0, #0
|
||||
beq _08069DE6
|
||||
movs r0, #1
|
||||
b _08069DE8
|
||||
_08069DE6:
|
||||
movs r0, #3
|
||||
_08069DE8:
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
adds r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
_08069DF6:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08069DF8
|
||||
sub_08069DF8: @ 0x08069DF8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
bl sub_08069F90
|
||||
cmp r0, #0
|
||||
beq _08069E0E
|
||||
movs r0, #1
|
||||
b _08069E34
|
||||
_08069E0E:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
beq _08069E22
|
||||
adds r0, r4, #0
|
||||
bl sub_08069D00
|
||||
b _08069E42
|
||||
_08069E22:
|
||||
bl Random
|
||||
movs r1, #0xff
|
||||
ands r1, r0
|
||||
cmp r1, #0x2f
|
||||
bhi _08069E32
|
||||
movs r0, #2
|
||||
b _08069E34
|
||||
_08069E32:
|
||||
movs r0, #3
|
||||
_08069E34:
|
||||
strb r0, [r4, #0xc]
|
||||
bl Random
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
adds r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
_08069E42:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08069E44
|
||||
sub_08069E44: @ 0x08069E44
|
||||
push {lr}
|
||||
movs r1, #0
|
||||
bl sub_0807DD94
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08069E50
|
||||
sub_08069E50: @ 0x08069E50
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetAnimationState
|
||||
strb r0, [r4, #0x14]
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x6b
|
||||
movs r7, #8
|
||||
strb r7, [r5]
|
||||
adds r0, r4, #0
|
||||
bl sub_0806A028
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x58
|
||||
ldrb r0, [r6]
|
||||
cmp r0, #0x1f
|
||||
bls _08069E88
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08069EC8
|
||||
strb r7, [r5]
|
||||
_08069E88:
|
||||
adds r0, r4, #0
|
||||
bl sub_08069FBC
|
||||
ldrb r2, [r6]
|
||||
ldrb r1, [r5]
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r1, r1, r0
|
||||
cmp r2, r1
|
||||
beq _08069EA0
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_08069EA0:
|
||||
movs r0, #0x36
|
||||
bl GetInventoryValue
|
||||
cmp r0, #2
|
||||
bne _08069EC8
|
||||
movs r0, #7
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x29
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r4, #0
|
||||
bl sub_080788E0
|
||||
movs r0, #0xd1
|
||||
bl EnqueueSFX
|
||||
movs r0, #0xcd
|
||||
bl EnqueueSFX
|
||||
_08069EC8:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08069ECC
|
||||
sub_08069ECC: @ 0x08069ECC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateFuseInteraction
|
||||
cmp r0, #0
|
||||
beq _08069EDC
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
_08069EDC:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08069EE0
|
||||
sub_08069EE0: @ 0x08069EE0
|
||||
push {lr}
|
||||
bl UpdateAnimationSingleFrame
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08069EE8
|
||||
sub_08069EE8: @ 0x08069EE8
|
||||
movs r1, #5
|
||||
strb r1, [r0, #0xc]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08069EF0
|
||||
sub_08069EF0: @ 0x08069EF0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r1, r0, #1
|
||||
adds r1, r1, r0
|
||||
lsls r1, r1, #2
|
||||
ldr r0, _08069F20 @ =gUnk_08111D58
|
||||
adds r1, r1, r0
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _08069F28
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r1, _08069F24 @ =gUnk_08111E30
|
||||
ldrb r0, [r4, #0xa]
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
movs r0, #1
|
||||
b _08069F2A
|
||||
.align 2, 0
|
||||
_08069F20: .4byte gUnk_08111D58
|
||||
_08069F24: .4byte gUnk_08111E30
|
||||
_08069F28:
|
||||
movs r0, #0
|
||||
_08069F2A:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start Dog_Head
|
||||
Dog_Head: @ 0x08069F2C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r2, [r0]
|
||||
movs r0, #0x81
|
||||
rsbs r0, r0, #0
|
||||
ands r2, r0
|
||||
cmp r2, #0
|
||||
beq _08069F46
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
ldrh r0, [r0]
|
||||
adds r2, r2, r0
|
||||
_08069F46:
|
||||
subs r2, #1
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl SetExtraSpriteFrame
|
||||
ldrb r2, [r4, #0x1e]
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl SetExtraSpriteFrame
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl SetSpriteSubEntryOffsetData1
|
||||
adds r0, r4, #0
|
||||
bl sub_0807000C
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08069F6C
|
||||
sub_08069F6C: @ 0x08069F6C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0x15]
|
||||
bl sub_0806F5A4
|
||||
strb r0, [r4, #0x14]
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r1, r0, #4
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
cmp r1, r0
|
||||
beq _08069F8C
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_08069F8C:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08069F90
|
||||
sub_08069F90: @ 0x08069F90
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #2
|
||||
bne _08069FA8
|
||||
movs r0, #0xcf
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _08069FA8
|
||||
movs r0, #1
|
||||
b _08069FB4
|
||||
_08069FA8:
|
||||
ldr r1, _08069FB8 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
movs r2, #0x14
|
||||
movs r3, #0x14
|
||||
bl sub_080041A0
|
||||
_08069FB4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08069FB8: .4byte gPlayerEntity
|
||||
|
||||
thumb_func_start sub_08069FBC
|
||||
sub_08069FBC: @ 0x08069FBC
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldr r0, _08069FE4 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
movs r1, #0x20
|
||||
cmp r0, #0
|
||||
beq _08069FD0
|
||||
movs r1, #0x24
|
||||
_08069FD0:
|
||||
ldrb r0, [r2, #0x14]
|
||||
cmp r0, #1
|
||||
beq _08069FDA
|
||||
cmp r0, #3
|
||||
bne _08069FE0
|
||||
_08069FDA:
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x6b
|
||||
strb r1, [r0]
|
||||
_08069FE0:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08069FE4: .4byte gPlayerState
|
||||
|
||||
thumb_func_start sub_08069FE8
|
||||
sub_08069FE8: @ 0x08069FE8
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _0806A010 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
rsbs r0, r0, #0
|
||||
lsrs r5, r0, #0x1f
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6a
|
||||
ldrb r0, [r0]
|
||||
cmp r5, r0
|
||||
beq _0806A020
|
||||
cmp r5, #0
|
||||
bne _0806A014
|
||||
adds r0, r4, #0
|
||||
bl sub_08078778
|
||||
b _0806A020
|
||||
.align 2, 0
|
||||
_0806A010: .4byte gPlayerState
|
||||
_0806A014:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x74
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_080787A8
|
||||
_0806A020:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6a
|
||||
strb r5, [r0]
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_0806A028
|
||||
sub_0806A028: @ 0x0806A028
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x39
|
||||
movs r2, #0
|
||||
ldrsb r2, [r0, r2]
|
||||
cmp r2, #0
|
||||
beq _0806A07E
|
||||
ldr r0, _0806A054 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806A060
|
||||
cmp r2, #2
|
||||
bne _0806A058
|
||||
movs r0, #6
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F118
|
||||
b _0806A076
|
||||
.align 2, 0
|
||||
_0806A054: .4byte gPlayerState
|
||||
_0806A058:
|
||||
adds r0, r4, #0
|
||||
bl sub_0806A080
|
||||
b _0806A076
|
||||
_0806A060:
|
||||
adds r0, r4, #0
|
||||
bl sub_08069FBC
|
||||
adds r0, r4, #0
|
||||
bl sub_0806A080
|
||||
movs r0, #0xd1
|
||||
bl SoundReq
|
||||
bl sub_080791D0
|
||||
_0806A076:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x39
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
_0806A07E:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0806A080
|
||||
sub_0806A080: @ 0x0806A080
|
||||
push {lr}
|
||||
ldrb r2, [r0, #0xb]
|
||||
lsls r1, r2, #2
|
||||
adds r1, r1, r2
|
||||
lsls r1, r1, #4
|
||||
ldr r2, _0806A09C @ =gSave
|
||||
ldrb r2, [r2, #8]
|
||||
lsls r2, r2, #3
|
||||
ldr r3, _0806A0A0 @ =gUnk_08111E34
|
||||
adds r2, r2, r3
|
||||
adds r1, r1, r2
|
||||
bl ShowNPCDialogue
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0806A09C: .4byte gSave
|
||||
_0806A0A0: .4byte gUnk_08111E34
|
||||
|
||||
thumb_func_start sub_0806A0A4
|
||||
sub_0806A0A4: @ 0x0806A0A4
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _0806A0F8 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806A100
|
||||
movs r5, #4
|
||||
movs r0, #0xcf
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _0806A120
|
||||
movs r5, #3
|
||||
movs r0, #0xcf
|
||||
bl SetLocalFlag
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
ldr r2, _0806A0FC @ =gRoomControls
|
||||
ldrh r1, [r2, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
movs r3, #0x3f
|
||||
ands r0, r3
|
||||
movs r6, #0x32
|
||||
ldrsh r1, [r4, r6]
|
||||
ldrh r2, [r2, #8]
|
||||
adds r2, #8
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r3
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
ldrb r1, [r1]
|
||||
bl sub_0807BA8C
|
||||
b _0806A120
|
||||
.align 2, 0
|
||||
_0806A0F8: .4byte gPlayerState
|
||||
_0806A0FC: .4byte gRoomControls
|
||||
_0806A100:
|
||||
movs r5, #2
|
||||
movs r0, #0xcf
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _0806A120
|
||||
movs r5, #1
|
||||
movs r0, #0xdb
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _0806A120
|
||||
movs r5, #0
|
||||
movs r0, #0xdb
|
||||
bl SetLocalFlag
|
||||
_0806A120:
|
||||
ldr r2, _0806A13C @ =gUnk_08111F74
|
||||
ldr r0, _0806A140 @ =gSave
|
||||
ldrb r1, [r0, #8]
|
||||
lsls r0, r1, #2
|
||||
adds r0, r0, r1
|
||||
adds r0, r0, r5
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
bl TextboxNoOverlap
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0806A13C: .4byte gUnk_08111F74
|
||||
_0806A140: .4byte gSave
|
||||
|
||||
thumb_func_start sub_0806A144
|
||||
sub_0806A144: @ 0x0806A144
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
movs r4, #4
|
||||
ldr r0, _0806A18C @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806A17A
|
||||
movs r4, #3
|
||||
movs r0, #0x46
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
bne _0806A17A
|
||||
movs r0, #0x29
|
||||
bl CheckGlobalFlag
|
||||
cmp r0, #0
|
||||
beq _0806A17A
|
||||
movs r0, #0x85
|
||||
bl CheckLocalFlag
|
||||
movs r4, #2
|
||||
cmp r0, #0
|
||||
bne _0806A17A
|
||||
movs r4, #1
|
||||
_0806A17A:
|
||||
ldr r0, _0806A190 @ =gUnk_08111FD8
|
||||
lsls r1, r4, #1
|
||||
adds r1, r1, r0
|
||||
ldrh r0, [r1]
|
||||
adds r1, r5, #0
|
||||
bl TextboxNoOverlap
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806A18C: .4byte gPlayerState
|
||||
_0806A190: .4byte gUnk_08111FD8
|
||||
|
||||
thumb_func_start Dog_Fusion
|
||||
Dog_Fusion: @ 0x0806A194
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806A1CE
|
||||
adds r0, r4, #0
|
||||
bl sub_08069EF0
|
||||
cmp r0, #0
|
||||
beq _0806A1D4
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x23
|
||||
bl InitializeAnimation
|
||||
b _0806A1D4
|
||||
_0806A1CE:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_0806A1D4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
-106
@@ -1,106 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0805FF2C
|
||||
sub_0805FF2C: @ 0x0805FF2C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
ldr r0, [r5, #8]
|
||||
ldr r1, _0805FF60 @ =0xFFF00004
|
||||
ands r1, r0
|
||||
eors r0, r1
|
||||
str r0, [r5, #8]
|
||||
cmp r1, #0
|
||||
beq _0805FF94
|
||||
movs r6, #0x80
|
||||
lsls r6, r6, #0xd
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x80
|
||||
_0805FF48:
|
||||
mvns r0, r1
|
||||
adds r2, r0, #1
|
||||
ands r2, r1
|
||||
eors r1, r2
|
||||
cmp r2, r6
|
||||
beq _0805FF8C
|
||||
cmp r2, r6
|
||||
bhi _0805FF64
|
||||
cmp r2, #4
|
||||
beq _0805FF76
|
||||
b _0805FF90
|
||||
.align 2, 0
|
||||
_0805FF60: .4byte 0xFFF00004
|
||||
_0805FF64:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xe
|
||||
cmp r2, r0
|
||||
beq _0805FF7A
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xf
|
||||
cmp r2, r0
|
||||
beq _0805FF7E
|
||||
b _0805FF90
|
||||
_0805FF76:
|
||||
movs r0, #9
|
||||
b _0805FF8E
|
||||
_0805FF7A:
|
||||
movs r0, #0xa
|
||||
b _0805FF8E
|
||||
_0805FF7E:
|
||||
ldrb r0, [r4, #0x14]
|
||||
cmp r0, #2
|
||||
bne _0805FF88
|
||||
movs r0, #0xb
|
||||
b _0805FF8E
|
||||
_0805FF88:
|
||||
movs r0, #0xc
|
||||
b _0805FF8E
|
||||
_0805FF8C:
|
||||
movs r0, #8
|
||||
_0805FF8E:
|
||||
strh r0, [r3]
|
||||
_0805FF90:
|
||||
cmp r1, #0
|
||||
bne _0805FF48
|
||||
_0805FF94:
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
bl HandlePostScriptActions
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start Festari_Fusion
|
||||
Festari_Fusion: @ 0x0805FFA0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0805FFCE
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
adds r0, r4, #0
|
||||
movs r1, #8
|
||||
bl InitAnimationForceUpdate
|
||||
b _0805FFD4
|
||||
_0805FFCE:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
_0805FFD4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
@@ -1,53 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start FusionMenuNPC
|
||||
FusionMenuNPC: @ 0x0806E8CC
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldr r2, _0806E8EC @ =gNPCFunctions
|
||||
ldrb r1, [r3, #0xf]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r2, #8
|
||||
adds r0, r0, r2
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _0806E8F0
|
||||
adds r0, r3, #0
|
||||
bl _call_via_r1
|
||||
b _0806E8F4
|
||||
.align 2, 0
|
||||
_0806E8EC: .4byte gNPCFunctions
|
||||
_0806E8F0:
|
||||
bl DeleteThisEntity
|
||||
_0806E8F4:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start FusionMenuNPC_Head
|
||||
FusionMenuNPC_Head: @ 0x0806E8F8
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldr r2, _0806E918 @ =gNPCFunctions
|
||||
ldrb r1, [r3, #0xf]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r2, #4
|
||||
adds r0, r0, r2
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _0806E916
|
||||
adds r0, r3, #0
|
||||
bl _call_via_r1
|
||||
_0806E916:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0806E918: .4byte gNPCFunctions
|
||||
-110
@@ -1,110 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Gina
|
||||
Gina: @ 0x0806C13C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #1
|
||||
beq _0806C182
|
||||
cmp r0, #1
|
||||
bgt _0806C150
|
||||
cmp r0, #0
|
||||
beq _0806C156
|
||||
b _0806C1D2
|
||||
_0806C150:
|
||||
cmp r0, #2
|
||||
beq _0806C1BE
|
||||
b _0806C1D2
|
||||
_0806C156:
|
||||
movs r2, #1
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
subs r0, #5
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
bl sub_0801E99C
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_08078784
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD50
|
||||
b _0806C1D2
|
||||
_0806C182:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x39
|
||||
movs r1, #0
|
||||
ldrsb r1, [r2, r1]
|
||||
cmp r1, #2
|
||||
bne _0806C1B4
|
||||
movs r0, #0
|
||||
strb r1, [r4, #0xc]
|
||||
strb r0, [r2]
|
||||
ldr r1, _0806C1B0 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
bl GetFacingDirection
|
||||
bl sub_0806F5A4
|
||||
adds r1, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F118
|
||||
b _0806C1D2
|
||||
.align 2, 0
|
||||
_0806C1B0: .4byte gPlayerEntity
|
||||
_0806C1B4:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DD94
|
||||
b _0806C1D2
|
||||
_0806C1BE:
|
||||
adds r0, r4, #0
|
||||
bl UpdateFuseInteraction
|
||||
cmp r0, #0
|
||||
beq _0806C1D2
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x88
|
||||
bl SetLocalFlag
|
||||
_0806C1D2:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start Gina_Fusion
|
||||
Gina_Fusion: @ 0x0806C1D4
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806C1FA
|
||||
adds r0, #1
|
||||
strb r0, [r2, #0xc]
|
||||
ldrb r1, [r2, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
adds r0, r2, #0
|
||||
movs r1, #2
|
||||
bl InitAnimationForceUpdate
|
||||
b _0806C200
|
||||
_0806C1FA:
|
||||
adds r0, r2, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
_0806C200:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
@@ -1,61 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_08069718
|
||||
sub_08069718: @ 0x08069718
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
adds r7, r1, #0
|
||||
bl sub_080696BC
|
||||
adds r6, r0, #0
|
||||
ldr r0, _08069754 @ =gSave
|
||||
adds r0, #0xc0
|
||||
ldrh r0, [r0]
|
||||
cmp r6, r0
|
||||
bgt _08069764
|
||||
ldr r5, _08069758 @ =gRoomVars
|
||||
ldrb r0, [r5, #7]
|
||||
bl sub_0801E7D0
|
||||
cmp r0, #0x62
|
||||
bhi _0806975C
|
||||
rsbs r0, r6, #0
|
||||
bl ModRupees
|
||||
ldrb r1, [r5, #7]
|
||||
movs r0, #0x5c
|
||||
movs r2, #0
|
||||
bl sub_080A7C18
|
||||
movs r0, #0
|
||||
strb r0, [r5, #6]
|
||||
strb r0, [r5, #7]
|
||||
movs r0, #1
|
||||
b _0806976E
|
||||
.align 2, 0
|
||||
_08069754: .4byte gSave
|
||||
_08069758: .4byte gRoomVars
|
||||
_0806975C:
|
||||
ldr r0, _08069760 @ =0x00002C1F
|
||||
b _08069766
|
||||
.align 2, 0
|
||||
_08069760: .4byte 0x00002C1F
|
||||
_08069764:
|
||||
ldr r0, _0806977C @ =0x00002C1E
|
||||
_08069766:
|
||||
adds r1, r4, #0
|
||||
bl TextboxNoOverlap
|
||||
movs r0, #0
|
||||
_0806976E:
|
||||
str r0, [r7, #0x14]
|
||||
ldr r2, _08069780 @ =gActiveScriptInfo
|
||||
ldrb r1, [r2, #7]
|
||||
movs r0, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #7]
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0806977C: .4byte 0x00002C1E
|
||||
_08069780: .4byte gActiveScriptInfo
|
||||
@@ -1,79 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start KingGustaf
|
||||
KingGustaf: @ 0x0806C0B0
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bne _0806C104
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x19]
|
||||
movs r0, #0xd
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #4
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x19]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD50
|
||||
ldr r1, _0806C100 @ =gScreen
|
||||
adds r2, r1, #0
|
||||
adds r2, #0x66
|
||||
movs r0, #0xfd
|
||||
lsls r0, r0, #6
|
||||
strh r0, [r2]
|
||||
adds r1, #0x68
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
strh r0, [r1]
|
||||
strh r0, [r4, #0x24]
|
||||
str r5, [r4, #0x20]
|
||||
b _0806C134
|
||||
.align 2, 0
|
||||
_0806C100: .4byte gScreen
|
||||
_0806C104:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DD94
|
||||
movs r1, #0x24
|
||||
ldrsh r0, [r4, r1]
|
||||
lsls r3, r0, #8
|
||||
ldr r0, [r4, #0x20]
|
||||
adds r3, r3, r0
|
||||
asrs r3, r3, #0x10
|
||||
cmp r3, #0x10
|
||||
ble _0806C11E
|
||||
movs r3, #0x10
|
||||
_0806C11E:
|
||||
cmp r3, #3
|
||||
bgt _0806C124
|
||||
movs r3, #4
|
||||
_0806C124:
|
||||
ldr r2, _0806C138 @ =gScreen
|
||||
lsls r1, r3, #8
|
||||
movs r0, #0x10
|
||||
subs r0, r0, r3
|
||||
orrs r1, r0
|
||||
adds r2, #0x68
|
||||
strh r1, [r2]
|
||||
strh r1, [r4, #0x24]
|
||||
_0806C134:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806C138: .4byte gScreen
|
||||
@@ -1,26 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_08067790
|
||||
sub_08067790: @ 0x08067790
|
||||
push {lr}
|
||||
ldrb r2, [r0, #0xa]
|
||||
lsls r1, r2, #2
|
||||
adds r1, r1, r2
|
||||
lsls r1, r1, #4
|
||||
ldr r2, _080677AC @ =gSave
|
||||
ldrb r2, [r2, #8]
|
||||
lsls r2, r2, #3
|
||||
ldr r3, _080677B0 @ =gUnk_08110EF8
|
||||
adds r2, r2, r3
|
||||
adds r1, r1, r2
|
||||
bl ShowNPCDialogue
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080677AC: .4byte gSave
|
||||
_080677B0: .4byte gUnk_08110EF8
|
||||
-137
@@ -1,137 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start NPC26
|
||||
NPC26: @ 0x08066978
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806699C
|
||||
ldr r0, _08066998 @ =gUnk_081106E0
|
||||
ldrb r1, [r4, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
b _080669B2
|
||||
.align 2, 0
|
||||
_08066998: .4byte gUnk_081106E0
|
||||
_0806699C:
|
||||
ldr r0, _080669B4 @ =gUnk_081106D4
|
||||
ldrb r1, [r4, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
adds r0, r4, #0
|
||||
bl sub_0806ED78
|
||||
_080669B2:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080669B4: .4byte gUnk_081106D4
|
||||
|
||||
thumb_func_start sub_080669B8
|
||||
sub_080669B8: @ 0x080669B8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r2, #1
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
subs r0, #5
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r4, #0
|
||||
bl sub_08078778
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_080669DC
|
||||
sub_080669DC: @ 0x080669DC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #0x28
|
||||
movs r2, #0x28
|
||||
bl sub_0806ED9C
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
bge _080669F2
|
||||
movs r1, #2
|
||||
b _08066A08
|
||||
_080669F2:
|
||||
ldrb r0, [r4, #0xf]
|
||||
cmp r0, #0
|
||||
bne _080669FE
|
||||
movs r0, #0x10
|
||||
strb r0, [r4, #0xf]
|
||||
b _08066A08
|
||||
_080669FE:
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r1, [r0]
|
||||
_08066A08:
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F078
|
||||
cmp r0, #0
|
||||
bne _08066A18
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
_08066A18:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x39
|
||||
movs r0, #0
|
||||
ldrsb r0, [r2, r0]
|
||||
cmp r0, #0
|
||||
beq _08066A2C
|
||||
movs r1, #0
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r2]
|
||||
_08066A2C:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08066A30
|
||||
sub_08066A30: @ 0x08066A30
|
||||
movs r1, #1
|
||||
strb r1, [r0, #0xc]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08066A38
|
||||
sub_08066A38: @ 0x08066A38
|
||||
push {lr}
|
||||
movs r3, #1
|
||||
movs r1, #1
|
||||
strb r1, [r0, #0xc]
|
||||
ldrb r2, [r0, #0x18]
|
||||
subs r1, #5
|
||||
ands r1, r2
|
||||
orrs r1, r3
|
||||
strb r1, [r0, #0x18]
|
||||
bl sub_0807DD50
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08066A50
|
||||
sub_08066A50: @ 0x08066A50
|
||||
push {lr}
|
||||
movs r1, #0
|
||||
bl sub_0807DD94
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
-35
@@ -1,35 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start NPC4F
|
||||
NPC4F: @ 0x0806DD44
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806DD5A
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0xa]
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_0806DD5A:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r4, #0x59
|
||||
ldrb r0, [r4]
|
||||
cmp r0, #0xfe
|
||||
bne _0806DD74
|
||||
bl Random
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
adds r0, #0x14
|
||||
strb r0, [r4]
|
||||
_0806DD74:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
@@ -1,82 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start SmallTownMinish
|
||||
SmallTownMinish: @ 0x0806E278
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806E2A8
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r0, _0806E2A0 @ =gUnk_081142FC
|
||||
str r0, [r4, #0x48]
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD50
|
||||
ldr r3, _0806E2A4 @ =gUnk_08114304
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl sub_08078850
|
||||
b _0806E2B0
|
||||
.align 2, 0
|
||||
_0806E2A0: .4byte gUnk_081142FC
|
||||
_0806E2A4: .4byte gUnk_08114304
|
||||
_0806E2A8:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DD94
|
||||
_0806E2B0:
|
||||
ldr r0, _0806E2CC @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806E2D0
|
||||
ldrb r0, [r4, #0x18]
|
||||
subs r1, #0x84
|
||||
ands r1, r0
|
||||
movs r0, #1
|
||||
orrs r1, r0
|
||||
strb r1, [r4, #0x18]
|
||||
b _0806E2DA
|
||||
.align 2, 0
|
||||
_0806E2CC: .4byte gPlayerState
|
||||
_0806E2D0:
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
_0806E2DA:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0806E2DC
|
||||
sub_0806E2DC: @ 0x0806E2DC
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldr r0, _0806E300 @ =gSave
|
||||
ldrb r0, [r0, #8]
|
||||
subs r0, #2
|
||||
cmp r0, #0
|
||||
bge _0806E2EC
|
||||
movs r0, #0
|
||||
_0806E2EC:
|
||||
ldrb r1, [r3, #0xb]
|
||||
lsls r1, r1, #6
|
||||
lsls r0, r0, #3
|
||||
ldr r2, _0806E304 @ =gUnk_08114308
|
||||
adds r0, r0, r2
|
||||
adds r1, r1, r0
|
||||
adds r0, r3, #0
|
||||
bl ShowNPCDialogue
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0806E300: .4byte gSave
|
||||
_0806E304: .4byte gUnk_08114308
|
||||
@@ -12,7 +12,7 @@ gUnk_081115C0:: @ 081115C0
|
||||
|
||||
gUnk_081115D0:: @ 081115D0
|
||||
.4byte sub_08068AFC
|
||||
.4byte FUN_08068b2c
|
||||
.4byte sub_08068b2c
|
||||
.4byte sub_08068B70
|
||||
|
||||
gUnk_081115DC:: @ 081115DC
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08111B88:: @ 08111B88
|
||||
.4byte sub_08069584
|
||||
.4byte sub_080695AC
|
||||
.4byte sub_080695E8
|
||||
.4byte sub_0806961C
|
||||
|
||||
gUnk_08111B98:: @ 08111B98
|
||||
.4byte sub_0806963C
|
||||
.4byte sub_08069654
|
||||
|
||||
gUnk_08111BA0:: @ 08111BA0
|
||||
.incbin "baserom.gba", 0x111BA0, 0x000001E
|
||||
@@ -1,14 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_081106D4:: @ 081106D4
|
||||
.4byte sub_080669B8
|
||||
.4byte sub_080669DC
|
||||
.4byte sub_08066A30
|
||||
|
||||
gUnk_081106E0:: @ 081106E0
|
||||
.4byte sub_08066A38
|
||||
.4byte sub_08066A50
|
||||
@@ -48,7 +48,7 @@ gUnk_080FC9B0:: @ 080FC9B0
|
||||
.4byte sub_0805141C
|
||||
|
||||
gUnk_080FC9BC:: @ 080FC9BC
|
||||
.4byte FUN_080515c8
|
||||
.4byte sub_080515c8
|
||||
.4byte sub_080515D4
|
||||
.4byte sub_080516E0
|
||||
|
||||
|
||||
@@ -487,7 +487,7 @@ script_08010860:
|
||||
_0807EA94
|
||||
_0807E3E8
|
||||
JumpIfNot script_080108B2
|
||||
Call sub_08069718
|
||||
Call GoronMerchant_TryToBuyKinstone
|
||||
JumpIfNot script_080108B2
|
||||
WaitPlayerAction8
|
||||
_0807EA94
|
||||
|
||||
@@ -551,7 +551,6 @@ SECTIONS {
|
||||
/* npcs */
|
||||
src/npc/gentari.o(.text);
|
||||
src/npc/festari.o(.text);
|
||||
asm/festari.o(.text);
|
||||
src/npc/forestMinish.o(.text);
|
||||
src/npc/postman.o(.text);
|
||||
asm/postman.o(.text);
|
||||
@@ -588,16 +587,13 @@ SECTIONS {
|
||||
asm/npc23.o(.text);
|
||||
asm/kingDaltus.o(.text);
|
||||
asm/ministerPotho.o(.text);
|
||||
asm/npc26.o(.text);
|
||||
src/npc/npc26.o(.text);
|
||||
asm/vaati.o(.text);
|
||||
src/npc/zelda.o(.text);
|
||||
src/npc/mutoh.o(.text);
|
||||
src/npc/carpenter.o(.text);
|
||||
asm/carpenter.o(.text);
|
||||
asm/castorWildsStatue.o(.text);
|
||||
asm/npc/cat.o(.text);
|
||||
src/npc/cat.o(.text);
|
||||
asm/cat.o(.text);
|
||||
asm/mountainMinish.o(.text);
|
||||
src/npc/zeldaFollower.o(.text);
|
||||
asm/zeldaFollower.o(.text);
|
||||
@@ -606,9 +602,8 @@ SECTIONS {
|
||||
src/npc/cow.o(.text);
|
||||
src/npc/goron.o(.text);
|
||||
src/npc/goronMerchant.o(.text);
|
||||
asm/goronMerchant.o(.text);
|
||||
asm/gorman.o(.text);
|
||||
asm/dog.o(.text);
|
||||
src/npc/dog.o(.text);
|
||||
src/npc/syrup.o(.text);
|
||||
asm/syrup.o(.text);
|
||||
src/npc/rem.o(.text);
|
||||
@@ -624,8 +619,8 @@ SECTIONS {
|
||||
src/npc/carlov.o(.text);
|
||||
src/npc/dampe.o(.text);
|
||||
asm/drLeft.o(.text);
|
||||
asm/kingGustaf.o(.text);
|
||||
asm/gina.o(.text);
|
||||
src/npc/kingGustaf.o(.text);
|
||||
src/npc/gina.o(.text);
|
||||
src/npc/simon.o(.text);
|
||||
src/npc/anju.o(.text);
|
||||
asm/mama.o(.text);
|
||||
@@ -638,15 +633,16 @@ SECTIONS {
|
||||
src/npc/bigGoron.o(.text);
|
||||
asm/bigGoron.o(.text);
|
||||
src/npc/ezloCap.o(.text);
|
||||
asm/npc4E.o(.text);
|
||||
src/npc/npc4E.o(.text);
|
||||
src/npc/npc4F.o(.text);
|
||||
src/npc/clothesRack.o(.text);
|
||||
asm/clothesRack.o(.text);
|
||||
asm/picolyteBottles.o(.text);
|
||||
asm/smallTownMinish.o(.text);
|
||||
src/npc/smallTownMinish.o(.text);
|
||||
asm/hurdyGurdyMan.o(.text);
|
||||
asm/cucco.o(.text);
|
||||
asm/cuccoChick.o(.text);
|
||||
asm/fusionMenuNPC.o(.text);
|
||||
src/npc/fusionMenuNPC.o(.text);
|
||||
asm/phonograph.o(.text);
|
||||
asm/npc58.o(.text);
|
||||
/* END npcs */
|
||||
@@ -1294,7 +1290,7 @@ SECTIONS {
|
||||
data/animations/npc/kingDaltus.o(.rodata);
|
||||
data/const/npc/ministerPotho.o(.rodata);
|
||||
data/animations/npc/ministerPotho.o(.rodata);
|
||||
data/const/npc/npc26.o(.rodata);
|
||||
src/npc/npc26.o(.rodata);
|
||||
data/animations/npc/npc26.o(.rodata);
|
||||
data/const/npc/vaati.o(.rodata);
|
||||
data/animations/npc/vaati.o(.rodata);
|
||||
@@ -1317,7 +1313,7 @@ SECTIONS {
|
||||
data/animations/npc/cow.o(.rodata);
|
||||
data/const/npc/goron.o(.rodata);
|
||||
data/animations/npc/goron.o(.rodata);
|
||||
data/const/npc/goronMerchant.o(.rodata);
|
||||
src/npc/goronMerchant.o(.rodata);
|
||||
data/animations/npc/goronMerchant.o(.rodata);
|
||||
data/const/npc/gorman.o(.rodata);
|
||||
data/animations/npc/gorman.o(.rodata);
|
||||
@@ -1346,7 +1342,7 @@ SECTIONS {
|
||||
data/animations/npc/dampe.o(.rodata);
|
||||
data/const/npc/drLeft.o(.rodata);
|
||||
data/animations/npc/drLeft.o(.rodata);
|
||||
data/animations/npc/kingGustav.o(.rodata);
|
||||
data/animations/npc/kingGustaf.o(.rodata);
|
||||
data/animations/npc/gina.o(.rodata);
|
||||
data/animations/npc/simon.o(.rodata);
|
||||
data/animations/npc/anju.o(.rodata);
|
||||
@@ -1363,7 +1359,9 @@ SECTIONS {
|
||||
data/animations/npc/mayorHagen.o(.rodata);
|
||||
data/const/npc/bigGoron.o(.rodata);
|
||||
src/npc/ezloCap.o(.rodata);
|
||||
data/animations/npc/npc4f.o(.rodata);
|
||||
src/npc/npc4E.o(.rodata);
|
||||
src/npc/npc4F.o(.rodata);
|
||||
data/animations/npc/npc4F.o(.rodata);
|
||||
data/const/npc/clothesRack.o(.rodata);
|
||||
data/animations/npc/clothesRack.o(.rodata);
|
||||
data/const/npc/picolyteBottle.o(.rodata);
|
||||
|
||||
@@ -469,7 +469,7 @@ bool32 sub_0802915C(Entity* this) {
|
||||
return TRUE;
|
||||
break;
|
||||
case 0x1c:
|
||||
if (CheckGlobalFlag(0x5a) == 0)
|
||||
if (CheckGlobalFlag(AKINDO_BOTTLE_SELL) == 0)
|
||||
return TRUE;
|
||||
break;
|
||||
case 0x5c:
|
||||
@@ -486,7 +486,7 @@ bool32 sub_08029198(const struct SalesOffering* offer) {
|
||||
if ((offer->field_0x0 & 0xfc) != 0xc) {
|
||||
switch (offer->field_0x8) {
|
||||
case 0x1c:
|
||||
tmp = CheckGlobalFlag(0x5a);
|
||||
tmp = CheckGlobalFlag(AKINDO_BOTTLE_SELL);
|
||||
break;
|
||||
case 0x9:
|
||||
case 0x44:
|
||||
|
||||
+1
-1
@@ -1009,7 +1009,7 @@ void HandleFileDelete(void) {
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
}
|
||||
|
||||
void FUN_080515c8(void) {
|
||||
void sub_080515c8(void) {
|
||||
sub_080A7114(1);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -247,7 +247,7 @@ void InitializePlayer(void) {
|
||||
MemClear((void*)pl, 0x88);
|
||||
gRoomControls.cameraTarget = pl;
|
||||
gPlayerState.playerAction = gUnk_080FCAC8[gScreenTransition.field_0xf];
|
||||
if (!CheckGlobalFlag(0x14)) {
|
||||
if (!CheckGlobalFlag(EZERO_1ST)) {
|
||||
gPlayerState.flags.all |= 8;
|
||||
}
|
||||
switch (gScreenTransition.field_0xf) {
|
||||
|
||||
+1
-1
@@ -1673,4 +1673,4 @@ void ply_xswee(MusicPlayerInfo* mplayInfo, MusicPlayerTrack* track) {
|
||||
}
|
||||
|
||||
void nullsub_544() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ void sub_08068AFC(Entity* this) {
|
||||
sub_0807DD50(this);
|
||||
}
|
||||
|
||||
void FUN_08068b2c(Entity* this) {
|
||||
void sub_08068b2c(Entity* this) {
|
||||
u32 uVar1;
|
||||
|
||||
if (this->interactType == '\x02') {
|
||||
|
||||
@@ -5,9 +5,15 @@
|
||||
#include "npc.h"
|
||||
#include "functions.h"
|
||||
#include "script.h"
|
||||
#include "flags.h"
|
||||
#include "textbox.h"
|
||||
|
||||
extern SpriteLoadData gUnk_08110CA8[];
|
||||
|
||||
extern u16 gUnk_08110CE8[];
|
||||
|
||||
extern Dialog gUnk_08110D00;
|
||||
|
||||
void Carpenter(Entity* this) {
|
||||
if (*(u32*)&this->cutsceneBeh == 0) {
|
||||
DeleteThisEntity();
|
||||
@@ -63,3 +69,35 @@ void Carpenter_Head(Entity* this) {
|
||||
void sub_080672B0(Entity* this, ScriptExecutionContext* context) {
|
||||
InitializeAnimation(this, context->intVariable + (this->animationState >> 1) + this->type * 8);
|
||||
}
|
||||
|
||||
void sub_080672C8(Entity* this) {
|
||||
u32 dialog = 0;
|
||||
u32 tmp;
|
||||
if (GetInventoryValue(0x11) == 0) {
|
||||
tmp = CheckGlobalFlag(TABIDACHI);
|
||||
dialog = BOOLCAST(tmp);
|
||||
}
|
||||
TextboxNoOverlap(gUnk_08110CE8[(dialog * 2 + this->type * 6) / 2], this);
|
||||
}
|
||||
|
||||
void sub_08067304(Entity* this) {
|
||||
ShowNPCDialogue(this, &gUnk_08110D00);
|
||||
}
|
||||
|
||||
void sub_08067314(Entity* this) {
|
||||
this->field_0x68.HALF.LO = sub_0801E99C(this);
|
||||
sub_08078784(this, this->field_0x68.HALF.LO);
|
||||
}
|
||||
|
||||
void Carpenter_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
if (LoadExtraSpriteData(this, &gUnk_08110CA8[this->type * 4]) != 0) {
|
||||
this->action = this->action + 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
sub_0805E3A0(this, 2);
|
||||
InitializeAnimation(this, (u32)this->type * 8 + 2);
|
||||
}
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
}
|
||||
|
||||
+383
-1
@@ -1,11 +1,54 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "save.h"
|
||||
#include "player.h"
|
||||
#include "random.h"
|
||||
#include "textbox.h"
|
||||
#include "npc.h"
|
||||
#include "audio.h"
|
||||
|
||||
extern void sub_0806ED78();
|
||||
extern void sub_08067C44();
|
||||
|
||||
extern void (*gCat[9])(Entity*);
|
||||
|
||||
extern Dialog gUnk_08110EF8;
|
||||
|
||||
extern Hitbox gUnk_08110EF0;
|
||||
extern void sub_08067B08(Entity*);
|
||||
|
||||
extern u32 sub_08067D20();
|
||||
extern void sub_08067AAC(Entity*);
|
||||
extern void sub_08067B34(Entity*);
|
||||
extern void sub_08067B80(Entity*, u32);
|
||||
|
||||
extern void sub_08067B70(Entity*);
|
||||
|
||||
extern void sub_08067C24(Entity*);
|
||||
extern void sub_08067BD4(Entity*);
|
||||
extern u32 sub_08067D74(Entity*);
|
||||
extern void sub_08067C18(Entity*);
|
||||
|
||||
extern Hitbox* gUnk_08111154[8];
|
||||
extern void sub_08067DDC(Entity*);
|
||||
|
||||
extern u16 gUnk_081110FC[4];
|
||||
extern void sub_08067DCC(Entity*, u32);
|
||||
|
||||
extern u8 gUnk_0811110C[2];
|
||||
extern u32 gUnk_0811110F;
|
||||
extern void sub_08078850(Entity*, u32, u8, u32*);
|
||||
|
||||
extern u16 gUnk_08111104[];
|
||||
|
||||
extern u32 sub_0806FCA0(Entity*, Entity*);
|
||||
|
||||
extern Entity* sub_08049DF4(u32);
|
||||
|
||||
void sub_08067790(Entity* this) {
|
||||
ShowNPCDialogue(this, &gUnk_08110EF8 + this->type * 10 + gSave.unk8);
|
||||
}
|
||||
|
||||
// Main
|
||||
void Cat(Entity* ent) {
|
||||
gCat[ent->action](ent);
|
||||
@@ -14,3 +57,342 @@ void Cat(Entity* ent) {
|
||||
sub_0806ED78(ent);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080677EC(Entity* this) {
|
||||
u8 bVar1;
|
||||
u32 uVar2;
|
||||
|
||||
this->spriteSettings.b.draw = 1;
|
||||
this->direction = 8;
|
||||
this->speed = 0x80;
|
||||
this->field_0x3c = 7;
|
||||
this->field_0x40 = 0x48;
|
||||
this->damageType = -0x58;
|
||||
this->flags2 = 1;
|
||||
this->field_0x68.HALF.HI = 0xff;
|
||||
if (this->x.HALF.HI < gPlayerEntity.x.HALF.HI) {
|
||||
this->spriteSettings.b.flipX = 1;
|
||||
} else {
|
||||
this->spriteSettings.b.flipX = 0;
|
||||
}
|
||||
|
||||
this->field_0x68.HALF.LO = sub_0801E99C(this);
|
||||
this->hitbox = &gUnk_08110EF0;
|
||||
uVar2 = sub_0805ACC0(this);
|
||||
if (uVar2 == 0) {
|
||||
uVar2 = this->x.HALF.HI;
|
||||
} else {
|
||||
uVar2 >>= 0x10;
|
||||
}
|
||||
this->field_0x6c.HWORD = uVar2;
|
||||
this->field_0x6e.HWORD = this->actionDelay + uVar2;
|
||||
this->actionDelay = 0;
|
||||
this->field_0x74.HALF.HI = 0;
|
||||
this->field_0x74.HALF.LO = (Random() & 0x7f) + 0x1e;
|
||||
this->field_0x68.HALF.HI = 0xff;
|
||||
sub_08067B08(this);
|
||||
}
|
||||
|
||||
void sub_080678AC(Entity* this) {
|
||||
u32 iVar1;
|
||||
u16* psVar2;
|
||||
|
||||
iVar1 = sub_08067D20();
|
||||
if (iVar1 != 0) {
|
||||
sub_08067B80(this, 5);
|
||||
} else {
|
||||
psVar2 = (u16*)&this->field_0x70.HALF.HI;
|
||||
if (*psVar2 != 0) {
|
||||
*psVar2 = *psVar2 - 1;
|
||||
}
|
||||
if ((this->frames.all == 1) && (*psVar2 == 0)) {
|
||||
sub_08067AAC(this);
|
||||
} else {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if ((this->frames.all & 0x80) != 0) {
|
||||
sub_08067B34(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067904(Entity* this) {
|
||||
if (sub_08067D20() != 0) {
|
||||
sub_08067B80(this, 8);
|
||||
return;
|
||||
}
|
||||
|
||||
this->field_0x70.HALF.HI -= 1;
|
||||
if (this->field_0x70.HALF.HI == 0) {
|
||||
sub_08067B70(this);
|
||||
return;
|
||||
}
|
||||
if (this->direction == 8) {
|
||||
if (this->x.HALF.HI > this->field_0x6e.HWORD) {
|
||||
this->direction = 0x18;
|
||||
this->spriteSettings.b.flipX = 0;
|
||||
}
|
||||
} else {
|
||||
if (this->x.HALF.HI < this->field_0x6c.HWORD) {
|
||||
this->direction = 8;
|
||||
this->spriteSettings.b.flipX = 1;
|
||||
}
|
||||
}
|
||||
sub_0806F69C(this);
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
|
||||
void sub_0806797C(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (this->frames.b.f3 != 0) {
|
||||
sub_08067B08(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806799C(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if ((gTextBox.doTextBox & 0x7f) == 0) {
|
||||
sub_08067B08(this);
|
||||
sub_0805E3A0(this, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080679C4(Entity* this) {
|
||||
if (this->field_0x74.HALF.LO == 0 || --this->field_0x74.HALF.LO == 0 || sub_08067D20(this) == 0) {
|
||||
sub_08067C24(this);
|
||||
} else {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
sub_08067BD4(this);
|
||||
if (sub_08067D74(this) != 0) {
|
||||
sub_08067C18(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067A0C(Entity* this) {
|
||||
u8 tmp;
|
||||
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (this->frames.b.f3 != 0) {
|
||||
if (sub_08067D20(this) != 0) {
|
||||
sub_08067B80(this, 5);
|
||||
this->actionDelay = this->actionDelay + 0x14;
|
||||
} else {
|
||||
sub_08067C24(this);
|
||||
}
|
||||
} else {
|
||||
tmp = (this->frames.all & 7);
|
||||
if (tmp != 0) {
|
||||
this->flags = this->flags | 0x80;
|
||||
this->hitbox = gUnk_08111154[tmp - 1 + ((this->spriteSettings.b.flipX << 2))];
|
||||
} else {
|
||||
sub_08067DDC(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067A78(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (this->frames.b.f3 != 0) {
|
||||
sub_08067AAC(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067A98(Entity* this) {
|
||||
if (UpdateFuseInteraction(this) != 0) {
|
||||
sub_08067B08(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067AAC(Entity* this) {
|
||||
this->action = 2;
|
||||
this->field_0x70.HALF.HI = gUnk_081110FC[(Random() & 3)];
|
||||
|
||||
this->spriteSettings.b.flipX = this->direction >> 4 ^ 1;
|
||||
|
||||
sub_08067DCC(this, 3);
|
||||
sub_08078850(this, 0, gUnk_0811110C[2], &gUnk_0811110F);
|
||||
}
|
||||
|
||||
void sub_08067B08(Entity* this) {
|
||||
this->action = 1;
|
||||
this->field_0x70.HALF.HI = gUnk_08111104[Random() & 3];
|
||||
sub_08067B34(this);
|
||||
}
|
||||
|
||||
void sub_08067B34(Entity* this) {
|
||||
sub_08067DCC(this, 0);
|
||||
this->frameDuration = (Random() & 0x30) + 0xb4;
|
||||
sub_08078850(this, 0, gUnk_0811110C[this->spriteSettings.b.flipX], &gUnk_0811110F);
|
||||
}
|
||||
|
||||
void sub_08067B70(Entity* this) {
|
||||
this->action = 3;
|
||||
sub_08067DCC(this, 4);
|
||||
}
|
||||
|
||||
void sub_08067B80(Entity* this, u32 param) {
|
||||
this->action = 5;
|
||||
this->actionDelay = 0x14;
|
||||
this->field_0x74.HALF.LO = (Random() & 0x7f) + 0x1e;
|
||||
InitAnimationForceUpdate(this, param);
|
||||
sub_08067DDC(this);
|
||||
if (this->x.HALF.HI < gPlayerEntity.x.HALF.HI) {
|
||||
this->spriteSettings.b.flipX = 1;
|
||||
} else {
|
||||
this->spriteSettings.b.flipX = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067BD4(Entity* this) {
|
||||
if (this->spriteSettings.b.flipX > 0) {
|
||||
if (this->x.HALF.HI - 4 > gPlayerEntity.x.HALF.HI) {
|
||||
this->spriteSettings.b.flipX = 0;
|
||||
}
|
||||
} else {
|
||||
if (this->x.HALF.HI + 4 < gPlayerEntity.x.HALF.HI) {
|
||||
this->spriteSettings.b.flipX = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08067C18(Entity* this) {
|
||||
this->action = 6;
|
||||
InitAnimationForceUpdate(this, 6);
|
||||
}
|
||||
|
||||
void sub_08067C24(Entity* this) {
|
||||
this->action = 7;
|
||||
this->field_0x74.HALF.HI = 0x14;
|
||||
sub_08067DDC(this);
|
||||
InitAnimationForceUpdate(this, 7);
|
||||
}
|
||||
|
||||
void sub_08067C44(Entity* this) {
|
||||
s32 iVar4;
|
||||
u32 uVar5;
|
||||
|
||||
uVar5 = -((s32) - (gPlayerState.flags.all & 0x80) >> 0x1f);
|
||||
if (uVar5 != this->field_0x68.HALF.HI) {
|
||||
if (uVar5 == 0) {
|
||||
sub_08078778(this);
|
||||
} else {
|
||||
sub_080787A8(this, this->field_0x68.HALF.LO);
|
||||
}
|
||||
}
|
||||
|
||||
this->field_0x68.HALF.HI = uVar5;
|
||||
|
||||
if (this->interactType == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
iVar4 = sub_0806FCA0(this, &gPlayerEntity);
|
||||
switch (this->animIndex) {
|
||||
case 0:
|
||||
default:
|
||||
if (iVar4 == 2) {
|
||||
InitAnimationForceUpdate(this, 2);
|
||||
} else {
|
||||
InitAnimationForceUpdate(this, 1);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (iVar4 == 1) {
|
||||
this->spriteSettings.b.flipX = 1;
|
||||
} else {
|
||||
if (this->spriteSettings.b.flipX == 3) { // TODO 3 ???
|
||||
this->spriteSettings.b.flipX = 0;
|
||||
}
|
||||
}
|
||||
if (iVar4 != 2) {
|
||||
InitAnimationForceUpdate(this, 1);
|
||||
} else {
|
||||
InitAnimationForceUpdate(this, 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (this->interactType == 2) {
|
||||
this->action = 8;
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
this->action = 4;
|
||||
sub_08067790(this);
|
||||
sub_0805E3A0(this, 2);
|
||||
}
|
||||
this->interactType = 0;
|
||||
SoundReq(SFX_VO_CAT);
|
||||
}
|
||||
|
||||
u32 sub_08067D20(Entity* this) {
|
||||
s32 tmp;
|
||||
Entity* entity;
|
||||
int iVar4;
|
||||
if (this->field_0x74.HALF.HI != 0) {
|
||||
this->field_0x74.HALF.HI -= 1;
|
||||
} else {
|
||||
entity = sub_08049DF4(2);
|
||||
if (entity != NULL) {
|
||||
tmp = this->spriteSettings.raw * 0x2000000; // TODO maybe convert to ternary?
|
||||
iVar4 = 0x28;
|
||||
if (tmp < 0) {
|
||||
iVar4 = 0x10;
|
||||
}
|
||||
|
||||
if (((u32)(entity->x.HALF.HI - (this->x.HALF.HI - iVar4)) < 0x31) &&
|
||||
((((u32)entity->y.HALF.HI) - (this->y.HALF.HI - 4)) < 0x39)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_08067D74(Entity* this) {
|
||||
Entity* entity;
|
||||
int iVar2;
|
||||
s32 tmp;
|
||||
|
||||
if (this->type != 5) {
|
||||
if (this->actionDelay != 0) {
|
||||
this->actionDelay -= 1;
|
||||
}
|
||||
entity = sub_08049DF4(2);
|
||||
if (entity != NULL) {
|
||||
tmp = (this->spriteSettings.raw * 0x2000000); // TODO convert to ternary?
|
||||
iVar2 = 0x18;
|
||||
if (tmp < 0) {
|
||||
iVar2 = 8;
|
||||
}
|
||||
if ((((u32)(entity->x.HALF.HI - (this->x.HALF.HI - iVar2)) < 0x1f) &&
|
||||
((u32)(entity->y.HALF.HI - this->y.HALF.HI) < 0x17)) &&
|
||||
(this->actionDelay == 0)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_08067DCC(Entity* this, u32 param) {
|
||||
this->field_0x70.BYTES.byte1 = param;
|
||||
InitAnimationForceUpdate(this, param);
|
||||
}
|
||||
|
||||
void sub_08067DDC(Entity* this) {
|
||||
this->flags = this->flags & 0x7f;
|
||||
this->bitfield = 0;
|
||||
this->iframes = 0;
|
||||
this->hitbox = &gUnk_08110EF0;
|
||||
}
|
||||
|
||||
void Cat_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
InitAnimationForceUpdate(this, 5);
|
||||
} else {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
}
|
||||
|
||||
+360
@@ -0,0 +1,360 @@
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "script.h"
|
||||
#include "flags.h"
|
||||
#include "random.h"
|
||||
#include "npc.h"
|
||||
#include "audio.h"
|
||||
#include "save.h"
|
||||
#include "textbox.h"
|
||||
|
||||
extern void (*gUnk_08111D88[])(Entity*);
|
||||
void sub_08069FE8(Entity*);
|
||||
u32 sub_08069EF0();
|
||||
|
||||
extern u8 gUnk_08111DA8[];
|
||||
u32 sub_08069F90(Entity*);
|
||||
void sub_08069F6C(Entity*);
|
||||
void sub_08069D00(Entity*);
|
||||
void sub_08069CB8(Entity*);
|
||||
|
||||
extern u8 gUnk_08111DB0[];
|
||||
void sub_0806A028(Entity*);
|
||||
|
||||
void sub_08069FBC(Entity*);
|
||||
|
||||
extern SpriteLoadData gUnk_08111D58[];
|
||||
extern u8 gUnk_08111E30[];
|
||||
|
||||
void sub_0806A080(Entity*);
|
||||
|
||||
extern Dialog gUnk_08111E34[];
|
||||
|
||||
extern u16 gUnk_08111F74[];
|
||||
|
||||
extern u16 gUnk_08111FD8[];
|
||||
|
||||
void Dog(Entity* this) {
|
||||
gUnk_08111D88[this->action](this);
|
||||
sub_0806ED78(this);
|
||||
sub_08069FE8(this);
|
||||
}
|
||||
|
||||
void sub_08069B44(Entity* this) {
|
||||
u32 uVar2;
|
||||
u32 sVar3;
|
||||
u32 uVar4;
|
||||
u32 uVar5;
|
||||
if (sub_08069EF0() != 0) {
|
||||
uVar5 = sub_0805ACC0(this);
|
||||
if (uVar5 == 0) {
|
||||
sVar3 = this->x.HALF.HI;
|
||||
uVar2 = this->y.HALF.HI;
|
||||
} else {
|
||||
sVar3 = uVar5 >> 0x10;
|
||||
uVar2 = uVar5;
|
||||
}
|
||||
|
||||
uVar4 = this->actionDelay == 0 ? 0x20 : this->actionDelay;
|
||||
|
||||
this->field_0x6e.HWORD = sVar3 - uVar4;
|
||||
this->field_0x6c.HWORD = sVar3 + uVar4;
|
||||
this->field_0x70.HALF.LO = uVar2 - 8;
|
||||
this->field_0x70.HALF.HI = uVar2 + 8;
|
||||
this->speed = 0x100;
|
||||
this->actionDelay = 0x1e;
|
||||
this->animationState = 2;
|
||||
this->field_0x6a.HALF.LO = 0xff;
|
||||
this->field_0x74.HALF.LO = sub_0801E99C(this);
|
||||
sub_0805E3A0(this, 2);
|
||||
InitAnimationForceUpdate(this, 10);
|
||||
if ((this->flags & 2) != 0) {
|
||||
sub_0807DD50(this);
|
||||
}
|
||||
if (((this->type == 0) && ((gPlayerState.flags.all & 0x80) == 0)) && (GetInventoryValue(0x36) != 2)) {
|
||||
this->action = 4;
|
||||
}
|
||||
if ((this->type == 2) && (CheckLocalFlag(0xcf) == 0)) {
|
||||
SetTile(0x4072, TILE(this->x.HALF.HI, this->y.HALF.HI - 8), this->collisionLayer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069C40(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (sub_08069F90(this) != 0) {
|
||||
if ((gPlayerState.flags.all & 0x80) != 0) {
|
||||
sub_08069CB8(this);
|
||||
} else {
|
||||
this->animationState = GetAnimationState(this);
|
||||
sub_08069D00(this);
|
||||
}
|
||||
this->actionDelay = 0x1e;
|
||||
} else {
|
||||
this->actionDelay -= 1;
|
||||
if (this->actionDelay == 0) {
|
||||
this->action = 2;
|
||||
this->actionDelay = (Random() & 0x1f) + 0x1e;
|
||||
this->direction = gUnk_08111DA8[Random() & 7];
|
||||
sub_08069F6C(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069CB8(Entity* this) {
|
||||
u32 direction;
|
||||
u32 animState;
|
||||
|
||||
direction = GetFacingDirection(this, &gPlayerEntity);
|
||||
animState = gUnk_08111DB0[direction + this->animationState * 0x20];
|
||||
this->animationState = animState >> 6;
|
||||
this->field_0x6a.HALF.HI = animState & 0x3f;
|
||||
sub_0806A028(this);
|
||||
if (this->animIndex != this->field_0x6a.HALF.HI) {
|
||||
InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069D00(Entity* this) {
|
||||
this->field_0x6a.HALF.HI = 8;
|
||||
sub_0806A028(this);
|
||||
if (0x1f < this->animIndex) {
|
||||
if ((this->frames.all & 0x80) == 0) {
|
||||
return;
|
||||
}
|
||||
this->field_0x6a.HALF.HI = 8;
|
||||
}
|
||||
if ((Random() & 0x1ff) < 3) {
|
||||
sub_08069FBC(this);
|
||||
}
|
||||
if (this->animIndex != this->field_0x6a.HALF.HI + this->animationState) {
|
||||
InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI + this->animationState);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069D54(Entity* this) {
|
||||
u16 collisions;
|
||||
if (sub_08069F90(this) == 0) {
|
||||
this->actionDelay -= 1;
|
||||
if (this->actionDelay != 0) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
ProcessMovement(this);
|
||||
collisions = this->collisions;
|
||||
|
||||
if (this->x.HALF.HI < this->field_0x6e.HWORD) {
|
||||
this->x.HALF.HI = this->field_0x6e.HWORD + 1;
|
||||
collisions = 0xe00;
|
||||
} else if (this->x.HALF.HI > this->field_0x6c.HWORD) {
|
||||
this->x.HALF.HI = this->field_0x6c.HWORD - 1;
|
||||
collisions = 0xe000;
|
||||
}
|
||||
if (this->y.HALF.HI < this->field_0x70.HALF_U.LO) {
|
||||
this->y.HALF.HI = this->field_0x70.HALF_U.LO + 1;
|
||||
collisions = 0xe;
|
||||
} else if (this->y.HALF.HI > this->field_0x70.HALF_U.HI) {
|
||||
this->y.HALF.HI = this->field_0x70.HALF_U.HI - 1;
|
||||
collisions = 0xe0;
|
||||
}
|
||||
sub_0800417E(this, collisions);
|
||||
sub_08069F6C(this);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (sub_08069F90(this) != 0) {
|
||||
this->action = 1;
|
||||
} else {
|
||||
this->action = 3;
|
||||
}
|
||||
this->actionDelay = (Random() & 0x1f) + 0x1e;
|
||||
}
|
||||
|
||||
void sub_08069DF8(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (sub_08069F90(this) != 0) {
|
||||
this->action = 1;
|
||||
} else {
|
||||
this->actionDelay -= 1;
|
||||
if (this->actionDelay != 0) {
|
||||
sub_08069D00(this);
|
||||
return;
|
||||
}
|
||||
if ((Random() & 0xff) < 0x30) {
|
||||
this->action = 2;
|
||||
} else {
|
||||
this->action = 3;
|
||||
}
|
||||
}
|
||||
this->actionDelay = (Random() & 0x1f) + 0x1e;
|
||||
}
|
||||
|
||||
void sub_08069E44(Entity* this) {
|
||||
sub_0807DD94(this, NULL);
|
||||
}
|
||||
|
||||
void sub_08069E50(Entity* this) {
|
||||
this->animationState = GetAnimationState(this);
|
||||
this->field_0x6a.HALF.HI = 8;
|
||||
sub_0806A028(this);
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (this->animIndex > 0x1f) {
|
||||
if ((this->frames.all & 0x80) == 0) {
|
||||
return;
|
||||
}
|
||||
this->field_0x6a.HALF.HI = 8;
|
||||
}
|
||||
sub_08069FBC(this);
|
||||
if (this->animIndex != this->field_0x6a.HALF.HI + this->animationState) {
|
||||
InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI + this->animationState);
|
||||
}
|
||||
if (GetInventoryValue(0x36) == 2) {
|
||||
this->action = 7;
|
||||
InitAnimationForceUpdate(this, 0x29);
|
||||
sub_080788E0(this);
|
||||
EnqueueSFX(0xd1);
|
||||
EnqueueSFX(0xcd);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069ECC(Entity* this) {
|
||||
if (UpdateFuseInteraction(this) != 0) {
|
||||
this->action = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069EE0(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
|
||||
void sub_08069EE8(Entity* this) {
|
||||
this->action = 5;
|
||||
}
|
||||
|
||||
u32 sub_08069EF0(Entity* this) {
|
||||
if (LoadExtraSpriteData(this, &gUnk_08111D58[this->type * 3]) == 0) {
|
||||
return 0;
|
||||
}
|
||||
this->action = 1;
|
||||
this->field_0x68.HWORD = gUnk_08111E30[this->type];
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Dog_Head(Entity* this) {
|
||||
u32 frame;
|
||||
frame = this->frames.all & 0xffffff7f;
|
||||
if (frame != 0) {
|
||||
frame = frame + this->field_0x68.HWORD;
|
||||
}
|
||||
SetExtraSpriteFrame(this, 0, frame - 1);
|
||||
SetExtraSpriteFrame(this, 1, this->frameIndex);
|
||||
SetSpriteSubEntryOffsetData1(this, 1, 0);
|
||||
sub_0807000C(this);
|
||||
}
|
||||
|
||||
void sub_08069F6C(Entity* this) {
|
||||
this->animationState = sub_0806F5A4(this->direction);
|
||||
if (this->animationState + 4 != this->animIndex) {
|
||||
InitAnimationForceUpdate(this, this->animationState + 4);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_08069F90(Entity* this) {
|
||||
if ((this->type == 2) && (CheckLocalFlag(0xcf) == 0)) {
|
||||
return 1;
|
||||
} else {
|
||||
return sub_080041A0(this, &gPlayerEntity, 0x14, 0x14);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069FBC(Entity* this) {
|
||||
u32 tmp = (gPlayerState.flags.all & 0x80) != 0 ? 0x24 : 0x20;
|
||||
if ((this->animationState == 1) || (this->animationState == 3)) {
|
||||
this->field_0x6a.HALF.HI = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08069FE8(Entity* this) {
|
||||
u32 tmp = -((s32) - (gPlayerState.flags.all & 0x80) >> 0x1f);
|
||||
if (tmp != this->field_0x6a.HALF.LO) {
|
||||
if (tmp == 0) {
|
||||
sub_08078778(this);
|
||||
} else {
|
||||
sub_080787A8(this, this->field_0x74.HALF.LO);
|
||||
}
|
||||
}
|
||||
this->field_0x6a.HALF.LO = tmp;
|
||||
}
|
||||
|
||||
void sub_0806A028(Entity* this) {
|
||||
if (this->interactType != 0) {
|
||||
if ((gPlayerState.flags.all & 0x80) != 0) {
|
||||
if (this->interactType == 2) {
|
||||
this->action = 6;
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
sub_0806A080(this);
|
||||
}
|
||||
} else {
|
||||
sub_08069FBC(this);
|
||||
sub_0806A080(this);
|
||||
SoundReq(SFX_VO_DOG);
|
||||
sub_080791D0();
|
||||
}
|
||||
this->interactType = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806A080(Entity* this) {
|
||||
ShowNPCDialogue(this, (Dialog*)&gUnk_08111E34 + this->type2 * 10 + gSave.unk8);
|
||||
}
|
||||
|
||||
void sub_0806A0A4(Entity* this) {
|
||||
s32 dialog;
|
||||
|
||||
if ((gPlayerState.flags.all & 0x80) != 0) {
|
||||
dialog = 4;
|
||||
if (CheckLocalFlag(0xcf) == 0) {
|
||||
dialog = 3;
|
||||
SetLocalFlag(0xcf);
|
||||
sub_0807BA8C(TILE(this->x.HALF.HI, this->y.HALF.HI - 8), (u32)this->collisionLayer);
|
||||
}
|
||||
} else {
|
||||
|
||||
dialog = 2;
|
||||
if (CheckLocalFlag(0xcf) == 0) {
|
||||
dialog = 1;
|
||||
if (CheckLocalFlag(0xdb) == 0) {
|
||||
dialog = 0;
|
||||
SetLocalFlag(0xdb);
|
||||
}
|
||||
}
|
||||
}
|
||||
TextboxNoOverlap(gUnk_08111F74[(u32)gSave.unk8 * 5 + dialog], this);
|
||||
}
|
||||
|
||||
void sub_0806A144(Entity* this) {
|
||||
s32 dialog = 4;
|
||||
if ((gPlayerState.flags.all & 0x80) != 0) {
|
||||
dialog = 3;
|
||||
if ((GetInventoryValue(0x46) == 0) && (CheckGlobalFlag(0x29) != 0)) {
|
||||
if (CheckLocalFlag(0x85) == 0) {
|
||||
dialog = 1;
|
||||
} else {
|
||||
dialog = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
TextboxNoOverlap(gUnk_08111FD8[dialog], this);
|
||||
}
|
||||
|
||||
void Dog_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
if (sub_08069EF0(this) != 0) {
|
||||
this->action += 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
sub_0805E3A0(this, 2);
|
||||
InitializeAnimation(this, 0x23);
|
||||
}
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,11 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "flags.h"
|
||||
#include "save.h"
|
||||
#include "script.h"
|
||||
#include "audio.h"
|
||||
#include "object.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern Hitbox gUnk_080FD170;
|
||||
extern void script_08016030; // Cutscene data type?
|
||||
extern void script_0801606C; // Cutscene data type?
|
||||
|
||||
extern void sub_0809623C(Entity*);
|
||||
extern void sub_08096260(Entity*);
|
||||
|
||||
const u8 gUnk_08114134[];
|
||||
const u8 gUnk_08114144[];
|
||||
const Hitbox gUnk_08114154;
|
||||
const u8 gUnk_0811415C[];
|
||||
const ScreenTransitionData* const gUnk_081141A4[];
|
||||
const u8 gUnk_081141E4[];
|
||||
const u16 gUnk_081141F4[];
|
||||
|
||||
typedef struct {
|
||||
u32 unk_00;
|
||||
s8 unk_04;
|
||||
} gUnk_0810C89C_struct;
|
||||
|
||||
extern void sub_08078850(Entity*, u32, u8 /* TODO this is a s8 in beedle.c*/, gUnk_0810C89C_struct*);
|
||||
|
||||
// Ezlo as a cap in the Minish Woods, is destroyed as soon as link wears ezlo
|
||||
void EzloCap(Entity* this) {
|
||||
@@ -93,211 +71,6 @@ void sub_0806D9A4(Entity* this) {
|
||||
gPlayerEntity.animationState = 4;
|
||||
}
|
||||
|
||||
// NPC4E is created when link enters minish woods for the first time and
|
||||
// destroyed once he wears ezlo. Also exists when entering hyrule for the second time
|
||||
// and fusing kinstones. Is destroyed as soon as the kinstone is fused.
|
||||
void NPC4E(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = 4;
|
||||
this->hitbox = &gUnk_080FD170;
|
||||
sub_0807DD50(this);
|
||||
} else {
|
||||
sub_0807DD94(this, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DA04(Entity* this, ScriptExecutionContext* context) {
|
||||
// TODO gUnk_0811415C should be a gUnk_0810C89C_struct[], but then a lot of bytes everywhere are wrong?
|
||||
gUnk_0810C89C_struct* a = (gUnk_0810C89C_struct*)&(
|
||||
(gUnk_0810C89C_struct*)gUnk_0811415C)[context->intVariable]; // cast necessary to no longer make it a const* ?
|
||||
sub_08078850(this, 1, a->unk_04, a);
|
||||
}
|
||||
|
||||
void sub_0806DA1C(Entity* this, ScriptExecutionContext* context) {
|
||||
sub_0808091C((ScreenTransitionData*)(gUnk_081141A4)[context->intVariable],
|
||||
(u32)(gUnk_081141E4[context->intVariable]));
|
||||
}
|
||||
|
||||
// Returns the kinstone id?
|
||||
u8 sub_0806DA3C(Entity* this) {
|
||||
u32 result;
|
||||
|
||||
switch (this->type) {
|
||||
default:
|
||||
result = 0;
|
||||
break;
|
||||
case 1:
|
||||
result = 1;
|
||||
break;
|
||||
case 2:
|
||||
result = 2;
|
||||
break;
|
||||
case 3:
|
||||
result = 3;
|
||||
break;
|
||||
case 4:
|
||||
result = 4;
|
||||
break;
|
||||
case 5:
|
||||
result = 5;
|
||||
break;
|
||||
case 11:
|
||||
result = 9;
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
result = sub_0801E99C(this);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check whether a kinstone fusion is possible and store the result somewhere in param_2?
|
||||
void sub_0806DAAC(Entity* this, ScriptExecutionContext* context) {
|
||||
context->condition = CheckKinstoneFused(sub_0806DA3C(this));
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
// maybe actually execute the kinstone fusion?
|
||||
void sub_0806DAD0(Entity* this) {
|
||||
sub_08078790(this, sub_0806DA3C(this));
|
||||
}
|
||||
|
||||
void sub_0806DAE8(Entity* this) {
|
||||
switch (this->type - 1) {
|
||||
case 0:
|
||||
SetLocalFlag(0xee);
|
||||
break;
|
||||
case 1:
|
||||
SetLocalFlag(0xef);
|
||||
break;
|
||||
case 2:
|
||||
SetLocalFlag(0xf0);
|
||||
break;
|
||||
case 3:
|
||||
SetLocalFlag(0xf1);
|
||||
break;
|
||||
case 4:
|
||||
SetLocalFlag(0xf2);
|
||||
break;
|
||||
}
|
||||
|
||||
SoundReq(SFX_TASK_COMPLETE);
|
||||
}
|
||||
|
||||
void sub_0806DB44(Entity* this, ScriptExecutionContext* context) {
|
||||
context->condition = 0;
|
||||
|
||||
if (CheckLocalFlag(0xee) != 0 && CheckLocalFlag(0xef) != 0 && CheckLocalFlag(0xf0) != 0 &&
|
||||
CheckLocalFlag(0xf1) != 0 && CheckLocalFlag(0xf2) != 0) {
|
||||
context->condition = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DB84(Entity* this, ScriptExecutionContext* context) {
|
||||
Entity* ent;
|
||||
this->hitbox = (Hitbox*)&gUnk_08114154;
|
||||
ent = CreateObject(OBJECT_3E, 4, 0);
|
||||
if (ent != NULL) {
|
||||
PositionRelative(this, ent, -0x80000, 0);
|
||||
*(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_08016030);
|
||||
}
|
||||
ent = CreateObject(OBJECT_3E, 5, 0);
|
||||
if (ent != NULL) {
|
||||
PositionRelative(this, ent, 0x80000, 0);
|
||||
*(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_0801606C);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0806DBF4(u32 param_1) {
|
||||
switch (param_1) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 6:
|
||||
param_1 = 1;
|
||||
if (GetInventoryValue(2) != 0) {
|
||||
param_1 = 2;
|
||||
}
|
||||
if (GetInventoryValue(3) != 0) {
|
||||
param_1 = 3;
|
||||
}
|
||||
if (GetInventoryValue(4) != 0) {
|
||||
param_1 = 4;
|
||||
}
|
||||
if (GetInventoryValue(6) != 0) {
|
||||
param_1 = 6;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return param_1;
|
||||
}
|
||||
|
||||
void sub_0806DC3C(Entity* this) {
|
||||
this->field_0x68.HALF.LO = gSave.stats.itemOnA;
|
||||
this->field_0x68.HALF.HI = gSave.stats.itemOnB;
|
||||
}
|
||||
|
||||
void sub_0806DC58(Entity* this) {
|
||||
ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.LO), 0);
|
||||
ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.HI), 1);
|
||||
}
|
||||
|
||||
void sub_0806DC7C() {
|
||||
const u16* tiles = gUnk_081141F4;
|
||||
while (*tiles != 0) {
|
||||
u32 tile = *tiles;
|
||||
tiles = tiles + 1;
|
||||
SetTileType(0x4072, tile, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DCA0() {
|
||||
u16 uVar1;
|
||||
const u16* tiles = gUnk_081141F4;
|
||||
while (*tiles != 0) {
|
||||
u32 tile = *tiles;
|
||||
tiles = tiles + 1;
|
||||
sub_0807BA8C(tile, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DCC0() {
|
||||
gScreenTransition.field_0x20 = 0x7c8;
|
||||
gScreenTransition.field_0x22 = 0xf8;
|
||||
}
|
||||
|
||||
void NPC4E_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
switch (this->type) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
sub_0809623C(this);
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
sub_08096260(this);
|
||||
break;
|
||||
case 11:
|
||||
sub_0806DB84(this, 0);
|
||||
this->hitbox = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// animation states
|
||||
const u8 gUnk_08114134[] = { 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04,
|
||||
0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x00 };
|
||||
@@ -305,38 +78,3 @@ const u8 gUnk_08114134[] = { 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04,
|
||||
// animation states
|
||||
const u8 gUnk_08114144[] = { 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04,
|
||||
0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x00 };
|
||||
|
||||
const Hitbox gUnk_08114154 = { 0, -8, 0, 0, 0, 0, 24, 8 };
|
||||
|
||||
const u8 gUnk_0811415C[] = { 0x00, 0x00, 0x08, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x0e, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x10, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x0e,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x08,
|
||||
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x08, 0x0e, 0x00, 0x00, 0x00 };
|
||||
extern ScreenTransitionData gUnk_0813AB6C;
|
||||
extern ScreenTransitionData gUnk_0813ABBC;
|
||||
extern ScreenTransitionData gUnk_0813ABE4;
|
||||
extern ScreenTransitionData gUnk_0813ABF8;
|
||||
extern ScreenTransitionData gUnk_0813AC0C;
|
||||
extern ScreenTransitionData gUnk_0813AC20;
|
||||
extern ScreenTransitionData gUnk_0813AC5C;
|
||||
extern ScreenTransitionData gUnk_0813AC70;
|
||||
extern ScreenTransitionData gUnk_0813AC84;
|
||||
extern ScreenTransitionData gUnk_0813AC98;
|
||||
extern ScreenTransitionData gUnk_0813ACAC;
|
||||
extern ScreenTransitionData gUnk_0813ACC0;
|
||||
extern ScreenTransitionData gUnk_0813ACD4;
|
||||
extern ScreenTransitionData gUnk_0813ACE8;
|
||||
extern ScreenTransitionData gUnk_0813ACFC;
|
||||
// Array of pointers to ScreenTransitionData
|
||||
const ScreenTransitionData* const gUnk_081141A4[] = { &gUnk_0813AB6C, &gUnk_0813ABBC, &gUnk_0813ABE4, &gUnk_0813ABF8,
|
||||
&gUnk_0813AC0C, &gUnk_0813AC20, &gUnk_0813AC5C, &gUnk_0813AC70,
|
||||
&gUnk_0813AC84, &gUnk_0813AC98, &gUnk_0813ACAC, &gUnk_0813ACC0,
|
||||
&gUnk_0813ACD4, &gUnk_0813ACE8, &gUnk_0813AC5C, &gUnk_0813ACFC };
|
||||
|
||||
// param_2 for the call to sub_0808091C, same indices as gUnk_081141A4
|
||||
const u8 gUnk_081141E4[] = { 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x09, 0x02,
|
||||
0x02, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02 };
|
||||
|
||||
// tiles that are changed?
|
||||
const u16 gUnk_081141F4[] = { 0x047a, 0x047b, 0x05af, 0x05ef, 0x0738, 0x0739, 0x073a, 0x073b, 0x0000, 0x0000 };
|
||||
|
||||
+50
-2
@@ -5,10 +5,12 @@
|
||||
#include "player.h"
|
||||
#include "script.h"
|
||||
|
||||
extern void sub_0805FF2C(Entity*, void*);
|
||||
extern void sub_0805FF2C(Entity*, ScriptExecutionContext*);
|
||||
|
||||
extern void (*const gUnk_08109BBC[])(Entity*);
|
||||
|
||||
extern void HandlePostScriptActions(Entity*, ScriptExecutionContext*);
|
||||
|
||||
void Festari(Entity* this) {
|
||||
gUnk_08109BBC[this->action](this);
|
||||
}
|
||||
@@ -35,7 +37,7 @@ void sub_0805FE48(Entity* this) {
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
ExecuteScript(this, *(ScriptExecutionContext**)&this->cutsceneBeh);
|
||||
sub_0805FF2C(this, *(void**)&this->cutsceneBeh);
|
||||
sub_0805FF2C(this, *(ScriptExecutionContext**)&this->cutsceneBeh);
|
||||
uVar4 = this->field_0x80.HWORD;
|
||||
if (uVar4 < 8) {
|
||||
if ((this->field_0x82.HWORD & 1) != 0) {
|
||||
@@ -71,3 +73,49 @@ void sub_0805FF18(Entity* this) {
|
||||
this->action = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805FF2C(Entity* this, ScriptExecutionContext* context) {
|
||||
u32 actions;
|
||||
u32 bit;
|
||||
|
||||
// Handle some postScriptActions already before calling HandlePostScriptActions
|
||||
actions = context->postScriptActions & 0xfff00004;
|
||||
context->postScriptActions = context->postScriptActions ^ actions;
|
||||
if (actions != 0) {
|
||||
while (actions != 0) {
|
||||
bit = (~actions + 1) & actions;
|
||||
actions ^= bit;
|
||||
switch (bit) {
|
||||
case 4:
|
||||
this->field_0x80.HWORD = 9;
|
||||
break;
|
||||
|
||||
case 0x200000:
|
||||
this->field_0x80.HWORD = 10;
|
||||
break;
|
||||
case 0x400000:
|
||||
if (this->animationState == 2) {
|
||||
this->field_0x80.HWORD = 0xb;
|
||||
} else {
|
||||
this->field_0x80.HWORD = 0xc;
|
||||
}
|
||||
break;
|
||||
case 0x100000:
|
||||
this->field_0x80.HWORD = 8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
HandlePostScriptActions(this, context);
|
||||
}
|
||||
|
||||
void Festari_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
sub_0805E3A0(this, 2);
|
||||
InitAnimationForceUpdate(this, 8);
|
||||
} else {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "npc.h"
|
||||
|
||||
void FusionMenuNPC(Entity* this) {
|
||||
if (gNPCFunctions[this->field_0xf][2] != NULL) {
|
||||
gNPCFunctions[this->field_0xf][2](this);
|
||||
} else {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void FusionMenuNPC_Head(Entity* this) {
|
||||
if (gNPCFunctions[this->field_0xf][1] != NULL) {
|
||||
gNPCFunctions[this->field_0xf][1](this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "npc.h"
|
||||
#include "flags.h"
|
||||
#include "functions.h"
|
||||
#include "script.h"
|
||||
|
||||
void Gina(Entity* this) {
|
||||
switch (this->action) {
|
||||
case 0:
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
|
||||
this->field_0x68.HALF.LO = sub_0801E99C(this);
|
||||
sub_08078784(this, this->field_0x68.HALF.LO);
|
||||
sub_0807DD50(this);
|
||||
break;
|
||||
case 1:
|
||||
if (this->interactType == 2) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)));
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
sub_0807DD94(this, NULL);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (UpdateFuseInteraction(this) != 0) {
|
||||
this->action = 1;
|
||||
SetLocalFlag(0x88);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Gina_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
InitAnimationForceUpdate(this, 2);
|
||||
} else {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
}
|
||||
+78
-22
@@ -6,13 +6,16 @@
|
||||
#include "room.h"
|
||||
#include "flags.h"
|
||||
#include "script.h"
|
||||
#include "save.h"
|
||||
|
||||
extern u32 sub_080696BC(Entity*);
|
||||
extern u32 GoronMerchant_GetSalePrice(Entity*);
|
||||
|
||||
extern void (*const gUnk_08111B88[])(Entity*);
|
||||
extern void (*const gUnk_08111B98[])(Entity*);
|
||||
|
||||
extern u16 gUnk_08111BA0[];
|
||||
const u16 GoronMerchant_KinstonePrices[];
|
||||
|
||||
extern u32 sub_0801E7D0(u32);
|
||||
|
||||
void GoronMerchant(Entity* this) {
|
||||
if ((this->flags & 2) != 0) {
|
||||
@@ -78,7 +81,7 @@ void sub_08069660(Entity* this) {
|
||||
u32 uVar1;
|
||||
|
||||
TextboxNoOverlap(0x2c1c, this);
|
||||
gTextBox.field_0x10 = (u16)sub_080696BC(this);
|
||||
gTextBox.field_0x10 = (u16)GoronMerchant_GetSalePrice(this);
|
||||
}
|
||||
|
||||
void sub_08069684(void) {
|
||||
@@ -98,33 +101,86 @@ void sub_080696B0(void) {
|
||||
gRoomVars.itemForSaleIndex = 0;
|
||||
}
|
||||
|
||||
u32 sub_080696BC(Entity* this) {
|
||||
u32 uVar1;
|
||||
u32 GoronMerchant_GetSalePrice(Entity* this) {
|
||||
u32 restockCount;
|
||||
u32 temp;
|
||||
u32 iVar3;
|
||||
s32 temp2;
|
||||
u32 kinstoneType;
|
||||
s32 itemForSale;
|
||||
|
||||
temp2 = gRoomVars.field_0x7;
|
||||
if (temp2 > 0x70) {
|
||||
iVar3 = 1;
|
||||
itemForSale = gRoomVars.field_0x7;
|
||||
if (itemForSale > 0x70) {
|
||||
kinstoneType = 1;
|
||||
} else {
|
||||
iVar3 = 0;
|
||||
kinstoneType = 0;
|
||||
}
|
||||
if (temp2 > 0x72) {
|
||||
iVar3 = 2;
|
||||
if (itemForSale > 0x72) {
|
||||
kinstoneType = 2;
|
||||
}
|
||||
|
||||
temp = CheckGlobalFlag(0x3e);
|
||||
uVar1 = BOOLCAST(temp);
|
||||
temp = CheckGlobalFlag(GORON_KAKERA_LV2);
|
||||
restockCount = BOOLCAST(temp);
|
||||
|
||||
if (CheckGlobalFlag(0x3f)) {
|
||||
uVar1 = 2;
|
||||
if (CheckGlobalFlag(GORON_KAKERA_LV3)) {
|
||||
restockCount = 2;
|
||||
}
|
||||
if (CheckGlobalFlag(0x40)) {
|
||||
uVar1 = 3;
|
||||
if (CheckGlobalFlag(GORON_KAKERA_LV4)) {
|
||||
restockCount = 3;
|
||||
}
|
||||
if (CheckGlobalFlag(0x41)) {
|
||||
uVar1 = 4;
|
||||
if (CheckGlobalFlag(GORON_KAKERA_LV5)) {
|
||||
restockCount = 4;
|
||||
}
|
||||
return gUnk_08111BA0[uVar1 * 3 + iVar3];
|
||||
return GoronMerchant_KinstonePrices[restockCount * 3 + kinstoneType];
|
||||
}
|
||||
|
||||
void GoronMerchant_TryToBuyKinstone(Entity* this, ScriptExecutionContext* context) {
|
||||
s32 salePrice = GoronMerchant_GetSalePrice(this);
|
||||
if (salePrice <= gSave.stats.rupees) {
|
||||
if (sub_0801E7D0(gRoomVars.field_0x7) < 99) {
|
||||
ModRupees(-salePrice);
|
||||
sub_080A7C18(0x5c, gRoomVars.field_0x7, 0);
|
||||
gRoomVars.itemForSaleIndex = 0;
|
||||
gRoomVars.field_0x7 = 0;
|
||||
context->condition = 1;
|
||||
} else {
|
||||
TextboxNoOverlap(0x2c1f, this);
|
||||
context->condition = 0;
|
||||
}
|
||||
} else {
|
||||
TextboxNoOverlap(0x2c1e, this);
|
||||
context->condition = 0;
|
||||
}
|
||||
gActiveScriptInfo.flags = gActiveScriptInfo.flags | 1;
|
||||
}
|
||||
|
||||
void (*const gUnk_08111B88[])(Entity*) = {
|
||||
sub_08069584,
|
||||
sub_080695AC,
|
||||
sub_080695E8,
|
||||
sub_0806961C,
|
||||
};
|
||||
void (*const gUnk_08111B98[])(Entity*) = {
|
||||
sub_0806963C,
|
||||
sub_08069654,
|
||||
};
|
||||
|
||||
const u16 GoronMerchant_KinstonePrices[] = {
|
||||
300,
|
||||
200,
|
||||
50,
|
||||
// prices after restock 1
|
||||
300,
|
||||
200,
|
||||
50,
|
||||
// prices after restock 2
|
||||
300,
|
||||
200,
|
||||
50,
|
||||
// prices after restock 3
|
||||
300,
|
||||
200,
|
||||
50,
|
||||
// prices after restock 4
|
||||
300,
|
||||
200,
|
||||
50,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "script.h"
|
||||
#include "screen.h"
|
||||
|
||||
void KingGustaf(Entity* this) {
|
||||
s32 speed;
|
||||
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
this->spriteRendering.alphaBlend = 1;
|
||||
this->collisionLayer = 2;
|
||||
sub_0805E3A0(this, 2);
|
||||
sub_0807DD50(this);
|
||||
gScreen.controls.layerFXControl = 0x3f40;
|
||||
gScreen.controls.alphaBlend = 0x1000;
|
||||
this->speed = 0x1000;
|
||||
this->field_0x20 = 0;
|
||||
} else {
|
||||
sub_0807DD94(this, 0);
|
||||
speed = 0x100;
|
||||
speed *= this->speed;
|
||||
speed += this->field_0x20;
|
||||
speed >>= 0x10;
|
||||
if (speed > 0x10) {
|
||||
speed = 0x10;
|
||||
}
|
||||
if (speed < 4) {
|
||||
speed = 4;
|
||||
}
|
||||
gScreen.controls.alphaBlend = (speed << 8) | (0x10 - speed);
|
||||
this->speed = gScreen.controls.alphaBlend;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -43,7 +43,7 @@ void sub_0806B260(Entity* this, ScriptExecutionContext* context) {
|
||||
context->condition = 0;
|
||||
// flippers
|
||||
if (!GetInventoryValue(0x46)) {
|
||||
if (CheckGlobalFlag(0x29)) {
|
||||
if (CheckGlobalFlag(MIZUKAKI_START)) {
|
||||
index = 2;
|
||||
context->condition = 1;
|
||||
} else if (!CheckLocalFlag(0x7a)) {
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "script.h"
|
||||
|
||||
static void (*const gUnk_081106D4[])(Entity*);
|
||||
static void (*const gUnk_081106E0[])(Entity*);
|
||||
|
||||
void NPC26(Entity* this) {
|
||||
if ((this->flags & 2) != 0) {
|
||||
gUnk_081106E0[this->action](this);
|
||||
} else {
|
||||
gUnk_081106D4[this->action](this);
|
||||
sub_0806ED78(this);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080669B8(Entity* this) {
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
InitAnimationForceUpdate(this, 2);
|
||||
sub_08078778(this);
|
||||
}
|
||||
|
||||
static void sub_080669DC(Entity* this) {
|
||||
s32 sVar1;
|
||||
s32 sVar2;
|
||||
|
||||
sVar1 = sub_0806ED9C(this, 0x28, 0x28);
|
||||
if (sVar1 < 0) {
|
||||
sVar1 = 2;
|
||||
} else {
|
||||
if (this->field_0xf == 0) {
|
||||
this->field_0xf = 0x10;
|
||||
} else {
|
||||
this->field_0xf = this->field_0xf - 1;
|
||||
sVar1 = this->animIndex;
|
||||
}
|
||||
}
|
||||
sVar2 = sub_0806F078(this, sVar1);
|
||||
if (sVar2 == 0) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
if (this->interactType != 0) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_08066A30(Entity* this) {
|
||||
this->action = 1;
|
||||
}
|
||||
|
||||
static void sub_08066A38(Entity* this) {
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
sub_0807DD50(this);
|
||||
}
|
||||
|
||||
static void sub_08066A50(Entity* this) {
|
||||
sub_0807DD94(this, NULL);
|
||||
}
|
||||
|
||||
static void (*const gUnk_081106D4[])(Entity*) = { sub_080669B8, sub_080669DC, sub_08066A30 };
|
||||
|
||||
static void (*const gUnk_081106E0[])(Entity*) = { sub_08066A38, sub_08066A50 };
|
||||
+273
@@ -0,0 +1,273 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "script.h"
|
||||
#include "functions.h"
|
||||
#include "audio.h"
|
||||
#include "save.h"
|
||||
#include "flags.h"
|
||||
#include "object.h"
|
||||
|
||||
extern Hitbox gUnk_080FD170;
|
||||
typedef struct {
|
||||
u32 unk_00;
|
||||
s8 unk_04;
|
||||
} gUnk_0810C89C_struct;
|
||||
|
||||
extern void sub_08078850(Entity*, u32, u8 /* TODO this is a s8 in beedle.c*/, gUnk_0810C89C_struct*);
|
||||
|
||||
extern void script_08016030; // Cutscene data type?
|
||||
extern void script_0801606C; // Cutscene data type?
|
||||
|
||||
const Hitbox gUnk_08114154;
|
||||
const u8 gUnk_0811415C[];
|
||||
const ScreenTransitionData* const gUnk_081141A4[];
|
||||
const u8 gUnk_081141E4[];
|
||||
const u16 gUnk_081141F4[];
|
||||
|
||||
extern void sub_0809623C(Entity*);
|
||||
extern void sub_08096260(Entity*);
|
||||
|
||||
// NPC4E is created when link enters minish woods for the first time and
|
||||
// destroyed once he wears ezlo. Also exists when entering hyrule for the second time
|
||||
// and fusing kinstones. Is destroyed as soon as the kinstone is fused.
|
||||
void NPC4E(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = 4;
|
||||
this->hitbox = &gUnk_080FD170;
|
||||
sub_0807DD50(this);
|
||||
} else {
|
||||
sub_0807DD94(this, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DA04(Entity* this, ScriptExecutionContext* context) {
|
||||
// TODO gUnk_0811415C should be a gUnk_0810C89C_struct[], but then a lot of bytes everywhere are wrong?
|
||||
gUnk_0810C89C_struct* a = (gUnk_0810C89C_struct*)&(
|
||||
(gUnk_0810C89C_struct*)gUnk_0811415C)[context->intVariable]; // cast necessary to no longer make it a const* ?
|
||||
sub_08078850(this, 1, a->unk_04, a);
|
||||
}
|
||||
|
||||
void sub_0806DA1C(Entity* this, ScriptExecutionContext* context) {
|
||||
sub_0808091C((ScreenTransitionData*)(gUnk_081141A4)[context->intVariable],
|
||||
(u32)(gUnk_081141E4[context->intVariable]));
|
||||
}
|
||||
|
||||
// Returns the kinstone id?
|
||||
u8 sub_0806DA3C(Entity* this) {
|
||||
u32 result;
|
||||
|
||||
switch (this->type) {
|
||||
default:
|
||||
result = 0;
|
||||
break;
|
||||
case 1:
|
||||
result = 1;
|
||||
break;
|
||||
case 2:
|
||||
result = 2;
|
||||
break;
|
||||
case 3:
|
||||
result = 3;
|
||||
break;
|
||||
case 4:
|
||||
result = 4;
|
||||
break;
|
||||
case 5:
|
||||
result = 5;
|
||||
break;
|
||||
case 11:
|
||||
result = 9;
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
result = sub_0801E99C(this);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check whether a kinstone fusion is possible and store the result somewhere in param_2?
|
||||
void sub_0806DAAC(Entity* this, ScriptExecutionContext* context) {
|
||||
context->condition = CheckKinstoneFused(sub_0806DA3C(this));
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
// maybe actually execute the kinstone fusion?
|
||||
void sub_0806DAD0(Entity* this) {
|
||||
sub_08078790(this, sub_0806DA3C(this));
|
||||
}
|
||||
|
||||
void sub_0806DAE8(Entity* this) {
|
||||
switch (this->type - 1) {
|
||||
case 0:
|
||||
SetLocalFlag(0xee);
|
||||
break;
|
||||
case 1:
|
||||
SetLocalFlag(0xef);
|
||||
break;
|
||||
case 2:
|
||||
SetLocalFlag(0xf0);
|
||||
break;
|
||||
case 3:
|
||||
SetLocalFlag(0xf1);
|
||||
break;
|
||||
case 4:
|
||||
SetLocalFlag(0xf2);
|
||||
break;
|
||||
}
|
||||
|
||||
SoundReq(SFX_TASK_COMPLETE);
|
||||
}
|
||||
|
||||
void sub_0806DB44(Entity* this, ScriptExecutionContext* context) {
|
||||
context->condition = 0;
|
||||
|
||||
if (CheckLocalFlag(0xee) != 0 && CheckLocalFlag(0xef) != 0 && CheckLocalFlag(0xf0) != 0 &&
|
||||
CheckLocalFlag(0xf1) != 0 && CheckLocalFlag(0xf2) != 0) {
|
||||
context->condition = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DB84(Entity* this, ScriptExecutionContext* context) {
|
||||
Entity* ent;
|
||||
this->hitbox = (Hitbox*)&gUnk_08114154;
|
||||
ent = CreateObject(OBJECT_3E, 4, 0);
|
||||
if (ent != NULL) {
|
||||
PositionRelative(this, ent, -0x80000, 0);
|
||||
*(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_08016030);
|
||||
}
|
||||
ent = CreateObject(OBJECT_3E, 5, 0);
|
||||
if (ent != NULL) {
|
||||
PositionRelative(this, ent, 0x80000, 0);
|
||||
*(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_0801606C);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0806DBF4(u32 param_1) {
|
||||
switch (param_1) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 6:
|
||||
param_1 = 1;
|
||||
if (GetInventoryValue(2) != 0) {
|
||||
param_1 = 2;
|
||||
}
|
||||
if (GetInventoryValue(3) != 0) {
|
||||
param_1 = 3;
|
||||
}
|
||||
if (GetInventoryValue(4) != 0) {
|
||||
param_1 = 4;
|
||||
}
|
||||
if (GetInventoryValue(6) != 0) {
|
||||
param_1 = 6;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return param_1;
|
||||
}
|
||||
|
||||
void sub_0806DC3C(Entity* this) {
|
||||
this->field_0x68.HALF.LO = gSave.stats.itemOnA;
|
||||
this->field_0x68.HALF.HI = gSave.stats.itemOnB;
|
||||
}
|
||||
|
||||
void sub_0806DC58(Entity* this) {
|
||||
ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.LO), 0);
|
||||
ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.HI), 1);
|
||||
}
|
||||
|
||||
void sub_0806DC7C() {
|
||||
const u16* tiles = gUnk_081141F4;
|
||||
while (*tiles != 0) {
|
||||
u32 tile = *tiles;
|
||||
tiles = tiles + 1;
|
||||
SetTileType(0x4072, tile, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DCA0() {
|
||||
u16 uVar1;
|
||||
const u16* tiles = gUnk_081141F4;
|
||||
while (*tiles != 0) {
|
||||
u32 tile = *tiles;
|
||||
tiles = tiles + 1;
|
||||
sub_0807BA8C(tile, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806DCC0() {
|
||||
gScreenTransition.field_0x20 = 0x7c8;
|
||||
gScreenTransition.field_0x22 = 0xf8;
|
||||
}
|
||||
|
||||
void NPC4E_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
switch (this->type) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
sub_0809623C(this);
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
sub_08096260(this);
|
||||
break;
|
||||
case 11:
|
||||
sub_0806DB84(this, 0);
|
||||
this->hitbox = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const Hitbox gUnk_08114154 = { 0, -8, 0, 0, 0, 0, 24, 8 };
|
||||
|
||||
const u8 gUnk_0811415C[] = { //
|
||||
0x00, 0x00, 0x08, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x04, 0x0e, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf8, 0x18, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x08, 0x0e, 0x00, 0x00, 0x00
|
||||
};
|
||||
extern ScreenTransitionData gUnk_0813AB6C;
|
||||
extern ScreenTransitionData gUnk_0813ABBC;
|
||||
extern ScreenTransitionData gUnk_0813ABE4;
|
||||
extern ScreenTransitionData gUnk_0813ABF8;
|
||||
extern ScreenTransitionData gUnk_0813AC0C;
|
||||
extern ScreenTransitionData gUnk_0813AC20;
|
||||
extern ScreenTransitionData gUnk_0813AC5C;
|
||||
extern ScreenTransitionData gUnk_0813AC70;
|
||||
extern ScreenTransitionData gUnk_0813AC84;
|
||||
extern ScreenTransitionData gUnk_0813AC98;
|
||||
extern ScreenTransitionData gUnk_0813ACAC;
|
||||
extern ScreenTransitionData gUnk_0813ACC0;
|
||||
extern ScreenTransitionData gUnk_0813ACD4;
|
||||
extern ScreenTransitionData gUnk_0813ACE8;
|
||||
extern ScreenTransitionData gUnk_0813ACFC;
|
||||
|
||||
// Array of pointers to ScreenTransitionData
|
||||
const ScreenTransitionData* const gUnk_081141A4[] = { //
|
||||
&gUnk_0813AB6C, &gUnk_0813ABBC, &gUnk_0813ABE4, &gUnk_0813ABF8, &gUnk_0813AC0C, &gUnk_0813AC20,
|
||||
&gUnk_0813AC5C, &gUnk_0813AC70, &gUnk_0813AC84, &gUnk_0813AC98, &gUnk_0813ACAC, &gUnk_0813ACC0,
|
||||
&gUnk_0813ACD4, &gUnk_0813ACE8, &gUnk_0813AC5C, &gUnk_0813ACFC
|
||||
};
|
||||
|
||||
// param_2 for the call to sub_0808091C, same indices as gUnk_081141A4
|
||||
const u8 gUnk_081141E4[] = { //
|
||||
0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x09, 0x02, 0x02, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02
|
||||
};
|
||||
|
||||
// tiles that are changed?
|
||||
const u16 gUnk_081141F4[] = { 0x047a, 0x047b, 0x05af, 0x05ef, 0x0738, 0x0739, 0x073a, 0x073b, 0x0000, 0x0000 };
|
||||
@@ -0,0 +1,14 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "random.h"
|
||||
|
||||
void NPC4F(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
InitAnimationForceUpdate(this, this->type);
|
||||
}
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (this->frameDuration == 0xfe) {
|
||||
this->frameDuration = (Random() & 0x1f) + 0x14;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "script.h"
|
||||
#include "save.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern Hitbox gUnk_081142FC;
|
||||
extern void sub_08078850(Entity*, u32, u32, u32*);
|
||||
extern u32 gUnk_08114304;
|
||||
|
||||
extern Dialog gUnk_08114308[];
|
||||
|
||||
void SmallTownMinish(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action += 1;
|
||||
this->hitbox = &gUnk_081142FC;
|
||||
sub_0807DD50(this);
|
||||
sub_08078850(this, 1, 0, &gUnk_08114304);
|
||||
} else {
|
||||
sub_0807DD94(this, NULL);
|
||||
}
|
||||
if ((gPlayerState.flags.all & 0x80) != 0) {
|
||||
this->spriteSettings.b.draw = 1;
|
||||
} else {
|
||||
this->spriteSettings.b.draw = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806E2DC(Entity* this) {
|
||||
s32 dialog = gSave.unk8 - 2;
|
||||
if (dialog < 0) {
|
||||
dialog = 0;
|
||||
}
|
||||
ShowNPCDialogue(this, gUnk_08114308 + this->type2 * 8 + dialog);
|
||||
}
|
||||
@@ -256,7 +256,7 @@ void sub_0806AFE8(Entity* this, ScriptExecutionContext* context) {
|
||||
void sub_0806B004(Entity* this, ScriptExecutionContext* context) {
|
||||
int idx = 0;
|
||||
|
||||
if (CheckGlobalFlag(0x29)) {
|
||||
if (CheckGlobalFlag(MIZUKAKI_START)) {
|
||||
if (CheckLocalFlag(0x73)) {
|
||||
if (GetInventoryValue(0x46) == 0) {
|
||||
idx = 3;
|
||||
@@ -279,7 +279,7 @@ void sub_0806B004(Entity* this, ScriptExecutionContext* context) {
|
||||
void sub_0806B064(Entity* this) {
|
||||
int idx = 0;
|
||||
|
||||
if (CheckGlobalFlag(0x29)) {
|
||||
if (CheckGlobalFlag(MIZUKAKI_START)) {
|
||||
idx = 1;
|
||||
if (CheckLocalFlag(0x73)) {
|
||||
idx = 2;
|
||||
@@ -294,8 +294,8 @@ void sub_0806B098(Entity* this) {
|
||||
|
||||
if (GetInventoryValue(0x46) == 0) {
|
||||
idx = 1;
|
||||
if (CheckGlobalFlag(0x29)) {
|
||||
f = CheckGlobalFlag(0x2a);
|
||||
if (CheckGlobalFlag(MIZUKAKI_START)) {
|
||||
f = CheckGlobalFlag(MIZUKAKI_HARIFALL);
|
||||
idx = BOOLCAST(f);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1779,7 +1779,7 @@ NONMATCH("asm/non_matching/player/sub_08072D54.s", void sub_08072D54(Entity* thi
|
||||
}
|
||||
sub_08008790(this, 7);
|
||||
if (gPlayerState.field_0x14 != 0) {
|
||||
if (!sub_08008B22() != 0) {
|
||||
if (sub_08008B22() == 0) {
|
||||
gPlayerState.field_0x10[1] = 7;
|
||||
if (!(gPlayerState.flags.all & 0x80)) {
|
||||
sub_080791BC();
|
||||
|
||||
+2
-2
@@ -1003,13 +1003,13 @@ extern EntityData gUnk_080D9108;
|
||||
extern EntityData gUnk_080D9098;
|
||||
|
||||
void sub_0804C018(void) {
|
||||
if (!CheckGlobalFlag(0x20)) {
|
||||
if (!CheckGlobalFlag(HAKA_KEY_LOST)) {
|
||||
// graveyard key
|
||||
if (GetInventoryValue(0x3c) == 1) {
|
||||
LoadRoomEntityList(&gUnk_080D90C8);
|
||||
LoadRoomEntityList(&gUnk_080D9108);
|
||||
}
|
||||
} else if (!CheckGlobalFlag(0x21))
|
||||
} else if (!CheckGlobalFlag(HAKA_KEY_FOUND))
|
||||
LoadRoomEntityList(&gUnk_080D9108);
|
||||
|
||||
if (GetInventoryValue(0x3c) != 2) {
|
||||
|
||||
Reference in New Issue
Block a user