;;; Arachnus_HitWallFromRollAttack ;;; 08023D18 (T) push r4-r7,r14 08023D1A (T) ldr r3,=EnemyOrientation ;\ 08023D1C (T) mov r0,r3 ;| 08023D1E (T) add r0,2Fh ;} r5 = EnemyAttachedEnemySlot 08023D20 (T) ldrb r5,[r0] ;/ 08023D22 (T) ldr r2,=EnemySlot0 ;\ 08023D24 (T) lsl r0,r5,3h ;| 08023D26 (T) sub r0,r0,r5 ;| 08023D28 (T) lsl r0,r0,3h ;| 08023D2A (T) mov r1,r2 ;} r0 = Enemy[EnemyAttachedEnemySlot]GraphicPointer 08023D2C (T) add r1,18h ;| 08023D2E (T) add r0,r0,r1 ;| 08023D30 (T) ldr r0,[r0] ;/ 08023D32 (T) mov r4,r3 ; r4 = $EnemyOrientation 08023D34 (T) mov r7,r2 ; r7 = EnemySlot0 08023D36 (T) ldr r1,=8302CF4h ;\ 08023D38 (T) mov r12,r1 ;} r12 = 8302CF4h 08023D3A (T) cmp r0,r12 ;\ 08023D3C (T) bne 8023D64h ;} If Enemy[EnemyAttachedEnemySlot]GraphicPointer == 8302CF4h: 08023D3E (T) mov r0,r5 ; r0 parameter = EnemyAttachedEnemySlot 08023D40 (T) bl 80119F0h ; Execute subroutine 80119F0h (Animation related?) 08023D44 (T) cmp r0,0h ;\ 08023D46 (T) beq 8023E22h ;} If returned 0: return 08023D48 (T) mov r1,r4 ;\ 08023D4A (T) add r1,24h ;| 08023D4C (T) mov r0,7h ;} Enemy pose = 7h (standing initialisation) 08023D4E (T) strb r0,[r1] ;/ 08023D50 (T) add r1,0Ah ;\ 08023D52 (T) mov r0,0FFh ;} Enemy respawn timer = FFh 08023D54 (T) strb r0,[r1] ;/ 08023D56 (T) b 8023E22h ; Return 08023D58 dd 0030006BCh,003000140h,008302CF4h 08023D64 (T) mov r6,r4 ;\ Else (Enemy[EnemyAttachedEnemySlot]GraphicPointer != 8302CF4h): 08023D66 (T) add r6,31h ;} r6 = $Enemy31 08023D68 (T) ldrb r1,[r6] ; r1 = Enemy31 08023D6A (T) ldr r2,=82FD0D0h ; r2 = 82FD0D0h 08023D6C (T) lsl r0,r1,1h ;\ 08023D6E (T) add r0,r0,r2 ;} r3 = [82FD0D0 + (Enemy31<<1)] 08023D70 (T) ldrh r3,[r0] ;/ 08023D72 (T) ldr r0,=7FFFh ;\ 08023D74 (T) cmp r3,r0 ;} If r3 == 7FFFh: 08023D76 (T) bne 8023D8Ch ;/ 08023D78 (T) sub r0,r1,1 ;\ 08023D7A (T) lsl r0,r0,1h ;| 08023D7C (T) add r0,r0,r2 ;} r3 = [82FD0CE + (Enemy31<<1)] 08023D7E (T) ldrh r3,[r0] ;/ 08023D80 (T) b 8023D90h ; 08023D82 dw 00000h 08023D84 dd 0082FD0D0h,000007FFFh 08023D8C (T) add r0,r1,1 ;\ Else (r3 != 7FFFh): 08023D8E (T) strb r0,[r6] ;} ++Enemy31 08023D90 (T) ldrh r0,[r4,2h] ;\ 08023D92 (T) add r0,r3,r0 ;} EnemyYPosition += r3 08023D94 (T) strh r0,[r4,2h] ;/ 08023D96 (T) lsl r2,r5,3h ;\ 08023D98 (T) sub r1,r2,r5 ;| 08023D9A (T) lsl r1,r1,3h ;| 08023D9C (T) add r1,r1,r7 ;} Enemy[EnemyAttachedEnemySlot]YPosition += r3 08023D9E (T) ldrh r0,[r1,2h] ;| 08023DA0 (T) add r0,r3,r0 ;| 08023DA2 (T) strh r0,[r1,2h] ;/ 08023DA4 (T) mov r0,r4 ;\ 08023DA6 (T) add r0,31h ;| 08023DA8 (T) ldrb r0,[r0] ;| 08023DAA (T) mov r3,8h ;| 08023DAC (T) mov r6,r2 ;} / 8; Enemy31 <= Bh 08023DAE (T) cmp r0,0Bh ;} r3 = { 4; Bh < Enemy31 <= 14h 08023DB0 (T) bls 8023DBAh ;} \ 0; Enemy31 > 14h 08023DB2 (T) mov r3,0h ;| 08023DB4 (T) cmp r0,14h ;| 08023DB6 (T) bhi 8023DBAh ;| 08023DB8 (T) mov r3,4h ;/ 08023DBA (T) ldrh r1,[r4] ;\ 08023DBC (T) mov r0,40h ;| 08023DBE (T) and r0,r1 ;} If Arachnus facing right: 08023DC0 (T) cmp r0,0h ;| 08023DC2 (T) beq 8023DE0h ;/ 08023DC4 (T) ldrh r0,[r4,4h] ;\ 08023DC6 (T) sub r0,r0,r3 ;} EnemyXPosition -= r3 08023DC8 (T) strh r0,[r4,4h] ;/ 08023DCA (T) sub r1,r6,r5 ;\ 08023DCC (T) lsl r1,r1,3h ;| 08023DCE (T) add r1,r1,r7 ;| 08023DD0 (T) ldrh r0,[r1,4h] ;} Enemy[EnemyAttachedEnemySlot]XPosition -= r3 08023DD2 (T) sub r0,r0,r3 ;| 08023DD4 (T) strh r0,[r1,4h] ;/ 08023DD6 (T) add r1,2Bh ;\ 08023DD8 (T) lsr r2,r3,1h ;| 08023DDA (T) ldrb r0,[r1] ;} r0 = Enemy[EnemyAttachedEnemySlot]2B -= (r3>>1) 08023DDC (T) sub r0,r0,r2 ;/ 08023DDE (T) b 8023DFAh ; 08023DE0 (T) ldrh r0,[r4,4h] ;\ Else (Arachnus facing left): 08023DE2 (T) add r0,r3,r0 ;} EnemyXPosition += r3 08023DE4 (T) strh r0,[r4,4h] ;/ 08023DE6 (T) sub r1,r6,r5 ;\ 08023DE8 (T) lsl r1,r1,3h ;| 08023DEA (T) add r1,r1,r7 ;| 08023DEC (T) ldrh r0,[r1,4h] ;} Enemy[EnemyAttachedEnemySlot]XPosition += r3 08023DEE (T) add r0,r3,r0 ;| 08023DF0 (T) strh r0,[r1,4h] ;/ 08023DF2 (T) add r1,2Bh ;\ 08023DF4 (T) lsr r0,r3,1h ;| 08023DF6 (T) ldrb r2,[r1] ;} r0 = Enemy[EnemyAttachedEnemySlot]2B += (r3>>1) 08023DF8 (T) add r0,r0,r2 ;/ 08023DFA (T) strb r0,[r1] 08023DFC (T) mov r0,r4 ;\ 08023DFE (T) add r0,31h ;| 08023E00 (T) ldrb r0,[r0] ;} If Enemy31 != 22h: return 08023E02 (T) cmp r0,22h ;| 08023E04 (T) bne 8023E22h ;/ 08023E06 (T) mov r0,r12 ; r0 parameter = 8302CF4h 08023E08 (T) bl 8012304h ; Execute subroutine Enemy_SetAttachedEnemyGraphics 08023E0C (T) ldr r0,=EnemySlot0 ;\ 08023E0E (T) sub r1,r6,r5 ;| 08023E10 (T) lsl r1,r1,3h ;| 08023E12 (T) add r1,r1,r0 ;| 08023E14 (T) ldrh r2,[r1] ;} Enemy[EnemyAttachedEnemySlot]Orientation !|= 0080h 08023E16 (T) ldr r0,=0FF7Fh ;| 08023E18 (T) and r0,r2 ;| 08023E1A (T) strh r0,[r1] ;/ 08023E1C (T) mov r0,0B5h ; r0 = B5h 08023E1E (T) bl 800270Ch ; Execute subroutine 800270Ch (Sound effect?) 08023E22 (T) pop r4-r7 08023E24 (T) pop r0 08023E26 (T) bx r0 08023E28 dd 003000140h,00000FF7Fh