This code has bits and pieces from just about everyone, including WSJ, BrotherTank, DarkOne ... the list goes on.
So what makes this tutorial different? Well, to change or expand the data for your animated sprites, you *don't* have to go into the middle of WL_DRAW.CPP to change things. Just go into an H file instead, and Rebuild the code.
So, let's get started. Go into WL_DRAW.CPP, and do a search for "static objects". You should see this code:
- Code: Select all
//
// place static objects
//
Insert this code just above it:
- Code: Select all
// Animated Objects code
frameon+=tics;
frameon%=2520;
/* remember 70 tics/second, so this will support total cycle time of 2 seconds tops. Just increase the 140 if you want*/
// End Animated Objects code
Now do a search for "visable". Yes, I know it's misspelled. I'm just telling you the way it's put it in the code. Anyway, you should see this:
- Code: Select all
if (!*statptr->visspot)
continue; // not visable
Now, insert this code just below it:
- Code: Select all
struct
{
short picnum;
int animtics, animframes;
} animsprinfo[] =
{
#include "_animatedstaticobjects.h"
{-1} // terminator
};
for (int animstat = 0; animsprinfo[animstat].picnum != -1 ; animstat++)
{
// Animated objects
if (visptr->shapenum == animsprinfo[animstat].picnum)
visptr->shapenum += int((frameon/(animsprinfo[animstat].animtics))
%animsprinfo[animstat].animframes);
}
What this code does is take all the Animated Sprites and puts them in an array, then goes through that array until it hits the "-1" end-marker. Does doing the code this way lower the framerate? Slightly, maybe. But it'll be easier to work with.
Now, create a text file called "_animatedstaticobjects.h". Note the "_" I put in the filename. This ensures that the file always appears at the top of your Project list.
In this example, I'm giving the file this content:
- Code: Select all
// Format: SprName, T, F
//
// If the sprite has the name of SprName, animate it using F frames total, and change the frame
// every T tics. For example, if the object is called SPR_STAT_0, then the data
// "SPR_STAT_0, 6, 4" will have it uses 4 frames of animation, and the frame will change every 6
// tics. 70 "tics" is equal to one second.
SPR_STAT_0, 6, 4,
SPR_STAT_4, 12, 8,
Now save the file, and Add it to your project in the compiler. Now Rebuild your code, and run the EXE. The water puddle is animated with four frames of animation, and the frame is changed every 6 tics. The chandelier should use eight frames of animation, and the frame changes every 12 tics.
I think that should do it. Hope my tutorial proves useful.