Decompile dust functions (except 2)

This commit is contained in:
Tal Hayon 2022-07-10 01:17:38 +03:00
parent 2d389321d4
commit 098c0c9bf6
8 changed files with 593 additions and 682 deletions

View File

@ -1,663 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Dust
Dust: @ 0x08044118
push {r4, r5, lr}
adds r5, r0, #0
ldr r4, _08044130 @ =gUnk_080D1588
bl GetNextFunction
lsls r0, r0, #2
adds r0, r0, r4
ldr r1, [r0]
adds r0, r5, #0
bl _call_via_r1
pop {r4, r5, pc}
.align 2, 0
_08044130: .4byte gUnk_080D1588
thumb_func_start sub_08044134
sub_08044134: @ 0x08044134
push {lr}
ldr r2, _08044148 @ =gUnk_080D15A0
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08044148: .4byte gUnk_080D15A0
thumb_func_start sub_0804414C
sub_0804414C: @ 0x0804414C
push {lr}
ldr r1, _08044158 @ =gUnk_080D1588
bl EnemyFunctionHandlerAfterCollision
pop {pc}
.align 2, 0
_08044158: .4byte gUnk_080D1588
thumb_func_start sub_0804415C
sub_0804415C: @ 0x0804415C
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #0
bne _0804418E
adds r0, r4, #0
bl sub_0806F520
cmp r0, #0
beq _08044188
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080441BA
movs r0, #8
strb r0, [r4, #0xe]
adds r0, r4, #0
bl sub_08044310
b _080441BA
_08044188:
movs r0, #8
strb r0, [r4, #0xe]
b _080441BA
_0804418E:
adds r0, r4, #0
bl sub_0806F520
cmp r0, #0
beq _080441B0
ldr r0, _080441AC @ =gUnk_080D15A8
ldrb r1, [r4, #0xd]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
b _080441BA
.align 2, 0
_080441AC: .4byte gUnk_080D15A8
_080441B0:
adds r0, r4, #0
bl sub_080445C0
bl DeleteThisEntity
_080441BA:
pop {r4, pc}
thumb_func_start sub_080441BC
sub_080441BC: @ 0x080441BC
movs r1, #2
strb r1, [r0, #0xd]
bx lr
.align 2, 0
thumb_func_start sub_080441C4
sub_080441C4: @ 0x080441C4
push {lr}
bl sub_0806F4E8
pop {pc}
thumb_func_start sub_080441CC
sub_080441CC: @ 0x080441CC
push {r4, lr}
adds r4, r0, #0
bl sub_0806F3E4
cmp r0, #0
beq _080441DE
adds r0, r4, #0
bl GenericDeath
_080441DE:
pop {r4, pc}
thumb_func_start sub_080441E0
sub_080441E0: @ 0x080441E0
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
movs r0, #0x12
bl CheckGlobalFlag
cmp r0, #0
beq _080441F2
bl DeleteThisEntity
_080441F2:
ldrb r7, [r4, #0xa]
cmp r7, #0
bne _08044284
.ifdef EU
movs r0, #0xf5
lsls r0, r0, #0x1
.else
ldr r0, _08044244 @ =0x000001EB
.endif
movs r1, #1
bl sub_080AD8F0
adds r6, r0, #0
ldrb r1, [r6]
lsls r0, r1, #2
adds r0, r0, r1
adds r5, r0, #1
adds r0, r5, #0
bl zMalloc
adds r1, r0, #0
str r1, [r4, #0x64]
cmp r1, #0
beq _0804429A
adds r0, r6, #0
adds r2, r5, #0
bl MemCopy
adds r1, r4, #0
adds r1, #0x28
movs r0, #0xff
strb r0, [r1]
ldr r0, [r4, #0x64]
ldrb r0, [r0]
lsls r0, r0, #3
adds r0, #0xc
bl zMalloc
adds r2, r0, #0
cmp r2, #0
bne _08044248
ldr r0, [r4, #0x64]
bl zFree
b _0804429A
.align 2, 0
.ifndef EU
_08044244: .4byte 0x000001EB
.endif
_08044248:
str r2, [r4, #0x48]
ldr r0, _0804427C @ =gHitbox_4
ldr r1, [r0, #4]
ldr r0, [r0]
str r0, [r2]
str r1, [r2, #4]
adds r0, r4, #0
bl sub_080442BC
movs r0, #1
strb r0, [r4, #0x1e]
adds r2, r4, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
adds r0, r4, #0
adds r0, #0x75
strb r7, [r0]
adds r1, r4, #0
adds r1, #0x76
ldr r0, _08044280 @ =0x0000FFFF
strh r0, [r1]
b _08044292
.align 2, 0
_0804427C: .4byte gHitbox_4
_08044280: .4byte 0x0000FFFF
_08044284:
movs r0, #0
strb r0, [r4, #0x1e]
strh r0, [r4, #0x24]
ldr r0, _0804429C @ =gHitbox_1
str r0, [r4, #0x48]
movs r0, #1
strb r0, [r4, #0x1c]
_08044292:
movs r0, #1
strb r0, [r4, #0xc]
movs r0, #8
strb r0, [r4, #0xe]
_0804429A:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0804429C: .4byte gHitbox_1
thumb_func_start sub_080442A0
sub_080442A0: @ 0x080442A0
push {lr}
adds r1, r0, #0
ldrb r0, [r1, #0xa]
cmp r0, #0
bne _080442B2
adds r0, r1, #0
bl sub_08044498
b _080442B8
_080442B2:
adds r0, r1, #0
bl sub_08044550
_080442B8:
pop {pc}
.align 2, 0
thumb_func_start sub_080442BC
sub_080442BC: @ 0x080442BC
push {r4, r5, r6, r7, lr}
adds r3, r0, #0
ldr r5, _0804430C @ =gUnk_080D15B4
ldr r0, [r3, #0x64]
ldrb r6, [r0]
movs r4, #0
cmp r4, r6
bhs _08044304
movs r7, #0
_080442CE:
ldr r1, [r3, #0x48]
lsls r2, r4, #3
adds r1, r2, r1
ldrb r0, [r5]
strb r0, [r1, #0xc]
ldr r0, [r3, #0x48]
adds r0, r2, r0
ldrb r1, [r5, #1]
strb r1, [r0, #0xd]
ldr r0, [r3, #0x48]
adds r0, r2, r0
ldrb r1, [r5, #2]
strb r1, [r0, #0xe]
ldr r0, [r3, #0x48]
adds r0, r2, r0
ldrb r1, [r5, #3]
strb r1, [r0, #0xf]
ldr r0, [r3, #0x48]
adds r0, r2, r0
adds r0, #0xc
strb r7, [r0, #4]
ldr r0, [r3, #0x48]
adds r2, r2, r0
strb r4, [r2, #0x11]
adds r4, #1
cmp r4, r6
blo _080442CE
_08044304:
adds r0, r3, #0
adds r0, #0x74
strb r6, [r0]
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0804430C: .4byte gUnk_080D15B4
thumb_func_start sub_08044310
sub_08044310: @ 0x08044310
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
movs r4, #0xff
movs r6, #0xff
ldr r0, _08044334 @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r1, r0, #1
movs r0, #3
ands r1, r0
cmp r1, #1
beq _0804436A
cmp r1, #1
bgt _08044338
cmp r1, #0
beq _08044342
b _080443EA
.align 2, 0
_08044334: .4byte gPlayerEntity
_08044338:
cmp r1, #2
beq _08044392
cmp r1, #3
beq _080443C4
b _080443EA
_08044342:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_08044352:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _08044360
ldrb r0, [r1, #0xd]
cmp r6, r0
bls _08044360
adds r4, r2, #0
_08044360:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _08044352
b _080443EA
_0804436A:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_0804437A:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _08044388
ldrb r0, [r1, #0xe]
cmp r6, r0
bls _08044388
adds r4, r2, #0
_08044388:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _0804437A
b _080443EA
_08044392:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_080443A2:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _080443B0
ldrb r0, [r1, #0xc]
cmp r6, r0
bls _080443B0
adds r4, r2, #0
_080443B0:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _080443A2
b _080443EA
_080443BA:
mov r1, r8
adds r0, r1, r4
ldrb r0, [r0, #0x11]
strb r0, [r3, #5]
b _08044492
_080443C4:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_080443D4:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _080443E2
ldrb r0, [r1, #0xf]
cmp r6, r0
bls _080443E2
adds r4, r2, #0
_080443E2:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _080443D4
_080443EA:
cmp r4, #0xff
beq _08044492
ldr r0, [r5, #0x48]
lsls r4, r4, #3
adds r0, r4, r0
movs r1, #1
strb r1, [r0, #0x10]
ldr r1, [r5, #0x64]
ldrb r0, [r1]
subs r0, #1
strb r0, [r1]
ldr r2, [r5, #0x64]
ldrb r1, [r2]
lsls r0, r1, #2
adds r0, r0, r1
adds r0, #1
adds r7, r2, r0
ldr r0, [r5, #0x48]
adds r0, r4, r0
ldrb r1, [r0, #0x11]
lsls r0, r1, #2
adds r0, r0, r1
adds r0, #1
adds r6, r2, r0
movs r0, #0x53
movs r1, #1
bl CreateEnemy
adds r1, r0, #0
mov r8, r4
cmp r1, #0
beq _08044440
movs r2, #0
ldrsb r2, [r6, r2]
adds r2, #8
lsls r2, r2, #0x10
movs r3, #1
ldrsb r3, [r6, r3]
adds r3, #8
lsls r3, r3, #0x10
adds r0, r5, #0
bl PositionRelative
_08044440:
ldr r0, [r5, #0x64]
ldrb r0, [r0]
cmp r0, #0
bne _08044458
movs r0, #0x12
bl SetGlobalFlag
movs r0, #0x72
bl SoundReq
bl DeleteThisEntity
_08044458:
movs r2, #0
adds r3, r5, #0
adds r3, #0x74
_0804445E:
adds r0, r6, r2
adds r1, r7, r2
ldrb r1, [r1]
strb r1, [r0]
adds r2, #1
cmp r2, #4
bls _0804445E
movs r2, #0
ldrb r1, [r3]
cmp r2, r1
bhs _08044492
ldr r4, [r5, #0x48]
ldr r0, [r5, #0x64]
ldrb r6, [r0]
adds r5, r1, #0
adds r3, r4, #0
adds r3, #0xc
adds r1, r4, #0
_08044482:
ldrb r0, [r1, #0x11]
cmp r0, r6
beq _080443BA
adds r3, #8
adds r1, #8
adds r2, #1
cmp r2, r5
blo _08044482
_08044492:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_08044498
sub_08044498: @ 0x08044498
push {r4, r5, r6, lr}
mov ip, r0
ldr r6, _08044538 @ =gPlayerEntity
movs r1, #0x2e
ldrsh r0, [r6, r1]
ldr r3, _0804453C @ =gRoomControls
ldrh r1, [r3, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r2, #0x3f
ands r4, r2
movs r5, #0x32
ldrsh r0, [r6, r5]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
ldr r0, _08044540 @ =gPlayerState
adds r0, #0x92
ldrh r0, [r0]
movs r1, #0xf0
lsls r1, r1, #4
ands r1, r0
mov r2, ip
adds r2, #0x75
ldrb r0, [r2]
cmp r1, r0
bne _080444DE
mov r0, ip
adds r0, #0x76
ldrh r0, [r0]
cmp r4, r0
beq _0804454C
_080444DE:
strb r1, [r2]
mov r0, ip
adds r0, #0x76
strh r4, [r0]
mov r1, ip
ldr r0, [r1, #0x64]
adds r2, r0, #1
ldrb r4, [r0]
movs r3, #0x2e
ldrsh r1, [r6, r3]
mov r5, ip
movs r3, #0x2e
ldrsh r0, [r5, r3]
subs r5, r1, r0
movs r0, #0x32
ldrsh r1, [r6, r0]
mov r3, ip
movs r6, #0x32
ldrsh r0, [r3, r6]
subs r1, r1, r0
movs r3, #0
cmp r3, r4
bhs _0804454C
_0804450C:
movs r0, #0
ldrsb r0, [r2, r0]
subs r0, r5, r0
cmp r0, #0xf
bhi _08044544
movs r0, #1
ldrsb r0, [r2, r0]
subs r0, r1, r0
cmp r0, #0xf
bhi _08044544
movs r0, #0xf
movs r1, #0x11
movs r2, #0
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _0804454C
ldr r0, _08044538 @ =gPlayerEntity
bl CopyPosition
b _0804454C
.align 2, 0
_08044538: .4byte gPlayerEntity
_0804453C: .4byte gRoomControls
_08044540: .4byte gPlayerState
_08044544:
adds r2, #5
adds r3, #1
cmp r3, r4
blo _0804450C
_0804454C:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_08044550
sub_08044550: @ 0x08044550
push {r4, r5, r6, r7, lr}
adds r6, r0, #0
ldr r0, _080445A8 @ =gPlayerState
ldrb r1, [r0, #0x1c]
movs r0, #0xf
ands r0, r1
cmp r0, #1
bne _080445B4
ldrh r1, [r6, #0x24]
movs r2, #0x24
ldrsh r0, [r6, r2]
cmp r0, #0xff
bgt _08044570
adds r0, r1, #0
adds r0, #0x10
strh r0, [r6, #0x24]
_08044570:
ldr r5, _080445AC @ =gPlayerEntity
ldrb r0, [r5, #0x14]
movs r4, #0xe
ands r4, r0
ldr r0, _080445B0 @ =gUnk_08126EE4
adds r4, r4, r0
movs r3, #0x2e
ldrsh r0, [r6, r3]
movs r7, #0x32
ldrsh r1, [r6, r7]
movs r3, #0x2e
ldrsh r2, [r5, r3]
movs r3, #0
ldrsb r3, [r4, r3]
adds r2, r2, r3
movs r7, #0x32
ldrsh r3, [r5, r7]
ldrb r4, [r4, #1]
lsls r4, r4, #0x18
asrs r4, r4, #0x18
adds r3, r3, r4
bl CalculateDirectionTo
strb r0, [r6, #0x15]
adds r0, r6, #0
bl LinearMoveUpdate
b _080445BE
.align 2, 0
_080445A8: .4byte gPlayerState
_080445AC: .4byte gPlayerEntity
_080445B0: .4byte gUnk_08126EE4
_080445B4:
adds r0, r6, #0
bl sub_080445C0
bl DeleteThisEntity
_080445BE:
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_080445C0
sub_080445C0: @ 0x080445C0
push {r4, lr}
adds r4, r0, #0
movs r0, #0x21
movs r1, #1
movs r2, #1
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _080445DA
adds r0, r4, #0
bl CopyPosition
_080445DA:
pop {r4, pc}

View File

@ -0,0 +1,46 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r3, r0, #0
ldr r5, _0804430C @ =gUnk_080D15B4
ldr r0, [r3, #0x64]
ldrb r6, [r0]
movs r4, #0
cmp r4, r6
bhs _08044304
movs r7, #0
_080442CE:
ldr r1, [r3, #0x48]
lsls r2, r4, #3
adds r1, r2, r1
ldrb r0, [r5]
strb r0, [r1, #0xc]
ldr r0, [r3, #0x48]
adds r0, r2, r0
ldrb r1, [r5, #1]
strb r1, [r0, #0xd]
ldr r0, [r3, #0x48]
adds r0, r2, r0
ldrb r1, [r5, #2]
strb r1, [r0, #0xe]
ldr r0, [r3, #0x48]
adds r0, r2, r0
ldrb r1, [r5, #3]
strb r1, [r0, #0xf]
ldr r0, [r3, #0x48]
adds r0, r2, r0
adds r0, #0xc
strb r7, [r0, #4]
ldr r0, [r3, #0x48]
adds r2, r2, r0
strb r4, [r2, #0x11]
adds r4, #1
cmp r4, r6
blo _080442CE
_08044304:
adds r0, r3, #0
adds r0, #0x74
strb r6, [r0]
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0804430C: .4byte gUnk_080D15B4
.syntax divided

View File

@ -0,0 +1,213 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
movs r4, #0xff
movs r6, #0xff
ldr r0, _08044334 @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r1, r0, #1
movs r0, #3
ands r1, r0
cmp r1, #1
beq _0804436A
cmp r1, #1
bgt _08044338
cmp r1, #0
beq _08044342
b _080443EA
.align 2, 0
_08044334: .4byte gPlayerEntity
_08044338:
cmp r1, #2
beq _08044392
cmp r1, #3
beq _080443C4
b _080443EA
_08044342:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_08044352:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _08044360
ldrb r0, [r1, #0xd]
cmp r6, r0
bls _08044360
adds r4, r2, #0
_08044360:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _08044352
b _080443EA
_0804436A:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_0804437A:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _08044388
ldrb r0, [r1, #0xe]
cmp r6, r0
bls _08044388
adds r4, r2, #0
_08044388:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _0804437A
b _080443EA
_08044392:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_080443A2:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _080443B0
ldrb r0, [r1, #0xc]
cmp r6, r0
bls _080443B0
adds r4, r2, #0
_080443B0:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _080443A2
b _080443EA
_080443BA:
mov r1, r8
adds r0, r1, r4
ldrb r0, [r0, #0x11]
strb r0, [r3, #5]
b _08044492
_080443C4:
movs r2, #0
adds r0, r5, #0
adds r0, #0x74
ldrb r0, [r0]
cmp r2, r0
bhs _080443EA
adds r3, r0, #0
ldr r1, [r5, #0x48]
_080443D4:
ldrb r0, [r1, #0x10]
cmp r0, #0
bne _080443E2
ldrb r0, [r1, #0xf]
cmp r6, r0
bls _080443E2
adds r4, r2, #0
_080443E2:
adds r1, #8
adds r2, #1
cmp r2, r3
blo _080443D4
_080443EA:
cmp r4, #0xff
beq _08044492
ldr r0, [r5, #0x48]
lsls r4, r4, #3
adds r0, r4, r0
movs r1, #1
strb r1, [r0, #0x10]
ldr r1, [r5, #0x64]
ldrb r0, [r1]
subs r0, #1
strb r0, [r1]
ldr r2, [r5, #0x64]
ldrb r1, [r2]
lsls r0, r1, #2
adds r0, r0, r1
adds r0, #1
adds r7, r2, r0
ldr r0, [r5, #0x48]
adds r0, r4, r0
ldrb r1, [r0, #0x11]
lsls r0, r1, #2
adds r0, r0, r1
adds r0, #1
adds r6, r2, r0
movs r0, #0x53
movs r1, #1
bl CreateEnemy
adds r1, r0, #0
mov r8, r4
cmp r1, #0
beq _08044440
movs r2, #0
ldrsb r2, [r6, r2]
adds r2, #8
lsls r2, r2, #0x10
movs r3, #1
ldrsb r3, [r6, r3]
adds r3, #8
lsls r3, r3, #0x10
adds r0, r5, #0
bl PositionRelative
_08044440:
ldr r0, [r5, #0x64]
ldrb r0, [r0]
cmp r0, #0
bne _08044458
movs r0, #0x12
bl SetGlobalFlag
movs r0, #0x72
bl SoundReq
bl DeleteThisEntity
_08044458:
movs r2, #0
adds r3, r5, #0
adds r3, #0x74
_0804445E:
adds r0, r6, r2
adds r1, r7, r2
ldrb r1, [r1]
strb r1, [r0]
adds r2, #1
cmp r2, #4
bls _0804445E
movs r2, #0
ldrb r1, [r3]
cmp r2, r1
bhs _08044492
ldr r4, [r5, #0x48]
ldr r0, [r5, #0x64]
ldrb r6, [r0]
adds r5, r1, #0
adds r3, r4, #0
adds r3, #0xc
adds r1, r4, #0
_08044482:
ldrb r0, [r1, #0x11]
cmp r0, r6
beq _080443BA
adds r3, #8
adds r1, #8
adds r2, #1
cmp r2, r5
blo _08044482
_08044492:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.syntax divided

View File

@ -4,22 +4,9 @@
.section .rodata
.align 2
gUnk_080D1588:: @ 080D1588
.4byte sub_08044134
.4byte sub_0804414C
.4byte GenericKnockback
.4byte GenericDeath
.4byte GenericConfused
.4byte sub_0804415C
gUnk_080D15A0:: @ 080D15A0
.4byte sub_080441E0
.4byte sub_080442A0
gUnk_080D15A8:: @ 080D15A8
.4byte sub_080441BC
.4byte sub_080441C4
.4byte sub_080441CC
gUnk_080D15B4:: @ 080D15B4
.incbin "dust/gUnk_080D15B4.bin"

View File

@ -381,7 +381,7 @@ SECTIONS {
src/enemy/enemy50.o(.text);
src/enemy/vaatiWrath.o(.text);
src/enemy/vaatiArm.o(.text);
asm/enemy/dust.o(.text);
src/enemy/dust.o(.text);
src/enemy/vaatiBall.o(.text);
src/enemy/slime.o(.text);
src/enemy/sub_080451CC.o(.text);
@ -1031,6 +1031,7 @@ SECTIONS {
data/animations/enemy/vaatiWrath.o(.rodata);
src/enemy/vaatiArm.o(.rodata);
data/animations/enemy/vaatiArm.o(.rodata);
src/enemy/dust.o(.rodata);
data/const/enemy/dust.o(.rodata);
src/enemy/vaatiBall.o(.rodata);
data/animations/enemy/vaatiBall.o(.rodata);

327
src/enemy/dust.c Normal file
View File

@ -0,0 +1,327 @@
#define NENT_DEPRECATED
#include "entity.h"
#include "enemy.h"
#include "hitbox.h"
#include "player.h"
#include "physics.h"
#include "room.h"
#include "asm.h"
#include "object.h"
typedef struct {
Entity base;
u8 filler[0xc];
u8 unk_74;
u8 unk_75;
u16 unk_76;
} DustEntity;
typedef struct {
s8 unk_0;
s8 unk_1;
u8 unk_2;
u8 unk_3;
u8 unk_4;
} PACKED DustHeapItem;
typedef struct {
u8 unk_0;
DustHeapItem items[0];
} PACKED DustHeap;
#define HEAP ((DustHeap*)super->myHeap)
#ifdef EU
#define DUST_SPRITE_INDEX 0x1ea
#else
#define DUST_SPRITE_INDEX 0x1eb
#endif
void sub_08044134(DustEntity*);
void sub_0804414C(DustEntity*);
void sub_0804415C(DustEntity*);
void sub_080441E0(DustEntity*);
void sub_080442A0(DustEntity*);
void sub_080441CC(DustEntity*);
void sub_080441C4(DustEntity*);
void sub_080441BC(DustEntity*);
void sub_08044310(DustEntity*);
void sub_080445C0(DustEntity*);
void sub_080442BC(DustEntity*);
void sub_08044498(DustEntity*);
void sub_08044550(DustEntity*);
extern void* sub_080AD8F0(u32, u32);
extern const s8 gUnk_08126EE4[];
void (*const Dust_Functions[])(Entity*) = {
(EntityActionPtr)sub_08044134, (EntityActionPtr)sub_0804414C, GenericKnockback, GenericDeath, GenericConfused,
(EntityActionPtr)sub_0804415C,
};
void Dust(Entity* this) {
Dust_Functions[GetNextFunction(this)](this);
}
void sub_08044134(DustEntity* this) {
static void (*const Dust_Actions[])(DustEntity*) = {
sub_080441E0,
sub_080442A0,
};
Dust_Actions[super->action](this);
}
void sub_0804414C(DustEntity* this) {
EnemyFunctionHandlerAfterCollision(super, Dust_Functions);
}
void sub_0804415C(DustEntity* this) {
static void (*const Dust_SubActions[])(DustEntity*) = {
sub_080441BC,
sub_080441C4,
sub_080441CC,
};
if (super->type == 0) {
if (sub_0806F520(super)) {
if (--super->timer == 0) {
super->timer = 8;
sub_08044310(this);
}
} else {
super->timer = 8;
}
} else {
if (sub_0806F520(super)) {
Dust_SubActions[super->subAction](this);
} else {
sub_080445C0(this);
DeleteThisEntity();
}
}
}
void sub_080441BC(DustEntity* this) {
super->subAction = 2;
}
void sub_080441C4(DustEntity* this) {
sub_0806F4E8(super);
}
void sub_080441CC(DustEntity* this) {
if (sub_0806F3E4(super)) {
GenericDeath(super);
}
}
void sub_080441E0(DustEntity* this) {
int iVar1;
u8* pbVar2;
u32* puVar3;
Hitbox* pHVar4;
if (CheckGlobalFlag(MACHI_MACHIHOKORI)) {
DeleteThisEntity();
}
if (super->type == 0) {
pbVar2 = (u8*)sub_080AD8F0(DUST_SPRITE_INDEX, 1);
iVar1 = (u32)*pbVar2 * sizeof(DustHeapItem) + 1;
puVar3 = (u32*)zMalloc(iVar1);
super->myHeap = puVar3;
if (puVar3 == NULL) {
return;
}
MemCopy(pbVar2, puVar3, iVar1);
super->spriteAnimation[2] = 0xff;
pHVar4 = (Hitbox*)zMalloc(HEAP->unk_0 * 8 + 0xc);
if (pHVar4 == NULL) {
zFree(super->myHeap);
return;
}
super->hitbox = pHVar4;
*pHVar4 = gHitbox_4;
sub_080442BC(this);
super->frameIndex = 1;
super->spritePriority.b0 = 7;
this->unk_75 = 0;
this->unk_76 = 0xffff;
} else {
super->frameIndex = 0;
super->speed = 0;
super->hitbox = (Hitbox*)&gHitbox_1;
super->gustJarFlags = 1;
}
super->action = 1;
super->timer = 8;
}
void sub_080442A0(DustEntity* this) {
if (super->type == 0) {
sub_08044498(this);
} else {
sub_08044550(this);
}
}
extern const u8 gUnk_080D15B4[];
NONMATCH("asm/non_matching/dust/sub_080442BC.inc", void sub_080442BC(DustEntity* this)) {
u32 bVar1;
u32 i;
u32 tmp;
const u8* ptr = gUnk_080D15B4;
u8* ptr2;
bVar1 = HEAP->unk_0;
for (i = 0; i < bVar1; i++) {
tmp = 0;
super->hitbox[i + 1].unk2[2] = ptr[0];
super->hitbox[i + 1].unk2[3] = ptr[1];
super->hitbox[i + 1].width = ptr[2];
super->hitbox[i + 1].height = ptr[3];
// hitbox is probably misused here.
super->hitbox[i + 1].offset_x = tmp;
super->hitbox[i + 2].offset_y = (s8)i;
}
this->unk_74 = bVar1;
}
END_NONMATCH
// heap and hitbox struct
NONMATCH("asm/non_matching/dust/sub_08044310.inc", void sub_08044310(DustEntity* this)) {
Entity* iVar1;
u32 bVar2;
Hitbox* pHVar3;
DustHeap* puVar4;
u32 i;
u8* puVar6;
u32 uVar7;
Hitbox* pHVar8;
u8* pbVar9;
u32 tmp;
uVar7 = 0xff;
tmp = 0xff;
switch (gPlayerEntity.animationState >> 1 & 3) {
case 0:
for (i = 0; i < this->unk_74; i++) {
if (((u8)super->hitbox[i + 2].offset_x == 0) && (tmp > (u32)super->hitbox[i + 1].unk2[3])) {
uVar7 = i;
}
}
break;
case 1:
for (i = 0; i < this->unk_74; i++) {
if (((u8)super->hitbox[i + 2].offset_x == 0) && (tmp > (u8)super->hitbox[i + 1].width)) {
uVar7 = i;
}
}
break;
case 2:
for (i = 0; i < this->unk_74; i++) {
if ((u8)super->hitbox[i + 2].offset_x == 0 && (tmp > (u8)super->hitbox[i + 1].unk2[2])) {
uVar7 = i;
}
}
break;
case 3:
for (i = 0; i < this->unk_74; i++) {
if (((u8)super->hitbox[i + 2].offset_x == 0) && (tmp > super->hitbox[i + 1].height)) {
uVar7 = i;
}
}
break;
}
if (uVar7 != 0xff) {
super->hitbox[uVar7 + 2].offset_x = 1;
HEAP->unk_0--;
puVar4 = HEAP;
bVar2 = puVar4->unk_0;
pbVar9 = &puVar4->items[(u32)(u8)super->hitbox[uVar7 + 2].offset_y].unk_1;
iVar1 = CreateEnemy(DUST, 1);
if (iVar1 != 0) {
PositionRelative(super, iVar1, ((s8)*pbVar9 + 8) * 0x10000, ((s8)pbVar9[1] + 8) * 0x10000);
}
if (HEAP->unk_0 == 0) {
SetGlobalFlag(MACHI_MACHIHOKORI);
SoundReq(SFX_SECRET);
DeleteThisEntity();
}
for (i = 0; i < 5; i++) {
pbVar9[i] = (&puVar4->unk_0)[i];
}
for (i = 0; i < this->unk_74; i++) {
if ((u8)super->hitbox[i + 2].offset_y == HEAP->unk_0) {
super->hitbox[i].unk2[3] = super->hitbox[uVar7 + 2].offset_y;
return;
}
}
}
}
END_NONMATCH
void sub_08044498(DustEntity* this) {
Entity* pEVar1;
DustHeapItem* pbVar2;
u32 i;
u32 tileIndex;
u32 uVar4;
u32 tmp;
u32 xdiff, ydiff;
uVar4 = COORD_TO_TILE(&gPlayerEntity);
tmp = (gPlayerState.field_0x92 & 0xf00);
if (tmp != this->unk_75 || uVar4 != this->unk_76) {
this->unk_75 = tmp;
this->unk_76 = uVar4;
pbVar2 = HEAP->items;
uVar4 = HEAP->unk_0;
xdiff = gPlayerEntity.x.HALF.HI - super->x.HALF.HI;
ydiff = gPlayerEntity.y.HALF.HI - super->y.HALF.HI;
for (i = 0; i < uVar4; i++) {
if (xdiff - pbVar2[i].unk_0 < 0x10 && ydiff - pbVar2[i].unk_1 < 0x10) {
pEVar1 = CreateObject(SPECIAL_FX, 0x11, 0);
if (pEVar1 == NULL) {
return;
}
CopyPosition(&gPlayerEntity, pEVar1);
return;
}
}
}
}
void sub_08044550(DustEntity* this) {
u8 uVar1;
const s8* ptr;
if ((gPlayerState.field_0x1c & 0xf) == 1) {
if (super->speed < 0x100) {
super->speed += 0x10;
}
ptr = &gUnk_08126EE4[gPlayerEntity.animationState & 0xe];
super->direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, gPlayerEntity.x.HALF.HI + ptr[0],
gPlayerEntity.y.HALF.HI + ptr[1]);
LinearMoveUpdate(super);
} else {
sub_080445C0(this);
DeleteThisEntity();
}
}
void sub_080445C0(DustEntity* this) {
Entity* pEVar1;
pEVar1 = CreateObject(OBJECT_21, 1, 1);
if (pEVar1 != NULL) {
CopyPosition(super, pEVar1);
}
}

View File

@ -27,7 +27,7 @@ typedef struct {
u8 unk_85;
} LilypadLargeEntity;
extern u8 gUnk_08126EE4[];
extern s8 gUnk_08126EE4[];
void sub_080855E8(LilypadLargeEntity*);
void sub_08085CDC(LilypadLargeEntity*);
@ -166,8 +166,8 @@ void sub_080855E8(LilypadLargeEntity* this) {
SoundReq(SFX_WATER_WALK);
}
if ((super->contactFlags & 0x7f) == 0x13) {
sVar10 = gPlayerEntity.x.HALF.HI + (s8)gUnk_08126EE4[gPlayerEntity.animationState & 0xe];
uVar4 = gPlayerEntity.y.HALF.HI + (s8)gUnk_08126EE4[gPlayerEntity.animationState | 1];
sVar10 = gPlayerEntity.x.HALF.HI + gUnk_08126EE4[gPlayerEntity.animationState & 0xe];
uVar4 = gPlayerEntity.y.HALF.HI + gUnk_08126EE4[gPlayerEntity.animationState | 1];
super->direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, sVar10, uVar4);
switch (gPlayerState.gustJarSpeed) {

View File

@ -21,7 +21,7 @@ typedef struct {
/*0x7c*/ u32 unk_7c;
} PullableMushroomEntity;
extern const u8 gUnk_08126EE4[];
extern const s8 gUnk_08126EE4[];
void PullableMushroom_Init(PullableMushroomEntity*);
void PullableMushroom_Action1(PullableMushroomEntity*);