mzm/asm/disasm_0x08024a10.s
2023-03-12 23:54:08 +01:00

2035 lines
40 KiB
ArmAsm

.include "asm/macros.inc"
.syntax unified
thumb_func_start HiveSpawnParticle
HiveSpawnParticle: @ 0x08024a10
push {r4, r5, lr}
ldr r0, lbl_08024a38 @ =gCurrentSprite
ldrh r4, [r0, #2]
ldrh r5, [r0, #4]
adds r0, r4, #0
subs r0, #0x20
adds r1, r5, #0
movs r2, #0x35
bl ParticleSet
adds r4, #0x60
adds r0, r4, #0
adds r1, r5, #0
movs r2, #0x36
bl ParticleSet
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
lbl_08024a38: .4byte gCurrentSprite
thumb_func_start HiveInit
HiveInit: @ 0x08024a3c
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #0xc
movs r0, #3
movs r1, #0x2c
bl EventFunction
adds r7, r0, #0
cmp r7, #0
beq lbl_08024a60
ldr r1, lbl_08024a5c @ =gCurrentSprite
movs r0, #0
strh r0, [r1]
b lbl_08024b3e
.align 2, 0
lbl_08024a5c: .4byte gCurrentSprite
lbl_08024a60:
ldr r0, lbl_08024b4c @ =gCurrentSprite
mov ip, r0
adds r0, #0x27
movs r1, #0x28
strb r1, [r0]
mov r0, ip
adds r0, #0x28
strb r1, [r0]
mov r1, ip
adds r1, #0x29
movs r0, #0x14
strb r0, [r1]
movs r3, #0
ldr r0, lbl_08024b50 @ =0x0000ff80
mov r1, ip
strh r0, [r1, #0xa]
movs r0, #0x80
strh r0, [r1, #0xc]
ldr r0, lbl_08024b54 @ =0x0000ffd0
strh r0, [r1, #0xe]
movs r0, #0x30
strh r0, [r1, #0x10]
adds r1, #0x25
movs r0, #0xb
strb r0, [r1]
adds r1, #0xe
movs r0, #1
strb r0, [r1]
ldr r0, lbl_08024b58 @ =0x082da8ec
mov r1, ip
str r0, [r1, #0x18]
strb r3, [r1, #0x1c]
strh r7, [r1, #0x16]
adds r1, #0x22
movs r0, #5
strb r0, [r1]
ldr r2, lbl_08024b5c @ =0x082b0d68
mov r0, ip
ldrb r1, [r0, #0x1d]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
mov r1, ip
strh r0, [r1, #0x14]
adds r1, #0x24
movs r0, #9
strb r0, [r1]
mov r0, ip
adds r0, #0x2c
strb r3, [r0]
mov r0, ip
ldrh r5, [r0, #2]
ldrh r4, [r0, #4]
ldrb r1, [r0, #0x1f]
mov r8, r1
ldrb r6, [r0, #0x1e]
adds r0, #0x23
ldrb r3, [r0]
str r5, [sp]
str r4, [sp, #4]
str r7, [sp, #8]
movs r0, #0x11
adds r1, r6, #0
mov r2, r8
bl SpriteSpawnSecondary
adds r3, r5, #0
adds r3, #0x40
adds r0, r4, #0
subs r0, #0x1f
str r0, [sp]
str r7, [sp, #4]
movs r0, #0x4a
adds r1, r6, #0
mov r2, r8
bl SpriteSpawnPrimary
adds r3, r5, #0
adds r3, #0x20
adds r0, r4, #0
adds r0, #0x10
str r0, [sp]
str r7, [sp, #4]
movs r0, #0x4a
adds r1, r6, #0
mov r2, r8
bl SpriteSpawnPrimary
adds r3, r5, #0
subs r3, #0x48
adds r0, r4, #0
subs r0, #0x10
str r0, [sp]
str r7, [sp, #4]
movs r0, #0x4a
adds r1, r6, #0
mov r2, r8
bl SpriteSpawnPrimary
subs r5, #0x60
adds r4, #0x1f
str r4, [sp]
str r7, [sp, #4]
movs r0, #0x4a
adds r1, r6, #0
mov r2, r8
adds r3, r5, #0
bl SpriteSpawnPrimary
lbl_08024b3e:
add sp, #0xc
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
lbl_08024b4c: .4byte gCurrentSprite
lbl_08024b50: .4byte 0x0000ff80
lbl_08024b54: .4byte 0x0000ffd0
lbl_08024b58: .4byte 0x082da8ec
lbl_08024b5c: .4byte 0x082b0d68
thumb_func_start hive_count_mellow
hive_count_mellow: @ 0x08024b60
push {r4, r5, r6, r7, lr}
movs r4, #0
movs r0, #0x12
mov ip, r0
ldr r0, lbl_08024bac @ =gCurrentSprite
ldrb r5, [r0, #0x1e]
ldr r2, lbl_08024bb0 @ =gSpriteData
movs r1, #0xa8
lsls r1, r1, #3
adds r0, r2, r1
cmp r2, r0
bhs lbl_08024ba4
movs r7, #1
adds r3, r2, #0
adds r3, #0x1e
adds r6, r0, #0
lbl_08024b80:
ldrh r1, [r2]
adds r0, r7, #0
ands r0, r1
cmp r0, #0
beq lbl_08024b9c
ldrb r0, [r3, #7]
cmp r0, ip
bne lbl_08024b9c
ldrb r0, [r3]
cmp r0, r5
bne lbl_08024b9c
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
lbl_08024b9c:
adds r3, #0x38
adds r2, #0x38
cmp r2, r6
blo lbl_08024b80
lbl_08024ba4:
adds r0, r4, #0
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
lbl_08024bac: .4byte gCurrentSprite
lbl_08024bb0: .4byte gSpriteData
thumb_func_start HivePhase1
HivePhase1: @ 0x08024bb4
push {lr}
sub sp, #8
bl hive_count_mellow
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bhi lbl_08024bda
ldr r0, lbl_08024c20 @ =gCurrentSprite
ldrb r1, [r0, #0x1e]
ldrb r2, [r0, #0x1f]
ldrh r3, [r0, #2]
ldrh r0, [r0, #4]
str r0, [sp]
movs r0, #0
str r0, [sp, #4]
movs r0, #0x4a
bl SpriteSpawnPrimary
lbl_08024bda:
ldr r3, lbl_08024c20 @ =gCurrentSprite
ldr r2, lbl_08024c24 @ =0x082b0d68
ldrb r1, [r3, #0x1d]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldrh r1, [r3, #0x14]
lsrs r0, r0, #1
cmp r1, r0
bhs lbl_08024c18
adds r2, r3, #0
adds r2, #0x33
movs r1, #0
movs r0, #2
strb r0, [r2]
ldr r0, lbl_08024c28 @ =0x082da9a4
str r0, [r3, #0x18]
strb r1, [r3, #0x1c]
strh r1, [r3, #0x16]
adds r1, r3, #0
adds r1, #0x24
movs r0, #0x23
strb r0, [r1]
movs r0, #0xb0
lsls r0, r0, #1
bl SoundPlayNotAlreadyPlaying
bl HiveSpawnParticle
lbl_08024c18:
add sp, #8
pop {r0}
bx r0
.align 2, 0
lbl_08024c20: .4byte gCurrentSprite
lbl_08024c24: .4byte 0x082b0d68
lbl_08024c28: .4byte 0x082da9a4
thumb_func_start HivePhase2
HivePhase2: @ 0x08024c2c
push {lr}
sub sp, #8
bl hive_count_mellow
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bhi lbl_08024c52
ldr r0, lbl_08024c98 @ =gCurrentSprite
ldrb r1, [r0, #0x1e]
ldrb r2, [r0, #0x1f]
ldrh r3, [r0, #2]
ldrh r0, [r0, #4]
str r0, [sp]
movs r0, #0
str r0, [sp, #4]
movs r0, #0x4a
bl SpriteSpawnPrimary
lbl_08024c52:
ldr r3, lbl_08024c98 @ =gCurrentSprite
ldr r2, lbl_08024c9c @ =0x082b0d68
ldrb r1, [r3, #0x1d]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldrh r1, [r3, #0x14]
lsrs r0, r0, #2
cmp r1, r0
bhs lbl_08024c90
adds r2, r3, #0
adds r2, #0x33
movs r1, #0
movs r0, #3
strb r0, [r2]
ldr r0, lbl_08024ca0 @ =0x082daa04
str r0, [r3, #0x18]
strb r1, [r3, #0x1c]
strh r1, [r3, #0x16]
adds r1, r3, #0
adds r1, #0x24
movs r0, #0x25
strb r0, [r1]
movs r0, #0xb0
lsls r0, r0, #1
bl SoundPlayNotAlreadyPlaying
bl HiveSpawnParticle
lbl_08024c90:
add sp, #8
pop {r0}
bx r0
.align 2, 0
lbl_08024c98: .4byte gCurrentSprite
lbl_08024c9c: .4byte 0x082b0d68
lbl_08024ca0: .4byte 0x082daa04
thumb_func_start HivePhase3
HivePhase3: @ 0x08024ca4
push {lr}
sub sp, #8
bl hive_count_mellow
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bhi lbl_08024cca
ldr r0, lbl_08024cd0 @ =gCurrentSprite
ldrb r1, [r0, #0x1e]
ldrb r2, [r0, #0x1f]
ldrh r3, [r0, #2]
ldrh r0, [r0, #4]
str r0, [sp]
movs r0, #0
str r0, [sp, #4]
movs r0, #0x4a
bl SpriteSpawnPrimary
lbl_08024cca:
add sp, #8
pop {r0}
bx r0
.align 2, 0
lbl_08024cd0: .4byte gCurrentSprite
thumb_func_start HiveDying
HiveDying: @ 0x08024cd4
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #4
movs r2, #0
movs r5, #0x4b
ldr r3, lbl_08024da4 @ =gSpriteData
movs r1, #0xa8
lsls r1, r1, #3
adds r0, r3, r1
cmp r3, r0
bhs lbl_08024d1e
adds r4, r0, #0
lbl_08024cee:
ldrh r1, [r3]
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_08024d18
adds r0, r3, #0
adds r0, #0x32
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
bne lbl_08024d18
ldrb r0, [r3, #0x1d]
cmp r0, r5
bne lbl_08024d18
ldrh r0, [r3, #0x14]
cmp r0, #0
beq lbl_08024d18
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
lbl_08024d18:
adds r3, #0x38
cmp r3, r4
blo lbl_08024cee
lbl_08024d1e:
cmp r2, #0
bne lbl_08024d2a
movs r0, #1
movs r1, #0x2c
bl EventFunction
lbl_08024d2a:
movs r2, #9
mov ip, r2
ldr r0, lbl_08024da8 @ =gCurrentSprite
ldrb r5, [r0, #0x1e]
movs r7, #0x12
ldr r3, lbl_08024da4 @ =gSpriteData
movs r2, #0xa8
lsls r2, r2, #3
adds r1, r3, r2
adds r4, r0, #0
cmp r3, r1
bhs lbl_08024d78
adds r6, r1, #0
adds r2, r3, #0
adds r2, #0x1e
lbl_08024d48:
ldrh r1, [r3]
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_08024d70
ldrb r0, [r2, #7]
cmp r0, r7
bne lbl_08024d70
ldrb r0, [r2]
cmp r0, r5
bne lbl_08024d70
ldrb r0, [r2, #6]
cmp r0, ip
bne lbl_08024d70
movs r0, #0x25
strb r0, [r2, #6]
ldrb r0, [r2, #0x14]
movs r1, #4
orrs r0, r1
strb r0, [r2, #0x14]
lbl_08024d70:
adds r2, #0x38
adds r3, #0x38
cmp r3, r6
blo lbl_08024d48
lbl_08024d78:
adds r3, r4, #0
adds r1, r3, #0
adds r1, #0x24
ldrb r0, [r1]
cmp r0, #0x62
bhi lbl_08024d8e
adds r0, r3, #0
adds r0, #0x2c
ldrb r2, [r0]
cmp r2, #0
beq lbl_08024dac
lbl_08024d8e:
ldrh r1, [r3, #2]
adds r1, #0x48
ldrh r2, [r3, #4]
movs r0, #0x22
str r0, [sp]
movs r0, #0
movs r3, #1
bl SpriteUtilSpriteDeath
b lbl_08024dca
.align 2, 0
lbl_08024da4: .4byte gSpriteData
lbl_08024da8: .4byte gCurrentSprite
lbl_08024dac:
movs r0, #0x67
strb r0, [r1]
ldr r0, lbl_08024dd8 @ =0x082daa6c
str r0, [r4, #0x18]
strb r2, [r4, #0x1c]
movs r1, #0
strh r2, [r4, #0x16]
adds r0, r4, #0
adds r0, #0x25
strb r1, [r0]
ldr r0, lbl_08024ddc @ =0x00000161
bl SoundPlayNotAlreadyPlaying
bl HiveSpawnParticle
lbl_08024dca:
add sp, #4
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
lbl_08024dd8: .4byte 0x082daa6c
lbl_08024ddc: .4byte 0x00000161
thumb_func_start HiveIgnoreSamusCollision
HiveIgnoreSamusCollision: @ 0x08024de0
ldr r0, lbl_08024dec @ =gCurrentSprite
adds r0, #0x26
movs r1, #1
strb r1, [r0]
bx lr
.align 2, 0
lbl_08024dec: .4byte gCurrentSprite
thumb_func_start HiveRootsInit
HiveRootsInit: @ 0x08024df0
push {r4, lr}
ldr r0, lbl_08024e44 @ =gCurrentSprite
mov ip, r0
ldrh r1, [r0]
ldr r0, lbl_08024e48 @ =0x0000fffb
ands r0, r1
movs r2, #0
movs r3, #0
mov r1, ip
strh r0, [r1]
mov r0, ip
adds r0, #0x25
strb r2, [r0]
adds r0, #2
strb r2, [r0]
adds r1, #0x28
movs r0, #0x20
strb r0, [r1]
adds r1, #1
movs r0, #0x14
strb r0, [r1]
ldr r1, lbl_08024e4c @ =0x0000fffc
mov r4, ip
strh r1, [r4, #0xa]
movs r0, #4
strh r0, [r4, #0xc]
strh r1, [r4, #0xe]
strh r0, [r4, #0x10]
mov r1, ip
adds r1, #0x24
movs r0, #9
strb r0, [r1]
ldr r0, lbl_08024e50 @ =0x082da984
str r0, [r4, #0x18]
strb r2, [r4, #0x1c]
strh r3, [r4, #0x16]
adds r1, #0xf
movs r0, #1
strb r0, [r1]
pop {r4}
pop {r0}
bx r0
.align 2, 0
lbl_08024e44: .4byte gCurrentSprite
lbl_08024e48: .4byte 0x0000fffb
lbl_08024e4c: .4byte 0x0000fffc
lbl_08024e50: .4byte 0x082da984
thumb_func_start HiveRootsMove
HiveRootsMove: @ 0x08024e54
ldr r2, lbl_08024e70 @ =gCurrentSprite
adds r0, r2, #0
adds r0, #0x23
ldrb r1, [r0]
ldr r3, lbl_08024e74 @ =gSpriteData
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #3
adds r0, r0, r3
ldrh r1, [r0, #2]
strh r1, [r2, #2]
ldrh r0, [r0, #4]
strh r0, [r2, #4]
bx lr
.align 2, 0
lbl_08024e70: .4byte gCurrentSprite
lbl_08024e74: .4byte gSpriteData
thumb_func_start MellowInit
MellowInit: @ 0x08024e78
push {r4, r5, lr}
adds r4, r0, #0
movs r0, #3
movs r1, #0x2c
bl EventFunction
adds r2, r0, #0
cmp r2, #0
beq lbl_08024e8e
movs r0, #0
b lbl_08024fbe
lbl_08024e8e:
ldrh r1, [r4]
ldr r0, lbl_08024f04 @ =0x0000fffb
ands r0, r1
movs r5, #0
strh r0, [r4]
adds r0, r4, #0
adds r0, #0x27
movs r1, #8
strb r1, [r0]
adds r0, #1
strb r1, [r0]
adds r0, #1
movs r1, #0xc
strb r1, [r0]
ldr r0, lbl_08024f08 @ =0x0000fff4
strh r0, [r4, #0xa]
strh r1, [r4, #0xc]
subs r0, #0x14
strh r0, [r4, #0xe]
movs r3, #0x20
strh r3, [r4, #0x10]
strb r5, [r4, #0x1c]
strh r2, [r4, #0x16]
adds r1, r4, #0
adds r1, #0x25
movs r0, #0x12
strb r0, [r1]
ldr r2, lbl_08024f0c @ =0x082b0d68
ldrb r1, [r4, #0x1d]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
strh r0, [r4, #0x14]
ldrb r0, [r4, #0x1e]
cmp r0, #0x88
beq lbl_08024f3e
ldr r0, lbl_08024f10 @ =0x082da88c
str r0, [r4, #0x18]
adds r1, r4, #0
adds r1, #0x24
movs r0, #9
strb r0, [r1]
ldr r0, lbl_08024f14 @ =gSpriteRNG
ldrb r1, [r0]
lsls r0, r1, #2
adds r2, r4, #0
adds r2, #0x2f
strb r0, [r2]
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_08024f18
adds r1, r4, #0
adds r1, #0x2e
movs r0, #0x14
b lbl_08024f1e
.align 2, 0
lbl_08024f04: .4byte 0x0000fffb
lbl_08024f08: .4byte 0x0000fff4
lbl_08024f0c: .4byte 0x082b0d68
lbl_08024f10: .4byte 0x082da88c
lbl_08024f14: .4byte gSpriteRNG
lbl_08024f18:
adds r1, r4, #0
adds r1, #0x2e
movs r0, #0x3c
lbl_08024f1e:
strb r0, [r1]
ldrh r1, [r4, #4]
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_08024f34
adds r1, r4, #0
adds r1, #0x22
movs r0, #3
strb r0, [r1]
b lbl_08024fc0
lbl_08024f34:
adds r1, r4, #0
adds r1, #0x22
movs r0, #6
strb r0, [r1]
b lbl_08024fc0
lbl_08024f3e:
ldr r0, lbl_08024f9c @ =0x082da8bc
str r0, [r4, #0x18]
ldr r0, lbl_08024fa0 @ =gIoRegistersBackup
ldrb r2, [r0, #0xc]
movs r1, #3
adds r0, r1, #0
ands r0, r2
adds r2, r4, #0
adds r2, #0x21
strb r0, [r2]
adds r0, r4, #0
adds r0, #0x22
strb r1, [r0]
adds r0, #0xb
strb r5, [r0]
adds r0, #1
movs r2, #1
strb r2, [r0]
subs r0, #2
strb r5, [r0]
adds r0, #3
strb r2, [r0]
ldr r0, lbl_08024fa4 @ =gSpriteRNG
ldrb r0, [r0]
ands r1, r0
strh r1, [r4, #8]
adds r1, r4, #0
adds r1, #0x24
movs r0, #0x23
strb r0, [r1]
strh r3, [r4, #0x12]
bl SpriteUtilMakeSpriteFaceSamusDirection
ldrh r2, [r4, #2]
ldr r1, lbl_08024fa8 @ =gSamusData
ldr r0, lbl_08024fac @ =gSamusPhysics
adds r0, #0x70
movs r3, #0
ldrsh r0, [r0, r3]
ldrh r1, [r1, #0x14]
adds r0, r0, r1
cmp r2, r0
ble lbl_08024fb4
ldrh r1, [r4]
ldr r0, lbl_08024fb0 @ =0x0000fbff
ands r0, r1
b lbl_08024fbe
.align 2, 0
lbl_08024f9c: .4byte 0x082da8bc
lbl_08024fa0: .4byte gIoRegistersBackup
lbl_08024fa4: .4byte gSpriteRNG
lbl_08024fa8: .4byte gSamusData
lbl_08024fac: .4byte gSamusPhysics
lbl_08024fb0: .4byte 0x0000fbff
lbl_08024fb4:
ldrh r0, [r4]
movs r2, #0x80
lsls r2, r2, #3
adds r1, r2, #0
orrs r0, r1
lbl_08024fbe:
strh r0, [r4]
lbl_08024fc0:
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
thumb_func_start MellowIdle
MellowIdle: @ 0x08024fc8
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
adds r3, r4, #0
adds r3, #0x2f
ldrb r2, [r3]
ldr r5, lbl_08025030 @ =0x082d88e4
lsls r0, r2, #1
adds r0, r0, r5
movs r6, #0
ldrsh r1, [r0, r6]
ldr r6, lbl_08025034 @ =0x00007fff
cmp r1, r6
bne lbl_08024fe8
movs r7, #0
ldrsh r1, [r5, r7]
movs r2, #0
lbl_08024fe8:
adds r0, r2, #1
strb r0, [r3]
ldrh r0, [r4, #2]
adds r0, r0, r1
strh r0, [r4, #2]
adds r3, r4, #0
adds r3, #0x2e
ldrb r2, [r3]
ldr r5, lbl_08025038 @ =0x082d8966
lsls r0, r2, #1
adds r0, r0, r5
movs r7, #0
ldrsh r1, [r0, r7]
cmp r1, r6
bne lbl_0802500c
movs r0, #0
ldrsh r1, [r5, r0]
movs r2, #0
lbl_0802500c:
adds r0, r2, #1
strb r0, [r3]
ldrh r0, [r4, #4]
adds r0, r0, r1
strh r0, [r4, #4]
ldrb r0, [r3]
cmp r0, #1
beq lbl_08025020
cmp r0, #0x29
bne lbl_08025040
lbl_08025020:
adds r1, r4, #0
adds r1, #0x22
ldrb r0, [r1]
cmp r0, #3
bne lbl_0802503c
movs r0, #6
b lbl_0802503e
.align 2, 0
lbl_08025030: .4byte 0x082d88e4
lbl_08025034: .4byte 0x00007fff
lbl_08025038: .4byte 0x082d8966
lbl_0802503c:
movs r0, #3
lbl_0802503e:
strb r0, [r1]
lbl_08025040:
movs r0, #0xa0
lsls r0, r0, #1
movs r1, #0x88
lsls r1, r1, #1
bl SpriteUtilCheckSamusNearSpriteLeftRight
cmp r0, #0
beq lbl_08025078
adds r1, r4, #0
adds r1, #0x24
movs r2, #0
movs r0, #0x22
strb r0, [r1]
ldr r0, lbl_08025080 @ =0x082da8bc
str r0, [r4, #0x18]
strb r2, [r4, #0x1c]
strh r2, [r4, #0x16]
ldr r0, lbl_08025084 @ =gIoRegistersBackup
ldrb r1, [r0, #0xc]
movs r2, #3
adds r0, r2, #0
ands r0, r1
adds r1, r4, #0
adds r1, #0x21
strb r0, [r1]
adds r0, r4, #0
adds r0, #0x22
strb r2, [r0]
lbl_08025078:
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
lbl_08025080: .4byte 0x082da8bc
lbl_08025084: .4byte gIoRegistersBackup
thumb_func_start MellowFleeing
MellowFleeing: @ 0x08025088
push {lr}
adds r1, r0, #0
ldr r0, lbl_080250a8 @ =gSpriteRNG
ldrb r0, [r0]
lsrs r3, r0, #2
adds r2, r3, #0
adds r2, #8
adds r0, r1, #0
adds r0, #0x2e
ldrb r0, [r0]
cmp r0, #0x27
bhi lbl_080250ac
ldrh r0, [r1, #4]
adds r0, r0, r2
b lbl_080250b0
.align 2, 0
lbl_080250a8: .4byte gSpriteRNG
lbl_080250ac:
ldrh r0, [r1, #4]
subs r0, r0, r2
lbl_080250b0:
strh r0, [r1, #4]
adds r2, r3, #4
adds r0, r1, #0
adds r0, #0x2f
ldrb r0, [r0]
cmp r0, #0x1f
bhi lbl_080250c4
ldrh r0, [r1, #2]
adds r0, r0, r2
b lbl_080250c8
lbl_080250c4:
ldrh r0, [r1, #2]
subs r0, r0, r2
lbl_080250c8:
strh r0, [r1, #2]
pop {r0}
bx r0
.align 2, 0
thumb_func_start MellowSamusDetectedInit
MellowSamusDetectedInit: @ 0x080250d0
push {r4, lr}
adds r4, r0, #0
adds r0, #0x2d
movs r1, #0
strb r1, [r0]
adds r0, #1
movs r2, #1
strb r2, [r0]
subs r0, #2
strb r1, [r0]
adds r0, #3
strb r2, [r0]
strh r1, [r4, #8]
adds r1, r4, #0
adds r1, #0x24
movs r0, #0x23
strb r0, [r1]
movs r0, #0x20
strh r0, [r4, #0x12]
bl SpriteUtilMakeSpriteFaceSamusDirection
ldrh r2, [r4, #2]
ldr r1, lbl_08025118 @ =gSamusData
ldr r0, lbl_0802511c @ =gSamusPhysics
adds r0, #0x70
movs r3, #0
ldrsh r0, [r0, r3]
ldrh r1, [r1, #0x14]
adds r0, r0, r1
cmp r2, r0
ble lbl_08025124
ldrh r1, [r4]
ldr r0, lbl_08025120 @ =0x0000fbff
ands r0, r1
b lbl_0802512e
.align 2, 0
lbl_08025118: .4byte gSamusData
lbl_0802511c: .4byte gSamusPhysics
lbl_08025120: .4byte 0x0000fbff
lbl_08025124:
ldrh r0, [r4]
movs r2, #0x80
lsls r2, r2, #3
adds r1, r2, #0
orrs r0, r1
lbl_0802512e:
strh r0, [r4]
pop {r4}
pop {r0}
bx r0
.align 2, 0
thumb_func_start MellowMove
MellowMove: @ 0x08025138
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
mov ip, r0
movs r0, #0
str r0, [sp]
movs r5, #0x18
mov r2, ip
ldrh r1, [r2, #2]
adds r0, r1, #0
subs r0, #0x18
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
str r0, [sp, #4]
adds r1, #0x18
lsls r1, r1, #0x10
lsrs r1, r1, #0x10
mov sl, r1
ldrh r1, [r2, #4]
adds r0, r1, #0
subs r0, #0x18
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r8, r0
adds r1, #0x18
lsls r1, r1, #0x10
lsrs r7, r1, #0x10
mov r0, ip
adds r0, #0x23
ldrb r0, [r0]
adds r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r0, #3
subs r1, r1, r0
lsls r1, r1, #3
ldr r0, lbl_080251dc @ =gSpriteData
adds r2, r1, r0
movs r1, #0xa8
lsls r1, r1, #3
adds r0, r0, r1
ldr r1, lbl_080251e0 @ =gSamusData
mov sb, r1
cmp r2, r0
bhs lbl_08025202
adds r3, r2, #0
adds r3, #0x25
lbl_0802519c:
ldrh r1, [r2]
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_080251f8
ldrb r0, [r3]
cmp r0, #0x12
bne lbl_080251f8
ldrh r6, [r2, #2]
ldrh r4, [r2, #4]
subs r0, r6, r5
cmp sl, r0
ble lbl_080251f8
adds r0, r6, r5
ldr r1, [sp, #4]
cmp r1, r0
bge lbl_080251f8
subs r0, r4, r5
cmp r7, r0
ble lbl_080251f8
adds r0, r4, r5
cmp r8, r0
bge lbl_080251f8
ldrb r0, [r3, #0xb]
cmp r0, #0
bne lbl_08025202
mov r1, ip
ldrh r0, [r1, #2]
cmp r0, r6
bls lbl_080251e4
subs r0, r6, #4
b lbl_080251e6
.align 2, 0
lbl_080251dc: .4byte gSpriteData
lbl_080251e0: .4byte gSamusData
lbl_080251e4:
adds r0, r6, #4
lbl_080251e6:
strh r0, [r2, #2]
mov r1, ip
ldrh r0, [r1, #4]
cmp r0, r4
bhi lbl_08025240
ldrh r0, [r2, #4]
adds r0, #4
strh r0, [r2, #4]
b lbl_08025202
lbl_080251f8:
adds r3, #0x38
adds r2, #0x38
ldr r0, lbl_08025238 @ =gSpritesetSpritesID
cmp r2, r0
blo lbl_0802519c
lbl_08025202:
mov r2, ip
ldrb r0, [r2, #0x1e]
cmp r0, #0x88
bne lbl_08025298
movs r7, #0x14
ldr r1, lbl_0802523c @ =gSpriteRNG
ldrb r0, [r1]
adds r0, #0x1e
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
ldrb r1, [r1]
lsls r1, r1, #2
adds r1, #0xdc
mov r2, sb
ldrh r0, [r2, #0x14]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
ldrh r4, [r2, #0x12]
mov r1, ip
ldrh r0, [r1, #8]
cmp r0, #1
beq lbl_08025248
cmp r0, #3
beq lbl_08025270
b lbl_08025304
.align 2, 0
lbl_08025238: .4byte gSpritesetSpritesID
lbl_0802523c: .4byte gSpriteRNG
lbl_08025240:
ldrh r0, [r2, #4]
subs r0, #4
strh r0, [r2, #4]
b lbl_08025202
lbl_08025248:
adds r0, r6, #0
subs r0, #0x80
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
mov r2, ip
ldrh r1, [r2]
movs r0, #0x80
lsls r0, r0, #2
ands r0, r1
cmp r0, #0
beq lbl_08025266
movs r1, #0x80
lsls r1, r1, #1
adds r0, r4, r1
b lbl_08025300
lbl_08025266:
ldr r2, lbl_0802526c @ =0xffffff00
adds r0, r4, r2
b lbl_08025300
.align 2, 0
lbl_0802526c: .4byte 0xffffff00
lbl_08025270:
adds r0, r6, #0
adds r0, #0x20
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
mov r0, ip
ldrh r1, [r0]
movs r0, #0x80
lsls r0, r0, #2
ands r0, r1
cmp r0, #0
beq lbl_08025290
ldr r1, lbl_0802528c @ =0xffffff00
adds r0, r4, r1
b lbl_08025300
.align 2, 0
lbl_0802528c: .4byte 0xffffff00
lbl_08025290:
movs r2, #0x80
lsls r2, r2, #1
adds r0, r4, r2
b lbl_08025300
lbl_08025298:
ldr r0, lbl_080252c0 @ =gSamusPhysics
adds r0, #0x70
ldrh r0, [r0]
mov r1, sb
ldrh r1, [r1, #0x14]
adds r0, r0, r1
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
mov r2, sb
ldrh r4, [r2, #0x12]
movs r7, #0x1e
movs r5, #0x28
mov r1, ip
ldrh r0, [r1, #8]
cmp r0, #1
beq lbl_080252c4
cmp r0, #3
beq lbl_080252e0
b lbl_08025304
.align 2, 0
lbl_080252c0: .4byte gSamusPhysics
lbl_080252c4:
adds r0, r6, #0
subs r0, #0x20
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
mov r2, ip
ldrh r1, [r2]
movs r0, #0x80
lsls r0, r0, #2
ands r0, r1
cmp r0, #0
bne lbl_080252fc
adds r0, r4, #0
subs r0, #0x30
b lbl_08025300
lbl_080252e0:
adds r0, r6, #0
adds r0, #0x20
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
mov r0, ip
ldrh r1, [r0]
movs r0, #0x80
lsls r0, r0, #2
ands r0, r1
cmp r0, #0
beq lbl_080252fc
adds r0, r4, #0
subs r0, #0x30
b lbl_08025300
lbl_080252fc:
adds r0, r4, #0
adds r0, #0x30
lbl_08025300:
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
lbl_08025304:
mov r2, ip
ldrh r1, [r2]
movs r0, #0x80
lsls r0, r0, #2
ands r0, r1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, #0
beq lbl_08025354
adds r2, #0x2d
ldrb r0, [r2]
cmp r0, #0
bne lbl_0802533c
mov r0, ip
ldrh r1, [r0, #4]
subs r0, r4, #4
cmp r1, r0
bgt lbl_08025368
mov r1, ip
adds r1, #0x2e
ldrb r0, [r1]
cmp r0, r5
bhs lbl_08025336
adds r0, #1
strb r0, [r1]
lbl_08025336:
ldrb r0, [r1]
lsrs r0, r0, #2
b lbl_08025348
lbl_0802533c:
subs r1, r0, #1
strb r1, [r2]
lsls r0, r1, #0x18
cmp r0, #0
beq lbl_080253ca
lsrs r0, r0, #0x1a
lbl_08025348:
mov r1, ip
ldrh r1, [r1, #4]
adds r0, r0, r1
mov r2, ip
strh r0, [r2, #4]
b lbl_080253d4
lbl_08025354:
mov r2, ip
adds r2, #0x2d
ldrb r0, [r2]
cmp r0, #0
bne lbl_08025396
mov r0, ip
ldrh r1, [r0, #4]
adds r0, r4, #4
cmp r1, r0
bge lbl_08025372
lbl_08025368:
mov r0, ip
adds r0, #0x2e
ldrb r0, [r0]
strb r0, [r2]
b lbl_080253d4
lbl_08025372:
mov r1, ip
adds r1, #0x2e
ldrb r0, [r1]
cmp r0, r5
bhs lbl_08025380
adds r0, #1
strb r0, [r1]
lbl_08025380:
ldrb r0, [r1]
lsrs r5, r0, #2
mov r1, ip
ldrh r0, [r1, #4]
subs r1, r0, r5
movs r0, #0x80
lsls r0, r0, #8
ands r0, r1
cmp r0, #0
bne lbl_080253b2
b lbl_080253c4
lbl_08025396:
subs r1, r0, #1
strb r1, [r2]
lsls r0, r1, #0x18
cmp r0, #0
beq lbl_080253ca
lsrs r5, r0, #0x1a
mov r1, ip
ldrh r0, [r1, #4]
subs r1, r0, r5
movs r0, #0x80
lsls r0, r0, #8
ands r0, r1
cmp r0, #0
beq lbl_080253c4
lbl_080253b2:
ldr r0, [sp]
adds r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp]
strb r3, [r2]
mov r2, ip
strh r3, [r2, #4]
b lbl_080253d4
lbl_080253c4:
mov r0, ip
strh r1, [r0, #4]
b lbl_080253d4
lbl_080253ca:
ldr r0, [sp]
adds r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp]
lbl_080253d4:
ldr r1, [sp]
cmp r1, #0
beq lbl_08025404
mov r2, ip
ldrh r0, [r2]
movs r2, #0x80
lsls r2, r2, #2
adds r1, r2, #0
eors r0, r1
mov r1, ip
strh r0, [r1]
adds r1, #0x2e
movs r0, #1
strb r0, [r1]
mov r2, ip
ldrh r0, [r2, #8]
adds r0, #1
strh r0, [r2, #8]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #3
bls lbl_08025404
movs r0, #0
strh r0, [r2, #8]
lbl_08025404:
movs r0, #0
str r0, [sp]
mov r2, ip
ldrh r1, [r2]
movs r0, #0x80
lsls r0, r0, #3
ands r0, r1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, #0
beq lbl_08025462
adds r2, #0x2c
ldrb r0, [r2]
cmp r0, #0
bne lbl_0802544a
mov r0, ip
ldrh r1, [r0, #2]
subs r0, r6, #4
cmp r1, r0
ble lbl_08025436
mov r0, ip
adds r0, #0x2f
ldrb r0, [r0]
strb r0, [r2]
b lbl_080254e2
lbl_08025436:
mov r1, ip
adds r1, #0x2f
ldrb r0, [r1]
cmp r0, r7
bhs lbl_08025444
adds r0, #1
strb r0, [r1]
lbl_08025444:
ldrb r0, [r1]
lsrs r0, r0, #2
b lbl_08025456
lbl_0802544a:
subs r1, r0, #1
strb r1, [r2]
lsls r0, r1, #0x18
cmp r0, #0
beq lbl_080254e8
lsrs r0, r0, #0x1a
lbl_08025456:
mov r1, ip
ldrh r1, [r1, #2]
adds r0, r0, r1
mov r2, ip
strh r0, [r2, #2]
b lbl_080254e2
lbl_08025462:
mov r4, ip
adds r4, #0x2c
ldrb r0, [r4]
adds r2, r0, #0
cmp r2, #0
bne lbl_080254b0
mov r0, ip
ldrh r1, [r0, #2]
adds r0, r6, #4
cmp r1, r0
bge lbl_08025482
mov r0, ip
adds r0, #0x2f
ldrb r0, [r0]
strb r0, [r4]
b lbl_080254e2
lbl_08025482:
mov r1, ip
adds r1, #0x2f
ldrb r0, [r1]
cmp r0, r7
bhs lbl_08025490
adds r0, #1
strb r0, [r1]
lbl_08025490:
ldrb r0, [r1]
lsrs r5, r0, #2
mov r1, ip
ldrh r0, [r1, #2]
subs r1, r0, r5
movs r0, #0x80
lsls r0, r0, #8
ands r0, r1
cmp r0, #0
beq lbl_080254d8
movs r0, #1
str r0, [sp]
strb r2, [r4]
mov r1, ip
strh r2, [r1, #2]
b lbl_080254e2
lbl_080254b0:
subs r1, r0, #1
strb r1, [r4]
lsls r0, r1, #0x18
cmp r0, #0
beq lbl_080254de
lsrs r5, r0, #0x1a
mov r1, ip
ldrh r0, [r1, #2]
subs r1, r0, r5
movs r0, #0x80
lsls r0, r0, #8
ands r0, r1
cmp r0, #0
beq lbl_080254d8
movs r2, #1
str r2, [sp]
strb r3, [r4]
mov r0, ip
strh r3, [r0, #2]
b lbl_080254e2
lbl_080254d8:
mov r2, ip
strh r1, [r2, #2]
b lbl_080254e2
lbl_080254de:
movs r0, #1
str r0, [sp]
lbl_080254e2:
ldr r1, [sp]
cmp r1, #0
beq lbl_080254fe
lbl_080254e8:
mov r2, ip
ldrh r0, [r2]
movs r2, #0x80
lsls r2, r2, #3
adds r1, r2, #0
eors r0, r1
mov r1, ip
strh r0, [r1]
adds r1, #0x2f
movs r0, #1
strb r0, [r1]
lbl_080254fe:
mov r2, ip
ldrh r0, [r2, #0x12]
subs r0, #1
strh r0, [r2, #0x12]
lsls r0, r0, #0x10
cmp r0, #0
bne lbl_08025522
movs r0, #0x20
strh r0, [r2, #0x12]
ldrh r1, [r2]
movs r0, #2
ands r0, r1
cmp r0, #0
beq lbl_08025522
movs r0, #0xaf
lsls r0, r0, #1
bl SoundPlayNotAlreadyPlaying
lbl_08025522:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_start Hive
Hive: @ 0x08025534
push {r4, r5, lr}
ldr r4, lbl_0802555c @ =gCurrentSprite
adds r5, r4, #0
adds r5, #0x30
ldrb r0, [r5]
cmp r0, #0
beq lbl_08025560
bl SpriteUtilUpdateFreezeTimer
adds r0, r4, #0
adds r0, #0x23
ldrb r1, [r0]
movs r0, #0x11
bl SpriteUtilUpdateSecondarySpriteFreezeTimerOfCurrent
ldrb r1, [r5]
adds r0, r4, #0
adds r0, #0x2c
strb r1, [r0]
b lbl_080255b2
.align 2, 0
lbl_0802555c: .4byte gCurrentSprite
lbl_08025560:
bl SpriteUtilIsSpriteStunned
cmp r0, #0
bne lbl_080255b2
adds r0, r4, #0
adds r0, #0x24
ldrb r0, [r0]
cmp r0, #0x25
beq lbl_080255a2
cmp r0, #0x25
bgt lbl_0802558a
cmp r0, #9
beq lbl_08025596
cmp r0, #9
bgt lbl_08025584
cmp r0, #0
beq lbl_08025590
b lbl_080255ae
lbl_08025584:
cmp r0, #0x23
beq lbl_0802559c
b lbl_080255ae
lbl_0802558a:
cmp r0, #0x67
beq lbl_080255a8
b lbl_080255ae
lbl_08025590:
bl HiveInit
b lbl_080255b2
lbl_08025596:
bl HivePhase1
b lbl_080255b2
lbl_0802559c:
bl HivePhase2
b lbl_080255b2
lbl_080255a2:
bl HivePhase3
b lbl_080255b2
lbl_080255a8:
bl HiveIgnoreSamusCollision
b lbl_080255b2
lbl_080255ae:
bl HiveDying
lbl_080255b2:
pop {r4, r5}
pop {r0}
bx r0
thumb_func_start HiveRoots
HiveRoots: @ 0x080255b8
push {r4, r5, r6, lr}
ldr r2, lbl_08025614 @ =gCurrentSprite
adds r0, r2, #0
adds r0, #0x23
ldrb r4, [r0]
adds r1, r2, #0
adds r1, #0x26
movs r5, #0
movs r0, #1
strb r0, [r1]
ldr r1, lbl_08025618 @ =gSpriteData
lsls r0, r4, #3
subs r0, r0, r4
lsls r0, r0, #3
adds r3, r0, r1
ldrb r0, [r3, #0x1d]
mov ip, r2
adds r6, r1, #0
cmp r0, #0x4b
bne lbl_08025620
adds r0, r3, #0
adds r0, #0x20
ldrb r1, [r0]
mov r0, ip
adds r0, #0x20
strb r1, [r0]
ldr r2, lbl_0802561c @ =0x082b0d68
ldrb r1, [r3, #0x1d]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldrh r1, [r3, #0x14]
lsrs r0, r0, #1
cmp r1, r0
bhs lbl_08025626
adds r0, r3, #0
adds r0, #0x30
ldrb r0, [r0]
cmp r0, #0
bne lbl_08025626
mov r0, ip
strh r5, [r0]
b lbl_0802565c
.align 2, 0
lbl_08025614: .4byte gCurrentSprite
lbl_08025618: .4byte gSpriteData
lbl_0802561c: .4byte 0x082b0d68
lbl_08025620:
mov r1, ip
strh r5, [r1]
b lbl_0802565c
lbl_08025626:
lsls r0, r4, #3
subs r0, r0, r4
lsls r0, r0, #3
adds r0, r0, r6
ldrh r0, [r0]
cmp r0, #0
bne lbl_0802563a
mov r1, ip
strh r0, [r1]
b lbl_0802565c
lbl_0802563a:
mov r0, ip
adds r0, #0x30
ldrb r0, [r0]
cmp r0, #0
beq lbl_0802564a
bl SpriteUtilUpdateFreezeTimer
b lbl_0802565c
lbl_0802564a:
mov r0, ip
adds r0, #0x24
ldrb r0, [r0]
cmp r0, #0
bne lbl_08025658
bl HiveRootsInit
lbl_08025658:
bl HiveRootsMove
lbl_0802565c:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
thumb_func_start Mellow
Mellow: @ 0x08025664
push {r4, lr}
sub sp, #4
ldr r4, lbl_080256a0 @ =gCurrentSprite
adds r2, r4, #0
adds r2, #0x32
ldrb r1, [r2]
movs r3, #2
adds r0, r3, #0
ands r0, r1
cmp r0, #0
beq lbl_08025690
movs r0, #0xfd
ands r0, r1
strb r0, [r2]
ldrh r1, [r4]
adds r0, r3, #0
ands r0, r1
cmp r0, #0
beq lbl_08025690
ldr r0, lbl_080256a4 @ =0x0000015f
bl SoundPlayNotAlreadyPlaying
lbl_08025690:
adds r0, r4, #0
adds r0, #0x30
ldrb r0, [r0]
cmp r0, #0
beq lbl_080256a8
bl SpriteUtilUpdateFreezeTimer
b lbl_080257ae
.align 2, 0
lbl_080256a0: .4byte gCurrentSprite
lbl_080256a4: .4byte 0x0000015f
lbl_080256a8:
adds r0, r4, #0
adds r0, #0x2b
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
adds r1, r4, #0
adds r1, #0x24
cmp r0, #9
bls lbl_080256cc
ldrb r0, [r1]
cmp r0, #0x61
bhi lbl_080256cc
ldrb r0, [r4, #0x1c]
cmp r0, #0
beq lbl_080257ae
subs r0, #1
strb r0, [r4, #0x1c]
b lbl_080257ae
lbl_080256cc:
ldrb r0, [r1]
cmp r0, #0x25
bhi lbl_0802579e
lsls r0, r0, #2
ldr r1, lbl_080256dc @ =lbl_080256e0
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
lbl_080256dc: .4byte lbl_080256e0
lbl_080256e0: @ jump table
.4byte lbl_08025778 @ case 0
.4byte lbl_0802579e @ case 1
.4byte lbl_0802579e @ case 2
.4byte lbl_0802579e @ case 3
.4byte lbl_0802579e @ case 4
.4byte lbl_0802579e @ case 5
.4byte lbl_0802579e @ case 6
.4byte lbl_0802579e @ case 7
.4byte lbl_0802579e @ case 8
.4byte lbl_08025780 @ case 9
.4byte lbl_0802579e @ case 10
.4byte lbl_0802579e @ case 11
.4byte lbl_0802579e @ case 12
.4byte lbl_0802579e @ case 13
.4byte lbl_0802579e @ case 14
.4byte lbl_0802579e @ case 15
.4byte lbl_0802579e @ case 16
.4byte lbl_0802579e @ case 17
.4byte lbl_0802579e @ case 18
.4byte lbl_0802579e @ case 19
.4byte lbl_0802579e @ case 20
.4byte lbl_0802579e @ case 21
.4byte lbl_0802579e @ case 22
.4byte lbl_0802579e @ case 23
.4byte lbl_0802579e @ case 24
.4byte lbl_0802579e @ case 25
.4byte lbl_0802579e @ case 26
.4byte lbl_0802579e @ case 27
.4byte lbl_0802579e @ case 28
.4byte lbl_0802579e @ case 29
.4byte lbl_0802579e @ case 30
.4byte lbl_0802579e @ case 31
.4byte lbl_0802579e @ case 32
.4byte lbl_0802579e @ case 33
.4byte lbl_08025788 @ case 34
.4byte lbl_0802578e @ case 35
.4byte lbl_0802579e @ case 36
.4byte lbl_08025796 @ case 37
lbl_08025778:
adds r0, r4, #0
bl MellowInit
b lbl_080257ae
lbl_08025780:
adds r0, r4, #0
bl MellowIdle
b lbl_080257ae
lbl_08025788:
adds r0, r4, #0
bl MellowSamusDetectedInit
lbl_0802578e:
adds r0, r4, #0
bl MellowMove
b lbl_080257ae
lbl_08025796:
adds r0, r4, #0
bl MellowFleeing
b lbl_080257ae
lbl_0802579e:
ldrh r1, [r4, #2]
ldrh r2, [r4, #4]
movs r0, #0x1f
str r0, [sp]
movs r0, #0
movs r3, #1
bl SpriteUtilSpriteDeath
lbl_080257ae:
add sp, #4
pop {r4}
pop {r0}
bx r0
.align 2, 0
thumb_func_start MellowSwarm
MellowSwarm: @ 0x080257b8
push {r4, r5, r6, r7, lr}
sub sp, #8
movs r6, #0
ldr r1, lbl_080257e4 @ =gCurrentSprite
adds r0, r1, #0
adds r0, #0x26
movs r5, #1
strb r5, [r0]
adds r7, r1, #0
adds r7, #0x24
ldrb r0, [r7]
adds r4, r1, #0
cmp r0, #0
bne lbl_080258b6
movs r0, #3
movs r1, #0x2c
bl EventFunction
cmp r0, #0
beq lbl_080257e8
strh r6, [r4]
b lbl_0802598c
.align 2, 0
lbl_080257e4: .4byte gCurrentSprite
lbl_080257e8:
ldrh r1, [r4]
ldr r2, lbl_08025858 @ =0x00008004
adds r0, r2, #0
movs r2, #0
orrs r0, r1
strh r0, [r4]
ldr r1, lbl_0802585c @ =0x0000fffc
strh r1, [r4, #0xa]
movs r0, #4
strh r0, [r4, #0xc]
strh r1, [r4, #0xe]
strh r0, [r4, #0x10]
adds r0, r4, #0
adds r0, #0x27
strb r5, [r0]
adds r0, #1
strb r5, [r0]
adds r0, #1
strb r5, [r0]
subs r0, #4
strb r2, [r0]
ldr r0, lbl_08025860 @ =0x082da88c
str r0, [r4, #0x18]
strh r6, [r4, #0x16]
strb r2, [r4, #0x1c]
movs r3, #9
strb r3, [r7]
ldr r0, lbl_08025864 @ =gSamusData
ldrh r1, [r0, #0x12]
lsrs r1, r1, #2
ldr r0, lbl_08025868 @ =gBG1XPosition
ldrh r0, [r0]
lsrs r0, r0, #2
subs r1, r1, r0
cmp r1, #0x78
ble lbl_08025838
ldrh r0, [r4]
movs r1, #0x40
orrs r0, r1
strh r0, [r4]
lbl_08025838:
movs r0, #0xf0
strh r0, [r4, #6]
ldrb r0, [r4, #0x1d]
cmp r0, #0x85
bne lbl_080258ac
ldr r0, lbl_0802586c @ =gEquipment
ldrh r1, [r0, #6]
ldr r0, lbl_08025870 @ =0x0000018f
cmp r1, r0
bls lbl_08025874
adds r1, r4, #0
adds r1, #0x2e
movs r0, #0xf
strb r0, [r1]
b lbl_0802598c
.align 2, 0
lbl_08025858: .4byte 0x00008004
lbl_0802585c: .4byte 0x0000fffc
lbl_08025860: .4byte 0x082da88c
lbl_08025864: .4byte gSamusData
lbl_08025868: .4byte gBG1XPosition
lbl_0802586c: .4byte gEquipment
lbl_08025870: .4byte 0x0000018f
lbl_08025874:
ldr r0, lbl_08025884 @ =0x0000012b
cmp r1, r0
bls lbl_08025888
adds r1, r4, #0
adds r1, #0x2e
movs r0, #0xc
strb r0, [r1]
b lbl_0802598c
.align 2, 0
lbl_08025884: .4byte 0x0000012b
lbl_08025888:
cmp r1, #0xc7
bls lbl_08025894
adds r0, r4, #0
adds r0, #0x2e
strb r3, [r0]
b lbl_0802598c
lbl_08025894:
cmp r1, #0x63
bls lbl_080258a2
adds r1, r4, #0
adds r1, #0x2e
movs r0, #6
strb r0, [r1]
b lbl_0802598c
lbl_080258a2:
adds r1, r4, #0
adds r1, #0x2e
movs r0, #3
strb r0, [r1]
b lbl_0802598c
lbl_080258ac:
adds r1, r4, #0
adds r1, #0x2e
movs r0, #5
strb r0, [r1]
b lbl_0802598c
lbl_080258b6:
ldrh r1, [r4]
movs r0, #0x80
lsls r0, r0, #3
ands r0, r1
cmp r0, #0
beq lbl_080258ce
ldrh r0, [r4, #6]
cmp r0, #0
beq lbl_080258ce
subs r0, #1
strh r0, [r4, #6]
b lbl_0802598c
lbl_080258ce:
movs r7, #0x12
ldr r2, lbl_08025920 @ =gSpriteData
movs r1, #0xa8
lsls r1, r1, #3
adds r0, r2, r1
cmp r2, r0
bhs lbl_08025900
movs r5, #1
adds r3, r0, #0
lbl_080258e0:
ldrh r1, [r2]
adds r0, r5, #0
ands r0, r1
cmp r0, #0
beq lbl_080258fa
adds r0, r2, #0
adds r0, #0x25
ldrb r0, [r0]
cmp r0, r7
bne lbl_080258fa
adds r0, r6, #1
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
lbl_080258fa:
adds r2, #0x38
cmp r2, r3
blo lbl_080258e0
lbl_08025900:
ldrh r1, [r4]
movs r2, #0x80
lsls r2, r2, #3
adds r0, r2, #0
ands r0, r1
cmp r0, #0
bne lbl_08025924
adds r0, r4, #0
adds r0, #0x2e
ldrb r0, [r0]
cmp r6, r0
blo lbl_0802592c
adds r0, r2, #0
orrs r0, r1
strh r0, [r4]
b lbl_0802598c
.align 2, 0
lbl_08025920: .4byte gSpriteData
lbl_08025924:
cmp r6, #0x13
bhi lbl_0802598c
movs r0, #0xf0
strh r0, [r4, #6]
lbl_0802592c:
ldrh r1, [r4]
movs r0, #0x40
ands r0, r1
cmp r0, #0
beq lbl_08025950
ldr r0, lbl_08025948 @ =gSamusData
ldr r2, lbl_0802594c @ =gSpriteRNG
ldrb r1, [r2]
lsls r1, r1, #5
ldrh r0, [r0, #0x12]
adds r1, r1, r0
lsls r1, r1, #0x10
lsrs r5, r1, #0x10
b lbl_08025960
.align 2, 0
lbl_08025948: .4byte gSamusData
lbl_0802594c: .4byte gSpriteRNG
lbl_08025950:
ldr r0, lbl_08025994 @ =gSamusData
ldr r2, lbl_08025998 @ =gSpriteRNG
ldrb r1, [r2]
lsls r1, r1, #5
ldrh r0, [r0, #0x12]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
lbl_08025960:
movs r0, #0x80
lsls r0, r0, #8
ands r0, r5
cmp r0, #0
beq lbl_0802596c
movs r5, #0
lbl_0802596c:
ldr r1, lbl_0802599c @ =gBG1YPosition
ldrb r0, [r2]
lsls r0, r0, #1
adds r0, #0x10
ldrh r3, [r1]
subs r3, r3, r0
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
ldrb r2, [r4, #0x1f]
str r5, [sp]
movs r0, #0
str r0, [sp, #4]
movs r0, #0x4a
movs r1, #0x88
bl SpriteSpawnPrimary
lbl_0802598c:
add sp, #8
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
lbl_08025994: .4byte gSamusData
lbl_08025998: .4byte gSpriteRNG
lbl_0802599c: .4byte gBG1YPosition