;;; Disassembly ;;; ; Arachnus entry point 080246BC (T) push r14 080246BE (T) ldr r2,=EnemyOrientation ;\ 080246C0 (T) mov r0,r2 ;| 080246C2 (T) add r0,24h ;| 080246C4 (T) ldrb r3,[r0] ;} If EnemyPose != 0 (enemy has initialised): 080246C6 (T) cmp r3,0h ;| 080246C8 (T) beq 8024718h ;/ 080246CA (T) ldrh r0,[r2,14h] ;\ 080246CC (T) cmp r0,0h ;} If EnemyHealth != 0: 080246CE (T) beq 8024714h ;/ 080246D0 (T) mov r0,r2 ;\ 080246D2 (T) add r0,2Ch ;| 080246D4 (T) ldrb r0,[r0] ;| 080246D6 (T) mov r1,7Fh ;} If EnemyInvincibilityTimer > 5: 080246D8 (T) and r1,r0 ;| 080246DA (T) cmp r1,5h ;| 080246DC (T) bls 80246F4h ;/ 080246DE (T) cmp r3,2h ;\ 080246E0 (T) beq 80246E6h ;| 080246E2 (T) cmp r3,8h ;| 080246E4 (T) bne 8024718h ;} If EnemyPose == 2 or 8 (moving forwards or standing still): 080246E6 (T) cmp r3,3Eh ;| Redundant check against EnemyPose == 3Eh (cry of pain) 080246E8 (T) beq 8024718h ;/ 080246EA (T) bl 8023894h ;\ 080246EE (T) b 8024718h ;} Execute subroutine Arachnus_SetCryOfPain 080246F0 dd 0030006BCh 080246F4 (T) cmp r1,2h ;\ Else (EnemyInvincibilityTimer <= 5): 080246F6 (T) bls 8024718h ;} If EnemyInvincibilityTimer > 2: 080246F8 (T) ldrh r0,[r2] ;\ 080246FA (T) mov r3,80h ;| 080246FC (T) lsl r3,r3,3h ;| 080246FE (T) mov r1,r3 ;} EnemyOrientation |= 400h (shot) 08024700 (T) mov r3,0h ;| 08024702 (T) orr r1,r0 ;| 08024704 (T) strh r1,[r2] ;/ 08024706 (T) mov r1,r2 ;\ 08024708 (T) add r1,2Eh ;| 0802470A (T) ldrb r0,[r1] ;} If EnemyRespawnTimer != FFh: 0802470C (T) cmp r0,0FFh ;| 0802470E (T) beq 8024718h ;/ 08024710 (T) strb r3,[r1] ;\ 08024712 (T) b 8024718h ;} EnemyRespawnTimer = 0 08024714 (T) bl 80238D8h ; Else (EnemyHealth == 0): Execute subroutine Arachnus_SetDeath 08024718 (T) ldr r0,=EnemyOrientation ;\ 0802471A (T) add r0,24h ;| 0802471C (T) ldrb r0,[r0] ;| 0802471E (T) cmp r0,5Ah ;| 08024720 (T) bls 8024724h ;| 08024722 (T) b 80248F4h ;| ;} Branch to code that handles the current EnemyPose 08024724 (T) lsl r0,r0,2h ;| 08024726 (T) ldr r1,=8024738h ;| 08024728 (T) add r0,r0,r1 ;| 0802472A (T) ldr r0,[r0] ;| 0802472C (T) mov r15,r0 ;/ 0802472E dw 00000h 08024730 dd 0030006BCh,008024738h,0080248AEh,0080248B4h 08024740 dd 0080248B8h,0080248C8h,0080248CCh,0080248F4h 08024750 dd 0080248F4h,0080248BEh,0080248C2h,0080248F4h 08024760 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024770 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024780 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024790 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 080247A0 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 080247B0 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 080247C0 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 080247D0 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 080247E0 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 080247F0 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024800 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024810 dd 0080248F4h,0080248F4h,0080248D2h,0080248F4h 08024820 dd 0080248D8h,0080248F4h,0080248DEh,0080248F4h 08024830 dd 0080248E4h,0080248F4h,0080248EAh,0080248F4h 08024840 dd 0080248F0h,0080248F4h,0080248F4h,0080248F4h 08024850 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024860 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024870 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024880 dd 0080248F4h,0080248F4h,0080248F4h,0080248F4h 08024890 dd 0080248F4h,0080248F4h,0080248F4h,0080248A4h 080248A0 dd 0080248A8h ; 0x59, start to be born 080248A4 (T) bl 8024290h ; Execute subroutine Arachnus_Initialistion ; 0x5A, be born 080248A8 (T) bl 802423Ch ; Execute subroutine Arachnus_Birth 080248AC (T) b 80248F4h ; Return ; 0x00, initialisation 080248AE (T) bl 8024290h ; Execute subroutine Arachnus_Initialistion 080248B2 (T) b 80248F4h ; Return ; 0x01, thinking 080248B4 (T) bl 80243D4h ; Execute subroutine Arachnus_Thinking ; 0x02, walking 080248B8 (T) bl 8024404h ; Execute subroutine Arachnus_Walking 080248BC (T) b 80248F4h ; Return ; 0x07, standing initialisation 080248BE (T) bl 8024538h ; Execute subroutine Arachnus_StandingInitialisation ; 0x08, standing 080248C2 (T) bl 80245CCh ; Execute subroutine Arachnus_Standing 080248C6 (T) b 80248F4h ; Return ; 0x03, turn around 080248C8 (T) bl 8024614h ; Execute subroutine Arachnus_TurnAround ; 0x04, turning around 080248CC (T) bl 802464Ch ; Execute subroutine Arachnus_TurningAround 080248D0 (T) b 80248F4h ; Return ; 0x38, slash attack 080248D2 (T) bl 8023A20h ; Execute subroutine Arachnus_SlashAttack 080248D6 (T) b 80248F4h ; Return ; 0x3A, roll attack 080248D8 (T) bl 8023B20h ; Execute subroutine Arachnus_RollAttack 080248DC (T) b 80248F4h ; Return ; 0x3C, hit wall from roll attack 080248DE (T) bl 8023D18h ; Execute subroutine Arachnus_HitWallFromRollAttack 080248E2 (T) b 80248F4h ; Return ; 0x3E, cry of pain (shot with missile) 080248E4 (T) bl 8023E30h ; Execute subroutine Arachnus_CryOfPain 080248E8 (T) b 80248F4h ; Return ; 0x40, flame attack 080248EA (T) bl 8024118h ; Execute subroutine Arachnus_FlameAttack 080248EE (T) b 80248F4h ; Return ; 0x42, dying 080248F0 (T) bl 8023E7Ch ; Execute subroutine Arachnus_Dying ; All others 080248F4 (T) pop r0 080248F6 (T) bx r0