Merge pull request #157 from octorock/npcs

Decompile some NPCs
This commit is contained in:
notyourav
2021-05-05 11:50:11 -07:00
committed by GitHub
42 changed files with 1427 additions and 2886 deletions
-101
View File
@@ -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}
-857
View File
@@ -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
-887
View File
@@ -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
View File
@@ -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
-53
View File
@@ -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
View File
@@ -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
-61
View File
@@ -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
-79
View File
@@ -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
-26
View File
@@ -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
View File
@@ -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
View File
@@ -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
-82
View File
@@ -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
+1 -1
View File
@@ -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
-18
View File
@@ -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
-14
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -487,7 +487,7 @@ script_08010860:
_0807EA94
_0807E3E8
JumpIfNot script_080108B2
Call sub_08069718
Call GoronMerchant_TryToBuyKinstone
JumpIfNot script_080108B2
WaitPlayerAction8
_0807EA94
+14 -16
View File
@@ -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);
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -1673,4 +1673,4 @@ void ply_xswee(MusicPlayerInfo* mplayInfo, MusicPlayerTrack* track) {
}
void nullsub_544() {
}
}
+1 -1
View File
@@ -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') {
+38
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
}
-262
View File
@@ -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
View File
@@ -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);
}
}
+17
View File
@@ -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);
}
}
+46
View File
@@ -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
View File
@@ -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,
};
+35
View File
@@ -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
View File
@@ -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)) {
+66
View File
@@ -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
View File
@@ -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 };
+14
View File
@@ -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;
}
}
+36
View File
@@ -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);
}
+4 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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) {