mirror of
https://github.com/zeldaret/tmc
synced 2026-06-25 18:04:49 -04:00
Merge pull request #250 from hatal175/projectileasm
This commit is contained in:
@@ -1,133 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r6, [r4, #0x50]
|
||||
ldr r0, [r6, #4]
|
||||
cmp r0, #0
|
||||
bne _080AB180
|
||||
bl DeleteThisEntity
|
||||
_080AB180:
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _080AB1AA
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
subs r0, #0x3a
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
movs r0, #5
|
||||
strb r0, [r4, #0x1e]
|
||||
ldrb r1, [r2]
|
||||
subs r0, #0xd
|
||||
ands r0, r1
|
||||
movs r1, #3
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
ldr r0, _080AB1C8 @ =gHitbox_22
|
||||
str r0, [r4, #0x48]
|
||||
_080AB1AA:
|
||||
ldr r5, [r6, #0x50]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x7c
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x7c
|
||||
ldrb r1, [r0]
|
||||
adds r3, r0, #0
|
||||
ldrb r2, [r2]
|
||||
cmp r1, r2
|
||||
beq _080AB1CC
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
b _080AB1D2
|
||||
.align 2, 0
|
||||
_080AB1C8: .4byte gHitbox_22
|
||||
_080AB1CC:
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
_080AB1D2:
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x7c
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r3]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x20
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080AB208
|
||||
movs r0, #0x1f
|
||||
ands r0, r1
|
||||
ldr r1, _080AB204 @ =gUnk_0812A4A8
|
||||
adds r0, r0, r1
|
||||
movs r2, #0
|
||||
ldrsb r2, [r0, r2]
|
||||
movs r3, #1
|
||||
ldrsb r3, [r0, r3]
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
bl sub_0806FA90
|
||||
b _080AB216
|
||||
.align 2, 0
|
||||
_080AB204: .4byte gUnk_0812A4A8
|
||||
_080AB208:
|
||||
movs r3, #0xa
|
||||
rsbs r3, r3, #0
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
movs r2, #0
|
||||
bl sub_0806FA90
|
||||
_080AB216:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r6, r1]
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r4, r2]
|
||||
subs r0, r0, r1
|
||||
ldrb r2, [r4, #0xa]
|
||||
muls r0, r2, r0
|
||||
adds r3, r2, #0
|
||||
cmp r0, #0
|
||||
bge _080AB22C
|
||||
adds r0, #3
|
||||
_080AB22C:
|
||||
asrs r0, r0, #2
|
||||
ldrh r5, [r4, #0x2e]
|
||||
adds r0, r0, r5
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r6, r1]
|
||||
movs r5, #0x32
|
||||
ldrsh r1, [r4, r5]
|
||||
subs r0, r0, r1
|
||||
muls r0, r3, r0
|
||||
cmp r0, #0
|
||||
bge _080AB246
|
||||
adds r0, #3
|
||||
_080AB246:
|
||||
asrs r0, r0, #2
|
||||
ldrh r1, [r4, #0x32]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x32]
|
||||
movs r3, #0x36
|
||||
ldrsh r0, [r6, r3]
|
||||
movs r5, #0x36
|
||||
ldrsh r1, [r4, r5]
|
||||
subs r0, r0, r1
|
||||
muls r0, r2, r0
|
||||
cmp r0, #0
|
||||
bge _080AB260
|
||||
adds r0, #3
|
||||
_080AB260:
|
||||
asrs r0, r0, #2
|
||||
ldrh r1, [r4, #0x36]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x36]
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,40 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x41
|
||||
ldrb r0, [r0]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
blt _080AC8FE
|
||||
cmp r1, #3
|
||||
ble _080AC8F8
|
||||
cmp r1, #0x1f
|
||||
bgt _080AC8FE
|
||||
cmp r1, #0x1e
|
||||
blt _080AC8FE
|
||||
_080AC8F8:
|
||||
bl DeleteThisEntity
|
||||
b _080AC920
|
||||
_080AC8FE:
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #3
|
||||
beq _080AC920
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
ldrh r0, [r4, #0x24]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x11
|
||||
strh r0, [r4, #0x24]
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl InitializeAnimation
|
||||
_080AC920:
|
||||
adds r0, r4, #0
|
||||
bl GyorgMaleEnergyProjectile_OnTick
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,59 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r2, #0xc]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r2, #0x24]
|
||||
ldrh r1, [r2, #0x2e]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
ldrh r0, [r2, #0x32]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x6a
|
||||
strh r0, [r1]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x84
|
||||
ldrh r1, [r0]
|
||||
subs r0, #0x18
|
||||
strh r1, [r0]
|
||||
ldrb r0, [r2, #0xa]
|
||||
cmp r0, #6
|
||||
bhi _080ABAAA
|
||||
movs r0, #0
|
||||
b _080ABAAC
|
||||
_080ABAAA:
|
||||
movs r0, #1
|
||||
_080ABAAC:
|
||||
strb r0, [r2, #0xb]
|
||||
ldr r0, _080ABAC8 @ =gUnk_0812A6D4
|
||||
ldrb r1, [r2, #0xa]
|
||||
adds r0, r1, r0
|
||||
ldrb r3, [r0]
|
||||
ldrb r0, [r2, #0xb]
|
||||
cmp r0, #0
|
||||
bne _080ABACC
|
||||
movs r0, #8
|
||||
strb r0, [r2, #0x15]
|
||||
ldrh r0, [r2, #0x32]
|
||||
adds r0, r0, r3
|
||||
strh r0, [r2, #0x32]
|
||||
b _080ABAD6
|
||||
.align 2, 0
|
||||
_080ABAC8: .4byte gUnk_0812A6D4
|
||||
_080ABACC:
|
||||
movs r0, #0x10
|
||||
strb r0, [r2, #0x15]
|
||||
ldrh r0, [r2, #0x2e]
|
||||
adds r0, r0, r3
|
||||
strh r0, [r2, #0x2e]
|
||||
_080ABAD6:
|
||||
adds r0, r2, #0
|
||||
bl InitializeAnimation
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,93 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_080AF090
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
bne _080ABAFE
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
movs r2, #0
|
||||
ldrsh r1, [r1, r2]
|
||||
subs r3, r0, r1
|
||||
b _080ABB0C
|
||||
_080ABAFE:
|
||||
movs r0, #0x32
|
||||
ldrsh r1, [r4, r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6a
|
||||
movs r2, #0
|
||||
ldrsh r0, [r0, r2]
|
||||
subs r3, r1, r0
|
||||
_080ABB0C:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6c
|
||||
movs r1, #0
|
||||
ldrsh r2, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
cmp r2, #0
|
||||
bge _080ABB1E
|
||||
rsbs r3, r3, #0
|
||||
rsbs r2, r2, #0
|
||||
_080ABB1E:
|
||||
lsls r1, r3, #0x10
|
||||
lsls r0, r2, #0x10
|
||||
cmp r1, r0
|
||||
bls _080ABB84
|
||||
ldrb r0, [r4, #0x15]
|
||||
movs r1, #0x10
|
||||
eors r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
ldrb r0, [r4, #0xb]
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bne _080ABB4E
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x2e]
|
||||
ldrb r2, [r4, #0x18]
|
||||
lsls r1, r2, #0x19
|
||||
lsrs r1, r1, #0x1f
|
||||
movs r0, #1
|
||||
eors r1, r0
|
||||
lsls r1, r1, #6
|
||||
subs r0, #0x42
|
||||
b _080ABB62
|
||||
_080ABB4E:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6a
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x32]
|
||||
ldrb r2, [r4, #0x18]
|
||||
lsrs r1, r2, #7
|
||||
movs r0, #1
|
||||
eors r1, r0
|
||||
lsls r1, r1, #7
|
||||
movs r0, #0x7f
|
||||
_080ABB62:
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
cmp r3, #0
|
||||
ble _080ABB84
|
||||
lsls r0, r5, #0x18
|
||||
cmp r0, #0
|
||||
bne _080ABB7C
|
||||
ldrh r0, [r6]
|
||||
ldrh r2, [r4, #0x2e]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r4, #0x2e]
|
||||
b _080ABB84
|
||||
_080ABB7C:
|
||||
ldrh r0, [r6]
|
||||
ldrh r1, [r4, #0x32]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x32]
|
||||
_080ABB84:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
pop {r4, r5, r6, pc}
|
||||
.syntax divided
|
||||
@@ -1,77 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
beq _080AACF4
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
beq _080AACF4
|
||||
bl DeleteThisEntity
|
||||
_080AACF4:
|
||||
ldrb r1, [r4, #0x18]
|
||||
lsls r0, r1, #0x1e
|
||||
lsrs r2, r0, #0x1e
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x86
|
||||
cmp r2, #1
|
||||
bne _080AAD16
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
strb r2, [r5]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
_080AAD16:
|
||||
ldr r2, [r4, #0x50]
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
bne _080AAD4A
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x74
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
adds r1, #0xc
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x81
|
||||
ldrb r0, [r0]
|
||||
lsrs r0, r0, #1
|
||||
ldrb r2, [r1]
|
||||
adds r0, r0, r2
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #8
|
||||
bls _080AAD42
|
||||
movs r0, #8
|
||||
b _080AAD56
|
||||
_080AAD42:
|
||||
cmp r0, #0
|
||||
bne _080AAD58
|
||||
movs r0, #1
|
||||
b _080AAD56
|
||||
_080AAD4A:
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x84
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
subs r1, #0x45
|
||||
movs r0, #0x2b
|
||||
_080AAD56:
|
||||
strb r0, [r1]
|
||||
_080AAD58:
|
||||
ldrb r0, [r5]
|
||||
cmp r0, #0
|
||||
bne _080AAD68
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
_080AAD68:
|
||||
bl DeleteThisEntity
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,39 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #0xa]
|
||||
cmp r0, #1
|
||||
beq _080ABBC4
|
||||
cmp r0, #1
|
||||
bgt _080ABBDC
|
||||
cmp r0, #0
|
||||
bne _080ABBDC
|
||||
ldr r0, _080ABBC0 @ =gUnk_0812A7EC
|
||||
b _080ABBC6
|
||||
.align 2, 0
|
||||
_080ABBC0: .4byte gUnk_0812A7EC
|
||||
_080ABBC4:
|
||||
ldr r0, _080ABBD8 @ =gUnk_0812A7F8
|
||||
_080ABBC6:
|
||||
ldrb r1, [r2, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r2, #0
|
||||
bl _call_via_r1
|
||||
b _080ABBEC
|
||||
.align 2, 0
|
||||
_080ABBD8: .4byte gUnk_0812A7F8
|
||||
_080ABBDC:
|
||||
ldr r0, _080ABBF0 @ =gUnk_0812A800
|
||||
ldrb r1, [r2, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r2, #0
|
||||
bl _call_via_r1
|
||||
_080ABBEC:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080ABBF0: .4byte gUnk_0812A800
|
||||
.syntax divided
|
||||
@@ -1,50 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x41
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080ABC52
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
blt _080ABC52
|
||||
cmp r0, #1
|
||||
ble _080ABC3E
|
||||
cmp r0, #2
|
||||
bne _080ABC52
|
||||
movs r0, #0x3f
|
||||
ands r0, r1
|
||||
cmp r0, #3
|
||||
beq _080ABC32
|
||||
cmp r0, #3
|
||||
bgt _080ABC24
|
||||
cmp r0, #0
|
||||
beq _080ABC2A
|
||||
b _080ABC52
|
||||
_080ABC24:
|
||||
cmp r0, #0x14
|
||||
beq _080ABC32
|
||||
b _080ABC52
|
||||
_080ABC2A:
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
bl ModHealth
|
||||
_080ABC32:
|
||||
adds r0, r4, #0
|
||||
bl CreateDust
|
||||
bl DeleteThisEntity
|
||||
b _080ABC52
|
||||
_080ABC3E:
|
||||
movs r0, #0x3f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080ABC52
|
||||
movs r0, #2
|
||||
rsbs r0, r0, #0
|
||||
bl ModHealth
|
||||
bl DeleteThisEntity
|
||||
_080ABC52:
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,63 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl Random
|
||||
adds r5, r0, #0
|
||||
movs r0, #0xff
|
||||
ands r5, r0
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r0, _080ABE48 @ =0xFFFF0000
|
||||
str r0, [r4, #0x20]
|
||||
ldrh r0, [r4, #0x36]
|
||||
subs r0, #0xa0
|
||||
strh r0, [r4, #0x36]
|
||||
ldr r3, _080ABE4C @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
ldr r1, _080ABE50 @ =0x00007FF0
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
movs r2, #8
|
||||
orrs r0, r2
|
||||
strh r0, [r4, #0x2e]
|
||||
ldrh r0, [r3, #8]
|
||||
ands r1, r0
|
||||
orrs r1, r2
|
||||
strh r1, [r4, #0x32]
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, #0x10
|
||||
ands r0, r5
|
||||
cmp r0, #0
|
||||
beq _080ABE54
|
||||
adds r1, #0x10
|
||||
b _080ABE56
|
||||
.align 2, 0
|
||||
_080ABE48: .4byte 0xFFFF0000
|
||||
_080ABE4C: .4byte gRoomControls
|
||||
_080ABE50: .4byte 0x00007FF0
|
||||
_080ABE54:
|
||||
adds r1, #0xc0
|
||||
_080ABE56:
|
||||
movs r0, #0xe0
|
||||
ands r0, r5
|
||||
lsrs r0, r0, #1
|
||||
adds r0, r1, r0
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r0, #0xf
|
||||
ands r5, r0
|
||||
lsls r0, r5, #4
|
||||
ldrh r1, [r4, #0x32]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x32]
|
||||
adds r0, r4, #0
|
||||
bl sub_08004168
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl InitializeAnimation
|
||||
ldr r0, _080ABE84 @ =0x0000012D
|
||||
bl SoundReq
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_080ABE84: .4byte 0x0000012D
|
||||
.syntax divided
|
||||
@@ -1,69 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r1, [r4, #0xa]
|
||||
adds r1, #1
|
||||
bl InitializeAnimation
|
||||
ldrb r1, [r4, #0xa]
|
||||
cmp r1, #0
|
||||
beq _080AC030
|
||||
cmp r1, #1
|
||||
beq _080AC048
|
||||
movs r1, #0
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r4, #0xe]
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0xf]
|
||||
ldr r1, _080AC028 @ =gUnk_0812A97C
|
||||
ldrb r0, [r4, #0xb]
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x24]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x44
|
||||
movs r0, #0x88
|
||||
strb r0, [r1]
|
||||
ldr r0, _080AC02C @ =0x00000193
|
||||
b _080AC06A
|
||||
.align 2, 0
|
||||
_080AC028: .4byte gUnk_0812A97C
|
||||
_080AC02C: .4byte 0x00000193
|
||||
_080AC030:
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r4, #0xe]
|
||||
movs r0, #7
|
||||
strb r0, [r4, #0xf]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x85
|
||||
movs r0, #0x18
|
||||
strb r0, [r1]
|
||||
subs r1, #0x41
|
||||
movs r0, #0x88
|
||||
b _080AC058
|
||||
_080AC048:
|
||||
strb r1, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x85
|
||||
movs r0, #0x18
|
||||
_080AC058:
|
||||
strb r0, [r1]
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r1, r4, #0
|
||||
bl CopyPositionAndSpriteOffset
|
||||
ldrh r0, [r4, #0x36]
|
||||
subs r0, #0x14
|
||||
strh r0, [r4, #0x36]
|
||||
ldr r0, _080AC070 @ =0x00000149
|
||||
_080AC06A:
|
||||
bl SoundReq
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080AC070: .4byte 0x00000149
|
||||
.syntax divided
|
||||
@@ -1,75 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetNextFrame
|
||||
ldr r0, [r4, #0x34]
|
||||
ldr r1, _080AC1C0 @ =0xFFFF8000
|
||||
adds r0, r0, r1
|
||||
str r0, [r4, #0x34]
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r6, r0, #0x18
|
||||
cmp r6, #0
|
||||
bne _080AC1F8
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0xc]
|
||||
strb r0, [r4, #0xe]
|
||||
bl Random
|
||||
adds r5, r0, #0
|
||||
movs r0, #7
|
||||
ands r5, r0
|
||||
ldr r0, _080AC1C4 @ =gUnk_0812A982
|
||||
adds r0, r5, r0
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r4, #0xf]
|
||||
ldr r1, _080AC1C8 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
bl GetFacingDirection
|
||||
adds r1, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r0, #0x84
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #3
|
||||
bne _080AC1D0
|
||||
ldr r0, _080AC1CC @ =gUnk_0812A98A
|
||||
adds r0, r5, r0
|
||||
ldrb r0, [r0]
|
||||
subs r1, r1, r0
|
||||
strb r6, [r4, #0xb]
|
||||
b _080AC1F2
|
||||
.align 2, 0
|
||||
_080AC1C0: .4byte 0xFFFF8000
|
||||
_080AC1C4: .4byte gUnk_0812A982
|
||||
_080AC1C8: .4byte gPlayerEntity
|
||||
_080AC1CC: .4byte gUnk_0812A98A
|
||||
_080AC1D0:
|
||||
cmp r0, #2
|
||||
bne _080AC1E4
|
||||
ldr r0, _080AC1E0 @ =gUnk_0812A98A
|
||||
adds r0, r5, r0
|
||||
ldrb r0, [r0]
|
||||
subs r1, r1, r0
|
||||
movs r0, #1
|
||||
b _080AC1F0
|
||||
.align 2, 0
|
||||
_080AC1E0: .4byte gUnk_0812A98A
|
||||
_080AC1E4:
|
||||
ldr r0, _080AC1FC @ =gUnk_0812A98A
|
||||
adds r0, r5, r0
|
||||
ldrb r0, [r0]
|
||||
lsrs r0, r0, #1
|
||||
subs r1, r1, r0
|
||||
movs r0, #2
|
||||
_080AC1F0:
|
||||
strb r0, [r4, #0xb]
|
||||
_080AC1F2:
|
||||
movs r0, #0x1f
|
||||
ands r1, r0
|
||||
strb r1, [r4, #0x15]
|
||||
_080AC1F8:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_080AC1FC: .4byte gUnk_0812A98A
|
||||
.syntax divided
|
||||
@@ -1,62 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetNextFrame
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
movs r5, #0xff
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _080AC270
|
||||
movs r0, #0x10
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x21
|
||||
bl CreateProjectile
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _080AC23C
|
||||
movs r0, #2
|
||||
strb r0, [r1, #0xa]
|
||||
ldrb r0, [r4, #0xb]
|
||||
strb r0, [r1, #0xb]
|
||||
ldrb r0, [r4, #0x15]
|
||||
strb r0, [r1, #0x15]
|
||||
ldr r0, [r4, #0x50]
|
||||
str r0, [r1, #0x50]
|
||||
adds r0, r4, #0
|
||||
bl CopyPosition
|
||||
_080AC23C:
|
||||
ldrb r0, [r4, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
ands r0, r5
|
||||
cmp r0, #0
|
||||
bne _080AC24C
|
||||
bl DeleteThisEntity
|
||||
_080AC24C:
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r0, #0x84
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #3
|
||||
bne _080AC25C
|
||||
ldrb r0, [r4, #0x15]
|
||||
adds r0, #3
|
||||
b _080AC26A
|
||||
_080AC25C:
|
||||
cmp r0, #2
|
||||
bne _080AC266
|
||||
ldrb r0, [r4, #0x15]
|
||||
adds r0, #3
|
||||
b _080AC26A
|
||||
_080AC266:
|
||||
ldrb r0, [r4, #0x15]
|
||||
adds r0, #2
|
||||
_080AC26A:
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x15]
|
||||
_080AC270:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,53 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x41
|
||||
ldrb r0, [r0]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
cmp r1, #0xc
|
||||
bgt _080ACA82
|
||||
cmp r1, #0xa
|
||||
bge _080ACA86
|
||||
cmp r1, #6
|
||||
beq _080ACA86
|
||||
b _080ACAC0
|
||||
_080ACA82:
|
||||
cmp r1, #0x1a
|
||||
bne _080ACAC0
|
||||
_080ACA86:
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
adds r0, r1, #0
|
||||
ldrh r1, [r4, #0x24]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x24]
|
||||
ldr r0, [r4, #0x4c]
|
||||
str r0, [r4, #0x54]
|
||||
adds r0, r4, #0
|
||||
bl sub_080ACB40
|
||||
cmp r0, #0
|
||||
beq _080ACAB0
|
||||
movs r0, #0
|
||||
b _080ACAB6
|
||||
_080ACAB0:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x3e
|
||||
ldrb r0, [r0]
|
||||
_080ACAB6:
|
||||
strb r0, [r4, #0x15]
|
||||
movs r0, #0xd8
|
||||
bl SoundReq
|
||||
b _080ACAC4
|
||||
_080ACAC0:
|
||||
bl DeleteThisEntity
|
||||
_080ACAC4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,48 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldr r0, [r2, #0x50]
|
||||
ldr r1, [r0, #0x50]
|
||||
ldr r3, [r2, #0x54]
|
||||
ldr r0, [r1, #0x64]
|
||||
ldr r0, [r0, #0x1c]
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r0, r2
|
||||
beq _080ACB5A
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r3, r0
|
||||
beq _080ACB86
|
||||
_080ACB5A:
|
||||
ldr r1, [r1, #0x64]
|
||||
ldr r0, [r1, #0x20]
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r0, r2
|
||||
beq _080ACB6A
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r3, r0
|
||||
beq _080ACB86
|
||||
_080ACB6A:
|
||||
ldr r0, [r1, #0x24]
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r0, r2
|
||||
beq _080ACB78
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r3, r0
|
||||
beq _080ACB86
|
||||
_080ACB78:
|
||||
ldr r0, [r1, #0x28]
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r0, r2
|
||||
beq _080ACB8A
|
||||
ldr r0, [r0, #0x54]
|
||||
cmp r3, r0
|
||||
bne _080ACB8A
|
||||
_080ACB86:
|
||||
movs r0, #0
|
||||
b _080ACB8C
|
||||
_080ACB8A:
|
||||
movs r0, #1
|
||||
_080ACB8C:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,70 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
bne _080AB99C
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement
|
||||
ldrb r0, [r4, #0x15]
|
||||
lsrs r0, r0, #3
|
||||
ldr r1, _080AB994 @ =gUnk_0812A6C4
|
||||
lsls r5, r0, #1
|
||||
adds r1, r5, r1
|
||||
ldrh r1, [r1]
|
||||
ldrh r0, [r4, #0x2a]
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080AB980
|
||||
ldrb r1, [r4, #0x15]
|
||||
adds r0, r4, #0
|
||||
bl sub_080AB9FC
|
||||
cmp r0, #0
|
||||
beq _080AB9D4
|
||||
_080AB980:
|
||||
bl Random
|
||||
ldr r2, _080AB998 @ =gUnk_0812A6BC
|
||||
movs r1, #1
|
||||
ands r1, r0
|
||||
adds r1, r1, r5
|
||||
adds r1, r1, r2
|
||||
ldrb r0, [r1]
|
||||
strb r0, [r4, #0x15]
|
||||
b _080AB9D4
|
||||
.align 2, 0
|
||||
_080AB994: .4byte gUnk_0812A6C4
|
||||
_080AB998: .4byte gUnk_0812A6BC
|
||||
_080AB99C:
|
||||
ldr r0, [r4, #0x50]
|
||||
cmp r0, #0
|
||||
bne _080AB9A6
|
||||
bl DeleteThisEntity
|
||||
_080AB9A6:
|
||||
ldr r0, [r4, #0x50]
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
bne _080AB9B2
|
||||
bl DeleteThisEntity
|
||||
_080AB9B2:
|
||||
ldr r1, [r4, #0x54]
|
||||
cmp r1, #0
|
||||
beq _080AB9D0
|
||||
ldr r0, [r1, #4]
|
||||
cmp r0, #0
|
||||
beq _080AB9D0
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x68
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x2e]
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x6a
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x32]
|
||||
b _080AB9D4
|
||||
_080AB9D0:
|
||||
bl DeleteThisEntity
|
||||
_080AB9D4:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
pop {r4, r5, pc}
|
||||
.syntax divided
|
||||
@@ -1,49 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
bl GetLayerByIndex
|
||||
movs r1, #0x2e
|
||||
ldrsh r3, [r5, r1]
|
||||
ldr r2, _080ABA4C @ =gRoomControls
|
||||
ldrh r1, [r2, #6]
|
||||
subs r3, r3, r1
|
||||
asrs r3, r3, #4
|
||||
movs r6, #0x3f
|
||||
ands r3, r6
|
||||
movs r7, #0x32
|
||||
ldrsh r1, [r5, r7]
|
||||
ldrh r2, [r2, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
lsls r1, r1, #6
|
||||
orrs r3, r1
|
||||
ldr r1, _080ABA50 @ =gUnk_080B4488
|
||||
lsrs r4, r4, #3
|
||||
lsls r4, r4, #1
|
||||
adds r4, r4, r1
|
||||
movs r2, #0
|
||||
ldrsh r1, [r4, r2]
|
||||
adds r3, r3, r1
|
||||
ldr r7, _080ABA54 @ =0x00002004
|
||||
adds r0, r0, r7
|
||||
adds r0, r0, r3
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x1f
|
||||
bls _080ABA58
|
||||
cmp r0, #0x3f
|
||||
bhi _080ABA58
|
||||
movs r0, #1
|
||||
b _080ABA5A
|
||||
.align 2, 0
|
||||
_080ABA4C: .4byte gRoomControls
|
||||
_080ABA50: .4byte gUnk_080B4488
|
||||
_080ABA54: .4byte 0x00002004
|
||||
_080ABA58:
|
||||
movs r0, #0
|
||||
_080ABA5A:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.syntax divided
|
||||
+8
-6
@@ -101,6 +101,13 @@ typedef struct {
|
||||
u8 unknown2[3];
|
||||
} Hitbox3D;
|
||||
|
||||
typedef struct {
|
||||
u8 b0 : 3; // 1-4
|
||||
u8 b1 : 3; // 8
|
||||
u8 b2 : 1; // 0x40
|
||||
u8 b3 : 1; // 0x80
|
||||
} PACKED SpritePriority;
|
||||
|
||||
/**
|
||||
* Container for instantiable behavior.
|
||||
*/
|
||||
@@ -156,12 +163,7 @@ typedef struct Entity_ {
|
||||
/*0x20*/ s32 zVelocity; /**< Z axis speed. */
|
||||
/*0x24*/ s16 speed; /**< Magnitude of speed. */
|
||||
/*0x26*/ u8 spriteAnimation[3];
|
||||
/*0x29*/ struct {
|
||||
/* */ u8 b0 : 3; /* 1-4 */
|
||||
/* */ u8 b1 : 3; /* 8 */
|
||||
/* */ u8 b2 : 1; /* 0x40 */
|
||||
/* */ u8 b3 : 1; /* 0x80 */
|
||||
/* */ } PACKED spritePriority;
|
||||
/*0x29*/ SpritePriority spritePriority;
|
||||
/*0x2a*/ u16 collisions;
|
||||
/*0x2c*/ union SplitWord x; /**< X position, fixed point. */
|
||||
/*0x30*/ union SplitWord y; /**< Y position, fixed point. */
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "projectile.h"
|
||||
#include "hitbox.h"
|
||||
|
||||
typedef struct {
|
||||
s8 x;
|
||||
s8 y;
|
||||
} PACKED PosOffset;
|
||||
|
||||
bool32 sub_080AB12C(Entity* this);
|
||||
|
||||
extern void (*const gUnk_0812A494[])(Entity*);
|
||||
extern const u8 gUnk_0812A4A8[];
|
||||
extern const PosOffset gUnk_0812A4A8[];
|
||||
|
||||
void BallAndChain(Entity* this) {
|
||||
gUnk_0812A494[this->type](this);
|
||||
@@ -61,7 +67,58 @@ bool32 sub_080AB12C(Entity* this) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/ballAndChain/sub_080AB170.inc", void sub_080AB170(Entity* this))
|
||||
void sub_080AB170(Entity* this) {
|
||||
s32 val;
|
||||
s32 type;
|
||||
Entity* ent;
|
||||
Entity* parent = this->parent;
|
||||
if (parent->next == NULL) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->spritePriority.b1 = 0;
|
||||
this->frameIndex = 5;
|
||||
this->spritePriority.b0 = 3;
|
||||
this->hitbox = (Hitbox*)&gHitbox_22;
|
||||
}
|
||||
|
||||
ent = parent->parent;
|
||||
if (this->field_0x7c.BYTES.byte0 != ent->field_0x7c.BYTES.byte0) {
|
||||
this->flags |= 0x80;
|
||||
} else {
|
||||
this->flags &= 0x7f;
|
||||
}
|
||||
|
||||
this->field_0x7c.BYTES.byte0 = ent->field_0x7c.BYTES.byte0;
|
||||
|
||||
if ((ent->frame & 0x20) == 0) {
|
||||
u8 index = ent->frame & 0x1f;
|
||||
PosOffset* pOffset = (PosOffset*)((s8*)gUnk_0812A4A8 + index);
|
||||
sub_0806FA90(ent, this, pOffset->x, pOffset->y);
|
||||
} else {
|
||||
sub_0806FA90(ent, this, 0, -10);
|
||||
}
|
||||
|
||||
val = (parent->x.HALF.HI - this->x.HALF.HI) * this->type;
|
||||
if (val < 0) {
|
||||
val += 3;
|
||||
}
|
||||
this->x.HALF.HI += (val >> 2);
|
||||
|
||||
val = (parent->y.HALF.HI - this->y.HALF.HI) * this->type;
|
||||
if (val < 0) {
|
||||
val += 3;
|
||||
}
|
||||
this->y.HALF.HI += (val >> 2);
|
||||
|
||||
val = (parent->z.HALF.HI - this->z.HALF.HI) * this->type;
|
||||
if (val < 0) {
|
||||
val += 3;
|
||||
}
|
||||
this->z.HALF.HI += (val >> 2);
|
||||
}
|
||||
|
||||
void sub_080AB26C(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
@@ -82,7 +139,7 @@ void sub_080AB26C(Entity* this) {
|
||||
void (*const gUnk_0812A494[])(Entity*) = {
|
||||
sub_080AB074, sub_080AB170, sub_080AB170, sub_080AB170, sub_080AB26C,
|
||||
};
|
||||
const u8 gUnk_0812A4A8[] = {
|
||||
6, 240, 10, 242, 10, 240, 8, 240, 252, 242, 248, 242, 252, 246, 4, 246,
|
||||
250, 242, 248, 240, 246, 242, 248, 244, 4, 242, 8, 242, 4, 246, 252, 246,
|
||||
const PosOffset gUnk_0812A4A8[] = {
|
||||
{ 6, -16 }, { 10, -14 }, { 10, -16 }, { 8, -16 }, { -4, -14 }, { -8, -14 }, { -4, -10 }, { 4, -10 },
|
||||
{ -6, -14 }, { -8, -16 }, { -10, -14 }, { -8, -12 }, { 4, -14 }, { 8, -14 }, { 4, -10 }, { -4, -10 },
|
||||
};
|
||||
|
||||
@@ -19,7 +19,30 @@ void GyorgMaleEnergyProjectile_OnTick(Entity* this) {
|
||||
GyorgMaleEnergyProjectile_Actions[this->action](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc", void sub_080AC8DC(Entity* this))
|
||||
void sub_080AC8DC(Entity* this) {
|
||||
switch ((s8)(this->bitfield & 0x7f)) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 0x1e:
|
||||
case 0x1f: {
|
||||
DeleteThisEntity();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
if (this->action != 3) {
|
||||
this->action = 3;
|
||||
this->flags &= 0x7f;
|
||||
this->speed >>= 1;
|
||||
InitializeAnimation(this, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
GyorgMaleEnergyProjectile_OnTick(this);
|
||||
}
|
||||
|
||||
void GyorgMaleEnergyProjectile_Init(Entity* this) {
|
||||
this->action = 1;
|
||||
|
||||
@@ -3,8 +3,14 @@
|
||||
#include "functions.h"
|
||||
#include "object.h"
|
||||
|
||||
typedef struct {
|
||||
u8 b0;
|
||||
u8 direction;
|
||||
} PACKED Struct_0812A074;
|
||||
|
||||
extern void sub_0806FBB4(Entity*);
|
||||
extern u32 sub_080002D4(s32, s32, u32);
|
||||
extern void sub_08078930(Entity*);
|
||||
|
||||
extern void (*const SpiderWeb_Functions[])(Entity*);
|
||||
extern void (*const SpiderWeb_Actions[])(Entity*);
|
||||
@@ -13,7 +19,7 @@ extern const Hitbox* const gUnk_0812A04C[];
|
||||
extern void (*const SpiderWeb_SubActions[])(Entity*);
|
||||
extern const s8 gUnk_0812A064[];
|
||||
extern const s8 gUnk_0812A06C[];
|
||||
extern const u8 gUnk_0812A074[];
|
||||
extern const Struct_0812A074 gUnk_0812A074[];
|
||||
extern const u16 gUnk_0812A084[];
|
||||
|
||||
void sub_080AA6C0(Entity*);
|
||||
@@ -165,7 +171,50 @@ void SpiderWeb_Action3(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/spiderWeb/sub_080AA9E0.inc", void sub_080AA9E0(Entity* this))
|
||||
NONMATCH("asm/non_matching/spiderWeb/sub_080AA9E0.inc", void sub_080AA9E0(Entity* this)) {
|
||||
s32 coord1, coord2, diff;
|
||||
Struct_0812A074* ptr;
|
||||
SpritePriority* priorityPtr;
|
||||
SpritePriority prio;
|
||||
u8 val1, val2;
|
||||
if (this->type & 0x1) {
|
||||
coord2 = gPlayerEntity.x.HALF.HI;
|
||||
coord1 = this->x.HALF.HI;
|
||||
} else {
|
||||
coord2 = gPlayerEntity.y.HALF.HI;
|
||||
coord1 = this->y.HALF.HI;
|
||||
}
|
||||
|
||||
diff = coord2 - coord1;
|
||||
ptr = (Struct_0812A074*)gUnk_0812A074 + (this->type << 1);
|
||||
switch (this->type) {
|
||||
case 3:
|
||||
case 0: {
|
||||
if (diff > 4) {
|
||||
ptr++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
case 2: {
|
||||
if (diff < -4) {
|
||||
ptr++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
val1 = ptr->b0;
|
||||
priorityPtr = (SpritePriority*)&this->spritePriority;
|
||||
priorityPtr->b0 = val1 & 0x7;
|
||||
// instruction order problems
|
||||
// this->spritePriority.b0 = ptr->b0 & 0x7;
|
||||
this->direction = ptr->direction;
|
||||
if (val1 == 5) {
|
||||
sub_08078930(this);
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_080AAA68(Entity* this) {
|
||||
SetTile(gUnk_0812A084[this->type], TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
|
||||
@@ -205,5 +254,6 @@ void (*const SpiderWeb_SubActions[])(Entity*) = {
|
||||
};
|
||||
const s8 gUnk_0812A064[] = { 0, 17, -15, 4, 0, -11, 15, 4 };
|
||||
const s8 gUnk_0812A06C[] = { 0, 2, -2, 0, 0, -2, 2, 0 };
|
||||
const u8 gUnk_0812A074[] = { 4, 0, 5, 16, 3, 8, 5, 24, 3, 16, 5, 0, 3, 24, 5, 8 };
|
||||
const Struct_0812A074 gUnk_0812A074[] = { { 4, 0 }, { 5, 16 }, { 3, 8 }, { 5, 24 },
|
||||
{ 3, 16 }, { 5, 0 }, { 3, 24 }, { 5, 8 } };
|
||||
const u16 gUnk_0812A084[] = { 16419, 16421, 16422, 16420 };
|
||||
|
||||
@@ -1,20 +1,95 @@
|
||||
#define NENT_DEPRECATED
|
||||
#include "entity.h"
|
||||
|
||||
extern void (*const SpikedRollers_Actions[])(Entity*);
|
||||
extern const u8 gUnk_0812A6D4[];
|
||||
typedef struct {
|
||||
Entity base;
|
||||
s16 x2;
|
||||
s16 y2;
|
||||
s16 unk_0x6c;
|
||||
u8 fill[0x16];
|
||||
u16 unk_0x84;
|
||||
u16 speed2;
|
||||
} SpikedRollersEntity;
|
||||
|
||||
void SpikedRollers(Entity* this) {
|
||||
SpikedRollers_Actions[this->action](this);
|
||||
extern s32 sub_080AF090(Entity*);
|
||||
|
||||
static void (*const SpikedRollers_Actions[])(SpikedRollersEntity*);
|
||||
static const u8 gSpikedRollersOffsets[];
|
||||
|
||||
void SpikedRollers(SpikedRollersEntity* this) {
|
||||
SpikedRollers_Actions[super->action](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/spikedRollers/sub_080ABA74.inc", void sub_080ABA74(Entity* this))
|
||||
void sub_080ABA74(SpikedRollersEntity* this) {
|
||||
s32 val;
|
||||
super->action++;
|
||||
super->speed = this->speed2;
|
||||
this->x2 = super->x.HALF.HI;
|
||||
this->y2 = super->y.HALF.HI;
|
||||
this->unk_0x6c = this->unk_0x84;
|
||||
|
||||
ASM_FUNC("asm/non_matching/spikedRollers/sub_080ABAE0.inc", void sub_080ABAE0(Entity* this))
|
||||
if (super->type <= 6) {
|
||||
super->type2 = 0;
|
||||
} else {
|
||||
super->type2 = 1;
|
||||
}
|
||||
|
||||
void (*const SpikedRollers_Actions[])(Entity*) = {
|
||||
val = gSpikedRollersOffsets[super->type];
|
||||
|
||||
if (super->type2 == 0) {
|
||||
super->direction = 8;
|
||||
super->y.HALF.HI += val;
|
||||
} else {
|
||||
super->direction = 0x10;
|
||||
super->x.HALF.HI += val;
|
||||
}
|
||||
|
||||
InitializeAnimation(super, super->type);
|
||||
}
|
||||
|
||||
void sub_080ABAE0(SpikedRollersEntity* this) {
|
||||
s32 diff, unk_0x6c;
|
||||
sub_080AF090(super);
|
||||
|
||||
if (super->type2 == 0) {
|
||||
diff = super->x.HALF.HI - this->x2;
|
||||
} else {
|
||||
diff = super->y.HALF.HI - this->y2;
|
||||
}
|
||||
|
||||
unk_0x6c = this->unk_0x6c;
|
||||
if (unk_0x6c < 0) {
|
||||
diff = -diff;
|
||||
unk_0x6c = -unk_0x6c;
|
||||
}
|
||||
|
||||
if ((u32)(diff << 0x10) > (unk_0x6c << 0x10)) {
|
||||
super->direction ^= 0x10;
|
||||
if (super->type2 == 0) {
|
||||
super->x.HALF.HI = this->x2;
|
||||
super->spriteSettings.flipX ^= 1;
|
||||
} else {
|
||||
super->y.HALF.HI = this->y2;
|
||||
super->spriteSettings.flipY ^= 1;
|
||||
}
|
||||
|
||||
if (diff > 0) {
|
||||
if (super->type2 == 0) {
|
||||
super->x.HALF.HI += this->unk_0x6c;
|
||||
} else {
|
||||
super->y.HALF.HI += this->unk_0x6c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GetNextFrame(super);
|
||||
}
|
||||
|
||||
static void (*const SpikedRollers_Actions[])(SpikedRollersEntity*) = {
|
||||
sub_080ABA74,
|
||||
sub_080ABAE0,
|
||||
};
|
||||
const u8 gUnk_0812A6D4[] = {
|
||||
|
||||
static const u8 gSpikedRollersOffsets[] = {
|
||||
8, 16, 24, 32, 40, 48, 56, 16, 24, 32, 40, 48, 56, 64,
|
||||
};
|
||||
|
||||
@@ -52,7 +52,39 @@ void sub_080AAC44(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc", void sub_080AACE0(Entity* this))
|
||||
void sub_080AACE0(Entity* this) {
|
||||
Entity* parent;
|
||||
if (this->type && this->type2) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
if (this->spriteSettings.draw == 1) {
|
||||
this->spriteSettings.draw = 0;
|
||||
this->field_0x86.HALF.LO = 1;
|
||||
CreateFx(this, 2, 0);
|
||||
}
|
||||
|
||||
parent = this->parent;
|
||||
if (this->type2 == 0) {
|
||||
u8* ptr = &(parent->field_0x74.HALF.LO);
|
||||
parent->field_0x74.HALF.LO = 3;
|
||||
parent->field_0x80.HALF.LO += this->field_0x80.HALF.HI >> 1;
|
||||
if (parent->field_0x80.HALF.LO > 8) {
|
||||
parent->field_0x80.HALF.LO = 8;
|
||||
} else if (parent->field_0x80.HALF.LO == 0) {
|
||||
parent->field_0x80.HALF.LO = 1;
|
||||
}
|
||||
} else {
|
||||
parent->cutsceneBeh.HALF.LO = 0;
|
||||
parent->hitType = 0x2b;
|
||||
}
|
||||
|
||||
if (this->field_0x86.HALF.LO == 0) {
|
||||
CreateFx(this, 2, 0);
|
||||
}
|
||||
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_080AAD70(Entity* this) {
|
||||
if (sub_0806F520() == 0) {
|
||||
|
||||
@@ -9,6 +9,7 @@ extern const Hitbox gUnk_0812A61C;
|
||||
|
||||
void sub_080AB758(Entity*);
|
||||
void sub_080AB888(Entity*);
|
||||
void sub_080AB844(Entity* this, s32 param_1, s32 param_2);
|
||||
|
||||
void V1EyeLaser(Entity* this) {
|
||||
if (this->parent->spriteSettings.draw == 0) {
|
||||
@@ -50,7 +51,45 @@ void V1EyeLaser_Action2(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entity* this))
|
||||
NONMATCH("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entity* this)) {
|
||||
s32 r6 = 6;
|
||||
u32 r7 = 0;
|
||||
u32 index = 0;
|
||||
if (((u32)this->y.HALF.HI) <= (u16)(gRoomControls.origin_y + 0xd4)) {
|
||||
u32 tmp = 7;
|
||||
do {
|
||||
if ((index & tmp) == 7) {
|
||||
sub_080AB844(this, 4, r6);
|
||||
r6 += 0x3e;
|
||||
r7 += 0x3e;
|
||||
}
|
||||
index = (index + 1) & tmp;
|
||||
} while (this->y.HALF.HI + r7 + (index << 3) <= (u16)(gRoomControls.origin_y + 0xd4));
|
||||
}
|
||||
index = 0;
|
||||
if (this->y.HALF.HI + r7 <= (u16)(gRoomControls.origin_y + 0xd4)) {
|
||||
u32 tmp = 3;
|
||||
do {
|
||||
if ((index & tmp) == 3) {
|
||||
sub_080AB844(this, 3, r6);
|
||||
r6 += 0x1e;
|
||||
r7 += 0x1e;
|
||||
}
|
||||
index = (index + 1) & tmp;
|
||||
} while (this->y.HALF.HI + r7 + (index << 3) <= (u16)(gRoomControls.origin_y + 0xd4));
|
||||
}
|
||||
|
||||
if (index & 0x2) {
|
||||
sub_080AB844(this, 2, r6);
|
||||
r6 += 0xe;
|
||||
} else if (index & 0x1) {
|
||||
sub_080AB844(this, 1, r6);
|
||||
r6 += 0x6;
|
||||
}
|
||||
|
||||
sub_080AB844(this, 6, r6);
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_080AB844(Entity* this, s32 param_1, s32 param_2) {
|
||||
Entity* entity;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "entity.h"
|
||||
#include "enemy.h"
|
||||
#include "functions.h"
|
||||
#include "object.h"
|
||||
|
||||
extern void (*const V2Projectile_Functions[])(Entity*);
|
||||
extern void (*const gUnk_0812A7EC[])(Entity*);
|
||||
@@ -18,9 +19,52 @@ void V2Projectile(Entity* this) {
|
||||
V2Projectile_Functions[GetNextFunction(this)](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABBA8.inc", void sub_080ABBA8(Entity* this))
|
||||
void sub_080ABBA8(Entity* this) {
|
||||
switch (this->type) {
|
||||
case 0: {
|
||||
gUnk_0812A7EC[this->action](this);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
gUnk_0812A7F8[this->action](this);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
default:
|
||||
gUnk_0812A800[this->action](this);
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABBF4.inc", void sub_080ABBF4(Entity* this))
|
||||
void sub_080ABBF4(Entity* this) {
|
||||
if ((this->bitfield & 0x80) == 0)
|
||||
return;
|
||||
|
||||
switch (this->type) {
|
||||
case 2: {
|
||||
switch ((this->bitfield & 0x3f)) {
|
||||
case 0: {
|
||||
ModHealth(-4);
|
||||
// fallthrough
|
||||
}
|
||||
case 3:
|
||||
case 0x14: {
|
||||
CreateDust(this);
|
||||
DeleteThisEntity();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
case 1: {
|
||||
if ((this->bitfield & 0x3f) == 0) {
|
||||
ModHealth(-2);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080ABC54(Entity* this) {
|
||||
if (sub_0806F520() == 0) {
|
||||
@@ -90,7 +134,26 @@ void sub_080ABD70(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABE04.inc", void sub_080ABE04(Entity* this))
|
||||
void sub_080ABE04(Entity* this) {
|
||||
u32 rand = Random() & 0xff;
|
||||
u32 newX;
|
||||
this->action = 1;
|
||||
this->zVelocity = 0xffff0000;
|
||||
this->z.HALF.HI -= 0xa0;
|
||||
this->x.HALF.HI = (gRoomControls.origin_x & 0x7ff0) | 0x8;
|
||||
this->y.HALF.HI = (gRoomControls.origin_y & 0x7ff0) | 0x8;
|
||||
newX = this->x.HALF.HI;
|
||||
if (rand & 0x10) {
|
||||
newX += 0x10;
|
||||
} else {
|
||||
newX += 0xc0;
|
||||
}
|
||||
this->x.HALF.HI = newX + ((0xe0 & rand) >> 1);
|
||||
this->y.HALF.HI += ((0xf & rand) << 4);
|
||||
sub_08004168(this);
|
||||
InitializeAnimation(this, 0);
|
||||
SoundReq(SFX_12D);
|
||||
}
|
||||
|
||||
void sub_080ABE88(Entity* this) {
|
||||
if (GravityUpdate(this, 0x1800) == 0) {
|
||||
|
||||
@@ -2,15 +2,16 @@
|
||||
#include "enemy.h"
|
||||
#include "player.h"
|
||||
#include "coord.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern s32 sub_080AF090(Entity*);
|
||||
extern s32 IsProjectileOffScreen(Entity*);
|
||||
|
||||
extern void (*const V3ElectricProjectile_Functions[])(Entity*);
|
||||
extern void (*const V3ElectricProjectile_Actions[])(Entity*);
|
||||
extern const u16 gUnk_0812A97C[];
|
||||
extern const u8 gUnk_0812A982[];
|
||||
extern const u8 gUnk_0812A98A[];
|
||||
static const u16 projectileSpeeds[];
|
||||
static const u8 gUnk_0812A982[];
|
||||
static const u8 projectileDirections[];
|
||||
|
||||
void V3ElectricProjectile(Entity* this) {
|
||||
V3ElectricProjectile_Functions[GetNextFunction(this)](this);
|
||||
@@ -24,7 +25,44 @@ void sub_080ABFE4(Entity* this) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc", void sub_080ABFEC(Entity* this))
|
||||
void sub_080ABFEC(Entity* this) {
|
||||
Sound sound;
|
||||
InitializeAnimation(this, this->type + 1);
|
||||
|
||||
switch (this->type) {
|
||||
case 0: {
|
||||
this->action = 1;
|
||||
this->actionDelay = 0;
|
||||
this->field_0xf = 0x7;
|
||||
this->cutsceneBeh.HALF.HI = 0x18;
|
||||
this->damage = 0x88;
|
||||
CopyPositionAndSpriteOffset(this->parent, this);
|
||||
this->z.HALF.HI -= 0x14;
|
||||
sound = SFX_149;
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
this->action = 1;
|
||||
this->flags &= 0x7f;
|
||||
this->cutsceneBeh.HALF.HI = 0x18;
|
||||
CopyPositionAndSpriteOffset(this->parent, this);
|
||||
this->z.HALF.HI -= 0x14;
|
||||
sound = SFX_149;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
this->action = 2;
|
||||
this->actionDelay = 0;
|
||||
this->field_0xf = 0xff;
|
||||
this->speed = projectileSpeeds[this->type2];
|
||||
this->damage = 0x88;
|
||||
sound = SFX_193;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SoundReq(sound);
|
||||
}
|
||||
|
||||
void V3ElectricProjectile_Action1(Entity* this) {
|
||||
if (this->parent->next == NULL) {
|
||||
@@ -75,9 +113,64 @@ void V3ElectricProjectile_Action2(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080AC168.inc", void sub_080AC168(Entity* this))
|
||||
void sub_080AC168(Entity* this) {
|
||||
u8 actionDelay;
|
||||
GetNextFrame(this);
|
||||
this->z.WORD += 0xffff8000;
|
||||
actionDelay = --this->actionDelay;
|
||||
if (actionDelay == 0) {
|
||||
u32 rand;
|
||||
u32 dir;
|
||||
this->action = 4;
|
||||
this->actionDelay = 4;
|
||||
rand = Random() & 0x7;
|
||||
this->field_0xf = gUnk_0812A982[rand];
|
||||
dir = GetFacingDirection(this, &gPlayerEntity);
|
||||
if (this->parent->cutsceneBeh.HALF.LO == 3) {
|
||||
dir -= projectileDirections[rand];
|
||||
this->type2 = 0;
|
||||
} else if (this->parent->cutsceneBeh.HALF.LO == 2) {
|
||||
dir -= projectileDirections[rand];
|
||||
this->type2 = 1;
|
||||
} else {
|
||||
dir -= projectileDirections[rand] >> 1;
|
||||
this->type2 = 2;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080AC200.inc", void sub_080AC200(Entity* this))
|
||||
this->direction = dir & 0x1f;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080AC200(Entity* this) {
|
||||
Entity* proj;
|
||||
GetNextFrame(this);
|
||||
|
||||
if (--this->actionDelay)
|
||||
return;
|
||||
|
||||
this->actionDelay = 0x10;
|
||||
proj = CreateProjectile(0x21);
|
||||
|
||||
if (proj) {
|
||||
proj->type = 2;
|
||||
proj->type2 = this->type2;
|
||||
proj->direction = this->direction;
|
||||
proj->parent = this->parent;
|
||||
CopyPosition(this, proj);
|
||||
}
|
||||
|
||||
if (--this->field_0xf == 0) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
if (this->parent->cutsceneBeh.HALF.LO == 3) {
|
||||
this->direction = (this->direction + 3) & 0x1f;
|
||||
} else if (this->parent->cutsceneBeh.HALF.LO == 2) {
|
||||
this->direction = (this->direction + 3) & 0x1f;
|
||||
} else {
|
||||
this->direction = (this->direction + 2) & 0x1f;
|
||||
}
|
||||
}
|
||||
|
||||
void (*const V3ElectricProjectile_Functions[])(Entity*) = {
|
||||
V3ElectricProjectile_OnTick, sub_080ABFE4, DeleteEntity, DeleteEntity, DeleteEntity,
|
||||
@@ -85,10 +178,10 @@ void (*const V3ElectricProjectile_Functions[])(Entity*) = {
|
||||
void (*const V3ElectricProjectile_Actions[])(Entity*) = {
|
||||
sub_080ABFEC, V3ElectricProjectile_Action1, V3ElectricProjectile_Action2, sub_080AC168, sub_080AC200,
|
||||
};
|
||||
const u16 gUnk_0812A97C[] = { 352, 480, 480 };
|
||||
const u8 gUnk_0812A982[] = {
|
||||
static const u16 projectileSpeeds[] = { 352, 480, 480 };
|
||||
static const u8 gUnk_0812A982[] = {
|
||||
5, 6, 7, 8, 5, 6, 7, 6,
|
||||
};
|
||||
const u8 gUnk_0812A98A[] = {
|
||||
static const u8 projectileDirections[] = {
|
||||
6, 9, 9, 12, 6, 9, 9, 9, 0, 0,
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@ extern void (*const V3TennisBallProjectile_Functions[])(Entity*);
|
||||
extern void (*const V3TennisBallProjectile_Actions[])(Entity*);
|
||||
|
||||
void sub_080ACB90(Entity*);
|
||||
bool32 sub_080ACB40(Entity* this);
|
||||
|
||||
void V3TennisBallProjectile(Entity* this) {
|
||||
V3TennisBallProjectile_Functions[GetNextFunction(this)](this);
|
||||
@@ -17,7 +18,32 @@ void V3TennisBallProjectile_OnTick(Entity* this) {
|
||||
V3TennisBallProjectile_Actions[this->action](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc", void sub_080ACA68(Entity* this))
|
||||
void sub_080ACA68(Entity* this) {
|
||||
switch (this->bitfield & 0x7f) {
|
||||
case 0x1a:
|
||||
case 0xa:
|
||||
case 0xb:
|
||||
case 0xc:
|
||||
case 0x6: {
|
||||
this->action = 2;
|
||||
this->flags &= 0x7f;
|
||||
this->speed += 0x80 * 2;
|
||||
this->child = this->field_0x4c;
|
||||
if (sub_080ACB40(this)) {
|
||||
this->direction = 0;
|
||||
} else {
|
||||
this->direction = this->knockbackDirection;
|
||||
}
|
||||
|
||||
SoundReq(SFX_ITEM_SWORD_CHARGE_FINISH);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
DeleteThisEntity();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void V3TennisBallProjectile_Init(Entity* this) {
|
||||
this->action = 1;
|
||||
@@ -48,7 +74,35 @@ void V3TennisBallProjectile_Action2(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc", void sub_080ACB40(Entity* this))
|
||||
bool32 sub_080ACB40(Entity* this) {
|
||||
Entity* r1_grandparent = this->parent->parent;
|
||||
Entity* child = this->child;
|
||||
Entity* tmp = ((Entity*)(r1_grandparent->myHeap[7]))->child;
|
||||
|
||||
if (tmp != this && child == tmp->child) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp = ((Entity*)(r1_grandparent->myHeap[8]))->child;
|
||||
|
||||
if (tmp != this && child == tmp->child) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp = ((Entity*)(r1_grandparent->myHeap[9]))->child;
|
||||
|
||||
if (tmp != this && child == tmp->child) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp = ((Entity*)(r1_grandparent->myHeap[10]))->child;
|
||||
|
||||
if (tmp != this && child == tmp->child) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void sub_080ACB90(Entity* this) {
|
||||
Entity* parent = this->parent;
|
||||
|
||||
+60
-6
@@ -5,10 +5,13 @@
|
||||
#include "projectile.h"
|
||||
|
||||
extern void (*const Winder_Actions[])(Entity*);
|
||||
extern const u8 gUnk_0812A6BC[];
|
||||
extern const u8 gUnk_0812A6C4[];
|
||||
extern s16 gUnk_080B4488[];
|
||||
extern u8* GetLayerByIndex(u32);
|
||||
static const u8 gUnk_0812A6BC[];
|
||||
static const u16 gUnk_0812A6C4[];
|
||||
|
||||
void sub_080AB9DC(Entity*);
|
||||
bool32 sub_080AB9FC(Entity* this, u32 param_1);
|
||||
|
||||
void Winder(Entity* this) {
|
||||
Winder_Actions[this->action](this);
|
||||
@@ -45,7 +48,36 @@ void Winder_Init(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/winder/sub_080AB950.inc", void sub_080AB950(Entity* this))
|
||||
void sub_080AB950(Entity* this) {
|
||||
if (this->type == 0) {
|
||||
u8 dir;
|
||||
ProcessMovement(this);
|
||||
dir = this->direction >> 3;
|
||||
if (((gUnk_0812A6C4)[dir] & this->collisions) || sub_080AB9FC(this, this->direction)) {
|
||||
this->direction = gUnk_0812A6BC[(Random() & 0x1) + (dir << 1)];
|
||||
}
|
||||
} else {
|
||||
Entity* child;
|
||||
|
||||
if (this->parent == NULL) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
if (this->parent->next == NULL) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
child = this->child;
|
||||
if (child && child->next) {
|
||||
this->x.HALF.HI = child->field_0x68.HWORD;
|
||||
this->y.HALF.HI = child->field_0x6a.HWORD;
|
||||
} else {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
GetNextFrame(this);
|
||||
}
|
||||
|
||||
void sub_080AB9DC(Entity* this) {
|
||||
MemCopy(&this->field_0x6c, &this->field_0x68, 0x1c);
|
||||
@@ -53,7 +85,26 @@ void sub_080AB9DC(Entity* this) {
|
||||
this->field_0x86.HWORD = this->y.HALF.HI;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/winder/sub_080AB9FC.inc", void sub_080AB9FC(Entity* this))
|
||||
bool32 sub_080AB9FC(Entity* this, u32 dir) {
|
||||
u32 val;
|
||||
u8* layer = GetLayerByIndex(this->collisionLayer);
|
||||
u32 tmp;
|
||||
val = (((this->x.HALF.HI - gRoomControls.origin_x) >> 4) & 0x3f) |
|
||||
((((this->y.HALF.HI - gRoomControls.origin_y) >> 4) & 0x3f) << 6);
|
||||
val += gUnk_080B4488[dir >> 3];
|
||||
layer += 0x2004;
|
||||
layer += val;
|
||||
tmp = *layer;
|
||||
if (tmp <= 0x1f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (tmp > 0x3f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void (*const Winder_Actions[])(Entity*) = {
|
||||
Winder_Init,
|
||||
@@ -62,6 +113,9 @@ void (*const Winder_Actions[])(Entity*) = {
|
||||
const u8 gUnk_0812A6BC[] = {
|
||||
8, 24, 0, 16, 8, 24, 0, 16,
|
||||
};
|
||||
const u8 gUnk_0812A6C4[] = {
|
||||
14, 0, 0, 224, 224, 0, 0, 14,
|
||||
const u16 gUnk_0812A6C4[] = {
|
||||
0xe,
|
||||
0xe000,
|
||||
0xe0,
|
||||
0xe00,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user