;;; Arachnus_SlashAttack ;;;
08023A20 (T) push r4,r5,r14
08023A22 (T) add sp,-0Ch
08023A24 (T) ldr r0,=EnemyOrientation ;\
08023A26 (T) mov r12,r0 ;|
08023A28 (T) ldrh r1,[r0] ;|
08023A2A (T) mov r5,40h ;|
08023A2C (T) mov r0,r5 ;|
08023A2E (T) and r0,r1 ;} If EnemyOrientation has 40h (facing right):
08023A30 (T) lsl r0,r0,10h ;|
08023A32 (T) lsr r4,r0,10h ;|
08023A34 (T) cmp r4,0h ;|
08023A36 (T) beq 8023A8Eh ;/
08023A38 (T) mov r2,r12 ;\
08023A3A (T) ldrh r1,[r2,16h] ;|
08023A3C (T) cmp r1,0Fh ;} If EnemyAnimation <= 0Fh:
08023A3E (T) bhi 8023A4Ch ;/
08023A40 (T) mov r0,0A0h ;\
08023A42 (T) strh r0,[r2,10h] ;} EnemyRightBoundryOffset = A0h
08023A44 (T) b 8023AF6h ; Branch to 8023AF6h
08023A46 dw 00000h
08023A48 dd 0030006BCh
08023A4C (T) cmp r1,11h ;\ Else (EnemyAnimation > 0Fh):
08023A4E (T) bhi 8023A58h ;} If EnemyAnimation <= 11h:
08023A50 (T) mov r0,60h ;\
08023A52 (T) mov r1,r12 ;} EnemyRightBoundryOffset = 60h
08023A54 (T) strh r0,[r1,10h] ;/
08023A56 (T) b 8023AF6h ; Branch to 8023AF6h
08023A58 (T) cmp r1,17h ;\ Else (EnemyAnimation > 11h):
08023A5A (T) bhi 8023A86h ;} If EnemyAnimation <= 17h:
08023A5C (T) mov r0,0C0h ;\
08023A5E (T) mov r2,r12 ;} EnemyRightBoundryOffset = 40h
08023A60 (T) strh r0,[r2,10h] ;/
08023A62 (T) cmp r1,12h ;\
08023A64 (T) bne 8023AF6h ;|
08023A66 (T) ldrb r0,[r2,1Ch] ;} If EnemyAnimation != 12h or EnemyAnimationCounter != 03h: Branch to 8023AF6h
08023A68 (T) cmp r0,3h ;|
08023A6A (T) bne 8023AF6h ;/
08023A6C (T) ldrb r2,[r2,1Fh] ; r2 parameter = EnemySpritesetGFXSlot
08023A6E (T) mov r0,r12 ;\
08023A70 (T) add r0,23h ;} r3 parameter = EnemySlot
08023A72 (T) ldrb r3,[r0] ;/
08023A74 (T) mov r1,r12 ;\
08023A76 (T) ldrh r0,[r1,2h] ;|
08023A78 (T) add r0,10h ;} sp0 parameter = EnemyYPosition + 10h
08023A7A (T) str r0,[sp] ;/
08023A7C (T) ldrh r0,[r1,4h] ;\
08023A7E (T) add r0,8Ch ;} sp4 parameter = EnemyXPosition + 8Ch
08023A80 (T) str r0,[sp,4h] ;/
08023A82 (T) str r5,[sp,8h] ; sp8 parameter = 40h
08023A84 (T) b 8023ADCh ; Branch to 8023ADCh
08023A86 (T) mov r0,80h ;\ Else (EnemyAnimation > 17h):
08023A88 (T) mov r2,r12 ;} EnemyRightBoundryOffset = 80h
08023A8A (T) strh r0,[r2,10h] ;/
08023A8C (T) b 8023AF6h ; Branch to 8023AF6
08023A8E (T) mov r0,r12 ;\ Else (EnemyOrientation hasn't 40h):
08023A90 (T) ldrh r1,[r0,16h] ;|
08023A92 (T) cmp r1,0Fh ;|
08023A94 (T) bhi 8023AA4h ;|
08023A96 (T) ldr r0,=0FF60h ;|
08023A98 (T) mov r1,r12 ;|
08023A9A (T) strh r0,[r1,0Eh] ;|
08023A9C (T) b 8023AF6h ;|
08023A9E dw 00000h ;|
08023AA0 dd 00000FF60h ;|
;|
08023AA4 (T) cmp r1,11h ;|
08023AA6 (T) bhi 8023AB0h ;|
08023AA8 (T) ldr r0,=0FFA0h ;|
08023AAA (T) b 8023AF2h ;|
08023AAC dd 00000FFA0h ;|
;|
08023AB0 (T) cmp r1,17h ;|
08023AB2 (T) bhi 8023AF0h ;|
08023AB4 (T) ldr r0,=0FF40h ;} Same as above; but with negative x values, for EnemyLeftBoundryOffset, and sp4 parameter
08023AB6 (T) mov r2,r12 ;|
08023AB8 (T) strh r0,[r2,0Eh] ;|
08023ABA (T) cmp r1,12h ;|
08023ABC (T) bne 8023AF6h ;|
08023ABE (T) ldrb r0,[r2,1Ch] ;|
08023AC0 (T) cmp r0,3h ;|
08023AC2 (T) bne 8023AF6h ;|
08023AC4 (T) ldrb r2,[r2,1Fh] ;|
08023AC6 (T) mov r0,r12 ;|
08023AC8 (T) add r0,23h ;|
08023ACA (T) ldrb r3,[r0] ;|
08023ACC (T) mov r1,r12 ;|
08023ACE (T) ldrh r0,[r1,2h] ;|
08023AD0 (T) add r0,10h ;|
08023AD2 (T) str r0,[sp] ;|
08023AD4 (T) ldrh r0,[r1,4h] ;|
08023AD6 (T) sub r0,8Ch ;|
08023AD8 (T) str r0,[sp,4h] ;|
08023ADA (T) str r4,[sp,8h] ;/
08023ADC (T) mov r0,16h ; r0 parameter = 16h (slash projectile)
08023ADE (T) mov r1,0h ; r1 parameter = 00h
08023AE0 (T) bl 800FAE0h ; Execute subroutine Enemy_SpawnNewEnemy
08023AE4 (T) mov r0,0B9h ; r0 parameter = B9h
08023AE6 (T) bl 800270Ch ; Execute subroutine 800270C (Sound effect?)
08023AEA (T) b 8023AF6h ; Branch to 8023AF6
08023AEC dd 00000FF40h
08023AF0 (T) ldr r0,=0FF80h ;\
;|
08023AF2 (T) mov r2,r12 ;} Continuation of 'Same as above'
08023AF4 (T) strh r0,[r2,0Eh] ;/
08023AF6 (T) bl 801196Ch ; Execute subroutine Enemy_CheckAnimationLoopNextFrame
08023AFA (T) cmp r0,0h ;\
08023AFC (T) beq 8023B0Eh ;} If not returned 0 (no more animation)
08023AFE (T) ldr r1,=EnemyOrientation ;\
08023B00 (T) mov r2,r1 ;|
08023B02 (T) add r2,24h ;} EnemyPose = 1 (thinking)
08023B04 (T) mov r0,1h ;|
08023B06 (T) strb r0,[r2] ;/
08023B08 (T) add r1,2Eh ;\
08023B0A (T) mov r0,78h ;} EnemyRespawnTimer = 78h
08023B0C (T) strb r0,[r1] ;/
08023B0E (T) add sp,0Ch
08023B10 (T) pop r4,r5
08023B12 (T) pop r0
08023B14 (T) bx r0
08023B16 dw 00000h
08023B18 dd 00000FF80h,0030006BCh