mirror of https://github.com/zeldaret/tmc.git
townsperson.c 1 nonmatching
This commit is contained in:
parent
62ddaaa5f6
commit
94b6040d7d
|
|
@ -0,0 +1,46 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x58
|
||||
ldrb r1, [r0]
|
||||
movs r0, #3
|
||||
ands r0, r1
|
||||
ldr r1, _08061CAC @ =gUnk_0810B78C
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
ldr r5, _08061CB0 @ =gUnk_0810B680
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldrb r2, [r0]
|
||||
adds r2, r1, r2
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl SetExtraSpriteFrame
|
||||
ldrb r2, [r4, #0x1e]
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldrb r0, [r0, #1]
|
||||
adds r2, r2, r0
|
||||
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, r5, pc}
|
||||
.align 2, 0
|
||||
_08061CAC: .4byte gUnk_0810B78C
|
||||
_08061CB0: .4byte gUnk_0810B680
|
||||
.syntax divided
|
||||
|
|
@ -1,598 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start Townsperson_Head
|
||||
Townsperson_Head: @ 0x08061C60
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x58
|
||||
ldrb r1, [r0]
|
||||
movs r0, #3
|
||||
ands r0, r1
|
||||
ldr r1, _08061CAC @ =gUnk_0810B78C
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
ldr r5, _08061CB0 @ =gUnk_0810B680
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldrb r2, [r0]
|
||||
adds r2, r1, r2
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl SetExtraSpriteFrame
|
||||
ldrb r2, [r4, #0x1e]
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldrb r0, [r0, #1]
|
||||
adds r2, r2, r0
|
||||
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, r5, pc}
|
||||
.align 2, 0
|
||||
_08061CAC: .4byte gUnk_0810B78C
|
||||
_08061CB0: .4byte gUnk_0810B680
|
||||
|
||||
thumb_func_start sub_08061CB4
|
||||
sub_08061CB4: @ 0x08061CB4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
cmp r0, r1
|
||||
beq _08061CC8
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _08061CCE
|
||||
_08061CC8:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_08061CCE:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x59
|
||||
ldrb r0, [r2]
|
||||
cmp r0, #0xff
|
||||
bne _08061CE4
|
||||
ldr r0, _08061CE8 @ =gUnk_0810B680
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldrb r0, [r1, #2]
|
||||
strb r0, [r2]
|
||||
_08061CE4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08061CE8: .4byte gUnk_0810B680
|
||||
|
||||
thumb_func_start sub_08061CEC
|
||||
sub_08061CEC: @ 0x08061CEC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08061D38 @ =gUnk_0810B6EC
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _08061D62
|
||||
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]
|
||||
ldrb r0, [r4, #0xe]
|
||||
strb r0, [r4, #0x14]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x69
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0805ACC0
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
bne _08061D3C
|
||||
ldrh r0, [r4, #0x2e]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x6a
|
||||
strh r0, [r1]
|
||||
ldrh r1, [r4, #0x32]
|
||||
b _08061D44
|
||||
.align 2, 0
|
||||
_08061D38: .4byte gUnk_0810B6EC
|
||||
_08061D3C:
|
||||
lsrs r0, r1, #0x10
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x6a
|
||||
strh r0, [r2]
|
||||
_08061D44:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6c
|
||||
strh r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0801E99C
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD64
|
||||
adds r0, r4, #0
|
||||
bl sub_08061D64
|
||||
_08061D62:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08061D64
|
||||
sub_08061D64: @ 0x08061D64
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x39
|
||||
movs r0, #0
|
||||
ldrsb r0, [r4, r0]
|
||||
cmp r0, #2
|
||||
bne _08061DB0
|
||||
movs r1, #0
|
||||
movs r0, #3
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r4]
|
||||
adds r0, r5, #0
|
||||
bl sub_0806F118
|
||||
adds r4, #0x1f
|
||||
ldrb r0, [r4]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x69
|
||||
strb r0, [r1]
|
||||
ldr r1, _08061DAC @ =gLinkEntity
|
||||
adds r0, r5, #0
|
||||
bl GetFacingDirection
|
||||
bl sub_0806F5A4
|
||||
ldrb r1, [r4]
|
||||
movs r2, #4
|
||||
rsbs r2, r2, #0
|
||||
ands r1, r2
|
||||
adds r1, r1, r0
|
||||
adds r0, r5, #0
|
||||
bl InitializeAnimation
|
||||
b _08061E18
|
||||
.align 2, 0
|
||||
_08061DAC: .4byte gLinkEntity
|
||||
_08061DB0:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DDAC
|
||||
adds r0, r5, #0
|
||||
bl sub_0807DDE4
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x59
|
||||
ldrb r0, [r2]
|
||||
cmp r0, #0xff
|
||||
bne _08061DD4
|
||||
ldr r0, _08061E1C @ =gUnk_0810B680
|
||||
ldrb r1, [r5, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldrb r0, [r1, #2]
|
||||
strb r0, [r2]
|
||||
_08061DD4:
|
||||
adds r0, r5, #0
|
||||
bl GetNextFrame
|
||||
movs r0, #0
|
||||
ldrsb r0, [r4, r0]
|
||||
cmp r0, #0
|
||||
beq _08061E18
|
||||
movs r1, #0
|
||||
movs r0, #2
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r4]
|
||||
adds r0, r5, #0
|
||||
bl sub_08062048
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x58
|
||||
ldrb r0, [r4]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x69
|
||||
strb r0, [r1]
|
||||
ldr r1, _08061E20 @ =gLinkEntity
|
||||
adds r0, r5, #0
|
||||
bl GetFacingDirection
|
||||
bl sub_0806F5A4
|
||||
ldrb r1, [r4]
|
||||
movs r2, #4
|
||||
rsbs r2, r2, #0
|
||||
ands r1, r2
|
||||
adds r1, r1, r0
|
||||
adds r0, r5, #0
|
||||
bl InitializeAnimation
|
||||
_08061E18:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08061E1C: .4byte gUnk_0810B680
|
||||
_08061E20: .4byte gLinkEntity
|
||||
|
||||
thumb_func_start sub_08061E24
|
||||
sub_08061E24: @ 0x08061E24
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetNextFrame
|
||||
ldr r0, _08061E4C @ =gTextBox
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08061E48
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x69
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_08061E48:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08061E4C: .4byte gTextBox
|
||||
|
||||
thumb_func_start sub_08061E50
|
||||
sub_08061E50: @ 0x08061E50
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateFuseInteraction
|
||||
cmp r0, #0
|
||||
beq _08061E6C
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x69
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_08061E6C:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08061E70
|
||||
sub_08061E70: @ 0x08061E70
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #9]
|
||||
cmp r0, #6
|
||||
bne _08061E88
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x68
|
||||
ldrb r1, [r0]
|
||||
adds r0, r2, #0
|
||||
bl sub_08078784
|
||||
b _08061E8E
|
||||
_08061E88:
|
||||
adds r0, r2, #0
|
||||
bl sub_08078778
|
||||
_08061E8E:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08061E90
|
||||
sub_08061E90: @ 0x08061E90
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
ldrb r0, [r5, #0x18]
|
||||
cmp r0, #0
|
||||
bne _08061F04
|
||||
adds r0, #1
|
||||
strb r0, [r5, #0x18]
|
||||
bl Random
|
||||
movs r1, #0x3f
|
||||
ands r0, r1
|
||||
adds r0, #0x20
|
||||
strh r0, [r5, #0x12]
|
||||
bl Random
|
||||
adds r1, r0, #0
|
||||
movs r0, #0x18
|
||||
ands r1, r0
|
||||
ldrb r0, [r4, #0x15]
|
||||
cmp r0, #8
|
||||
beq _08061ED8
|
||||
cmp r0, #8
|
||||
bgt _08061EC6
|
||||
cmp r0, #0
|
||||
beq _08061ED0
|
||||
b _08061EEE
|
||||
_08061EC6:
|
||||
cmp r0, #0x10
|
||||
beq _08061EE0
|
||||
cmp r0, #0x18
|
||||
beq _08061EE8
|
||||
b _08061EEE
|
||||
_08061ED0:
|
||||
cmp r1, #0x10
|
||||
bne _08061EEE
|
||||
movs r1, #8
|
||||
b _08061EEE
|
||||
_08061ED8:
|
||||
cmp r1, #0x18
|
||||
bne _08061EEE
|
||||
movs r1, #0x10
|
||||
b _08061EEE
|
||||
_08061EE0:
|
||||
cmp r1, #0
|
||||
bne _08061EEE
|
||||
movs r1, #0x18
|
||||
b _08061EEE
|
||||
_08061EE8:
|
||||
cmp r1, #8
|
||||
bne _08061EEE
|
||||
movs r1, #0
|
||||
_08061EEE:
|
||||
strb r1, [r4, #0x15]
|
||||
adds r0, r1, #0
|
||||
bl sub_0806F5B0
|
||||
strb r0, [r4, #0x14]
|
||||
ldr r1, _08061F8C @ =gUnk_0810B74A
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x24]
|
||||
_08061F04:
|
||||
ldrb r0, [r4, #0x14]
|
||||
lsrs r0, r0, #1
|
||||
adds r1, r0, #4
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
cmp r1, r0
|
||||
beq _08061F1A
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_08061F1A:
|
||||
adds r0, r4, #0
|
||||
bl sub_080AEF88
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x6a
|
||||
movs r3, #0
|
||||
ldrsh r0, [r2, r3]
|
||||
subs r1, r1, r0
|
||||
cmp r1, #0x10
|
||||
ble _08061F3C
|
||||
ldrh r0, [r2]
|
||||
adds r0, #0x10
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r0, #1
|
||||
strh r0, [r5, #0x12]
|
||||
_08061F3C:
|
||||
movs r3, #0x10
|
||||
rsbs r3, r3, #0
|
||||
cmp r1, r3
|
||||
bge _08061F4E
|
||||
ldrh r0, [r2]
|
||||
subs r0, #0x10
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r0, #1
|
||||
strh r0, [r5, #0x12]
|
||||
_08061F4E:
|
||||
movs r6, #0x32
|
||||
ldrsh r1, [r4, r6]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x6c
|
||||
movs r6, #0
|
||||
ldrsh r0, [r2, r6]
|
||||
subs r1, r1, r0
|
||||
cmp r1, #0x10
|
||||
ble _08061F6A
|
||||
ldrh r0, [r2]
|
||||
adds r0, #0x10
|
||||
strh r0, [r4, #0x32]
|
||||
movs r0, #1
|
||||
strh r0, [r5, #0x12]
|
||||
_08061F6A:
|
||||
cmp r1, r3
|
||||
bge _08061F78
|
||||
ldrh r0, [r2]
|
||||
subs r0, #0x10
|
||||
strh r0, [r4, #0x32]
|
||||
movs r0, #1
|
||||
strh r0, [r5, #0x12]
|
||||
_08061F78:
|
||||
ldrh r0, [r5, #0x12]
|
||||
subs r0, #1
|
||||
strh r0, [r5, #0x12]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
beq _08061F8A
|
||||
ldr r1, _08061F90 @ =gUnk_02033280
|
||||
movs r0, #0
|
||||
strb r0, [r1, #6]
|
||||
_08061F8A:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08061F8C: .4byte gUnk_0810B74A
|
||||
_08061F90: .4byte gUnk_02033280
|
||||
|
||||
thumb_func_start sub_08061F94
|
||||
sub_08061F94: @ 0x08061F94
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #0x35
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _08061FAC
|
||||
adds r0, r4, #0
|
||||
bl ResolveEntityOnTop
|
||||
_08061FAC:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08061FB0
|
||||
sub_08061FB0: @ 0x08061FB0
|
||||
movs r1, #0
|
||||
str r1, [r0, #0x48]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08061FB8
|
||||
sub_08061FB8: @ 0x08061FB8
|
||||
push {lr}
|
||||
ldr r2, _08061FD0 @ =gUnk_0810B748
|
||||
ldr r3, [r1, #4]
|
||||
adds r2, r3, r2
|
||||
ldrb r2, [r2]
|
||||
lsls r3, r3, #2
|
||||
ldr r1, _08061FD4 @ =gUnk_0810B740
|
||||
adds r3, r3, r1
|
||||
movs r1, #1
|
||||
bl sub_08078850
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08061FD0: .4byte gUnk_0810B748
|
||||
_08061FD4: .4byte gUnk_0810B740
|
||||
|
||||
thumb_func_start sub_08061FD8
|
||||
sub_08061FD8: @ 0x08061FD8
|
||||
push {lr}
|
||||
ldrb r1, [r0, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
bl InitializeAnimation
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08061FE4
|
||||
sub_08061FE4: @ 0x08061FE4
|
||||
push {lr}
|
||||
ldrb r1, [r0, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
adds r1, #4
|
||||
bl InitializeAnimation
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08061FF4
|
||||
sub_08061FF4: @ 0x08061FF4
|
||||
push {lr}
|
||||
adds r1, r0, #0
|
||||
ldr r2, _08062008 @ =gUnk_0810B790
|
||||
ldrb r0, [r1, #0xa]
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
bl TextboxNoOverlap
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08062008: .4byte gUnk_0810B790
|
||||
|
||||
thumb_func_start sub_0806200C
|
||||
sub_0806200C: @ 0x0806200C
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
movs r4, #0
|
||||
movs r0, #0x29
|
||||
bl CheckGlobalFlag
|
||||
cmp r0, #0
|
||||
beq _08062034
|
||||
movs r0, #0x6b
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _08062034
|
||||
movs r0, #0x39
|
||||
bl GetInventoryValue
|
||||
movs r4, #1
|
||||
cmp r0, #2
|
||||
bne _08062034
|
||||
movs r4, #2
|
||||
_08062034:
|
||||
ldr r0, _08062044 @ =gUnk_0810B7BA
|
||||
lsls r1, r4, #1
|
||||
adds r1, r1, r0
|
||||
ldrh r0, [r1]
|
||||
adds r1, r5, #0
|
||||
bl TextboxNoOverlap
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08062044: .4byte gUnk_0810B7BA
|
||||
|
||||
thumb_func_start sub_08062048
|
||||
sub_08062048: @ 0x08062048
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldrb r0, [r3, #9]
|
||||
cmp r0, #6
|
||||
bne _0806207C
|
||||
ldr r0, _08062074 @ =gUnk_02002A40
|
||||
ldrb r0, [r0, #8]
|
||||
subs r0, #2
|
||||
cmp r0, #0
|
||||
bge _0806205E
|
||||
movs r0, #0
|
||||
_0806205E:
|
||||
ldrb r1, [r3, #0xa]
|
||||
lsls r1, r1, #6
|
||||
lsls r0, r0, #3
|
||||
ldr r2, _08062078 @ =gUnk_0810B7C0
|
||||
adds r0, r0, r2
|
||||
adds r1, r1, r0
|
||||
adds r0, r3, #0
|
||||
bl ShowNPCDialogue
|
||||
b _08062084
|
||||
.align 2, 0
|
||||
_08062074: .4byte gUnk_02002A40
|
||||
_08062078: .4byte gUnk_0810B7C0
|
||||
_0806207C:
|
||||
movs r0, #0
|
||||
adds r1, r3, #0
|
||||
bl TextboxNoOverlap
|
||||
_08062084:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start Townsperson_Fusion
|
||||
Townsperson_Fusion: @ 0x08062088
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _080620BA
|
||||
ldr r1, _080620C4 @ =gUnk_0810B6EC
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _080620C2
|
||||
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]
|
||||
_080620BA:
|
||||
adds r0, r4, #0
|
||||
movs r1, #6
|
||||
bl sub_08061CB4
|
||||
_080620C2:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080620C4: .4byte gUnk_0810B6EC
|
||||
|
|
@ -541,7 +541,6 @@ SECTIONS {
|
|||
asm/postman.o(.text);
|
||||
asm/npc5.o(.text);
|
||||
src/npc/townsperson.o(.text);
|
||||
asm/townsperson.o(.text);
|
||||
asm/kid.o(.text);
|
||||
asm/npc9.o(.text);
|
||||
src/npc/stamp.o(.text);
|
||||
|
|
|
|||
|
|
@ -3,27 +3,63 @@
|
|||
#include "npc.h"
|
||||
#include "link.h"
|
||||
#include "textbox.h"
|
||||
#include "flags.h"
|
||||
|
||||
typedef struct {
|
||||
u8 frame1;
|
||||
u8 frame2;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
} struct_0810B680;
|
||||
|
||||
typedef struct {
|
||||
u32 unk;
|
||||
u32 unk2;
|
||||
} struct_08061FB8;
|
||||
|
||||
extern void (*const gUnk_0810B774[])(Entity*);
|
||||
extern void (*const gUnk_0810B77C[])(Entity*);
|
||||
extern void sub_08061CB4(Entity*, u32);
|
||||
extern u32 sub_0806ED9C(Entity*, u32, u32);
|
||||
extern void sub_0806ED78(Entity*);
|
||||
extern u32 sub_0805ACC0(Entity*);
|
||||
extern u32 sub_0801E99C(Entity*);
|
||||
extern void sub_0807DD64(Entity*);
|
||||
extern void sub_08061D64(Entity*);
|
||||
extern void sub_0806F118(Entity*);
|
||||
extern u32 sub_0806F5A4(u32);
|
||||
extern u32 GetFacingDirection(Entity*, Entity*);
|
||||
extern void sub_0807DDAC(Entity*, u32);
|
||||
extern void sub_0807DDE4(Entity*);
|
||||
extern void sub_08062048(Entity*);
|
||||
extern void sub_08078784(Entity*, u32);
|
||||
extern void sub_08078778(Entity*);
|
||||
extern u32 sub_0806F5B0(u32);
|
||||
extern void sub_080AEF88(Entity*);
|
||||
extern u32 Random(void);
|
||||
extern void ResolveEntityOnTop(Entity*, Entity*);
|
||||
extern void sub_08078850(Entity*, u32, u8, u32*);
|
||||
|
||||
extern SpriteLoadData* gUnk_0810B6EC[];
|
||||
extern u8 gUnk_0810B78C[];
|
||||
extern struct_0810B680 gUnk_0810B680[];
|
||||
extern u16 gUnk_0810B74A[];
|
||||
extern u8 gUnk_02033280[];
|
||||
extern u8 gUnk_0810B748[];
|
||||
extern u32 gUnk_0810B740[];
|
||||
extern u16 gUnk_0810B790[];
|
||||
extern u16 gUnk_0810B7BA[];
|
||||
extern u32 gUnk_0810B7C0[];
|
||||
|
||||
void Townsperson(Entity *this)
|
||||
{
|
||||
void Townsperson(Entity* this) {
|
||||
if ((this->flags & 2) != 0) {
|
||||
gUnk_0810B77C[this->action](this);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
gUnk_0810B774[this->action](this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061BC8(Entity *this)
|
||||
{
|
||||
void sub_08061BC8(Entity* this) {
|
||||
if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) {
|
||||
this->animationState = 2;
|
||||
this->field_0xf = this->entityType.form + 1;
|
||||
|
|
@ -32,19 +68,16 @@ void sub_08061BC8(Entity *this)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_08061C00(Entity *this)
|
||||
{
|
||||
void sub_08061C00(Entity* this) {
|
||||
s32 uVar1;
|
||||
|
||||
uVar1 = sub_0806ED9C(this, 0x20, 0x20);
|
||||
if (uVar1 < 0) {
|
||||
uVar1 = this->animationState + 4;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (this->field_0xf == 0) {
|
||||
this->field_0xf = 0x10;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this->field_0xf--;
|
||||
uVar1 = this->animIndex & 3;
|
||||
}
|
||||
|
|
@ -56,3 +89,236 @@ void sub_08061C00(Entity *this)
|
|||
TextboxNoOverlapFollow(this->entityType.parameter + 0xa01);
|
||||
}
|
||||
}
|
||||
|
||||
#if NON_MATCHING
|
||||
void Townsperson_Head(Entity* this) {
|
||||
SetExtraSpriteFrame(this, 0,
|
||||
*(gUnk_0810B78C + (this->animIndex & 3)) + gUnk_0810B680[this->entityType.form].frame1);
|
||||
SetExtraSpriteFrame(this, 1, this->frameIndex + gUnk_0810B680[this->entityType.form].frame2);
|
||||
SetSpriteSubEntryOffsetData1(this, 1, 0);
|
||||
sub_0807000C(this);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void Townsperson_Head(Entity* this) {
|
||||
asm(".include \"asm/non_matching/townsperson/sub_08061C60.inc\"");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_08061CB4(Entity* this, u32 arg1) {
|
||||
if (this->animIndex != arg1) {
|
||||
InitializeAnimation(this, arg1);
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
if (this->frameDuration == 0xff) {
|
||||
this->frameDuration = gUnk_0810B680[this->entityType.form].unk2;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061CEC(Entity* this) {
|
||||
u32 uVar2;
|
||||
|
||||
if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) {
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
this->animationState = this->actionDelay;
|
||||
this->field_0x69 = 0xff;
|
||||
uVar2 = sub_0805ACC0(this);
|
||||
if (uVar2 == 0) {
|
||||
this->field_0x6a.HWORD = this->x.HALF.HI;
|
||||
uVar2 = (u16)this->y.HALF.HI;
|
||||
} else {
|
||||
this->field_0x6a.HWORD = (uVar2 >> 0x10);
|
||||
}
|
||||
*(u16*)&this->field_0x6c = uVar2;
|
||||
this->field_0x68 = sub_0801E99C(this);
|
||||
sub_0807DD64(this);
|
||||
sub_08061D64(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061D64(Entity* this) {
|
||||
if (this->interactType == 2) {
|
||||
this->action = 3;
|
||||
this->interactType = 0;
|
||||
sub_0806F118(this);
|
||||
this->field_0x69 = this->animIndex;
|
||||
InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
|
||||
} else {
|
||||
sub_0807DDAC(this, 0);
|
||||
sub_0807DDE4(this);
|
||||
if (this->frameDuration == 0xff) {
|
||||
this->frameDuration = gUnk_0810B680[this->entityType.form].unk2;
|
||||
}
|
||||
GetNextFrame(this);
|
||||
if (this->interactType != 0) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
sub_08062048(this);
|
||||
this->field_0x69 = this->animIndex;
|
||||
InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061E24(Entity* this) {
|
||||
GetNextFrame(this);
|
||||
if ((gTextBox.doTextBox & 0x7f) == 0) {
|
||||
this->action = 1;
|
||||
InitializeAnimation(this, this->field_0x69);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061E50(Entity* this) {
|
||||
|
||||
if (UpdateFuseInteraction(this) != 0) {
|
||||
this->action = 1;
|
||||
InitializeAnimation(this, this->field_0x69);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061E70(Entity* this) {
|
||||
if ((this->entityType).subtype == 6) {
|
||||
sub_08078784(this, this->field_0x68);
|
||||
} else {
|
||||
sub_08078778(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061E90(Entity* this, Entity* arg1) {
|
||||
u32 animIndex;
|
||||
s32 iVar4;
|
||||
|
||||
if (arg1->spriteSettings.raw == 0) {
|
||||
arg1->spriteSettings.raw++;
|
||||
arg1->spriteTileSize = (Random() & 0x3f) + 0x20;
|
||||
animIndex = Random() & 0x18;
|
||||
switch (this->direction) {
|
||||
case 0x0:
|
||||
if (animIndex == 0x10) {
|
||||
animIndex = 0x8;
|
||||
}
|
||||
break;
|
||||
case 0x8:
|
||||
if (animIndex == 0x18) {
|
||||
animIndex = 0x10;
|
||||
}
|
||||
break;
|
||||
case 0x10:
|
||||
if (animIndex == 0x0) {
|
||||
animIndex = 0x18;
|
||||
}
|
||||
break;
|
||||
case 0x18:
|
||||
if (animIndex == 0x8) {
|
||||
animIndex = 0;
|
||||
}
|
||||
}
|
||||
this->direction = (u8)animIndex;
|
||||
this->animationState = sub_0806F5B0(animIndex);
|
||||
this->nonPlanarMovement = gUnk_0810B74A[this->entityType.form];
|
||||
}
|
||||
animIndex = (this->animationState >> 1) + 4;
|
||||
if (animIndex != this->animIndex) {
|
||||
InitializeAnimation(this, animIndex);
|
||||
}
|
||||
sub_080AEF88(this);
|
||||
iVar4 = this->x.HALF.HI - *(s16*)&this->field_0x6a.HWORD;
|
||||
if (0x10 < iVar4) {
|
||||
this->x.HALF.HI = this->field_0x6a.HWORD + 0x10;
|
||||
arg1->spriteTileSize = 1;
|
||||
}
|
||||
if (iVar4 < -0x10) {
|
||||
this->x.HALF.HI = *(s16*)&this->field_0x6a.HWORD - 0x10;
|
||||
arg1->spriteTileSize = 1;
|
||||
}
|
||||
|
||||
iVar4 = this->y.HALF.HI - *(s16*)&this->field_0x6c;
|
||||
if (0x10 < iVar4) {
|
||||
this->y.HALF.HI = *(s16*)&this->field_0x6c + 0x10;
|
||||
arg1->spriteTileSize = 1;
|
||||
}
|
||||
if (iVar4 < -0x10) {
|
||||
this->y.HALF.HI = *(s16*)&this->field_0x6c - 0x10;
|
||||
arg1->spriteTileSize = 1;
|
||||
}
|
||||
if (--arg1->spriteTileSize != 0) {
|
||||
gUnk_02033280[6] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061F94(Entity* this) {
|
||||
Entity* ent;
|
||||
|
||||
ent = CreateFx(this, 0x35, 0);
|
||||
if (ent != NULL) {
|
||||
ResolveEntityOnTop(this, ent);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061FB0(Entity* this) {
|
||||
this->boundingBox = NULL;
|
||||
}
|
||||
|
||||
void sub_08061FB8(Entity* this, struct_08061FB8* arg1) {
|
||||
u8* temp = gUnk_0810B748;
|
||||
|
||||
sub_08078850(this, 1, temp[arg1->unk2], &gUnk_0810B740[arg1->unk2]);
|
||||
}
|
||||
|
||||
void sub_08061FD8(Entity* this) {
|
||||
InitializeAnimation(this, this->animationState >> 1);
|
||||
}
|
||||
|
||||
void sub_08061FE4(Entity* this) {
|
||||
InitializeAnimation(this, (this->animationState >> 1) + 4);
|
||||
}
|
||||
|
||||
void sub_08061FF4(Entity* this) {
|
||||
TextboxNoOverlap(gUnk_0810B790[this->entityType.form], this);
|
||||
}
|
||||
|
||||
void sub_0806200C(Entity* this) {
|
||||
u32 index;
|
||||
|
||||
index = 0;
|
||||
if ((CheckGlobalFlag(0x29) != 0) && (CheckLocalFlag(0x6b))) {
|
||||
|
||||
// hyrule bestiary
|
||||
if (GetInventoryValue(0x39) == 2) {
|
||||
index = 2;
|
||||
} else {
|
||||
index = 1;
|
||||
}
|
||||
}
|
||||
TextboxNoOverlap(gUnk_0810B7BA[index], this);
|
||||
}
|
||||
|
||||
void sub_08062048(Entity *this)
|
||||
{
|
||||
int iVar1;
|
||||
|
||||
if ((this->entityType).subtype == 6) {
|
||||
iVar1 = gUnk_02002A40.unk - 2;
|
||||
if (iVar1 < 0) {
|
||||
iVar1 = 0;
|
||||
}
|
||||
ShowNPCDialogue(this, gUnk_0810B7C0 + this->entityType.form * 0x10 + iVar1 * 2);
|
||||
}
|
||||
else {
|
||||
TextboxNoOverlap(0, this);
|
||||
}
|
||||
}
|
||||
|
||||
void Townsperson_Fusion(Entity *this)
|
||||
{
|
||||
if (this->action == 0) {
|
||||
if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form]) == 0) {
|
||||
return;
|
||||
}
|
||||
this->action++;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
}
|
||||
sub_08061CB4(this, 6);
|
||||
}
|
||||
Loading…
Reference in New Issue