While scripting action sequence for "Sar", I realised that if I drew the enemy sprites at the same heights and scaled to different sizes, I'd get effect of quasi-3d. But to do so, I'd have to replace built-in AGS animation loop with one of my own making. And I did it. Not only the technique worked, but proved efficient in scripting custom graphic and/or animation effects without resorting to standard entities of AGS engine, like characters or objects.
The main principle is that: data about the object we want to draw is stored in a structure that contains information of the object's position, scale, animation frame and other custom properties. This data is in turn accessed by raw draw functions, which perform the rendering. In order for the technique to work, the screen has to be saved with RawSaveScreen method when player enters the room, and refreshed with RawRestoreScreen on the onset of every game cycle.
What can you do with it? Basically, everything you can imagine. The technique allows to draw, move and animate almost infinite number of objects without having to create them manually in the editor. For example, let's say we want to draw x number of birds, animate them and make them move across the screen. Data for each bird would be then stored in a following structure:
bird.x
bird.y //x and y position of bird on the screen
bird.z //z parameter, on the basis of which we scale the bird
bird.frame // the current frame of animation for the bird
bird.sizex //computed from the z parameter
bird.sizey //let's say it's equal to bird.sizex*2, so we keep the aspect ratio
Now, after having restored the screen with RawSaveScreen we invoke the RawDrawImageResized and pass number of the sprite that is starting frame of the animation + frame parameter, x,y,sizex and sizey for each bird. To go through all the birds in array, we use the while[] loop. Now, if the birds have different z parameter, they're scaled to different sizes, which creates impression of some of them being closer to the screen than the others. We need, of course, to update each bird's position in each game cycle, and to keep track of the current animation frame, but these are in fact minor problems each AGS user should be able to deal with on his own. I admit that some of the ascpects of the technique are crude and in need of refinement, but this would take a professional programmer - and I'm not one. Tell me, please, what you think about the technique. If you want, I could dump the code from my own game for demonstrative purposes.
It would be interesting to see this in a small demo game...
Basically, those who played demo of "Sar" already seen it in action - in the aerial battle sequence. I could think of some other kind of demonstration, though...
Of course, you need to be careful that you're not using this method with objects and characters also on-screen, since RawDrawn stuff is always behind objects and characters.