mirror of https://github.com/zeldaret/tmc.git
decomp vaati macro eye
This commit is contained in:
parent
0d98d00c01
commit
dbfb827bd3
|
@ -1,631 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start VaatiEyesMacro
|
||||
VaatiEyesMacro: @ 0x0802EC6C
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, _0802EC94 @ =gUnk_080CDE34
|
||||
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
|
||||
_0802EC94: .4byte gUnk_080CDE34
|
||||
|
||||
thumb_func_start sub_0802EC98
|
||||
sub_0802EC98: @ 0x0802EC98
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _0802ECBC @ =gUnk_080CDE4C
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #1
|
||||
bhi _0802ECB8
|
||||
adds r0, r4, #0
|
||||
bl sub_0802EF90
|
||||
_0802ECB8:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802ECBC: .4byte gUnk_080CDE4C
|
||||
|
||||
thumb_func_start sub_0802ECC0
|
||||
sub_0802ECC0: @ 0x0802ECC0
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
bne _0802ED2A
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
ldrb r1, [r0]
|
||||
adds r5, r0, #0
|
||||
ldr r3, _0802ED00 @ =gScreenTransition
|
||||
cmp r1, #0
|
||||
bne _0802ECEE
|
||||
adds r2, r3, #0
|
||||
adds r2, #0x39
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3c
|
||||
ldrb r0, [r0]
|
||||
adds r0, #2
|
||||
movs r1, #1
|
||||
lsls r1, r0
|
||||
ldrb r0, [r2]
|
||||
bics r0, r1
|
||||
strb r0, [r2]
|
||||
_0802ECEE:
|
||||
ldr r0, _0802ED04 @ =gRoomControls
|
||||
ldrb r0, [r0, #5]
|
||||
cmp r0, #0
|
||||
bne _0802ED08
|
||||
ldrb r1, [r5]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3a
|
||||
b _0802ED0E
|
||||
.align 2, 0
|
||||
_0802ED00: .4byte gScreenTransition
|
||||
_0802ED04: .4byte gRoomControls
|
||||
_0802ED08:
|
||||
ldrb r1, [r5]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3b
|
||||
_0802ED0E:
|
||||
strb r1, [r0]
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x79
|
||||
ldrb r0, [r6]
|
||||
ldrb r1, [r5]
|
||||
cmp r0, r1
|
||||
beq _0802ED24
|
||||
movs r0, #0xbd
|
||||
lsls r0, r0, #1
|
||||
bl EnqueueSFX
|
||||
_0802ED24:
|
||||
ldrb r0, [r5]
|
||||
strb r0, [r6]
|
||||
b _0802ED52
|
||||
_0802ED2A:
|
||||
cmp r0, #1
|
||||
bne _0802ED52
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x3d
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
cmp r0, #0
|
||||
ble _0802ED3E
|
||||
rsbs r0, r0, #0
|
||||
strb r0, [r1]
|
||||
_0802ED3E:
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x45
|
||||
ldrb r0, [r5]
|
||||
cmp r0, #0xff
|
||||
beq _0802ED4E
|
||||
movs r0, #0xe5
|
||||
bl EnqueueSFX
|
||||
_0802ED4E:
|
||||
movs r0, #0xff
|
||||
strb r0, [r5]
|
||||
_0802ED52:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x43
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0802ED64
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
bl sub_0804A9FC
|
||||
_0802ED64:
|
||||
ldr r1, _0802ED70 @ =gUnk_080CDE34
|
||||
adds r0, r4, #0
|
||||
bl sub_0804AA30
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0802ED70: .4byte gUnk_080CDE34
|
||||
|
||||
thumb_func_start sub_0802ED74
|
||||
sub_0802ED74: @ 0x0802ED74
|
||||
push {lr}
|
||||
ldr r2, _0802ED88 @ =gUnk_080CDE5C
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802ED88: .4byte gUnk_080CDE5C
|
||||
|
||||
thumb_func_start sub_0802ED8C
|
||||
sub_0802ED8C: @ 0x0802ED8C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _0802EDD0 @ =gEntCount
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x46
|
||||
bhi _0802EE0A
|
||||
bl GetEmptyManager
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0802EE0A
|
||||
movs r0, #9
|
||||
strb r0, [r1, #8]
|
||||
movs r0, #0x34
|
||||
strb r0, [r1, #9]
|
||||
str r4, [r1, #0x14]
|
||||
adds r0, r1, #0
|
||||
movs r1, #8
|
||||
bl AppendEntityToList
|
||||
movs r0, #0x25
|
||||
movs r1, #2
|
||||
bl CreateEnemy
|
||||
str r4, [r0, #0x50]
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r0, _0802EDD4 @ =gRoomControls
|
||||
ldrb r0, [r0, #5]
|
||||
cmp r0, #0
|
||||
bne _0802EDDC
|
||||
ldr r0, _0802EDD8 @ =gScreenTransition
|
||||
adds r0, #0x3a
|
||||
b _0802EDE0
|
||||
.align 2, 0
|
||||
_0802EDD0: .4byte gEntCount
|
||||
_0802EDD4: .4byte gRoomControls
|
||||
_0802EDD8: .4byte gScreenTransition
|
||||
_0802EDDC:
|
||||
ldr r0, _0802EE0C @ =gScreenTransition
|
||||
adds r0, #0x3b
|
||||
_0802EDE0:
|
||||
ldrb r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x45
|
||||
strb r0, [r1]
|
||||
adds r1, #0x34
|
||||
strb r0, [r1]
|
||||
bl Random
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x78
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802EFB8
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl InitializeAnimation
|
||||
adds r0, r4, #0
|
||||
bl sub_0802EF58
|
||||
_0802EE0A:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802EE0C: .4byte gScreenTransition
|
||||
|
||||
thumb_func_start sub_0802EE10
|
||||
sub_0802EE10: @ 0x0802EE10
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0802F04C
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802EE20
|
||||
sub_0802EE20: @ 0x0802EE20
|
||||
push {lr}
|
||||
ldr r2, _0802EE34 @ =gUnk_080CDE64
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802EE34: .4byte gUnk_080CDE64
|
||||
|
||||
thumb_func_start sub_0802EE38
|
||||
sub_0802EE38: @ 0x0802EE38
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldr r0, _0802EE84 @ =gEntCount
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x46
|
||||
bhi _0802EE82
|
||||
movs r0, #0x25
|
||||
movs r1, #3
|
||||
bl CreateEnemy
|
||||
str r5, [r0, #0x50]
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
bl Random
|
||||
adds r4, r0, #0
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
adds r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
bl Random
|
||||
lsrs r0, r0, #8
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x78
|
||||
strb r0, [r1]
|
||||
ldr r1, _0802EE88 @ =gUnk_080CDE6C
|
||||
lsrs r4, r4, #0x10
|
||||
movs r0, #3
|
||||
ands r4, r0
|
||||
adds r4, r4, r1
|
||||
ldrb r0, [r4]
|
||||
strb r0, [r5, #0x15]
|
||||
adds r0, r5, #0
|
||||
movs r1, #1
|
||||
bl InitializeAnimation
|
||||
_0802EE82:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0802EE84: .4byte gEntCount
|
||||
_0802EE88: .4byte gUnk_080CDE6C
|
||||
|
||||
thumb_func_start sub_0802EE8C
|
||||
sub_0802EE8C: @ 0x0802EE8C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
ldr r2, [r0, #4]
|
||||
cmp r2, #0
|
||||
bne _0802EEA8
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
strb r1, [r4, #0x10]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
strb r2, [r0]
|
||||
b _0802EEB4
|
||||
_0802EEA8:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802F04C
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_0802EEB4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802EEB8
|
||||
sub_0802EEB8: @ 0x0802EEB8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
bne _0802EEC8
|
||||
bl DeleteThisEntity
|
||||
_0802EEC8:
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0802EED6
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x14]
|
||||
_0802EED6:
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r1, r4, #0
|
||||
bl CopyPositionAndSpriteOffset
|
||||
ldr r1, _0802EF14 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
bl GetFacingDirection
|
||||
adds r0, #1
|
||||
movs r1, #0x1e
|
||||
ands r0, r1
|
||||
ldr r1, _0802EF18 @ =gUnk_080CDE70
|
||||
adds r0, r0, r1
|
||||
ldrb r2, [r0]
|
||||
ldrb r1, [r4, #0x1e]
|
||||
cmp r2, r1
|
||||
beq _0802EF00
|
||||
ldrb r0, [r0, #1]
|
||||
cmp r0, r1
|
||||
beq _0802EF00
|
||||
strb r2, [r4, #0x1e]
|
||||
_0802EF00:
|
||||
ldrh r0, [r4, #0x32]
|
||||
adds r0, #1
|
||||
strh r0, [r4, #0x32]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x63
|
||||
ldrb r0, [r1]
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802EF14: .4byte gPlayerEntity
|
||||
_0802EF18: .4byte gUnk_080CDE70
|
||||
|
||||
thumb_func_start sub_0802EF1C
|
||||
sub_0802EF1C: @ 0x0802EF1C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
bne _0802EF2C
|
||||
bl DeleteThisEntity
|
||||
_0802EF2C:
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0802EF4A
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x11
|
||||
strb r0, [r4, #0x1e]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
subs r0, #0x19
|
||||
ands r0, r1
|
||||
movs r1, #6
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
_0802EF4A:
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r1, r4, #0
|
||||
bl CopyPositionAndSpriteOffset
|
||||
movs r0, #0
|
||||
strh r0, [r4, #0x36]
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802EF58
|
||||
sub_0802EF58: @ 0x0802EF58
|
||||
push {r4, r5, r6, lr}
|
||||
adds r6, r0, #0
|
||||
movs r5, #0
|
||||
_0802EF5E:
|
||||
movs r0, #0x25
|
||||
movs r1, #1
|
||||
bl CreateEnemy
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _0802EF86
|
||||
strb r5, [r4, #0xb]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
str r6, [r4, #0x50]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
adds r0, r6, #0
|
||||
adds r1, r4, #0
|
||||
bl CopyPosition
|
||||
_0802EF86:
|
||||
adds r5, #1
|
||||
cmp r5, #6
|
||||
bls _0802EF5E
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0802EF90
|
||||
sub_0802EF90: @ 0x0802EF90
|
||||
push {r4, lr}
|
||||
ldr r4, _0802EFB4 @ =gUnk_080CDE90
|
||||
adds r3, r0, #0
|
||||
adds r3, #0x78
|
||||
ldrb r1, [r3]
|
||||
adds r2, r1, #1
|
||||
strb r2, [r3]
|
||||
lsls r1, r1, #0x18
|
||||
lsrs r1, r1, #0x1b
|
||||
movs r2, #7
|
||||
ands r1, r2
|
||||
adds r1, r1, r4
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #0x18
|
||||
asrs r1, r1, #0x18
|
||||
strh r1, [r0, #0x36]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0802EFB4: .4byte gUnk_080CDE90
|
||||
|
||||
thumb_func_start sub_0802EFB8
|
||||
sub_0802EFB8: @ 0x0802EFB8
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
bl Random
|
||||
adds r6, r0, #0
|
||||
lsrs r0, r6, #0x10
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0802EFD2
|
||||
movs r5, #0x18
|
||||
ands r5, r6
|
||||
b _0802EFE0
|
||||
_0802EFD2:
|
||||
ldr r0, _0802F01C @ =gPlayerEntity
|
||||
adds r1, r4, #0
|
||||
bl GetFacingDirection
|
||||
adds r5, r0, #4
|
||||
movs r0, #0x18
|
||||
ands r5, r0
|
||||
_0802EFE0:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
ldr r2, _0802F020 @ =gRoomControls
|
||||
ldrh r1, [r2, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
movs r3, #0x3f
|
||||
ands r0, r3
|
||||
movs r7, #0x32
|
||||
ldrsh r1, [r4, r7]
|
||||
ldrh r2, [r2, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r3
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
ldr r2, _0802F024 @ =gUnk_080B4488
|
||||
lsrs r1, r5, #2
|
||||
adds r1, r1, r2
|
||||
movs r2, #0
|
||||
ldrsh r1, [r1, r2]
|
||||
adds r0, r0, r1
|
||||
movs r1, #1
|
||||
bl sub_080002E0
|
||||
cmp r0, #0
|
||||
beq _0802F028
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x15]
|
||||
b _0802F044
|
||||
.align 2, 0
|
||||
_0802F01C: .4byte gPlayerEntity
|
||||
_0802F020: .4byte gRoomControls
|
||||
_0802F024: .4byte gUnk_080B4488
|
||||
_0802F028:
|
||||
movs r1, #3
|
||||
adds r0, r6, #0
|
||||
ands r0, r1
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
strb r5, [r4, #0x15]
|
||||
ldr r2, _0802F048 @ =gUnk_080CDE98
|
||||
lsrs r0, r6, #0x18
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x24]
|
||||
_0802F044:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0802F048: .4byte gUnk_080CDE98
|
||||
|
||||
thumb_func_start sub_0802F04C
|
||||
sub_0802F04C: @ 0x0802F04C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x2e
|
||||
ldrsh r5, [r4, r0]
|
||||
movs r1, #0x32
|
||||
ldrsh r6, [r4, r1]
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement
|
||||
cmp r0, #0
|
||||
bne _0802F06A
|
||||
adds r0, r4, #0
|
||||
bl sub_0802EFB8
|
||||
b _0802F112
|
||||
_0802F06A:
|
||||
ldrb r0, [r4, #0x15]
|
||||
lsrs r0, r0, #3
|
||||
cmp r0, #1
|
||||
beq _0802F098
|
||||
cmp r0, #1
|
||||
bgt _0802F07C
|
||||
cmp r0, #0
|
||||
beq _0802F082
|
||||
b _0802F0DC
|
||||
_0802F07C:
|
||||
cmp r0, #2
|
||||
beq _0802F0AE
|
||||
b _0802F0DC
|
||||
_0802F082:
|
||||
movs r2, #0xf
|
||||
adds r0, r6, #0
|
||||
ands r0, r2
|
||||
cmp r0, #8
|
||||
ble _0802F102
|
||||
ldrh r1, [r4, #0x32]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #8
|
||||
bgt _0802F102
|
||||
b _0802F0C2
|
||||
_0802F098:
|
||||
movs r2, #0xf
|
||||
adds r0, r5, #0
|
||||
ands r0, r2
|
||||
cmp r0, #7
|
||||
bgt _0802F102
|
||||
ldrh r1, [r4, #0x2e]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #7
|
||||
ble _0802F102
|
||||
b _0802F0F0
|
||||
_0802F0AE:
|
||||
movs r2, #0xf
|
||||
adds r0, r6, #0
|
||||
ands r0, r2
|
||||
cmp r0, #7
|
||||
bgt _0802F102
|
||||
ldrh r1, [r4, #0x32]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #7
|
||||
ble _0802F102
|
||||
_0802F0C2:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r4, r1]
|
||||
ldr r1, _0802F0D8 @ =0x0000FFF0
|
||||
ands r0, r1
|
||||
adds r6, r0, #0
|
||||
adds r6, #8
|
||||
b _0802F102
|
||||
.align 2, 0
|
||||
_0802F0D8: .4byte 0x0000FFF0
|
||||
_0802F0DC:
|
||||
movs r2, #0xf
|
||||
adds r0, r5, #0
|
||||
ands r0, r2
|
||||
cmp r0, #8
|
||||
ble _0802F102
|
||||
ldrh r1, [r4, #0x2e]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #8
|
||||
bgt _0802F102
|
||||
_0802F0F0:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
ldr r1, _0802F114 @ =0x0000FFF0
|
||||
ands r0, r1
|
||||
adds r5, r0, #0
|
||||
adds r5, #8
|
||||
_0802F102:
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
bne _0802F112
|
||||
strh r5, [r4, #0x2e]
|
||||
strh r6, [r4, #0x32]
|
||||
adds r0, r4, #0
|
||||
bl sub_0802EFB8
|
||||
_0802F112:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0802F114: .4byte 0x0000FFF0
|
|
@ -1,39 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_080CDE34:: @ 080CDE34
|
||||
.4byte sub_0802EC98
|
||||
.4byte sub_0802ECC0
|
||||
.4byte sub_08001324
|
||||
.4byte sub_0804A7D4
|
||||
.4byte sub_08001242
|
||||
.4byte sub_0802EC98
|
||||
|
||||
gUnk_080CDE4C:: @ 080CDE4C
|
||||
.4byte sub_0802ED74
|
||||
.4byte sub_0802EE20
|
||||
.4byte sub_0802EEB8
|
||||
.4byte sub_0802EF1C
|
||||
|
||||
gUnk_080CDE5C:: @ 080CDE5C
|
||||
.4byte sub_0802ED8C
|
||||
.4byte sub_0802EE10
|
||||
|
||||
gUnk_080CDE64:: @ 080CDE64
|
||||
.4byte sub_0802EE38
|
||||
.4byte sub_0802EE8C
|
||||
|
||||
gUnk_080CDE6C:: @ 080CDE6C
|
||||
.incbin "baserom.gba", 0x0CDE6C, 0x0000004
|
||||
|
||||
gUnk_080CDE70:: @ 080CDE70
|
||||
.incbin "baserom.gba", 0x0CDE70, 0x0000020
|
||||
|
||||
gUnk_080CDE90:: @ 080CDE90
|
||||
.incbin "baserom.gba", 0x0CDE90, 0x0000008
|
||||
|
||||
gUnk_080CDE98:: @ 080CDE98
|
||||
.incbin "baserom.gba", 0x0CDE98, 0x0000008
|
|
@ -53,7 +53,8 @@ typedef struct {
|
|||
u8 field_0x24[0x14];
|
||||
u8 field_0x38;
|
||||
u8 field_0x39;
|
||||
u16 field_0x3a;
|
||||
u8 field_0x3a;
|
||||
u8 field_0x3b;
|
||||
u8 field_0x3c;
|
||||
u8 field_0x3d;
|
||||
u16 field_0x3e;
|
||||
|
|
|
@ -376,7 +376,7 @@ SECTIONS {
|
|||
src/enemy/bobomb.o(.text);
|
||||
src/enemy/wallMaster2.o(.text);
|
||||
asm/gleerok.o(.text);
|
||||
asm/vaatiEyesMacro.o(.text);
|
||||
src/enemy/vaatiEyesMacro.o(.text);
|
||||
src/enemy/tektite.o(.text);
|
||||
asm/wizzrobeWind.o(.text);
|
||||
asm/wizzrobeFire.o(.text);
|
||||
|
@ -1056,7 +1056,7 @@ SECTIONS {
|
|||
src/enemy/wallMaster2.o(.rodata);
|
||||
data/const/enemy/gleerok.o(.rodata);
|
||||
data/animations/enemy/gleerok.o(.rodata);
|
||||
data/const/enemy/vaatiEyesMacro.o(.rodata);
|
||||
src/enemy/vaatiEyesMacro.o(.rodata);
|
||||
data/animations/enemy/vaatiEyesMacro.o(.rodata);
|
||||
data/const/enemy/tektite.o(.rodata);
|
||||
data/animations/enemy/tektite.o(.rodata);
|
||||
|
@ -1115,7 +1115,8 @@ SECTIONS {
|
|||
data/animations/enemy/mazaalBracelet.o(.rodata);
|
||||
data/const/enemy/takkuri.o(.rodata);
|
||||
data/const/enemy/bowMoblin.o(.rodata);
|
||||
data/animations/enemy/bowMoblin.o(.rodata); src/enemy/lakitu.o(.rodata);
|
||||
data/animations/enemy/bowMoblin.o(.rodata);
|
||||
src/enemy/lakitu.o(.rodata);
|
||||
data/animations/enemy/lakitu.o(.rodata);
|
||||
src/enemy/lakituCloud.o(.rodata);
|
||||
data/const/enemy/enemy49.o(.rodata);
|
||||
|
|
|
@ -0,0 +1,302 @@
|
|||
#include "global.h"
|
||||
#include "enemy.h"
|
||||
#include "audio.h"
|
||||
#include "random.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern u32 sub_080002E0(u32, u32);
|
||||
extern s16 gUnk_080B4488[];
|
||||
|
||||
void sub_0802EC98(Entity*);
|
||||
void sub_0802ECC0(Entity*);
|
||||
void sub_0802ED74(Entity*);
|
||||
void sub_0802EE20(Entity*);
|
||||
void sub_0802EEB8(Entity*);
|
||||
void sub_0802EF1C(Entity*);
|
||||
void sub_0802ED8C(Entity*);
|
||||
void sub_0802EE10(Entity*);
|
||||
void sub_0802EE38(Entity*);
|
||||
void sub_0802EE8C(Entity*);
|
||||
void sub_0802EF90(Entity*);
|
||||
void sub_0802EFB8(Entity*);
|
||||
void sub_0802EF58(Entity*);
|
||||
void sub_0802F04C(Entity*);
|
||||
|
||||
void (*const gUnk_080CDE34[])(Entity*) = {
|
||||
sub_0802EC98, sub_0802ECC0, sub_08001324, sub_0804A7D4, sub_08001242, sub_0802EC98,
|
||||
};
|
||||
void (*const gUnk_080CDE4C[])(Entity*) = {
|
||||
sub_0802ED74,
|
||||
sub_0802EE20,
|
||||
sub_0802EEB8,
|
||||
sub_0802EF1C,
|
||||
};
|
||||
void (*const gUnk_080CDE5C[])(Entity*) = {
|
||||
sub_0802ED8C,
|
||||
sub_0802EE10,
|
||||
};
|
||||
void (*const gUnk_080CDE64[])(Entity*) = {
|
||||
sub_0802EE38,
|
||||
sub_0802EE8C,
|
||||
};
|
||||
const u8 gUnk_080CDE6C[] = { 0, 8, 0x18, 0 };
|
||||
const u8 gUnk_080CDE70[] = {
|
||||
9, 9, 8, 9, 8, 8, 8, 7, 7, 7, 6, 7, 6, 6, 6, 5, 5, 5, 12, 5, 12, 12, 12, 11, 11, 11, 10, 11, 10, 10, 10, 9,
|
||||
};
|
||||
const s8 gUnk_080CDE90[] = { -2, -3, -4, -5, -6, -5, -4, -3 };
|
||||
const u16 gUnk_080CDE98[] = { 0xc0, 0x100, 0x140, 0x180 };
|
||||
|
||||
extern u8 gEntCount;
|
||||
|
||||
void VaatiEyesMacro(Entity* this) {
|
||||
gUnk_080CDE34[GetNextFunction(this)](this);
|
||||
SetChildOffset(this, 0, 1, -0x10);
|
||||
}
|
||||
|
||||
void sub_0802EC98(Entity* this) {
|
||||
gUnk_080CDE4C[this->type](this);
|
||||
if (this->type < 2) {
|
||||
sub_0802EF90(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802ECC0(Entity* this) {
|
||||
if (this->type == 0) {
|
||||
if (this->currentHealth == 0) {
|
||||
gScreenTransition.field_0x39 &= ~(1 << (gScreenTransition.field_0x3c + 2));
|
||||
}
|
||||
if (gRoomControls.roomID == 0) {
|
||||
gScreenTransition.field_0x3a = this->currentHealth;
|
||||
} else {
|
||||
gScreenTransition.field_0x3b = this->currentHealth;
|
||||
}
|
||||
if (this->field_0x78.HALF.HI != this->currentHealth) {
|
||||
EnqueueSFX(SFX_17A);
|
||||
}
|
||||
this->field_0x78.HALF.HI = this->currentHealth;
|
||||
} else {
|
||||
if (this->type == 1) {
|
||||
if (0 < this->iframes) {
|
||||
this->iframes *= -1;
|
||||
}
|
||||
if (this->currentHealth != 0xff) {
|
||||
EnqueueSFX(SFX_BUTTON_DEPRESS);
|
||||
}
|
||||
this->currentHealth = 0xff;
|
||||
}
|
||||
}
|
||||
if (this->field_0x43 != 0) {
|
||||
sub_0804A9FC(this, 0x1c);
|
||||
}
|
||||
sub_0804AA30(this, gUnk_080CDE34);
|
||||
}
|
||||
|
||||
void sub_0802ED74(Entity* this) {
|
||||
gUnk_080CDE5C[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0802ED8C(Entity* this) {
|
||||
Manager* manager;
|
||||
Entity* enemy;
|
||||
|
||||
if ((gEntCount < 0x47) && (manager = GetEmptyManager(), manager != NULL)) {
|
||||
manager->type = 9;
|
||||
manager->subtype = 0x34;
|
||||
manager->parent = (Manager*)this;
|
||||
AppendEntityToList((Entity*)manager, 8);
|
||||
enemy = CreateEnemy(VAATI_EYES_MACRO, 2);
|
||||
enemy->parent = this;
|
||||
this->action = 1;
|
||||
if (gRoomControls.roomID == 0) {
|
||||
this->field_0x78.HALF.HI = this->currentHealth = gScreenTransition.field_0x3a;
|
||||
} else {
|
||||
this->field_0x78.HALF.HI = this->currentHealth = gScreenTransition.field_0x3b;
|
||||
}
|
||||
this->field_0x78.HALF.LO = Random();
|
||||
sub_0802EFB8(this);
|
||||
InitializeAnimation(this, 0);
|
||||
sub_0802EF58(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802EE10(Entity* this) {
|
||||
sub_0802F04C(this);
|
||||
GetNextFrame(this);
|
||||
}
|
||||
|
||||
void sub_0802EE20(Entity* this) {
|
||||
gUnk_080CDE64[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0802EE38(Entity* this) {
|
||||
Entity* entity;
|
||||
u32 rand;
|
||||
|
||||
if (gEntCount < 0x47) {
|
||||
entity = CreateEnemy(VAATI_EYES_MACRO, 3);
|
||||
entity->parent = this;
|
||||
this->action = 1;
|
||||
rand = Random();
|
||||
this->actionDelay = (rand & 3) + 1;
|
||||
this->field_0x78.HALF.LO = Random() >> 8;
|
||||
this->direction = gUnk_080CDE6C[rand >> 0x10 & 3];
|
||||
InitializeAnimation(this, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802EE8C(Entity* this) {
|
||||
if (this->parent->next == NULL) {
|
||||
this->flags &= 0x7f;
|
||||
this->currentHealth = 0;
|
||||
} else {
|
||||
sub_0802F04C(this);
|
||||
GetNextFrame(this);
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct xy {
|
||||
u8 x;
|
||||
u8 y;
|
||||
} xy;
|
||||
|
||||
void sub_0802EEB8(Entity* this) {
|
||||
u32 uVar2;
|
||||
xy* temp;
|
||||
|
||||
if (this->parent->next == NULL) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->animationState = 0xff;
|
||||
}
|
||||
CopyPositionAndSpriteOffset(this->parent, this);
|
||||
uVar2 = (GetFacingDirection(this, &gPlayerEntity) + 1) & 0x1e;
|
||||
temp = (xy*)&gUnk_080CDE70[uVar2];
|
||||
if (temp->x != this->frameIndex) {
|
||||
if (temp->y != this->frameIndex) {
|
||||
this->frameIndex = temp->x;
|
||||
}
|
||||
}
|
||||
this->y.HALF.HI++;
|
||||
this->spriteOffsetY -= 1;
|
||||
}
|
||||
|
||||
void sub_0802EF1C(Entity* this) {
|
||||
if (this->parent->next == NULL) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->frameIndex = 0x11;
|
||||
this->spritePriority.b0 = 6;
|
||||
}
|
||||
CopyPositionAndSpriteOffset(this->parent, this);
|
||||
this->height.HALF.HI = 0;
|
||||
}
|
||||
|
||||
void sub_0802EF58(Entity* this) {
|
||||
Entity* entity;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < 7; i++) {
|
||||
entity = CreateEnemy(VAATI_EYES_MACRO, 1);
|
||||
if (entity != NULL) {
|
||||
entity->type2 = i;
|
||||
entity->collisionLayer = 1;
|
||||
entity->parent = this;
|
||||
UpdateSpriteForCollisionLayer(entity);
|
||||
CopyPosition(this, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802EF90(Entity* this) {
|
||||
this->height.HALF.HI = gUnk_080CDE90[this->field_0x78.HALF.LO++ >> 3 & 7];
|
||||
}
|
||||
|
||||
void sub_0802EFB8(Entity* this) {
|
||||
u32 uVar1;
|
||||
u32 rand;
|
||||
u32 uVar3;
|
||||
int iVar4;
|
||||
|
||||
rand = Random();
|
||||
if ((rand >> 0x10 & 3) != 0) {
|
||||
uVar1 = rand & 0x18;
|
||||
} else {
|
||||
uVar3 = GetFacingDirection(&gPlayerEntity, this);
|
||||
uVar1 = (uVar3 + 4) & 0x18;
|
||||
}
|
||||
iVar4 = sub_080002E0(TILE(this->x.HALF.HI, this->y.HALF.HI) + gUnk_080B4488[((uVar1) >> 3)], 1);
|
||||
if (iVar4 != 0) {
|
||||
this->direction = 0xff;
|
||||
} else {
|
||||
this->actionDelay = (rand & 3) + 1;
|
||||
this->direction = (uVar1 & 0x18);
|
||||
this->speed = gUnk_080CDE98[rand >> 0x18 & 3];
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802F04C(Entity* this) {
|
||||
s32 oldX;
|
||||
s32 oldY;
|
||||
|
||||
oldX = this->x.HALF.HI;
|
||||
oldY = this->y.HALF.HI;
|
||||
if (ProcessMovement(this) == 0) {
|
||||
sub_0802EFB8(this);
|
||||
return;
|
||||
}
|
||||
switch (this->direction >> 3) {
|
||||
case 0:
|
||||
if (((oldY & 0xf) > 8) && ((this->y.HALF.HI & 0xf) < 9)) {
|
||||
this->actionDelay--;
|
||||
oldY = (this->y.HALF.HI & 0xfff0) + 8;
|
||||
}
|
||||
if (this->actionDelay == 0) {
|
||||
this->x.HALF.HI = oldX;
|
||||
this->y.HALF.HI = oldY;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (((oldX & 0xf) < 8) && ((this->x.HALF.HI & 0xf) >= 8)) {
|
||||
this->actionDelay--;
|
||||
oldX = (this->x.HALF.HI & 0xfff0) + 8;
|
||||
}
|
||||
if (this->actionDelay == 0) {
|
||||
this->x.HALF.HI = oldX;
|
||||
this->y.HALF.HI = oldY;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (((oldY & 0xf) < 8) && ((this->y.HALF.HI & 0xf) >= 8)) {
|
||||
this->actionDelay--;
|
||||
oldY = (this->y.HALF.HI & 0xfff0) + 8;
|
||||
}
|
||||
if (this->actionDelay == 0) {
|
||||
this->x.HALF.HI = oldX;
|
||||
this->y.HALF.HI = oldY;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (((oldX & 0xf) >= 9) && ((this->x.HALF.HI & 0xf) < 9)) {
|
||||
this->actionDelay--;
|
||||
oldX = (this->x.HALF.HI & 0xfff0) + 8;
|
||||
}
|
||||
if (this->actionDelay == 0) {
|
||||
this->x.HALF.HI = oldX;
|
||||
this->y.HALF.HI = oldY;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
sub_0802EFB8(this);
|
||||
}
|
Loading…
Reference in New Issue