mirror of https://github.com/zeldaret/tmc.git
625 lines
10 KiB
ArmAsm
625 lines
10 KiB
ArmAsm
.include "asm/macros.inc"
|
|
|
|
.include "constants/constants.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
thumb_func_start sub_0806407C
|
|
sub_0806407C: @ 0x0806407C
|
|
push {r4, r5, r6, lr}
|
|
adds r4, r0, #0
|
|
adds r5, r1, #0
|
|
ldrb r0, [r5, #0x18]
|
|
cmp r0, #0
|
|
bne _080640E8
|
|
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 _080640C4
|
|
cmp r0, #8
|
|
bgt _080640B2
|
|
cmp r0, #0
|
|
beq _080640BC
|
|
b _080640DA
|
|
_080640B2:
|
|
cmp r0, #0x10
|
|
beq _080640CC
|
|
cmp r0, #0x18
|
|
beq _080640D4
|
|
b _080640DA
|
|
_080640BC:
|
|
cmp r1, #0x10
|
|
bne _080640DA
|
|
movs r1, #8
|
|
b _080640DA
|
|
_080640C4:
|
|
cmp r1, #0x18
|
|
bne _080640DA
|
|
movs r1, #0x10
|
|
b _080640DA
|
|
_080640CC:
|
|
cmp r1, #0
|
|
bne _080640DA
|
|
movs r1, #0x18
|
|
b _080640DA
|
|
_080640D4:
|
|
cmp r1, #8
|
|
bne _080640DA
|
|
movs r1, #0
|
|
_080640DA:
|
|
strb r1, [r4, #0x15]
|
|
adds r0, r1, #0
|
|
bl sub_0806F5B0
|
|
strb r0, [r4, #0x14]
|
|
movs r0, #0x80
|
|
strh r0, [r4, #0x24]
|
|
_080640E8:
|
|
ldrb r0, [r4, #0x14]
|
|
lsrs r2, r0, #1
|
|
adds r1, r2, #4
|
|
adds r0, r4, #0
|
|
adds r0, #0x58
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
beq _0806410A
|
|
adds r0, r4, #0
|
|
adds r0, #0x70
|
|
movs r1, #0
|
|
ldrsb r1, [r0, r1]
|
|
adds r1, #4
|
|
adds r1, r2, r1
|
|
adds r0, r4, #0
|
|
bl InitializeAnimation
|
|
_0806410A:
|
|
adds r0, r4, #0
|
|
bl ProcessMovement
|
|
movs r0, #0x2e
|
|
ldrsh r1, [r4, r0]
|
|
adds r2, r4, #0
|
|
adds r2, #0x68
|
|
movs r3, #0
|
|
ldrsh r0, [r2, r3]
|
|
subs r1, r1, r0
|
|
cmp r1, #0x10
|
|
ble _0806412C
|
|
ldrh r0, [r2]
|
|
adds r0, #0x10
|
|
strh r0, [r4, #0x2e]
|
|
movs r0, #1
|
|
strh r0, [r5, #0x12]
|
|
_0806412C:
|
|
movs r3, #0x10
|
|
rsbs r3, r3, #0
|
|
cmp r1, r3
|
|
bge _0806413E
|
|
ldrh r0, [r2]
|
|
subs r0, #0x10
|
|
strh r0, [r4, #0x2e]
|
|
movs r0, #1
|
|
strh r0, [r5, #0x12]
|
|
_0806413E:
|
|
movs r6, #0x32
|
|
ldrsh r1, [r4, r6]
|
|
adds r2, r4, #0
|
|
adds r2, #0x6a
|
|
movs r6, #0
|
|
ldrsh r0, [r2, r6]
|
|
subs r1, r1, r0
|
|
cmp r1, #0x10
|
|
ble _0806415A
|
|
ldrh r0, [r2]
|
|
adds r0, #0x10
|
|
strh r0, [r4, #0x32]
|
|
movs r0, #1
|
|
strh r0, [r5, #0x12]
|
|
_0806415A:
|
|
cmp r1, r3
|
|
bge _08064168
|
|
ldrh r0, [r2]
|
|
subs r0, #0x10
|
|
strh r0, [r4, #0x32]
|
|
movs r0, #1
|
|
strh r0, [r5, #0x12]
|
|
_08064168:
|
|
ldrh r0, [r5, #0x12]
|
|
subs r0, #1
|
|
strh r0, [r5, #0x12]
|
|
lsls r0, r0, #0x10
|
|
cmp r0, #0
|
|
beq _0806417A
|
|
ldr r1, _0806417C @ =gUnk_02033280
|
|
movs r0, #0
|
|
strb r0, [r1, #6]
|
|
_0806417A:
|
|
pop {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0806417C: .4byte gUnk_02033280
|
|
|
|
thumb_func_start sub_08064180
|
|
sub_08064180: @ 0x08064180
|
|
push {lr}
|
|
movs r0, #7
|
|
movs r1, #0x15
|
|
movs r2, #7
|
|
bl FindEntityInListBySubtype
|
|
cmp r0, #0
|
|
beq _08064194
|
|
bl DeleteEntity
|
|
_08064194:
|
|
pop {pc}
|
|
.align 2, 0
|
|
|
|
thumb_func_start sub_08064198
|
|
sub_08064198: @ 0x08064198
|
|
push {r4, r5, r6, lr}
|
|
adds r5, r0, #0
|
|
adds r4, r5, #0
|
|
adds r4, #0x71
|
|
ldrb r1, [r4]
|
|
movs r0, #0
|
|
ldrsb r0, [r4, r0]
|
|
cmp r0, #0
|
|
ble _080641AE
|
|
subs r0, r1, #1
|
|
strb r0, [r4]
|
|
_080641AE:
|
|
ldr r0, _080641D8 @ =gPlayerEntity
|
|
movs r2, #0x32
|
|
ldrsh r1, [r0, r2]
|
|
movs r2, #0x32
|
|
ldrsh r0, [r5, r2]
|
|
subs r1, r1, r0
|
|
cmp r1, #2
|
|
ble _080641C0
|
|
movs r1, #2
|
|
_080641C0:
|
|
movs r0, #2
|
|
rsbs r0, r0, #0
|
|
cmp r1, r0
|
|
bge _080641CA
|
|
adds r1, r0, #0
|
|
_080641CA:
|
|
adds r6, r4, #0
|
|
cmp r1, #0
|
|
beq _08064256
|
|
cmp r1, #0
|
|
ble _080641DC
|
|
movs r0, #0x10
|
|
b _080641DE
|
|
.align 2, 0
|
|
_080641D8: .4byte gPlayerEntity
|
|
_080641DC:
|
|
movs r0, #0
|
|
_080641DE:
|
|
strb r0, [r5, #0x15]
|
|
cmp r1, #0
|
|
bge _080641E6
|
|
rsbs r1, r1, #0
|
|
_080641E6:
|
|
lsls r0, r1, #8
|
|
strh r0, [r5, #0x24]
|
|
movs r0, #0x32
|
|
ldrsh r4, [r5, r0]
|
|
adds r0, r5, #0
|
|
bl ProcessMovement
|
|
movs r1, #0x32
|
|
ldrsh r0, [r5, r1]
|
|
adds r6, r5, #0
|
|
adds r6, #0x71
|
|
cmp r4, r0
|
|
beq _08064256
|
|
ldr r0, _080642B0 @ =gPlayerEntity
|
|
movs r2, #0x24
|
|
ldrsh r1, [r0, r2]
|
|
movs r0, #0xa0
|
|
lsls r0, r0, #1
|
|
cmp r1, r0
|
|
ble _08064222
|
|
ldr r0, _080642B4 @ =gScreenTransition
|
|
ldr r0, [r0]
|
|
movs r1, #6
|
|
bl __modsi3
|
|
cmp r0, #0
|
|
bne _08064222
|
|
adds r0, r5, #0
|
|
bl CreateDustSmall
|
|
_08064222:
|
|
adds r4, r5, #0
|
|
adds r4, #0x71
|
|
movs r0, #0xa
|
|
strb r0, [r4]
|
|
ldrb r0, [r5, #0x15]
|
|
bl sub_0806F5B0
|
|
strb r0, [r5, #0x14]
|
|
lsls r0, r0, #0x18
|
|
lsrs r0, r0, #0x19
|
|
adds r1, r5, #0
|
|
adds r1, #0x70
|
|
ldrb r1, [r1]
|
|
lsls r1, r1, #0x18
|
|
asrs r1, r1, #0x18
|
|
adds r1, #4
|
|
adds r1, r0, r1
|
|
adds r0, r5, #0
|
|
adds r0, #0x58
|
|
adds r6, r4, #0
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
beq _08064256
|
|
adds r0, r5, #0
|
|
bl InitializeAnimation
|
|
_08064256:
|
|
movs r0, #0
|
|
ldrsb r0, [r6, r0]
|
|
cmp r0, #0
|
|
bne _0806428C
|
|
ldr r1, _080642B0 @ =gPlayerEntity
|
|
adds r0, r5, #0
|
|
bl GetFacingDirection
|
|
bl sub_0806F5B0
|
|
strb r0, [r5, #0x14]
|
|
lsls r0, r0, #0x18
|
|
lsrs r0, r0, #0x19
|
|
adds r1, r5, #0
|
|
adds r1, #0x70
|
|
ldrb r1, [r1]
|
|
lsls r1, r1, #0x18
|
|
asrs r1, r1, #0x18
|
|
adds r1, r0, r1
|
|
adds r0, r5, #0
|
|
adds r0, #0x58
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
beq _0806428C
|
|
adds r0, r5, #0
|
|
bl InitializeAnimation
|
|
_0806428C:
|
|
adds r0, r5, #0
|
|
bl sub_0806ED78
|
|
movs r0, #0x36
|
|
ldrsh r4, [r5, r0]
|
|
ldr r0, _080642B0 @ =gPlayerEntity
|
|
ldrh r0, [r0, #0x36]
|
|
strh r0, [r5, #0x36]
|
|
cmp r4, #0
|
|
bge _080642AC
|
|
lsls r0, r0, #0x10
|
|
cmp r0, #0
|
|
bne _080642AC
|
|
adds r0, r5, #0
|
|
bl CreateDustSmall
|
|
_080642AC:
|
|
pop {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_080642B0: .4byte gPlayerEntity
|
|
_080642B4: .4byte gScreenTransition
|
|
|
|
thumb_func_start sub_080642B8
|
|
sub_080642B8: @ 0x080642B8
|
|
push {r4, r5, r6, lr}
|
|
adds r5, r0, #0
|
|
adds r4, r5, #0
|
|
adds r4, #0x71
|
|
ldrb r1, [r4]
|
|
movs r0, #0
|
|
ldrsb r0, [r4, r0]
|
|
cmp r0, #0
|
|
ble _080642CE
|
|
subs r0, r1, #1
|
|
strb r0, [r4]
|
|
_080642CE:
|
|
ldr r0, _080642F8 @ =gPlayerEntity
|
|
movs r2, #0x2e
|
|
ldrsh r1, [r0, r2]
|
|
movs r2, #0x2e
|
|
ldrsh r0, [r5, r2]
|
|
subs r1, r1, r0
|
|
cmp r1, #2
|
|
ble _080642E0
|
|
movs r1, #2
|
|
_080642E0:
|
|
movs r0, #2
|
|
rsbs r0, r0, #0
|
|
cmp r1, r0
|
|
bge _080642EA
|
|
adds r1, r0, #0
|
|
_080642EA:
|
|
adds r6, r4, #0
|
|
cmp r1, #0
|
|
beq _08064376
|
|
cmp r1, #0
|
|
ble _080642FC
|
|
movs r0, #8
|
|
b _080642FE
|
|
.align 2, 0
|
|
_080642F8: .4byte gPlayerEntity
|
|
_080642FC:
|
|
movs r0, #0x18
|
|
_080642FE:
|
|
strb r0, [r5, #0x15]
|
|
cmp r1, #0
|
|
bge _08064306
|
|
rsbs r1, r1, #0
|
|
_08064306:
|
|
lsls r0, r1, #8
|
|
strh r0, [r5, #0x24]
|
|
movs r0, #0x2e
|
|
ldrsh r4, [r5, r0]
|
|
adds r0, r5, #0
|
|
bl ProcessMovement
|
|
movs r1, #0x2e
|
|
ldrsh r0, [r5, r1]
|
|
adds r6, r5, #0
|
|
adds r6, #0x71
|
|
cmp r4, r0
|
|
beq _08064376
|
|
ldr r0, _080643D0 @ =gPlayerEntity
|
|
movs r2, #0x24
|
|
ldrsh r1, [r0, r2]
|
|
movs r0, #0xa0
|
|
lsls r0, r0, #1
|
|
cmp r1, r0
|
|
ble _08064342
|
|
ldr r0, _080643D4 @ =gScreenTransition
|
|
ldr r0, [r0]
|
|
movs r1, #6
|
|
bl __modsi3
|
|
cmp r0, #0
|
|
bne _08064342
|
|
adds r0, r5, #0
|
|
bl CreateDustSmall
|
|
_08064342:
|
|
adds r4, r5, #0
|
|
adds r4, #0x71
|
|
movs r0, #0xa
|
|
strb r0, [r4]
|
|
ldrb r0, [r5, #0x15]
|
|
bl sub_0806F5B0
|
|
strb r0, [r5, #0x14]
|
|
lsls r0, r0, #0x18
|
|
lsrs r0, r0, #0x19
|
|
adds r1, r5, #0
|
|
adds r1, #0x70
|
|
ldrb r1, [r1]
|
|
lsls r1, r1, #0x18
|
|
asrs r1, r1, #0x18
|
|
adds r1, #4
|
|
adds r1, r0, r1
|
|
adds r0, r5, #0
|
|
adds r0, #0x58
|
|
adds r6, r4, #0
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
beq _08064376
|
|
adds r0, r5, #0
|
|
bl InitializeAnimation
|
|
_08064376:
|
|
movs r0, #0
|
|
ldrsb r0, [r6, r0]
|
|
cmp r0, #0
|
|
bne _080643AC
|
|
ldr r1, _080643D0 @ =gPlayerEntity
|
|
adds r0, r5, #0
|
|
bl GetFacingDirection
|
|
bl sub_0806F5B0
|
|
strb r0, [r5, #0x14]
|
|
lsls r0, r0, #0x18
|
|
lsrs r0, r0, #0x19
|
|
adds r1, r5, #0
|
|
adds r1, #0x70
|
|
ldrb r1, [r1]
|
|
lsls r1, r1, #0x18
|
|
asrs r1, r1, #0x18
|
|
adds r1, r0, r1
|
|
adds r0, r5, #0
|
|
adds r0, #0x58
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
beq _080643AC
|
|
adds r0, r5, #0
|
|
bl InitializeAnimation
|
|
_080643AC:
|
|
adds r0, r5, #0
|
|
bl sub_0806ED78
|
|
movs r0, #0x36
|
|
ldrsh r4, [r5, r0]
|
|
ldr r0, _080643D0 @ =gPlayerEntity
|
|
ldrh r0, [r0, #0x36]
|
|
strh r0, [r5, #0x36]
|
|
cmp r4, #0
|
|
bge _080643CC
|
|
lsls r0, r0, #0x10
|
|
cmp r0, #0
|
|
bne _080643CC
|
|
adds r0, r5, #0
|
|
bl CreateDustSmall
|
|
_080643CC:
|
|
pop {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_080643D0: .4byte gPlayerEntity
|
|
_080643D4: .4byte gScreenTransition
|
|
|
|
thumb_func_start sub_080643D8
|
|
sub_080643D8: @ 0x080643D8
|
|
push {r4, lr}
|
|
adds r4, r0, #0
|
|
movs r0, #2
|
|
bl CheckGlobalFlag
|
|
cmp r0, #0
|
|
bne _080643EA
|
|
movs r3, #0
|
|
b _08064406
|
|
_080643EA:
|
|
movs r0, #2
|
|
bl GetInventoryValue
|
|
cmp r0, #0
|
|
bne _080643F8
|
|
movs r3, #1
|
|
b _08064406
|
|
_080643F8:
|
|
movs r0, #3
|
|
bl GetInventoryValue
|
|
movs r3, #3
|
|
cmp r0, #0
|
|
bne _08064406
|
|
movs r3, #2
|
|
_08064406:
|
|
ldrb r1, [r4, #0xb]
|
|
rsbs r0, r1, #0
|
|
orrs r0, r1
|
|
lsrs r0, r0, #0x1f
|
|
ldr r2, _08064424 @ =gUnk_0810F6D4
|
|
lsls r1, r3, #1
|
|
lsls r0, r0, #3
|
|
adds r1, r1, r0
|
|
adds r1, r1, r2
|
|
ldrh r0, [r1]
|
|
adds r1, r4, #0
|
|
bl TextboxNoOverlap
|
|
pop {r4, pc}
|
|
.align 2, 0
|
|
_08064424: .4byte gUnk_0810F6D4
|
|
|
|
thumb_func_start sub_08064428
|
|
sub_08064428: @ 0x08064428
|
|
push {lr}
|
|
adds r3, r0, #0
|
|
ldr r0, _0806444C @ =gUnk_02002A40
|
|
ldrb r0, [r0, #8]
|
|
subs r1, r0, #2
|
|
cmp r1, #0
|
|
bge _08064438
|
|
movs r1, #0
|
|
_08064438:
|
|
ldrb r2, [r3, #0xb]
|
|
movs r0, #0x80
|
|
ands r0, r2
|
|
cmp r0, #0
|
|
bne _08064454
|
|
ldrb r0, [r3, #0xb]
|
|
lsls r0, r0, #3
|
|
ldr r1, _08064450 @ =gUnk_0810CF4C
|
|
b _08064460
|
|
.align 2, 0
|
|
_0806444C: .4byte gUnk_02002A40
|
|
_08064450: .4byte gUnk_0810CF4C
|
|
_08064454:
|
|
movs r0, #0x7f
|
|
ands r0, r2
|
|
lsls r0, r0, #6
|
|
lsls r1, r1, #3
|
|
ldr r2, _0806446C @ =gUnk_0810D0A4
|
|
adds r1, r1, r2
|
|
_08064460:
|
|
adds r1, r0, r1
|
|
adds r0, r3, #0
|
|
bl ShowNPCDialogue
|
|
pop {pc}
|
|
.align 2, 0
|
|
_0806446C: .4byte gUnk_0810D0A4
|
|
|
|
thumb_func_start sub_08064470
|
|
sub_08064470: @ 0x08064470
|
|
push {lr}
|
|
ldr r0, _08064484 @ =gPlayerState
|
|
adds r0, #0xab
|
|
ldrb r0, [r0]
|
|
cmp r0, #1
|
|
beq _0806447E
|
|
movs r0, #0
|
|
_0806447E:
|
|
str r0, [r1, #0x14]
|
|
pop {pc}
|
|
.align 2, 0
|
|
_08064484: .4byte gPlayerState
|
|
|
|
thumb_func_start sub_08064488
|
|
sub_08064488: @ 0x08064488
|
|
push {lr}
|
|
ldr r1, _080644A0 @ =gPlayerState
|
|
adds r0, r1, #0
|
|
adds r0, #0xa8
|
|
ldrb r0, [r0]
|
|
cmp r0, #2
|
|
beq _0806449C
|
|
adds r1, #0xab
|
|
movs r0, #0
|
|
strb r0, [r1]
|
|
_0806449C:
|
|
pop {pc}
|
|
.align 2, 0
|
|
_080644A0: .4byte gPlayerState
|
|
|
|
thumb_func_start sub_080644A4
|
|
sub_080644A4: @ 0x080644A4
|
|
ldr r0, _080644B0 @ =gPlayerState
|
|
adds r0, #0xab
|
|
movs r1, #0
|
|
strb r1, [r0]
|
|
bx lr
|
|
.align 2, 0
|
|
_080644B0: .4byte gPlayerState
|
|
|
|
thumb_func_start sub_080644B4
|
|
sub_080644B4: @ 0x080644B4
|
|
push {lr}
|
|
adds r2, r1, #0
|
|
movs r3, #0
|
|
ldrb r1, [r0, #0x14]
|
|
ldr r0, [r2, #4]
|
|
cmp r1, r0
|
|
bne _080644C4
|
|
movs r3, #1
|
|
_080644C4:
|
|
str r3, [r2, #0x14]
|
|
pop {pc}
|
|
|
|
thumb_func_start sub_080644C8
|
|
sub_080644C8: @ 0x080644C8
|
|
push {r4, lr}
|
|
adds r2, r0, #0
|
|
movs r1, #0x2e
|
|
ldrsh r0, [r2, r1]
|
|
ldr r3, _08064500 @ =gRoomControls
|
|
movs r4, #0xa
|
|
ldrsh r1, [r3, r4]
|
|
subs r1, r0, r1
|
|
adds r0, r1, #0
|
|
adds r0, #8
|
|
cmp r0, #0
|
|
blt _08064504
|
|
adds r0, r1, #0
|
|
subs r0, #8
|
|
cmp r0, #0xf0
|
|
bgt _08064504
|
|
movs r0, #0x32
|
|
ldrsh r1, [r2, r0]
|
|
movs r2, #0xc
|
|
ldrsh r0, [r3, r2]
|
|
subs r0, r1, r0
|
|
cmp r0, #0
|
|
blt _08064504
|
|
subs r0, #0x18
|
|
cmp r0, #0xa0
|
|
bgt _08064504
|
|
movs r0, #1
|
|
b _08064506
|
|
.align 2, 0
|
|
_08064500: .4byte gRoomControls
|
|
_08064504:
|
|
movs r0, #0
|
|
_08064506:
|
|
pop {r4, pc}
|