mirror of https://github.com/zeldaret/tmc.git
Decompile Wizzrobes
This commit is contained in:
parent
2b8d880ffc
commit
5ab9443679
|
@ -280,8 +280,8 @@ GetFacingDirection: @ 0x080045C4
|
|||
ldrsh r0, [r0, r5]
|
||||
pop {r4, r5}
|
||||
|
||||
thumb_func_start sub_080045D4
|
||||
sub_080045D4: @ 0x080045D4
|
||||
thumb_func_start CalculateDirectionTo
|
||||
CalculateDirectionTo: @ 0x080045D4
|
||||
mov ip, r3
|
||||
ldr r3, _08004694 @ =gUnk_030060F0
|
||||
bx r3
|
||||
|
|
|
@ -268,7 +268,7 @@ sub_08049EE4: @ 0x08049EE4
|
|||
ldrsh r0, [r1, r4]
|
||||
movs r5, #0x32
|
||||
ldrsh r1, [r1, r5]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_08049F1C
|
||||
|
|
|
@ -630,7 +630,7 @@ _08044570:
|
|||
lsls r4, r4, #0x18
|
||||
asrs r4, r4, #0x18
|
||||
adds r3, r3, r4
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r6, #0x15]
|
||||
adds r0, r6, #0
|
||||
bl LinearMoveUpdate
|
||||
|
|
|
@ -166,7 +166,7 @@ _0803ECD8:
|
|||
ldrsh r1, [r4, r2]
|
||||
ldrh r2, [r5]
|
||||
ldrh r3, [r6]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r4, #0x15]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x10
|
||||
|
|
|
@ -495,7 +495,7 @@ sub_080493E4: @ 0x080493E4
|
|||
adds r2, #0xa8
|
||||
ldrh r3, [r3, #8]
|
||||
adds r3, #0x80
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
adds r0, #2
|
||||
movs r1, #0x1c
|
||||
ands r0, r1
|
||||
|
|
|
@ -302,7 +302,7 @@ _08030C1C:
|
|||
ldrsh r2, [r3, r5]
|
||||
movs r5, #0x32
|
||||
ldrsh r3, [r3, r5]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
adds r0, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
|
@ -877,7 +877,7 @@ _0803109E:
|
|||
adds r3, r7, #0
|
||||
adds r3, #0x76
|
||||
ldrh r3, [r3]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r7, #0x15]
|
||||
adds r0, #4
|
||||
movs r2, #0x18
|
||||
|
@ -1032,7 +1032,7 @@ _080311D8:
|
|||
adds r3, #0x76
|
||||
ldrh r3, [r3]
|
||||
_080311E8:
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r7, #0x15]
|
||||
_080311EE:
|
||||
ldrb r0, [r7, #0x15]
|
||||
|
|
|
@ -1,351 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start WizzrobeFire
|
||||
WizzrobeFire: @ 0x0802FB30
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, _0802FB58 @ =gUnk_080CDFC4
|
||||
bl GetNextFunction
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
movs r3, #0x10
|
||||
rsbs r3, r3, #0
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
movs r2, #1
|
||||
bl SetChildOffset
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0802FB58: .4byte gUnk_080CDFC4
|
||||
|
||||
thumb_func_start sub_0802FB5C
|
||||
sub_0802FB5C: @ 0x0802FB5C
|
||||
push {lr}
|
||||
ldr r2, _0802FB70 @ =gUnk_080CDFDC
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802FB70: .4byte gUnk_080CDFDC
|
||||
|
||||
thumb_func_start sub_0802FB74
|
||||
sub_0802FB74: @ 0x0802FB74
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x43
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0802FB88
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
bl sub_0804A9FC
|
||||
_0802FB88:
|
||||
ldr r1, _0802FBB4 @ =gUnk_080CDFC4
|
||||
adds r0, r4, #0
|
||||
bl sub_0804AA30
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0802FBB0
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
_0802FBB0:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802FBB4: .4byte gUnk_080CDFC4
|
||||
|
||||
thumb_func_start sub_0802FBB8
|
||||
sub_0802FBB8: @ 0x0802FBB8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0804A720
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x82
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
subs r1, #1
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x60
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F888
|
||||
adds r0, r4, #0
|
||||
movs r1, #8
|
||||
movs r2, #0
|
||||
bl CreateProjectileWithParent
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0802FBF6
|
||||
str r1, [r4, #0x54]
|
||||
str r4, [r1, #0x50]
|
||||
ldrb r0, [r4, #0x15]
|
||||
strb r0, [r1, #0x15]
|
||||
_0802FBF6:
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802FC04
|
||||
sub_0802FC04: @ 0x0802FC04
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x82
|
||||
ldrb r3, [r2]
|
||||
cmp r3, #1
|
||||
beq _0802FC52
|
||||
cmp r3, #1
|
||||
bgt _0802FC1C
|
||||
cmp r3, #0
|
||||
beq _0802FC32
|
||||
b _0802FC88
|
||||
_0802FC1C:
|
||||
cmp r3, #0xff
|
||||
bne _0802FC88
|
||||
ldrb r0, [r5, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802FC88
|
||||
strb r0, [r2]
|
||||
b _0802FC88
|
||||
_0802FC32:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802FC88
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0xe
|
||||
strb r0, [r5, #0xe]
|
||||
ldrb r0, [r5, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
b _0802FC88
|
||||
_0802FC52:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
bne _0802FC88
|
||||
movs r0, #2
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r2]
|
||||
movs r0, #0x20
|
||||
strb r0, [r5, #0xe]
|
||||
ldrb r1, [r5, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
ldr r2, [r5, #0x54]
|
||||
movs r4, #1
|
||||
strb r3, [r2, #0xe]
|
||||
ldrb r3, [r2, #0x18]
|
||||
subs r0, #0x24
|
||||
ands r0, r3
|
||||
orrs r0, r4
|
||||
strb r0, [r2, #0x18]
|
||||
movs r0, #4
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl InitializeAnimation
|
||||
_0802FC88:
|
||||
adds r0, r5, #0
|
||||
bl sub_0802F9C8
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_0802FC90
|
||||
sub_0802FC90: @ 0x0802FC90
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x82
|
||||
ldrb r0, [r2]
|
||||
cmp r0, #1
|
||||
beq _0802FD18
|
||||
cmp r0, #1
|
||||
bgt _0802FCA8
|
||||
cmp r0, #0
|
||||
beq _0802FCB2
|
||||
b _0802FDCA
|
||||
_0802FCA8:
|
||||
cmp r0, #2
|
||||
beq _0802FD6A
|
||||
cmp r0, #3
|
||||
beq _0802FD94
|
||||
b _0802FDCA
|
||||
_0802FCB2:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
beq _0802FCC6
|
||||
cmp r1, #6
|
||||
beq _0802FCDE
|
||||
b _0802FDCA
|
||||
_0802FCC6:
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x38
|
||||
strb r0, [r4, #0xe]
|
||||
strb r1, [r4, #0xf]
|
||||
ldr r2, [r4, #0x54]
|
||||
ldrb r1, [r2, #0x18]
|
||||
subs r0, #0x3c
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
b _0802FDCA
|
||||
_0802FCDE:
|
||||
ldr r1, _0802FD14 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
movs r2, #0xa0
|
||||
movs r3, #0xa0
|
||||
bl EntityInRectRadius
|
||||
cmp r0, #0
|
||||
beq _0802FDCA
|
||||
adds r0, r4, #0
|
||||
bl CheckOnScreen
|
||||
cmp r0, #0
|
||||
beq _0802FDCA
|
||||
adds r0, r4, #0
|
||||
movs r1, #8
|
||||
movs r2, #1
|
||||
bl CreateProjectileWithParent
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _0802FDCA
|
||||
ldrb r1, [r4, #0x15]
|
||||
movs r0, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x15]
|
||||
b _0802FDCA
|
||||
.align 2, 0
|
||||
_0802FD14: .4byte gPlayerEntity
|
||||
_0802FD18:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r3, r0, #0x18
|
||||
cmp r3, #0
|
||||
bne _0802FDCA
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x81
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
strb r3, [r4, #0xf]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
movs r0, #0xab
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _0802FDCA
|
||||
_0802FD6A:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802FDCA
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
bl Random
|
||||
movs r1, #0x3f
|
||||
ands r0, r1
|
||||
adds r0, #0x1c
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
b _0802FDCA
|
||||
_0802FD94:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
bne _0802FDCA
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r2]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x81
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0xab
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F8E4
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_0802FDCA:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F9C8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
|
@ -1,378 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start WizzrobeIce
|
||||
WizzrobeIce: @ 0x0802FDD4
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, _0802FDFC @ =gUnk_080CE074
|
||||
bl GetNextFunction
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
movs r3, #0x10
|
||||
rsbs r3, r3, #0
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
movs r2, #1
|
||||
bl SetChildOffset
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0802FDFC: .4byte gUnk_080CE074
|
||||
|
||||
thumb_func_start sub_0802FE00
|
||||
sub_0802FE00: @ 0x0802FE00
|
||||
push {lr}
|
||||
ldr r2, _0802FE14 @ =gUnk_080CE08C
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802FE14: .4byte gUnk_080CE08C
|
||||
|
||||
thumb_func_start sub_0802FE18
|
||||
sub_0802FE18: @ 0x0802FE18
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x43
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0802FE2C
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
bl sub_0804A9FC
|
||||
_0802FE2C:
|
||||
ldr r1, _0802FE8C @ =gUnk_080CE074
|
||||
adds r0, r4, #0
|
||||
bl sub_0804AA30
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x41
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x87
|
||||
bne _0802FE6A
|
||||
movs r0, #0x2a
|
||||
movs r1, #3
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _0802FE6A
|
||||
adds r3, r2, #0
|
||||
adds r3, #0x29
|
||||
ldrb r1, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #3
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x63
|
||||
movs r0, #0xfc
|
||||
strb r0, [r1]
|
||||
str r4, [r2, #0x50]
|
||||
_0802FE6A:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0802FE8A
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
_0802FE8A:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802FE8C: .4byte gUnk_080CE074
|
||||
|
||||
thumb_func_start sub_0802FE90
|
||||
sub_0802FE90: @ 0x0802FE90
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0804A720
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x82
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
subs r1, #1
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x60
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F888
|
||||
adds r0, r4, #0
|
||||
movs r1, #9
|
||||
movs r2, #0
|
||||
bl CreateProjectileWithParent
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0802FECE
|
||||
str r1, [r4, #0x54]
|
||||
str r4, [r1, #0x50]
|
||||
ldrb r0, [r4, #0x15]
|
||||
strb r0, [r1, #0x15]
|
||||
_0802FECE:
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802FEDC
|
||||
sub_0802FEDC: @ 0x0802FEDC
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x82
|
||||
ldrb r3, [r2]
|
||||
cmp r3, #1
|
||||
beq _0802FF2A
|
||||
cmp r3, #1
|
||||
bgt _0802FEF4
|
||||
cmp r3, #0
|
||||
beq _0802FF0A
|
||||
b _0802FF60
|
||||
_0802FEF4:
|
||||
cmp r3, #0xff
|
||||
bne _0802FF60
|
||||
ldrb r0, [r5, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802FF60
|
||||
strb r0, [r2]
|
||||
b _0802FF60
|
||||
_0802FF0A:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802FF60
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0xc
|
||||
strb r0, [r5, #0xe]
|
||||
ldrb r0, [r5, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
b _0802FF60
|
||||
_0802FF2A:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
bne _0802FF60
|
||||
movs r0, #2
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r2]
|
||||
movs r0, #0x20
|
||||
strb r0, [r5, #0xe]
|
||||
ldrb r1, [r5, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
ldr r2, [r5, #0x54]
|
||||
movs r4, #1
|
||||
strb r3, [r2, #0xe]
|
||||
ldrb r3, [r2, #0x18]
|
||||
subs r0, #0x24
|
||||
ands r0, r3
|
||||
orrs r0, r4
|
||||
strb r0, [r2, #0x18]
|
||||
movs r0, #4
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl InitializeAnimation
|
||||
_0802FF60:
|
||||
adds r0, r5, #0
|
||||
bl sub_0802F9C8
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_0802FF68
|
||||
sub_0802FF68: @ 0x0802FF68
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x82
|
||||
ldrb r0, [r2]
|
||||
cmp r0, #1
|
||||
beq _0802FFF0
|
||||
cmp r0, #1
|
||||
bgt _0802FF80
|
||||
cmp r0, #0
|
||||
beq _0802FF8A
|
||||
b _080300A2
|
||||
_0802FF80:
|
||||
cmp r0, #2
|
||||
beq _08030042
|
||||
cmp r0, #3
|
||||
beq _0803006C
|
||||
b _080300A2
|
||||
_0802FF8A:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
beq _0802FF9E
|
||||
cmp r1, #0xa
|
||||
beq _0802FFB6
|
||||
b _080300A2
|
||||
_0802FF9E:
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x38
|
||||
strb r0, [r4, #0xe]
|
||||
strb r1, [r4, #0xf]
|
||||
ldr r2, [r4, #0x54]
|
||||
ldrb r1, [r2, #0x18]
|
||||
subs r0, #0x3c
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
b _080300A2
|
||||
_0802FFB6:
|
||||
ldr r1, _0802FFEC @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
movs r2, #0xa0
|
||||
movs r3, #0xa0
|
||||
bl EntityInRectRadius
|
||||
cmp r0, #0
|
||||
beq _080300A2
|
||||
adds r0, r4, #0
|
||||
bl CheckOnScreen
|
||||
cmp r0, #0
|
||||
beq _080300A2
|
||||
adds r0, r4, #0
|
||||
movs r1, #9
|
||||
movs r2, #1
|
||||
bl CreateProjectileWithParent
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _080300A2
|
||||
ldrb r1, [r4, #0x15]
|
||||
movs r0, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x15]
|
||||
b _080300A2
|
||||
.align 2, 0
|
||||
_0802FFEC: .4byte gPlayerEntity
|
||||
_0802FFF0:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r3, r0, #0x18
|
||||
cmp r3, #0
|
||||
bne _080300A2
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x81
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
strb r3, [r4, #0xf]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
movs r0, #0xab
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _080300A2
|
||||
_08030042:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _080300A2
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
bl Random
|
||||
movs r1, #0x3f
|
||||
ands r0, r1
|
||||
adds r0, #0x18
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
b _080300A2
|
||||
_0803006C:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
bne _080300A2
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r2]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x81
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0xab
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F8E4
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_080300A2:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F9C8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
|
@ -1,861 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start WizzrobeWind
|
||||
WizzrobeWind: @ 0x0802F4A0
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, _0802F4C8 @ =gUnk_080CDF50
|
||||
bl GetNextFunction
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r5
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
movs r3, #0x10
|
||||
rsbs r3, r3, #0
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
movs r2, #1
|
||||
bl SetChildOffset
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0802F4C8: .4byte gUnk_080CDF50
|
||||
|
||||
thumb_func_start sub_0802F4CC
|
||||
sub_0802F4CC: @ 0x0802F4CC
|
||||
push {lr}
|
||||
ldr r2, _0802F4E0 @ =gUnk_080CDF68
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802F4E0: .4byte gUnk_080CDF68
|
||||
|
||||
thumb_func_start sub_0802F4E4
|
||||
sub_0802F4E4: @ 0x0802F4E4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x43
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0802F4F8
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
bl sub_0804A9FC
|
||||
_0802F4F8:
|
||||
ldr r1, _0802F558 @ =gUnk_080CDF50
|
||||
adds r0, r4, #0
|
||||
bl sub_0804AA30
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x41
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x87
|
||||
bne _0802F536
|
||||
movs r0, #0x2a
|
||||
movs r1, #3
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _0802F536
|
||||
adds r3, r2, #0
|
||||
adds r3, #0x29
|
||||
ldrb r1, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #3
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x63
|
||||
movs r0, #0xfc
|
||||
strb r0, [r1]
|
||||
str r4, [r2, #0x50]
|
||||
_0802F536:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0802F556
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
_0802F556:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802F558: .4byte gUnk_080CDF50
|
||||
|
||||
thumb_func_start sub_0802F55C
|
||||
sub_0802F55C: @ 0x0802F55C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
beq _0802F594
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
movs r2, #0
|
||||
movs r0, #0xc0
|
||||
strh r0, [r4, #0x24]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x80
|
||||
strb r2, [r0]
|
||||
ldrb r0, [r4, #0xe]
|
||||
bl GetCurrentRoomProperty
|
||||
str r0, [r4, #0x54]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802FA48
|
||||
adds r0, r4, #0
|
||||
bl sub_0802FA88
|
||||
b _0802F5B8
|
||||
_0802F594:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804A720
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x82
|
||||
movs r0, #0xff
|
||||
strb r0, [r1]
|
||||
subs r1, #1
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x60
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F888
|
||||
_0802F5B8:
|
||||
adds r0, r4, #0
|
||||
movs r1, #7
|
||||
movs r2, #0
|
||||
bl CreateProjectileWithParent
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0802F5D0
|
||||
str r1, [r4, #0x50]
|
||||
str r4, [r1, #0x50]
|
||||
ldrb r0, [r4, #0x15]
|
||||
strb r0, [r1, #0x15]
|
||||
_0802F5D0:
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802F5DC
|
||||
sub_0802F5DC: @ 0x0802F5DC
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x82
|
||||
ldrb r3, [r2]
|
||||
cmp r3, #1
|
||||
beq _0802F62A
|
||||
cmp r3, #1
|
||||
bgt _0802F5F4
|
||||
cmp r3, #0
|
||||
beq _0802F60A
|
||||
b _0802F660
|
||||
_0802F5F4:
|
||||
cmp r3, #0xff
|
||||
bne _0802F660
|
||||
ldrb r0, [r5, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802F660
|
||||
strb r0, [r2]
|
||||
b _0802F660
|
||||
_0802F60A:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802F660
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x10
|
||||
strb r0, [r5, #0xe]
|
||||
ldrb r0, [r5, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
b _0802F660
|
||||
_0802F62A:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
bne _0802F660
|
||||
movs r0, #2
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r2]
|
||||
movs r0, #0x28
|
||||
strb r0, [r5, #0xe]
|
||||
ldrb r1, [r5, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
ldr r2, [r5, #0x50]
|
||||
movs r4, #1
|
||||
strb r3, [r2, #0xe]
|
||||
ldrb r3, [r2, #0x18]
|
||||
subs r0, #0x2c
|
||||
ands r0, r3
|
||||
orrs r0, r4
|
||||
strb r0, [r2, #0x18]
|
||||
movs r0, #4
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl InitializeAnimation
|
||||
_0802F660:
|
||||
adds r0, r5, #0
|
||||
bl sub_0802F9C8
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_0802F668
|
||||
sub_0802F668: @ 0x0802F668
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x82
|
||||
ldrb r0, [r2]
|
||||
cmp r0, #1
|
||||
beq _0802F6F0
|
||||
cmp r0, #1
|
||||
bgt _0802F680
|
||||
cmp r0, #0
|
||||
beq _0802F68A
|
||||
b _0802F7A2
|
||||
_0802F680:
|
||||
cmp r0, #2
|
||||
beq _0802F742
|
||||
cmp r0, #3
|
||||
beq _0802F76C
|
||||
b _0802F7A2
|
||||
_0802F68A:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
beq _0802F69E
|
||||
cmp r1, #8
|
||||
beq _0802F6B6
|
||||
b _0802F7A2
|
||||
_0802F69E:
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x38
|
||||
strb r0, [r4, #0xe]
|
||||
strb r1, [r4, #0xf]
|
||||
ldr r2, [r4, #0x50]
|
||||
ldrb r1, [r2, #0x18]
|
||||
subs r0, #0x3c
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
b _0802F7A2
|
||||
_0802F6B6:
|
||||
ldr r1, _0802F6EC @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
movs r2, #0xa0
|
||||
movs r3, #0xa0
|
||||
bl EntityInRectRadius
|
||||
cmp r0, #0
|
||||
beq _0802F7A2
|
||||
adds r0, r4, #0
|
||||
bl CheckOnScreen
|
||||
cmp r0, #0
|
||||
beq _0802F7A2
|
||||
adds r0, r4, #0
|
||||
movs r1, #7
|
||||
movs r2, #1
|
||||
bl CreateProjectileWithParent
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _0802F7A2
|
||||
ldrb r1, [r4, #0x15]
|
||||
movs r0, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x15]
|
||||
b _0802F7A2
|
||||
.align 2, 0
|
||||
_0802F6EC: .4byte gPlayerEntity
|
||||
_0802F6F0:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r3, r0, #0x18
|
||||
cmp r3, #0
|
||||
bne _0802F7A2
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x81
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
strb r3, [r4, #0xf]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
movs r0, #0xab
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x84
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _0802F7A2
|
||||
_0802F742:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802F7A2
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
bl Random
|
||||
movs r1, #0x3f
|
||||
ands r0, r1
|
||||
adds r0, #0x20
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
b _0802F7A2
|
||||
_0802F76C:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
cmp r1, #0
|
||||
bne _0802F7A2
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r2]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x81
|
||||
movs r0, #0x28
|
||||
strb r0, [r1]
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0xab
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F8E4
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsrs r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_0802F7A2:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F9C8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802F7AC
|
||||
sub_0802F7AC: @ 0x0802F7AC
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0802FA88
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F9C8
|
||||
ldr r5, [r4, #0x50]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x81
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0802F86E
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x82
|
||||
ldrb r1, [r2]
|
||||
cmp r1, #1
|
||||
beq _0802F7EA
|
||||
cmp r1, #1
|
||||
bgt _0802F7DA
|
||||
cmp r1, #0
|
||||
beq _0802F7E0
|
||||
b _0802F884
|
||||
_0802F7DA:
|
||||
cmp r1, #2
|
||||
beq _0802F818
|
||||
b _0802F884
|
||||
_0802F7E0:
|
||||
movs r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x40
|
||||
strb r0, [r4, #0xe]
|
||||
b _0802F884
|
||||
_0802F7EA:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802F884
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x28
|
||||
strb r0, [r4, #0xe]
|
||||
movs r2, #1
|
||||
strb r1, [r5, #0xe]
|
||||
ldrb r1, [r5, #0x18]
|
||||
subs r0, #0x2c
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
strb r0, [r5, #0x18]
|
||||
ldrb r1, [r4, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
movs r0, #4
|
||||
orrs r1, r0
|
||||
b _0802F844
|
||||
_0802F818:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r1, r0, #1
|
||||
strb r1, [r4, #0xe]
|
||||
lsls r0, r1, #0x18
|
||||
cmp r0, #0
|
||||
bne _0802F84C
|
||||
ldrb r0, [r2]
|
||||
adds r0, #1
|
||||
strb r0, [r2]
|
||||
bl Random
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
adds r0, #0x30
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r5, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x18]
|
||||
ldrb r1, [r4, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
_0802F844:
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _0802F884
|
||||
_0802F84C:
|
||||
lsls r0, r1, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #8
|
||||
bne _0802F884
|
||||
adds r0, r4, #0
|
||||
movs r1, #7
|
||||
movs r2, #1
|
||||
bl CreateProjectileWithParent
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _0802F884
|
||||
ldrb r1, [r4, #0x15]
|
||||
movs r0, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x15]
|
||||
b _0802F884
|
||||
_0802F86E:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x82
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _0802F884
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r5, #0x18]
|
||||
subs r0, #4
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x18]
|
||||
_0802F884:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802F888
|
||||
sub_0802F888: @ 0x0802F888
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #3
|
||||
bl sub_08049F84
|
||||
adds r0, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
ldr r2, _0802F8DC @ =gRoomControls
|
||||
ldrh r0, [r2, #6]
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
movs r3, #0x3f
|
||||
ands r1, r3
|
||||
movs r5, #0x32
|
||||
ldrsh r0, [r4, r5]
|
||||
ldrh r2, [r2, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r3
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x84
|
||||
strh r1, [r5]
|
||||
ldrh r0, [r5]
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x38
|
||||
ldrb r1, [r6]
|
||||
bl GetTileIndex
|
||||
adds r4, #0x86
|
||||
strh r0, [r4]
|
||||
ldr r0, _0802F8E0 @ =0x00004071
|
||||
ldrh r1, [r5]
|
||||
ldrb r2, [r6]
|
||||
bl SetTile
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0802F8DC: .4byte gRoomControls
|
||||
_0802F8E0: .4byte 0x00004071
|
||||
|
||||
thumb_func_start sub_0802F8E4
|
||||
sub_0802F8E4: @ 0x0802F8E4
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #0x14
|
||||
adds r7, r0, #0
|
||||
ldrb r0, [r7, #0xb]
|
||||
cmp r0, #0
|
||||
bne _0802F9AE
|
||||
movs r0, #1
|
||||
str r0, [sp]
|
||||
adds r1, r7, #0
|
||||
adds r1, #0x70
|
||||
str r1, [sp, #0xc]
|
||||
adds r2, r7, #0
|
||||
adds r2, #0x6e
|
||||
str r2, [sp, #4]
|
||||
adds r0, r7, #0
|
||||
adds r0, #0x72
|
||||
str r0, [sp, #0x10]
|
||||
subs r1, #1
|
||||
str r1, [sp, #8]
|
||||
movs r2, #0x38
|
||||
adds r2, r2, r7
|
||||
mov r8, r2
|
||||
movs r0, #8
|
||||
mov sl, r0
|
||||
ldr r1, _0802F9BC @ =gRoomControls
|
||||
mov sb, r1
|
||||
_0802F920:
|
||||
bl Random
|
||||
adds r4, r0, #0
|
||||
ldr r2, [sp, #0xc]
|
||||
ldrh r5, [r2]
|
||||
ldr r1, _0802F9C0 @ =0x00007FF0
|
||||
ands r0, r1
|
||||
ldr r2, [sp, #4]
|
||||
ldrb r1, [r2]
|
||||
lsls r1, r1, #3
|
||||
bl __modsi3
|
||||
adds r6, r5, r0
|
||||
mov r0, sl
|
||||
orrs r6, r0
|
||||
lsrs r4, r4, #0x10
|
||||
ldr r1, [sp, #0x10]
|
||||
ldrh r5, [r1]
|
||||
ldr r2, _0802F9C0 @ =0x00007FF0
|
||||
ands r4, r2
|
||||
ldr r0, [sp, #8]
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #3
|
||||
adds r0, r4, #0
|
||||
bl __modsi3
|
||||
adds r5, r5, r0
|
||||
mov r1, sl
|
||||
orrs r5, r1
|
||||
mov r2, sb
|
||||
ldrh r0, [r2, #6]
|
||||
subs r0, r6, r0
|
||||
lsrs r4, r0, #4
|
||||
movs r1, #0x3f
|
||||
ands r4, r1
|
||||
ldrh r0, [r2, #8]
|
||||
subs r0, r5, r0
|
||||
lsrs r0, r0, #4
|
||||
ands r0, r1
|
||||
lsls r0, r0, #6
|
||||
orrs r4, r0
|
||||
mov r0, r8
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_080002E0
|
||||
cmp r0, #0
|
||||
bne _0802F9A2
|
||||
mov r2, r8
|
||||
ldrb r1, [r2]
|
||||
adds r0, r4, #0
|
||||
bl GetTileIndex
|
||||
ldr r1, _0802F9C4 @ =0x00004071
|
||||
cmp r0, r1
|
||||
beq _0802F9A2
|
||||
strh r6, [r7, #0x2e]
|
||||
strh r5, [r7, #0x32]
|
||||
adds r0, r7, #0
|
||||
bl sub_08049FA0
|
||||
cmp r0, #0
|
||||
beq _0802F9A2
|
||||
movs r0, #0
|
||||
str r0, [sp]
|
||||
_0802F9A2:
|
||||
ldr r1, [sp]
|
||||
cmp r1, #0
|
||||
bne _0802F920
|
||||
adds r0, r7, #0
|
||||
bl sub_0802F888
|
||||
_0802F9AE:
|
||||
add sp, #0x14
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0802F9BC: .4byte gRoomControls
|
||||
_0802F9C0: .4byte 0x00007FF0
|
||||
_0802F9C4: .4byte 0x00004071
|
||||
|
||||
thumb_func_start sub_0802F9C8
|
||||
sub_0802F9C8: @ 0x0802F9C8
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xf]
|
||||
cmp r0, #0
|
||||
bne _0802FA44
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x81
|
||||
ldrb r0, [r5]
|
||||
adds r6, r5, #0
|
||||
cmp r0, #0
|
||||
beq _0802FA20
|
||||
subs r0, #1
|
||||
strb r0, [r5]
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
movs r2, #1
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
beq _0802F9F8
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
b _0802FA02
|
||||
_0802F9F8:
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
_0802FA02:
|
||||
strb r0, [r4, #0x18]
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
beq _0802FA3E
|
||||
adds r0, r4, #0
|
||||
bl LinearMoveUpdate
|
||||
ldrb r0, [r6]
|
||||
cmp r0, #0
|
||||
bne _0802FA3E
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
b _0802FA3E
|
||||
_0802FA20:
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
beq _0802FA3E
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement
|
||||
ldrh r0, [r4, #0x2a]
|
||||
cmp r0, #0
|
||||
beq _0802FA3E
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
strb r1, [r4, #0x10]
|
||||
movs r0, #0x28
|
||||
strb r0, [r5]
|
||||
_0802FA3E:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_0802FA44:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802FA48
|
||||
sub_0802FA48: @ 0x0802FA48
|
||||
push {r4, lr}
|
||||
mov ip, r0
|
||||
ldr r4, [r0, #0x54]
|
||||
mov r2, ip
|
||||
adds r2, #0x80
|
||||
ldrb r0, [r2]
|
||||
lsls r0, r0, #2
|
||||
adds r3, r4, r0
|
||||
ldrh r1, [r3]
|
||||
ldr r0, _0802FA80 @ =0x0000FFFF
|
||||
cmp r1, r0
|
||||
bne _0802FA66
|
||||
movs r0, #0
|
||||
strb r0, [r2]
|
||||
adds r3, r4, #0
|
||||
_0802FA66:
|
||||
ldr r2, _0802FA84 @ =gRoomControls
|
||||
ldrh r0, [r3]
|
||||
ldrh r1, [r2, #6]
|
||||
adds r0, r0, r1
|
||||
mov r1, ip
|
||||
adds r1, #0x78
|
||||
strh r0, [r1]
|
||||
ldrh r0, [r3, #2]
|
||||
ldrh r2, [r2, #8]
|
||||
adds r0, r0, r2
|
||||
adds r1, #2
|
||||
strh r0, [r1]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802FA80: .4byte 0x0000FFFF
|
||||
_0802FA84: .4byte gRoomControls
|
||||
|
||||
thumb_func_start sub_0802FA88
|
||||
sub_0802FA88: @ 0x0802FA88
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
movs r7, #0
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x78
|
||||
ldrh r1, [r5]
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x7a
|
||||
ldrh r2, [r6]
|
||||
movs r3, #2
|
||||
bl EntityWithinDistance
|
||||
cmp r0, #0
|
||||
beq _0802FAF6
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x80
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802FA48
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
ldrh r2, [r5]
|
||||
ldrh r3, [r6]
|
||||
bl sub_080045D4
|
||||
adds r2, r0, #0
|
||||
strb r2, [r4, #0x15]
|
||||
adds r0, r2, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
lsrs r0, r0, #2
|
||||
strb r0, [r4, #0x14]
|
||||
ldr r0, [r4, #0x50]
|
||||
ldrb r0, [r0, #0x18]
|
||||
lsls r0, r0, #0x1e
|
||||
cmp r0, #0
|
||||
beq _0802FAEA
|
||||
lsrs r1, r2, #3
|
||||
movs r0, #4
|
||||
orrs r1, r0
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _0802FAF2
|
||||
_0802FAEA:
|
||||
lsrs r1, r2, #3
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_0802FAF2:
|
||||
movs r7, #1
|
||||
b _0802FB2A
|
||||
_0802FAF6:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
ldrh r2, [r5]
|
||||
ldrh r3, [r6]
|
||||
bl sub_080045D4
|
||||
adds r2, r0, #0
|
||||
adds r0, r4, #0
|
||||
adds r1, r2, #0
|
||||
bl sub_08004596
|
||||
ldrb r0, [r4, #0x15]
|
||||
adds r0, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
asrs r2, r0, #2
|
||||
ldrb r0, [r4, #0x14]
|
||||
cmp r2, r0
|
||||
beq _0802FB2A
|
||||
strb r2, [r4, #0x14]
|
||||
lsrs r1, r2, #1
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_0802FB2A:
|
||||
adds r0, r7, #0
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
|
@ -176,7 +176,7 @@ _080856FC:
|
|||
movs r2, #0x32
|
||||
ldrsh r1, [r7, r2]
|
||||
adds r2, r5, #0
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r7, #0x15]
|
||||
ldr r0, _0808575C @ =gPlayerState
|
||||
ldrb r0, [r0, #0x1d]
|
||||
|
@ -297,7 +297,7 @@ _0808581A:
|
|||
ldr r2, [r7, #0x70]
|
||||
adds r3, r1, r2
|
||||
adds r2, r5, #0
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r7, #0x15]
|
||||
ldr r0, [r7, #0x6c]
|
||||
lsls r0, r0, #8
|
||||
|
|
|
@ -640,7 +640,7 @@ _08096802:
|
|||
ldrh r3, [r0]
|
||||
adds r0, r2, #0
|
||||
adds r2, r5, #0
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r4, #0x15]
|
||||
adds r0, r4, #0
|
||||
bl LinearMoveUpdate
|
||||
|
|
|
@ -312,7 +312,7 @@ _0808D8D4:
|
|||
adds r3, r4, #0
|
||||
adds r3, #0x76
|
||||
ldrh r3, [r3]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r4, #0x15]
|
||||
_0808D8EE:
|
||||
ldrb r1, [r4, #0x15]
|
||||
|
|
|
@ -217,7 +217,7 @@ _08087B1E:
|
|||
ldr r1, [r1]
|
||||
ldr r2, [r4, #0x2c]
|
||||
ldr r3, [r4, #0x30]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
b _08087B44
|
||||
_08087B3C:
|
||||
ldr r0, [r4, #0x4c]
|
||||
|
|
|
@ -254,7 +254,7 @@ _0809FC70:
|
|||
adds r3, r4, #0
|
||||
adds r3, #0x76
|
||||
ldrh r3, [r3]
|
||||
bl sub_080045D4
|
||||
bl CalculateDirectionTo
|
||||
strb r0, [r4, #0x15]
|
||||
_0809FC8A:
|
||||
ldrb r1, [r4, #0x15]
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_080CDFC4:: @ 080CDFC4
|
||||
.4byte sub_0802FB5C
|
||||
.4byte sub_0802FB74
|
||||
.4byte sub_08001324
|
||||
.4byte sub_0804A7D4
|
||||
.4byte sub_08001242
|
||||
.4byte sub_0802FB5C
|
||||
|
||||
gUnk_080CDFDC:: @ 080CDFDC
|
||||
.4byte sub_0802FBB8
|
||||
.4byte sub_0802FC04
|
||||
.4byte sub_0802FC90
|
|
@ -1,19 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_080CE074:: @ 080CE074
|
||||
.4byte sub_0802FE00
|
||||
.4byte sub_0802FE18
|
||||
.4byte sub_08001324
|
||||
.4byte sub_0804A7D4
|
||||
.4byte sub_08001242
|
||||
.4byte sub_0802FE00
|
||||
|
||||
gUnk_080CE08C:: @ 080CE08C
|
||||
.4byte sub_0802FE90
|
||||
.4byte sub_0802FEDC
|
||||
.4byte sub_0802FF68
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_080CDF50:: @ 080CDF50 @
|
||||
.4byte sub_0802F4CC
|
||||
.4byte sub_0802F4E4
|
||||
.4byte sub_08001324
|
||||
.4byte sub_0804A7D4
|
||||
.4byte sub_08001242
|
||||
.4byte sub_0802F4CC
|
||||
|
||||
gUnk_080CDF68:: @ 080CDF68
|
||||
.4byte sub_0802F55C
|
||||
.4byte sub_0802F5DC
|
||||
.4byte sub_0802F668
|
||||
.4byte sub_0802F7AC
|
|
@ -27,7 +27,7 @@ extern void sub_08004484(struct Entity_*, struct Entity_*);
|
|||
extern void ResetCollisionLayer(struct Entity_*);
|
||||
extern void sub_08004596(struct Entity_*, u32);
|
||||
extern u32 sub_080045B4(struct Entity_*, u32, u32);
|
||||
extern u32 sub_080045D4(u32, u32, u32, u32);
|
||||
extern u32 CalculateDirectionTo(u32, u32, u32, u32);
|
||||
extern u32 sub_080045DA(s32, s32);
|
||||
extern u32 sub_080086B4(u32, u32, u8*);
|
||||
extern u32 ResolveCollisionLayer(struct Entity_*);
|
||||
|
|
|
@ -171,9 +171,9 @@ void WallMaster2(Entity*);
|
|||
void Gleerok(Entity*);
|
||||
void VaatiEyesMacro(Entity*);
|
||||
void Tektite(Entity*);
|
||||
void WizzrobeWind(Entity*);
|
||||
void WizzrobeFire(Entity*);
|
||||
void WizzrobeIce(Entity*);
|
||||
void WizzrobeWind();
|
||||
void WizzrobeFire();
|
||||
void WizzrobeIce();
|
||||
void Armos(Entity*);
|
||||
void Eyegore(Entity*);
|
||||
void Rope(Entity*);
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
#ifndef ENEMY_WIZZROBE_H
|
||||
#define ENEMY_WIZZROBE_H
|
||||
#include "enemy.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ Entity base;
|
||||
/*0x68*/ u8 unk_68[6];
|
||||
/*0x6e*/ u8 unk_6e;
|
||||
/*0x6f*/ u8 unk_6f;
|
||||
/*0x70*/ u16 unk_70;
|
||||
/*0x72*/ u16 unk_72;
|
||||
/*0x74*/ u8 unk_74[4];
|
||||
/*0x78*/ u16 targetX;
|
||||
/*0x7a*/ u16 targetY;
|
||||
/*0x7c*/ u8 unk_7c[4];
|
||||
/*0x80*/ u8 targetIndex;
|
||||
/*0x81*/ u8 timer1;
|
||||
/*0x82*/ u8 timer2;
|
||||
/*0x83*/ u8 unk_83;
|
||||
/*0x84*/ u16 tilePosition;
|
||||
/*0x86*/ u16 tileIndex;
|
||||
} WizzrobeEntity;
|
||||
|
||||
extern void sub_0802F888(WizzrobeEntity*);
|
||||
extern void sub_0802F8E4(WizzrobeEntity*);
|
||||
extern void sub_0802F9C8(WizzrobeEntity*);
|
||||
#endif
|
12
linker.ld
12
linker.ld
|
@ -360,9 +360,9 @@ SECTIONS {
|
|||
asm/enemy/gleerok.o(.text);
|
||||
src/enemy/vaatiEyesMacro.o(.text);
|
||||
src/enemy/tektite.o(.text);
|
||||
asm/enemy/wizzrobeWind.o(.text);
|
||||
asm/enemy/wizzrobeFire.o(.text);
|
||||
asm/enemy/wizzrobeIce.o(.text);
|
||||
src/enemy/wizzrobeWind.o(.text);
|
||||
src/enemy/wizzrobeFire.o(.text);
|
||||
src/enemy/wizzrobeIce.o(.text);
|
||||
src/enemy/code_080300AC.o(.text);
|
||||
asm/enemy/code_080300AC.o(.text);
|
||||
asm/enemy/armos.o(.text);
|
||||
|
@ -1011,11 +1011,11 @@ SECTIONS {
|
|||
data/animations/enemy/vaatiEyesMacro.o(.rodata);
|
||||
data/const/enemy/tektite.o(.rodata);
|
||||
data/animations/enemy/tektite.o(.rodata);
|
||||
data/const/enemy/wizzrobeWind.o(.rodata);
|
||||
src/enemy/wizzrobeWind.o(.rodata);
|
||||
data/animations/enemy/wizzrobeWind.o(.rodata);
|
||||
data/const/enemy/wizzrobeFire.o(.rodata);
|
||||
src/enemy/wizzrobeFire.o(.rodata);
|
||||
data/animations/enemy/wizzrobeFire.o(.rodata);
|
||||
data/const/enemy/wizzrobeIce.o(.rodata);
|
||||
src/enemy/wizzrobeIce.o(.rodata);
|
||||
data/animations/enemy/wizzrobeIce.o(.rodata);
|
||||
data/const/enemy/armos.o(.rodata);
|
||||
data/animations/enemy/armos.o(.rodata);
|
||||
|
|
|
@ -163,7 +163,7 @@ u32 sub_0806F548(Entity* a, Entity* b, u32 x, u32 y) {
|
|||
}
|
||||
|
||||
u32 sub_0806F564(Entity* ent, u32 b, u32 c) {
|
||||
u32 tmp = sub_080045D4(ent->x.HALF.HI, ent->y.HALF.HI, b, c);
|
||||
u32 tmp = CalculateDirectionTo(ent->x.HALF.HI, ent->y.HALF.HI, b, c);
|
||||
return ent->animationState == sub_0806F5A4(tmp);
|
||||
}
|
||||
|
||||
|
@ -247,7 +247,7 @@ u32 sub_0806F804(u32 x, u32 y) {
|
|||
}
|
||||
|
||||
u32 sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) {
|
||||
return sub_080045D4(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y);
|
||||
return CalculateDirectionTo(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y);
|
||||
}
|
||||
|
||||
u32 sub_0806F854(Entity* ent, s32 x, s32 y) {
|
||||
|
|
|
@ -518,7 +518,7 @@ void sub_08021424(Entity* this) {
|
|||
if (!(6 < (x - this->x.HALF.HI) + 3U) && !(4 < (y - this->y.HALF.HI) + 2U)) {
|
||||
sub_080212B0(this);
|
||||
} else {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
if (!ProcessMovement(this)) {
|
||||
sub_080212B0(this);
|
||||
} else {
|
||||
|
|
|
@ -306,7 +306,7 @@ void sub_0803797C(GibdoEntity* this) {
|
|||
super->actionDelay = 0x18;
|
||||
super->field_0xf = 8;
|
||||
m = super->direction =
|
||||
(sub_080045D4(super->x.HALF.HI, super->y.HALF.HI, this->field_0x78, this->field_0x7a) + 4) & 0x18;
|
||||
(CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->field_0x78, this->field_0x7a) + 4) & 0x18;
|
||||
;
|
||||
m = m / 8;
|
||||
if (m != super->animationState) {
|
||||
|
|
|
@ -269,7 +269,7 @@ void sub_0803CA84(Entity* this, u32 unkParameter) {
|
|||
void sub_0803CAD0(Entity* this) {
|
||||
if (EntityWithinDistance(this, this->field_0x74.HWORD, this->field_0x76.HWORD, 1) == 0) {
|
||||
this->direction =
|
||||
sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD);
|
||||
CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD);
|
||||
|
||||
sub_080AEFE0(this);
|
||||
}
|
||||
|
|
|
@ -1109,7 +1109,7 @@ u32 sub_0803B4E4(Entity* this) {
|
|||
this->y.HALF.HI = yoff;
|
||||
return 1;
|
||||
} else {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, xoff, yoff);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, xoff, yoff);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1177,9 +1177,9 @@ void sub_0803B63C(Entity* this) {
|
|||
x += gUnk_080CFD19[this->type];
|
||||
y = gPlayerEntity.y.HALF.HI - 0xc;
|
||||
if (this->actionDelay++ >= 0xb5) {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
} else {
|
||||
sub_08004596(this, sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y));
|
||||
sub_08004596(this, CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -247,7 +247,7 @@ void sub_0803414C(Entity* this) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
LinearMoveUpdate(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,8 +178,8 @@ void sub_08025230(Entity* this) {
|
|||
void sub_080252E0(Entity* this) {
|
||||
u32 tile;
|
||||
|
||||
this->direction =
|
||||
sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (u16)this->field_0x7c.HALF.LO, (u16)this->field_0x7c.HALF.HI);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, (u16)this->field_0x7c.HALF.LO,
|
||||
(u16)this->field_0x7c.HALF.HI);
|
||||
|
||||
sub_08025C44(this);
|
||||
GetNextFrame(this);
|
||||
|
|
|
@ -642,8 +642,8 @@ void sub_08042E30(Entity* this) {
|
|||
this->actionDelay = (Random() & 0x38) + 0x28;
|
||||
this->speed = 0x200;
|
||||
this->direction = pVVar9->unk00.HALF.HI >> 3;
|
||||
uVar6 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gRoomControls.origin_x + 0x110,
|
||||
gRoomControls.origin_y + 0x60);
|
||||
uVar6 = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gRoomControls.origin_x + 0x110,
|
||||
gRoomControls.origin_y + 0x60);
|
||||
this->field_0x78.HALF.HI = (gUnk_080D1304[Random() & 7] + uVar6) & 0x1f;
|
||||
}
|
||||
pVVar9->unk00.HWORD += pVVar9->unk08;
|
||||
|
@ -687,7 +687,7 @@ void sub_08042EF4(Entity* this) {
|
|||
x = this->parent->x.HALF.HI;
|
||||
y = this->parent->y.HALF.HI - 0x10;
|
||||
if (EntityWithinDistance(this, x, y, 0x30)) {
|
||||
temp = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
temp = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
if ((this->field_0x78.HALF.HI - temp) + 4 < 9) {
|
||||
this->field_0x78.HALF.HI = temp ^ 0x10;
|
||||
}
|
||||
|
|
|
@ -878,7 +878,7 @@ void sub_080406A0(Entity* this) {
|
|||
uVar4 = gRoomControls.origin_y + gUnk_080D0B58[tmp + 1];
|
||||
}
|
||||
}
|
||||
uVar3 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, uVar6, uVar4);
|
||||
uVar3 = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, uVar6, uVar4);
|
||||
this->direction = uVar3;
|
||||
if (uVar2 & 0x20) {
|
||||
u32 tmp = this->direction;
|
||||
|
@ -965,7 +965,7 @@ void sub_08040770(Entity* this) {
|
|||
tmp6 = gRoomControls.origin_y + gUnk_080D0B64[tmp3 + 1];
|
||||
}
|
||||
}
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, tmp5, tmp6);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, tmp5, tmp6);
|
||||
if (tmp & 0x20) {
|
||||
u32 tmp3 = this->direction;
|
||||
if (tmp & 0x10) {
|
||||
|
|
|
@ -829,11 +829,11 @@ u32 sub_0804207C(Entity* this) {
|
|||
y = this->y.HALF.HI - 0x10;
|
||||
arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[0];
|
||||
if ((arm != NULL) && (arm->action >= 5) && EntityWithinDistance(arm, x, y, 0x30)) {
|
||||
return sub_080045D4(arm->x.HALF.HI, arm->y.HALF.HI, x, y);
|
||||
return CalculateDirectionTo(arm->x.HALF.HI, arm->y.HALF.HI, x, y);
|
||||
} else {
|
||||
arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[1];
|
||||
if (((arm != NULL) && (arm->action >= 5)) && EntityWithinDistance(arm, x, y, 0x30)) {
|
||||
return sub_080045D4(arm->x.HALF.HI, arm->y.HALF.HI, x, y);
|
||||
return CalculateDirectionTo(arm->x.HALF.HI, arm->y.HALF.HI, x, y);
|
||||
} else {
|
||||
if (gPlayerEntity.y.HALF.HI < 0x40) {
|
||||
tmp = gRoomControls.origin_y + 0x18;
|
||||
|
@ -841,7 +841,7 @@ u32 sub_0804207C(Entity* this) {
|
|||
} else {
|
||||
tmp = gPlayerEntity.y.HALF.HI - 0x28;
|
||||
}
|
||||
return sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, tmp);
|
||||
return CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ void VaatiWrathEyeAction3(Entity* this) {
|
|||
ptr = &gUnk_080D1D98[this->type * 2];
|
||||
x = parent->x.HALF.HI + ptr[0];
|
||||
y = parent->y.HALF.HI + ptr[1];
|
||||
direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
|
||||
this->direction = direction;
|
||||
LinearMoveUpdate(this);
|
||||
this->z.HALF.HI = this->parent->z.HALF.HI;
|
||||
|
|
|
@ -0,0 +1,157 @@
|
|||
/**
|
||||
* @file wizzrobeFire.c
|
||||
* @ingroup Enemies
|
||||
*
|
||||
* @brief Wizzrobe Fire enemy
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "enemy.h"
|
||||
#include "enemy/wizzrobe.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern void (*const WizzrobeFire_Functions[])(WizzrobeEntity*);
|
||||
extern void (*const WizzrobeFire_Actions[])(WizzrobeEntity*);
|
||||
|
||||
void WizzrobeFire(WizzrobeEntity* this) {
|
||||
WizzrobeFire_Functions[GetNextFunction(super)](this);
|
||||
SetChildOffset(super, 0, 1, -0x10);
|
||||
}
|
||||
|
||||
void WizzrobeFire_OnTick(WizzrobeEntity* this) {
|
||||
WizzrobeFire_Actions[super->action](this);
|
||||
}
|
||||
|
||||
void sub_0802FB74(WizzrobeEntity* this) {
|
||||
if (super->field_0x43 != 0) {
|
||||
sub_0804A9FC(super, 0x1c);
|
||||
}
|
||||
sub_0804AA30(super, WizzrobeFire_Functions);
|
||||
if (super->health == 0) {
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
}
|
||||
}
|
||||
|
||||
void WizzrobeFire_Init(WizzrobeEntity* this) {
|
||||
Entity* projectile;
|
||||
|
||||
sub_0804A720(super);
|
||||
super->action = 1;
|
||||
this->timer2 = 0xff;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
super->field_0xf = 0x60;
|
||||
sub_0802F888(this);
|
||||
projectile = CreateProjectileWithParent(super, FIRE_PROJECTILE, 0);
|
||||
if (projectile != NULL) {
|
||||
super->child = projectile;
|
||||
projectile->parent = super;
|
||||
projectile->direction = super->direction;
|
||||
}
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
|
||||
void WizzrobeFire_Action1(WizzrobeEntity* this) {
|
||||
u8 tmp;
|
||||
Entity* child;
|
||||
|
||||
switch (this->timer2) {
|
||||
case 0xff:
|
||||
if (--super->field_0xf == 0) {
|
||||
this->timer2 = 0;
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2 += 1;
|
||||
super->actionDelay = 0x0e;
|
||||
super->flags |= 0x80;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 2;
|
||||
this->timer2 = 0;
|
||||
super->actionDelay = 0x20;
|
||||
tmp = super->direction >> 3;
|
||||
child = super->child;
|
||||
child->actionDelay = 1;
|
||||
child->spriteSettings.draw = 1;
|
||||
InitializeAnimation(super, tmp | 4);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
sub_0802F9C8(this);
|
||||
}
|
||||
|
||||
void WizzrobeFire_Action2(WizzrobeEntity* this) {
|
||||
switch (this->timer2) {
|
||||
case 0:
|
||||
switch (--super->actionDelay) {
|
||||
case 0:
|
||||
this->timer2 += 1;
|
||||
super->actionDelay = 0x38;
|
||||
super->field_0xf = 0;
|
||||
super->child->spriteSettings.draw = 0;
|
||||
break;
|
||||
case 6:
|
||||
if (EntityInRectRadius(super, &gPlayerEntity, 0xa0, 0xa0) && CheckOnScreen(super)) {
|
||||
Entity* projectile = CreateProjectileWithParent(super, FIRE_PROJECTILE, 1);
|
||||
if (projectile != NULL) {
|
||||
projectile->direction = super->direction & 0x18;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
super->field_0xf = 0;
|
||||
super->flags &= 0x7f;
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
EnqueueSFX(SFX_156);
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
super->actionDelay = (Random() & 0x3f) + 0x1c;
|
||||
super->spriteSettings.draw = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 1;
|
||||
this->timer2 = 0;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
EnqueueSFX(SFX_156);
|
||||
sub_0802F8E4(this);
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
sub_0802F9C8(this);
|
||||
}
|
||||
|
||||
void (*const WizzrobeFire_Functions[])(WizzrobeEntity*) = {
|
||||
WizzrobeFire_OnTick,
|
||||
sub_0802FB74,
|
||||
(void (*)(WizzrobeEntity*))sub_08001324,
|
||||
(void (*)(WizzrobeEntity*))sub_0804A7D4,
|
||||
(void (*)(WizzrobeEntity*))sub_08001242,
|
||||
WizzrobeFire_OnTick,
|
||||
};
|
||||
void (*const WizzrobeFire_Actions[])(WizzrobeEntity*) = {
|
||||
WizzrobeFire_Init,
|
||||
WizzrobeFire_Action1,
|
||||
WizzrobeFire_Action2,
|
||||
};
|
|
@ -0,0 +1,163 @@
|
|||
/**
|
||||
* @file wizzrobeIce.c
|
||||
* @ingroup Enemies
|
||||
*
|
||||
* @brief Wizzrobe Ice enemy
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "enemy.h"
|
||||
#include "enemy/wizzrobe.h"
|
||||
#include "functions.h"
|
||||
#include "object.h"
|
||||
|
||||
extern void (*const WizzrobeIce_Functions[])(WizzrobeEntity*);
|
||||
extern void (*const WizzrobeIce_Actions[])(WizzrobeEntity*);
|
||||
|
||||
void WizzrobeIce(WizzrobeEntity* this) {
|
||||
WizzrobeIce_Functions[GetNextFunction(super)](this);
|
||||
SetChildOffset(super, 0, 1, -0x10);
|
||||
}
|
||||
|
||||
void WizzrobeIce_OnTick(WizzrobeEntity* this) {
|
||||
WizzrobeIce_Actions[super->action](this);
|
||||
}
|
||||
|
||||
void sub_0802FE18(WizzrobeEntity* this) {
|
||||
if (super->field_0x43 != 0) {
|
||||
sub_0804A9FC(super, 0x1c);
|
||||
}
|
||||
sub_0804AA30(super, WizzrobeIce_Functions);
|
||||
if (super->bitfield == 0x87) {
|
||||
Entity* obj = CreateObject(OBJECT_2A, 3, 0);
|
||||
if (obj != NULL) {
|
||||
obj->spritePriority.b0 = 3;
|
||||
obj->spriteOffsetY = -4;
|
||||
obj->parent = super;
|
||||
}
|
||||
}
|
||||
if (super->health == 0) {
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
}
|
||||
}
|
||||
|
||||
void WizzrobeIce_Init(WizzrobeEntity* this) {
|
||||
Entity* projectile;
|
||||
|
||||
sub_0804A720(super);
|
||||
super->action = 1;
|
||||
this->timer2 = 0xff;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
super->field_0xf = 0x60;
|
||||
sub_0802F888(this);
|
||||
projectile = CreateProjectileWithParent(super, ICE_PROJECTILE, 0);
|
||||
if (projectile != NULL) {
|
||||
super->child = projectile;
|
||||
projectile->parent = super;
|
||||
projectile->direction = super->direction;
|
||||
}
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
|
||||
void WizzrobeIce_Action1(WizzrobeEntity* this) {
|
||||
u8 tmp;
|
||||
Entity* child;
|
||||
switch (this->timer2) {
|
||||
case 0xff:
|
||||
if (--super->field_0xf == 0) {
|
||||
this->timer2 = 0;
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
super->actionDelay = 0xc;
|
||||
super->flags |= 0x80;
|
||||
}
|
||||
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 2;
|
||||
this->timer2 = 0;
|
||||
super->actionDelay = 0x20;
|
||||
tmp = super->direction >> 3;
|
||||
child = super->child;
|
||||
child->actionDelay = 1;
|
||||
child->spriteSettings.draw = 1;
|
||||
InitializeAnimation(super, tmp | 4);
|
||||
}
|
||||
break;
|
||||
}
|
||||
sub_0802F9C8(this);
|
||||
}
|
||||
|
||||
void WizzrobeIce_Action2(WizzrobeEntity* this) {
|
||||
switch (this->timer2) {
|
||||
case 0:
|
||||
switch (--super->actionDelay) {
|
||||
case 0:
|
||||
this->timer2 += 1;
|
||||
super->actionDelay = 0x38;
|
||||
super->field_0xf = 0;
|
||||
super->child->spriteSettings.draw = 0;
|
||||
break;
|
||||
case 0xa:
|
||||
if (EntityInRectRadius(super, &gPlayerEntity, 0xa0, 0xa0) && CheckOnScreen(super)) {
|
||||
Entity* projectile = CreateProjectileWithParent(super, ICE_PROJECTILE, 1);
|
||||
if (projectile != NULL) {
|
||||
projectile->direction = super->direction & 0x18;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
super->field_0xf = 0;
|
||||
super->flags &= 0x7f;
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
EnqueueSFX(SFX_156);
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
super->actionDelay = (Random() & 0x3f) + 0x18;
|
||||
super->spriteSettings.draw = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 1;
|
||||
this->timer2 = 0;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
EnqueueSFX(SFX_156);
|
||||
sub_0802F8E4(this);
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
sub_0802F9C8(this);
|
||||
}
|
||||
|
||||
void (*const WizzrobeIce_Functions[])(WizzrobeEntity*) = {
|
||||
WizzrobeIce_OnTick,
|
||||
sub_0802FE18,
|
||||
(void (*)(WizzrobeEntity*))sub_08001324,
|
||||
(void (*)(WizzrobeEntity*))sub_0804A7D4,
|
||||
(void (*)(WizzrobeEntity*))sub_08001242,
|
||||
WizzrobeIce_OnTick,
|
||||
};
|
||||
void (*const WizzrobeIce_Actions[])(WizzrobeEntity*) = {
|
||||
WizzrobeIce_Init,
|
||||
WizzrobeIce_Action1,
|
||||
WizzrobeIce_Action2,
|
||||
};
|
|
@ -0,0 +1,329 @@
|
|||
/**
|
||||
* @file wizzrobeWind.c
|
||||
* @ingroup Enemies
|
||||
*
|
||||
* @brief Wizzrobe Wind enemy
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "enemy.h"
|
||||
#include "enemy/wizzrobe.h"
|
||||
#include "functions.h"
|
||||
#include "object.h"
|
||||
|
||||
extern void (*const WizzrobeWind_Functions[])(WizzrobeEntity*);
|
||||
extern void (*const WizzrobeWind_Actions[])(WizzrobeEntity*);
|
||||
|
||||
void sub_0802F888(WizzrobeEntity*);
|
||||
void sub_0802FA48(WizzrobeEntity*);
|
||||
bool32 sub_0802FA88(WizzrobeEntity*);
|
||||
void sub_0802F9C8(WizzrobeEntity*);
|
||||
void sub_0802F8E4(WizzrobeEntity*);
|
||||
|
||||
void WizzrobeWind(WizzrobeEntity* this) {
|
||||
WizzrobeWind_Functions[GetNextFunction(super)](this);
|
||||
SetChildOffset(super, 0, 1, -0x10);
|
||||
}
|
||||
|
||||
void WizzrobeWind_OnTick(WizzrobeEntity* this) {
|
||||
WizzrobeWind_Actions[super->action](this);
|
||||
}
|
||||
|
||||
void sub_0802F4E4(WizzrobeEntity* this) {
|
||||
if (super->field_0x43 != 0) {
|
||||
sub_0804A9FC(super, 0x1c);
|
||||
}
|
||||
sub_0804AA30(super, WizzrobeWind_Functions);
|
||||
if (super->bitfield == 0x87) {
|
||||
Entity* obj = CreateObject(OBJECT_2A, 3, 0);
|
||||
if (obj != NULL) {
|
||||
obj->spritePriority.b0 = 3;
|
||||
obj->spriteOffsetY = -4;
|
||||
obj->parent = super;
|
||||
}
|
||||
}
|
||||
if (super->health == 0) {
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
}
|
||||
}
|
||||
|
||||
void WizzrobeWind_Init(WizzrobeEntity* this) {
|
||||
Entity* projectile;
|
||||
|
||||
if (super->type2 != 0) {
|
||||
super->action = 3;
|
||||
super->speed = 0xc0;
|
||||
super->flags |= 0x80;
|
||||
this->targetIndex = 0;
|
||||
super->child = (Entity*)GetCurrentRoomProperty(super->actionDelay);
|
||||
sub_0802FA48(this);
|
||||
sub_0802FA88(this);
|
||||
} else {
|
||||
sub_0804A720(super);
|
||||
super->action = 1;
|
||||
this->timer2 = 0xff;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
super->field_0xf = 0x60;
|
||||
sub_0802F888(this);
|
||||
}
|
||||
projectile = CreateProjectileWithParent(super, WIND_PROJECTILE, 0);
|
||||
if (projectile != NULL) {
|
||||
super->parent = projectile;
|
||||
projectile->parent = super;
|
||||
projectile->direction = super->direction;
|
||||
}
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
|
||||
void WizzrobeWind_Action1(WizzrobeEntity* this) {
|
||||
u8 tmp;
|
||||
Entity* parent;
|
||||
switch (this->timer2) {
|
||||
case 0xff:
|
||||
if (--super->field_0xf == 0) {
|
||||
this->timer2 = 0;
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
super->actionDelay = 0x10;
|
||||
super->flags |= 0x80;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 2;
|
||||
this->timer2 = 0;
|
||||
super->actionDelay = 0x28;
|
||||
tmp = super->direction >> 3;
|
||||
parent = super->parent;
|
||||
parent->actionDelay = 1;
|
||||
parent->spriteSettings.draw = 1;
|
||||
InitializeAnimation(super, tmp | 4);
|
||||
}
|
||||
break;
|
||||
}
|
||||
sub_0802F9C8(this);
|
||||
}
|
||||
|
||||
void WizzrobeWind_Action2(WizzrobeEntity* this) {
|
||||
switch (this->timer2) {
|
||||
case 0:
|
||||
switch (--super->actionDelay) {
|
||||
case 0:
|
||||
this->timer2++;
|
||||
super->actionDelay = 0x38;
|
||||
super->field_0xf = 0;
|
||||
super->parent->spriteSettings.draw = 0;
|
||||
break;
|
||||
case 8:
|
||||
if (EntityInRectRadius(super, &gPlayerEntity, 0xa0, 0xa0) && CheckOnScreen(super)) {
|
||||
Entity* projectile = CreateProjectileWithParent(super, WIND_PROJECTILE, 1);
|
||||
if (projectile != NULL) {
|
||||
projectile->direction = super->direction & 0x18;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
super->field_0xf = 0;
|
||||
super->flags &= 0x7f;
|
||||
EnqueueSFX(SFX_156);
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
super->actionDelay = (Random() & 0x3f) + 0x20;
|
||||
super->spriteSettings.draw = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (--super->actionDelay == 0) {
|
||||
super->action = 1;
|
||||
this->timer2 = 0;
|
||||
this->timer1 = 0x28;
|
||||
super->actionDelay = 0x28;
|
||||
EnqueueSFX(SFX_156);
|
||||
sub_0802F8E4(this);
|
||||
InitializeAnimation(super, super->direction >> 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
sub_0802F9C8(this);
|
||||
}
|
||||
|
||||
void WizzrobeWind_Action3(WizzrobeEntity* this) {
|
||||
Entity* parent;
|
||||
sub_0802FA88(this);
|
||||
sub_0802F9C8(this);
|
||||
parent = super->parent;
|
||||
if (this->timer1 == 0) {
|
||||
|
||||
switch (this->timer2) {
|
||||
case 0:
|
||||
this->timer2 = 1;
|
||||
super->actionDelay = 0x40;
|
||||
break;
|
||||
case 1:
|
||||
if (--super->actionDelay != 0) {
|
||||
return;
|
||||
}
|
||||
this->timer2++;
|
||||
super->actionDelay = 0x28;
|
||||
parent->actionDelay = 1;
|
||||
parent->spriteSettings.draw = 1;
|
||||
InitializeAnimation(super, super->animationState >> 1 | 4);
|
||||
break;
|
||||
case 2:
|
||||
if (--super->actionDelay == 0) {
|
||||
this->timer2++;
|
||||
super->actionDelay = (Random() & 0x1f) + 0x30;
|
||||
parent->spriteSettings.draw = 0;
|
||||
InitializeAnimation(super, super->animationState >> 1);
|
||||
} else if (super->actionDelay == 8) {
|
||||
parent = CreateProjectileWithParent(super, WIND_PROJECTILE, 1);
|
||||
if (parent != NULL) {
|
||||
parent->direction = super->direction & 0x18;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this->timer2 != 0) {
|
||||
this->timer2 = 0;
|
||||
parent->spriteSettings.draw = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802F888(WizzrobeEntity* this) {
|
||||
super->direction = (sub_08049F84(super, 3) + 4) & 0x18;
|
||||
this->tilePosition = COORD_TO_TILE(super);
|
||||
this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer);
|
||||
SetTile(0x4071, this->tilePosition, super->collisionLayer);
|
||||
}
|
||||
|
||||
void sub_0802F8E4(WizzrobeEntity* this) {
|
||||
u16 uVar1;
|
||||
s32 iVar4;
|
||||
u32 uVar6;
|
||||
u32 uVar7;
|
||||
u32 uVar8;
|
||||
|
||||
bool32 loopCondition;
|
||||
u32 rand;
|
||||
|
||||
if (super->type2 == 0) {
|
||||
loopCondition = TRUE;
|
||||
do {
|
||||
rand = Random();
|
||||
uVar1 = this->unk_70;
|
||||
iVar4 = ((s32)rand & 0x7ff0) % (this->unk_6e << 3);
|
||||
uVar8 = (uVar1 + iVar4) | 8;
|
||||
rand >>= 0x10;
|
||||
uVar1 = this->unk_72;
|
||||
iVar4 = ((s32)(rand)&0x7ff0) % (this->unk_6f << 3);
|
||||
uVar7 = (uVar1 + iVar4) | 8;
|
||||
uVar6 = TILE(uVar8, uVar7);
|
||||
if ((sub_080002E0(uVar6, super->collisionLayer) == 0) &&
|
||||
(GetTileIndex(uVar6, super->collisionLayer) != 0x4071)) {
|
||||
super->x.HALF.HI = (s16)uVar8;
|
||||
super->y.HALF.HI = (s16)uVar7;
|
||||
if (sub_08049FA0(super) != 0) {
|
||||
loopCondition = FALSE;
|
||||
}
|
||||
}
|
||||
} while (loopCondition);
|
||||
sub_0802F888(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802F9C8(WizzrobeEntity* this) {
|
||||
if (super->field_0xf == 0) {
|
||||
if (this->timer1 != 0) {
|
||||
if ((--this->timer1 & 1) != 0) {
|
||||
super->spriteSettings.draw = 0;
|
||||
} else {
|
||||
super->spriteSettings.draw = 1;
|
||||
}
|
||||
if ((super->type2 != 0) && (LinearMoveUpdate(super), this->timer1 == 0)) {
|
||||
super->flags |= 0x80;
|
||||
}
|
||||
} else {
|
||||
if (super->type2 != 0) {
|
||||
ProcessMovement(super);
|
||||
if (super->collisions != 0) {
|
||||
super->flags &= 0x7f;
|
||||
this->timer1 = 0x28;
|
||||
}
|
||||
}
|
||||
}
|
||||
GetNextFrame(super);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802FA48(WizzrobeEntity* this) {
|
||||
u16* target;
|
||||
u16* child;
|
||||
|
||||
child = (u16*)super->child;
|
||||
target = &child[this->targetIndex * 2];
|
||||
if (target[0] == 0xffff) {
|
||||
this->targetIndex = 0;
|
||||
target = child;
|
||||
}
|
||||
this->targetX = gRoomControls.origin_x + target[0];
|
||||
this->targetY = gRoomControls.origin_y + target[1];
|
||||
}
|
||||
|
||||
bool32 sub_0802FA88(WizzrobeEntity* this) {
|
||||
u32 direction;
|
||||
bool32 result = FALSE;
|
||||
if (EntityWithinDistance(super, this->targetX, this->targetY, 2)) {
|
||||
this->targetIndex++;
|
||||
sub_0802FA48(this);
|
||||
direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->targetX, this->targetY);
|
||||
super->direction = direction;
|
||||
super->animationState = ((direction + 4) & 0x18) >> 2;
|
||||
if (((super->parent)->spriteSettings.draw & 3) != 0) {
|
||||
InitializeAnimation(super, direction >> 3 | 4);
|
||||
} else {
|
||||
InitializeAnimation(super, direction >> 3);
|
||||
}
|
||||
result = TRUE;
|
||||
} else {
|
||||
direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->targetX, this->targetY);
|
||||
sub_08004596(super, direction);
|
||||
direction = ((super->direction + 4) & 0x18) >> 2;
|
||||
if (direction != super->animationState) {
|
||||
super->animationState = direction;
|
||||
InitializeAnimation(super, direction >> 1);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void (*const WizzrobeWind_Functions[])(WizzrobeEntity*) = {
|
||||
WizzrobeWind_OnTick,
|
||||
sub_0802F4E4,
|
||||
(void (*)(WizzrobeEntity*))sub_08001324,
|
||||
(void (*)(WizzrobeEntity*))sub_0804A7D4,
|
||||
(void (*)(WizzrobeEntity*))sub_08001242,
|
||||
WizzrobeWind_OnTick,
|
||||
};
|
||||
void (*const WizzrobeWind_Actions[])(WizzrobeEntity*) = {
|
||||
WizzrobeWind_Init,
|
||||
WizzrobeWind_Action1,
|
||||
WizzrobeWind_Action2,
|
||||
WizzrobeWind_Action3,
|
||||
};
|
|
@ -37,7 +37,8 @@ void sub_0806D8A0(Entity* this, ScriptExecutionContext* context) {
|
|||
}
|
||||
|
||||
void sub_0806D908(Entity* this) {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI);
|
||||
this->direction =
|
||||
CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI);
|
||||
this->animationState = (this->animationState & 0x80) | gUnk_08114144[this->direction >> 0x1];
|
||||
}
|
||||
|
||||
|
|
|
@ -384,7 +384,7 @@ void sub_08061090(Entity* this, u32 a, u32 b) {
|
|||
}
|
||||
|
||||
void sub_08061120(Entity* this, u32 param_a, u32 param_b, u32 param_c) {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b);
|
||||
if ((param_c != this->field_0x6c.HALF.LO) || (10 < ((this->direction + this->animationState * -4 + 5) & 0x1f))) {
|
||||
this->animationState = DirectionRoundUp(this->direction) >> 2;
|
||||
sub_08060E70(this, param_c);
|
||||
|
@ -566,7 +566,7 @@ void sub_08061464(Entity* this, u32 param_a, u32 param_b) {
|
|||
iVar10 = this->x.HALF.HI;
|
||||
iVar9 = this->y.HALF.HI;
|
||||
|
||||
switch (((sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b) + 2) & 0x1c) >> 2) {
|
||||
switch (((CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b) + 2) & 0x1c) >> 2) {
|
||||
case 0:
|
||||
this->field_0x6e.HWORD = param_b;
|
||||
if (this->x.HALF.HI > (s32)param_a) {
|
||||
|
|
|
@ -420,7 +420,7 @@ void sub_080871F8(Entity* this) {
|
|||
if ((temp->x.HALF.HI == this->x.HALF.HI) && (temp->y.HALF.HI - 32 == this->y.HALF.HI)) {
|
||||
this->action = 2;
|
||||
} else {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 32);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 32);
|
||||
LinearMoveUpdate(this);
|
||||
}
|
||||
}
|
||||
|
@ -467,8 +467,8 @@ void sub_080872F8(Entity* this) {
|
|||
GetNextFrame(this);
|
||||
if (((u16)(this->field_0x68.HWORD - this->x.HALF.HI) > 0xc) ||
|
||||
((u16)(this->field_0x6a.HWORD - this->y.HALF.HI) > 0xc)) {
|
||||
this->direction =
|
||||
sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (s16)this->field_0x68.HWORD, (s16)this->field_0x6a.HWORD);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, (s16)this->field_0x68.HWORD,
|
||||
(s16)this->field_0x6a.HWORD);
|
||||
this->direction = (this->direction + gUnk_081207AC[Random() & 3]) & 0x1f;
|
||||
}
|
||||
temp = gSineTable[this->actionDelay + 64];
|
||||
|
|
|
@ -1076,7 +1076,7 @@ static void PortalJumpOnUpdate(Entity* this) {
|
|||
y = gArea.curPortalY;
|
||||
|
||||
if ((this->x.HALF.HI != x) || (this->y.HALF.HI != y)) {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY);
|
||||
this->speed = JUMP_SPEED_FWD;
|
||||
UpdatePlayerMovement();
|
||||
}
|
||||
|
@ -3184,7 +3184,7 @@ static void sub_08073F4C(Entity* this) {
|
|||
u32 x = gArea.curPortalX;
|
||||
u32 y = gArea.curPortalY;
|
||||
if (this->x.HALF.HI != x || this->y.HALF.HI != y) {
|
||||
this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY);
|
||||
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY);
|
||||
this->speed = 0x100;
|
||||
LinearMoveUpdate(this);
|
||||
} else {
|
||||
|
@ -3472,8 +3472,8 @@ void SurfaceAction_16(Entity* this) {
|
|||
SoundReq(SFX_PLY_VO6);
|
||||
this->iframes = 24;
|
||||
this->knockbackDuration = 4;
|
||||
this->knockbackDirection = sub_080045D4((this->x.HALF.HI & 0xFFF0) | 8, (this->y.HALF.HI & 0xFFF0) | 8,
|
||||
this->x.HALF.HI, this->y.HALF.HI);
|
||||
this->knockbackDirection = CalculateDirectionTo(
|
||||
(this->x.HALF.HI & 0xFFF0) | 8, (this->y.HALF.HI & 0xFFF0) | 8, this->x.HALF.HI, this->y.HALF.HI);
|
||||
}
|
||||
if ((gPlayerState.flags & PL_MINISH) == 0)
|
||||
sub_08008790(this, 7);
|
||||
|
|
Loading…
Reference in New Issue