;;; Arachnus_Walking ;;;
08024404 (T) push r4-r6,r14
08024406 (T) mov r6,0h
08024408 (T) ldr r4,=EnemyOrientation ;\
0802440A (T) ldrh r1,[r4] ;|
0802440C (T) mov r0,40h ;|
0802440E (T) and r0,r1 ;} If EnemyOrientation has 40h (facing right):
08024410 (T) cmp r0,0h ;|
08024412 (T) beq 8024454h ;/
08024414 (T) ldrh r0,[r4,2h] ; r0 parameter = EnemyYPosition
08024416 (T) mov r2,10h ;\
08024418 (T) ldsh r1,[r4,r2] ;|
0802441A (T) ldrh r2,[r4,4h] ;} r1 parameter = EnemyXPosition + EnemyRightBoundryOffset
0802441C (T) add r1,r1,r2 ;/
0802441E (T) bl 8011390h ; Execute subroutine 8011390h (position related)
08024422 (T) ldr r5,=30007A5h ;\
08024424 (T) ldrb r1,[r5] ;|
08024426 (T) mov r0,0F0h ;|
08024428 (T) and r0,r1 ;} If [30007A5] has F0h:
0802442A (T) cmp r0,0h ;|
0802442C (T) beq 802448Eh ;/
0802442E (T) ldrh r0,[r4,2h] ;\
08024430 (T) sub r0,48h ;} r0 parameter = EnemyYPosition - 48h
08024432 (T) mov r2,10h ;\
08024434 (T) ldsh r1,[r4,r2] ;|
08024436 (T) ldrh r4,[r4,4h] ;} r1 parameter = EnemyXPosition + EnemyRightBoundryOffset
08024438 (T) add r1,r1,r4 ;/
0802443A (T) bl 8011390h ; Execute subroutine 8011390h (position related)
0802443E (T) ldrb r1,[r5] ;\
08024440 (T) mov r0,0Fh ;|
08024442 (T) and r0,r1 ;} If [30007A5] hasn't 0Fh, branch to 80244A0h
08024444 (T) cmp r0,0h ;|
08024446 (T) beq 802448Ah ;/
08024448 (T) b 802448Eh
0802444A dw 00000h
0802444C dd 0030006BCh,0030007A5h
; Else (EnemyOrientation hasn't 40h):
08024454 (T) ldrh r0,[r4,2h] ; r0 parameter = EnemyYPosition
08024456 (T) mov r2,0Eh ;\
08024458 (T) ldsh r1,[r4,r2] ;|
0802445A (T) ldrh r2,[r4,4h] ;} r1 parameter = EnemyXPosition + EnemyLeftBoundryOffset
0802445C (T) add r1,r1,r2 ;/
0802445E (T) bl 8011390h ; Execute subroutine 8011390h (position related)
08024462 (T) ldr r5,=30007A5h ;\
08024464 (T) ldrb r1,[r5] ;|
08024466 (T) mov r0,0F0h ;|
08024468 (T) and r0,r1 ;} If [30007A5] has F0h:
0802446A (T) cmp r0,0h ;|
0802446C (T) beq 802448Eh ;/
0802446E (T) ldrh r0,[r4,2h] ;\
08024470 (T) sub r0,48h ;} r0 parameter = EnemyYPosition - 48h
08024472 (T) mov r2,0Eh ;\
08024474 (T) ldsh r1,[r4,r2] ;|
08024476 (T) ldrh r4,[r4,4h] ;} r1 parameter = EnemyXPosition + EnemyLeftBoundryOffset
08024478 (T) add r1,r1,r4 ;/
0802447A (T) bl 8011390h ; Execute subroutine 8011390h (position related)
0802447E (T) ldrb r1,[r5] ;\
08024480 (T) mov r0,0Fh ;|
08024482 (T) and r0,r1 ;|
08024484 (T) cmp r0,0h ;|
08024486 (T) beq 802448Ah ;} If [30007A5] has 0Fh:
08024488 (T) mov r6,1h ;|
0802448A (T) cmp r6,0h ;|
0802448C (T) beq 80244A0h ;/
0802448E (T) ldr r0,=EnemyOrientation ;\
08024490 (T) add r0,24h ;|
08024492 (T) mov r1,7h ;} EnemyPose = 7 (standing intialisation)
08024494 (T) strb r1,[r0] ;/
08024496 (T) b 8024528h ; Branch to 8024528h (just before return)
08024498 dd 0030007A5h,0030006BCh
080244A0 (T) ldr r1,=EnemyOrientation ;\ Else ([30007A5] hasn't 0Fh):
080244A2 (T) ldrh r0,[r1,16h] ;|
080244A4 (T) cmp r0,1h ;|
080244A6 (T) beq 80244D6h ;|
080244A8 (T) cmp r0,1h ;|
080244AA (T) bgt 80244B8h ;|
080244AC (T) cmp r0,0h ;|
080244AE (T) beq 80244C2h ;|
080244B0 (T) b 80244DAh ;} Branch to code that handles the current EnemyAnimation
080244B2 dw 00000h ;|
080244B4 dd 0030006BCh ;|
;|
080244B8 (T) cmp r0,2h ;|
080244BA (T) beq 80244D2h ;|
080244BC (T) cmp r0,3h ;|
080244BE (T) beq 80244D6h ;|
080244C0 (T) b 80244DAh ;/
; EnemyAnimation = 0
080244C2 (T) mov r4,1h ; r4 = 1 (EnemyXSpeed)
080244C4 (T) ldrb r0,[r1,1Ch] ;\
080244C6 (T) cmp r0,9h ;} If EnemyAnimationCounter = 9:
080244C8 (T) bne 80244DCh ;/
080244CA (T) mov r0,0B8h ; r0 parameter = B8h
080244CC (T) bl 800270Ch ; Execute subroutine 800270Ch (Sound effect?)
080244D0 (T) b 80244DCh ; Branch to 80244DCh
; EnemyAnimation = 2
080244D2 (T) mov r4,3h ; r4 = 3 (EnemyXSpeed)
080244D4 (T) b 80244DCh ; Branch to 80244DCh
; EnemyAnimation = 1 or 3
080244D6 (T) mov r4,2h ; r4 = 2 (EnemyXSpeed)
080244D8 (T) b 80244DCh ; Branch to 80244DCh
; EnemyAnimation > 3
080244DA (T) mov r4,0h ; r4 = 0 (EnemyXSpeed)
080244DC (T) ldr r3,=EnemyOrientation ;\
080244DE (T) ldrh r1,[r3] ;|
080244E0 (T) mov r0,40h ;|
080244E2 (T) and r0,r1 ;} If EnemyOrientation has 40h:
080244E4 (T) cmp r0,0h ;|
080244E6 (T) beq 802450Ch ;/
080244E8 (T) ldrh r0,[r3,4h] ;\
080244EA (T) add r0,r4,r0 ;} EnemyXPosition += r4 (EnemyXSpeed)
080244EC (T) strh r0,[r3,4h] ;/
080244EE (T) ldr r2,=EnemySlot0 ;\
080244F0 (T) mov r0,r3 ;|
080244F2 (T) add r0,2Fh ;|
080244F4 (T) ldrb r1,[r0] ;|
080244F6 (T) lsl r0,r1,3h ;|
080244F8 (T) sub r0,r0,r1 ;} Enemy[EnemyAttachedEnemySlot]XPosition += r4 (EnemyXSpeed)
080244FA (T) lsl r0,r0,3h ;|
080244FC (T) add r0,r0,r2 ;|
080244FE (T) ldrh r1,[r0,4h] ;|
08024500 (T) add r1,r4,r1 ;|
08024502 (T) b 8024526h ;/
08024504 dd 0030006BCh,003000140h
0802450C (T) ldrh r0,[r3,4h] ;\ Else (EnemyOrientation hasn't 40h):
0802450E (T) sub r0,r0,r4 ;} EnemyXPosition -= r4 (EnemyXSpeed)
08024510 (T) strh r0,[r3,4h] ;/
08024512 (T) ldr r2,=EnemySlot0 ;\
08024514 (T) mov r0,r3 ;|
08024516 (T) add r0,2Fh ;|
08024518 (T) ldrb r1,[r0] ;|
0802451A (T) lsl r0,r1,3h ;|
0802451C (T) sub r0,r0,r1 ;|
0802451E (T) lsl r0,r0,3h ;} Enemy[EnemyAttachedEnemySlot]XPosition +- r4 (EnemyXSpeed)
08024520 (T) add r0,r0,r2 ;|
08024522 (T) ldrh r1,[r0,4h] ;|
08024524 (T) sub r1,r1,r4 ;|
;|
08024526 (T) strh r1,[r0,4h] ;/
08024528 (T) bl 80241B0h ; Execute subroutine Arachnus_FinishedWalking
0802452C (T) pop r4-r6
0802452E (T) pop r0
08024530 (T) bx r0
08024532 dw 00000h
08024534 dd 003000140h