- sprites.cpp

This commit is contained in:
Christoph Oelckers 2016-12-08 21:05:53 +01:00
parent ee09219c08
commit 8a6d3b8e7b

View file

@ -26,10 +26,8 @@ DWORD NumStdSprites; // The first x sprites that don't belong to skins.
struct spriteframewithrotate : public spriteframe_t struct spriteframewithrotate : public spriteframe_t
{ {
int rotate; int rotate;
} };
sprtemp[MAX_SPRITE_FRAMES];
int maxframe;
char* spritename;
// [RH] skin globals // [RH] skin globals
FPlayerSkin *skins; FPlayerSkin *skins;
@ -46,7 +44,7 @@ PalEntry OtherGameSkinPalette[256];
// [RH] Removed checks for coexistance of rotation 0 with other // [RH] Removed checks for coexistance of rotation 0 with other
// rotations and made it look more like BOOM's version. // rotations and made it look more like BOOM's version.
// //
static bool R_InstallSpriteLump (FTextureID lump, unsigned frame, char rot, bool flipped) static bool R_InstallSpriteLump (FTextureID lump, unsigned frame, char rot, bool flipped, spriteframewithrotate *sprtemp, int &maxframe)
{ {
unsigned rotation; unsigned rotation;
@ -119,7 +117,7 @@ static bool R_InstallSpriteLump (FTextureID lump, unsigned frame, char rot, bool
// [RH] Seperated out of R_InitSpriteDefs() // [RH] Seperated out of R_InitSpriteDefs()
static void R_InstallSprite (int num) static void R_InstallSprite (int num, spriteframewithrotate *sprtemp, int &maxframe)
{ {
int frame; int frame;
int framestart; int framestart;
@ -267,6 +265,8 @@ void R_InitSpriteDefs ()
unsigned int i, j, smax, vmax; unsigned int i, j, smax, vmax;
DWORD intname; DWORD intname;
spriteframewithrotate sprtemp[MAX_SPRITE_FRAMES];
// Create a hash table to speed up the process // Create a hash table to speed up the process
smax = TexMan.NumTextures(); smax = TexMan.NumTextures();
hashes = new Hasher[smax]; hashes = new Hasher[smax];
@ -348,7 +348,7 @@ void R_InitSpriteDefs ()
sprtemp[j].Voxel = NULL; sprtemp[j].Voxel = NULL;
} }
maxframe = -1; int maxframe = -1;
intname = sprites[i].dwName; intname = sprites[i].dwName;
// scan the lumps, filling in the frames for whatever is found // scan the lumps, filling in the frames for whatever is found
@ -358,10 +358,10 @@ void R_InitSpriteDefs ()
FTexture *tex = TexMan[hash]; FTexture *tex = TexMan[hash];
if (TEX_DWNAME(tex) == intname) if (TEX_DWNAME(tex) == intname)
{ {
bool res = R_InstallSpriteLump (FTextureID(hash), tex->Name[4] - 'A', tex->Name[5], false); bool res = R_InstallSpriteLump (FTextureID(hash), tex->Name[4] - 'A', tex->Name[5], false, sprtemp, maxframe);
if (tex->Name[6] && res) if (tex->Name[6] && res)
R_InstallSpriteLump (FTextureID(hash), tex->Name[6] - 'A', tex->Name[7], true); R_InstallSpriteLump (FTextureID(hash), tex->Name[6] - 'A', tex->Name[7], true, sprtemp, maxframe);
} }
hash = hashes[hash].Next; hash = hashes[hash].Next;
} }
@ -398,7 +398,7 @@ void R_InitSpriteDefs ()
hash = vh->Next; hash = vh->Next;
} }
R_InstallSprite ((int)i); R_InstallSprite ((int)i, sprtemp, maxframe);
} }
delete[] hashes; delete[] hashes;
@ -762,13 +762,14 @@ void R_InitSkins (void)
for(int spr = 0; spr<2; spr++) for(int spr = 0; spr<2; spr++)
{ {
spriteframewithrotate sprtemp[MAX_SPRITE_FRAMES];
memset (sprtemp, 0xFFFF, sizeof(sprtemp)); memset (sprtemp, 0xFFFF, sizeof(sprtemp));
for (k = 0; k < MAX_SPRITE_FRAMES; ++k) for (k = 0; k < MAX_SPRITE_FRAMES; ++k)
{ {
sprtemp[k].Flip = 0; sprtemp[k].Flip = 0;
sprtemp[k].Voxel = NULL; sprtemp[k].Voxel = NULL;
} }
maxframe = -1; int maxframe = -1;
if (spr == 1) if (spr == 1)
{ {
@ -792,10 +793,10 @@ void R_InitSkins (void)
if (lnameint == intname) if (lnameint == intname)
{ {
FTextureID picnum = TexMan.CreateTexture(k, FTexture::TEX_SkinSprite); FTextureID picnum = TexMan.CreateTexture(k, FTexture::TEX_SkinSprite);
bool res = R_InstallSpriteLump (picnum, lname[4] - 'A', lname[5], false); bool res = R_InstallSpriteLump (picnum, lname[4] - 'A', lname[5], false, sprtemp, maxframe);
if (lname[6] && res) if (lname[6] && res)
R_InstallSpriteLump (picnum, lname[6] - 'A', lname[7], true); R_InstallSpriteLump (picnum, lname[6] - 'A', lname[7], true, sprtemp, maxframe);
} }
} }
@ -811,7 +812,7 @@ void R_InitSkins (void)
int sprno = (int)sprites.Push (temp); int sprno = (int)sprites.Push (temp);
if (spr==0) skins[i].sprite = sprno; if (spr==0) skins[i].sprite = sprno;
else skins[i].crouchsprite = sprno; else skins[i].crouchsprite = sprno;
R_InstallSprite (sprno); R_InstallSprite (sprno, sprtemp, maxframe);
} }
} }