I went ahead and did something interesting... I made a new Type that contains information on the kind of change to perform (alpha, position, etc...), the Time() it was initiated, the sprite to act on, and the duration for the effect. Finally, it has a parameter to check if the effect is in play, otherwise the main loop skips it.
Then for each main loop, I check all of my sprites to perform whatever work is needed: (I just show two types below... fade in/out. I can see adding x / y slides... flickering...
All 10 sprites (more if needed) can be going through simultaneous changes... and each sprite going through more than one type of change at a time.
For ChkLoop = 1 to 10 //Check all of the ActionSprites
If GoSprite[ChkLoop].Go = 1 //See if we're supposed to do something
Select GoSprite[ChkLoop].ChangeType //Find out what we're supposed to do
Case 1: //FadeOut
AlphaVal# = ((((GoSprite[ChkLoop].InitTime + GoSprite[ChkLoop].Duration) - TheTime#)/GoSprite[ChkLoop].Duration) * 255.0)
If AlphaVal# > 0
SetSpriteColorAlpha(GoSprite[ChkLoop].TargetID,AlphaVal#)
else
GoSprite[ChkLoop].Go = 0
Endif
EndCase
Case 2: //FadeIn
AlphaVal# = ((TheTime# - GoSprite[ChkLoop].InitTime)/(GoSprite[ChkLoop].Duration) * 255.0)
If AlphaVal# < 255
SetSpriteColorAlpha(GoSprite[ChkLoop].TargetID,AlphaVal#)
else
GoSprite[ChkLoop].Go = 0 //Reset the action
Endif
EndCase
EndSelect
EndIf
Next ChkLoop