At the moment, our Alien Sprite only has one frame, and therefore is always pointing in the same direction no matter which way it is travelling.
This should be pretty easy to fix, we just need to create a frame for each direction and ensure that Frame 0 points in Direction 0 (North), frame 1 points in Direction 1 (North North East) and so on.
Here's how I changed Sprite 2 which will be my default Alien sprite:





Ok, these first five frames represent a quarter turn, so the rest of the frames you dont need to draw each one, you can just use these ones and M to copy, I to insert a new frame and K to paste, then use V to flip vertically and H to flip horizontally.
For example Frame 5 is the same as frame 3 but flipped vertically.
Once you've got all 16 frames, open up your Alien Event (Sprite Type 5), and update it as follows:
EVENT SPRITETYPE5 ; FLEXI ALIENS ; ===================== SPRITEINK C ; colour the alien with C value IF SETTINGA = 0 ; Alien first appears RESTORE ; Restore the data table LET RND = L ; Store the Level number in RND ADD 50 TO RND ; and increase it by 500 WHILE DIRECTION <> RND ; While DIRECTION doesnt = RND READ DIRECTION ; Read value from DATA table READ SETTINGB ; Also read second value ENDWHILE ; Keep going until we find the value in RND LET SETTINGA = 1 ; When we find it change SA to 1 ENDIF IF SETTINGA = 1 ; Ready to get direction & reptitions READ DIRECTION ; Read the next movement into DIRECTION READ SETTINGB ; Read the repetitions into SettingB LET SETTINGA = 2 ; Got directions & reps IF IMAGE 2 ; is this image # 2? LET FRAME = DIRECTION ; yes, set its frame to its DIRECTION ENDIF ENDIF IF COLLISION 1 ; if hit by a torpedo OTHER ; switch to torpedo LET DIRECTION = 99 ; run the explosion ENDSPRITE ; return to this Alien LET TYPE = 6 ; Switch it to explosion type LET IMAGE = 4 ; Explosion image LET FRAME = 0 ; first frame LET DIRECTION = 0 ; tell explosion its an alien exploding ENDIF IF COLLISION 0 ; if enemy and player collide LET TYPE = 6 ; switch it to the explosion type LET IMAGE = 4 ; and the explosion image LET FRAME = 0 ; reset it to first frame LET DIRECTION = 0 ; this is an alen exploding OTHER LET DIRECTION = 99 ; trigger the player explosion ENDSPRITE ENDIF IF DIRECTION = 0 ; Move N SPRITEUP SPRITEUP ENDIF IF DIRECTION = 1 ; Move NNE SPRITERIGHT SPRITEUP SPRITEUP ENDIF IF DIRECTION = 2 ; Move NE SPRITERIGHT SPRITERIGHT SPRITEUP SPRITEUP ENDIF IF DIRECTION = 3 ; Move ENE SPRITERIGHT SPRITERIGHT SPRITEUP ENDIF IF DIRECTION = 4 ; Move E SPRITERIGHT SPRITERIGHT ENDIF IF DIRECTION = 5 ; Move ESE SPRITERIGHT SPRITERIGHT SPRITEDOWN ENDIF IF DIRECTION = 6 ; MOVE SE SPRITERIGHT SPRITERIGHT SPRITEDOWN SPRITEDOWN ENDIF IF DIRECTION = 7 ; MOVE SSE SPRITEDOWN SPRITEDOWN SPRITERIGHT ENDIF IF DIRECTION = 8 ; MOVE S SPRITEDOWN SPRITEDOWN ENDIF IF DIRECTION = 9 ; MOVE SSW SPRITEDOWN SPRITEDOWN SPRITELEFT ENDIF IF DIRECTION = 10 ; MOVE SW SPRITEDOWN SPRITEDOWN SPRITELEFT SPRITELEFT ENDIF IF DIRECTION = 11 ; MOVE WSW SPRITEDOWN SPRITELEFT SPRITELEFT ENDIF IF DIRECTION = 12 ; MOVE W SPRITELEFT SPRITELEFT ENDIF IF DIRECTION = 13 ; MOVE WNW SPRITELEFT SPRITELEFT SPRITEUP ENDIF IF DIRECTION = 14 ; MOVE NW SPRITELEFT SPRITELEFT SPRITEUP SPRITEUP ENDIF IF DIRECTION = 15 ; MOVE NNW SPRITELEFT SPRITEUP SPRITEUP ENDIF ; BOUNDARY CHECKING ; =================== IF X <= LEFTEDGE ; if alien reaches the left edge REMOVE ; remove it SUBTRACT 1 FROM S ; decrement the sprite counter SUBTRACT 1 FROM F ; decrement the alien counter ENDIF IF X >= RIGHTEDGE ; if alien reaches the right edge REMOVE ; remove it SUBTRACT 1 FROM S ; decrement the sprite counter SUBTRACT 1 FROM F ; decrement the alien counter ENDIF IF Y >= BOTTOMEDGE ; if alien reaches the right edge REMOVE ; remove it SUBTRACT 1 FROM S ; decrement the alien counter SUBTRACT 1 FROM F ENDIF IF Y < Q ; is alien above minimum height for releasing missiles? IF W > 0 ; yes, can alien release missiles? IF X < M ; yes, is Alien to the right of player? SUBTRACT X FROM M ; yes, how far to the right of player is alien? IF M <= 8 ; 8 or less pixels? LET AIRBORNE = 1 ; run the chance of firing routine ENDIF ADD X TO M ; reset M ELSE IF M < X ; is alien to the left of player? SUBTRACT M FROM X ; yes, how far to the left IF X < = 8 ; 8 pixels or less? LET AIRBORNE = 1; yes, run the chance of firing routine ENDIF ADD M TO X ; reset X ELSE ; enemy must be directly above player LET AIRBORNE = 1; run the chance of firing routine ENDIF ENDIF ENDIF ENDIF IF AIRBORNE = 1 ; Chance of firing routine IF S < 9 ; are there 8 or less sprites on screen? GETRANDOM H ; yes, get a random number from 0 to the aliens missile probability # IF RND = 1 ; is it 1? LET RND = DIRECTION ; yes, store aliens direction in RND SPAWN 3 6 ; spawn a missile SPAWNED ; switch to the spawned missile LET DIRECTION = RND ; set its direction to RND ENDSPRITE ; switch back to this alien ENDIF ENDIF LET AIRBORNE = 0 ; end the chance of firing routine ENDIF SUBTRACT 1 FROM SETTINGB ; decrement repetitions remaining IF SETTINGB = 0 ; has alien moved all repetitions? LET SETTINGA = 1 ; get the next direction & # of repetitions ENDIF DATA 51 0 8 20 7 8 6 8 5 8 4 16 DATA 52 0 8 20 9 8 10 8 11 8 12 16 DATA 53 0 12 48 11 2 10 2 9 2 8 2 7 2 6 2 5 2 4 40 5 2 6 2 7 2 8 2 9 2 10 40 DATA 54 0 4 48 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 40 11 2 10 2 9 2 8 2 7 2 6 40 DATA 55 0 13 26 14 4 15 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 40 DATA 56 0 3 26 1 4 0 4 15 4 14 4 13 4 12 4 11 4 10 4 9 4 8 4 7 4 6 40 DATA 57 0 8 16 7 4 6 4 5 4 4 4 3 4 2 4 1 4 0 4 15 4 14 4 13 4 12 4 11 4 10 4 9 4 8 4 7 4 6 4 5 4 4 60 DATA 58 0 8 16 9 4 10 4 11 4 12 4 13 4 14 4 15 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 2 12 60
Build your game, and now Aliens should point in their direction of travel.
Next, there's a few things I want to tidy up, then we'll be ready to release MPAGD SHMUPKIT v1 , so you can quickly start building your own Shmups!
