Merge branch 'rotsprite3' into 'next'
More rollangle changes See merge request STJr/SRB2!582
This commit is contained in:
commit
152a63b682
|
@ -5501,17 +5501,12 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
fixed_t spr_offset, spr_topoffset;
|
fixed_t spr_offset, spr_topoffset;
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
patch_t *rotsprite = NULL;
|
patch_t *rotsprite = NULL;
|
||||||
angle_t arollangle;
|
INT32 rollangle = 0;
|
||||||
UINT32 rollangle;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!thing)
|
if (!thing)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef ROTSPRITE
|
|
||||||
arollangle = thing->rollangle;
|
|
||||||
rollangle = AngleFixed(arollangle)>>FRACBITS;
|
|
||||||
#endif
|
|
||||||
this_scale = FIXED_TO_FLOAT(thing->scale);
|
this_scale = FIXED_TO_FLOAT(thing->scale);
|
||||||
|
|
||||||
// transform the origin point
|
// transform the origin point
|
||||||
|
@ -5618,11 +5613,11 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
spr_topoffset = spritecachedinfo[lumpoff].topoffset;
|
spr_topoffset = spritecachedinfo[lumpoff].topoffset;
|
||||||
|
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
if (rollangle > 0)
|
if (thing->rollangle)
|
||||||
{
|
{
|
||||||
|
rollangle = R_GetRollAngle(thing->rollangle);
|
||||||
if (!sprframe->rotsprite.cached[rot])
|
if (!sprframe->rotsprite.cached[rot])
|
||||||
R_CacheRotSprite(thing->sprite, (thing->frame & FF_FRAMEMASK), sprinfo, sprframe, rot, flip);
|
R_CacheRotSprite(thing->sprite, (thing->frame & FF_FRAMEMASK), sprinfo, sprframe, rot, flip);
|
||||||
rollangle /= ROTANGDIFF;
|
|
||||||
rotsprite = sprframe->rotsprite.patch[rot][rollangle];
|
rotsprite = sprframe->rotsprite.patch[rot][rollangle];
|
||||||
if (rotsprite != NULL)
|
if (rotsprite != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,8 +49,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static unsigned char imgbuf[1<<26];
|
static unsigned char imgbuf[1<<26];
|
||||||
fixed_t cosang2rad[ROTANGLES];
|
|
||||||
fixed_t sinang2rad[ROTANGLES];
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// R_CheckIfPatch
|
// R_CheckIfPatch
|
||||||
|
@ -1123,6 +1121,24 @@ static UINT16 GetPatchPixel(patch_t *patch, INT32 x, INT32 y, boolean flip)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
|
//
|
||||||
|
// R_GetRollAngle
|
||||||
|
//
|
||||||
|
// Angles precalculated in R_InitSprites.
|
||||||
|
//
|
||||||
|
fixed_t rollcosang[ROTANGLES];
|
||||||
|
fixed_t rollsinang[ROTANGLES];
|
||||||
|
INT32 R_GetRollAngle(angle_t rollangle)
|
||||||
|
{
|
||||||
|
INT32 ra = AngleFixed(rollangle)>>FRACBITS;
|
||||||
|
#if (ROTANGDIFF > 1)
|
||||||
|
ra += (ROTANGDIFF/2);
|
||||||
|
#endif
|
||||||
|
ra /= ROTANGDIFF;
|
||||||
|
ra %= ROTANGLES;
|
||||||
|
return ra;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// R_CacheRotSprite
|
// R_CacheRotSprite
|
||||||
//
|
//
|
||||||
|
@ -1180,12 +1196,12 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
|
||||||
leftoffset = width - leftoffset;
|
leftoffset = width - leftoffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (angle = 0; angle < ROTANGLES; angle++)
|
for (angle = 1; angle < ROTANGLES; angle++)
|
||||||
{
|
{
|
||||||
INT32 newwidth, newheight;
|
INT32 newwidth, newheight;
|
||||||
|
|
||||||
ca = cosang2rad[angle];
|
ca = rollcosang[angle];
|
||||||
sa = sinang2rad[angle];
|
sa = rollsinang[angle];
|
||||||
|
|
||||||
// Find the dimensions of the rotated patch.
|
// Find the dimensions of the rotated patch.
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,11 +62,12 @@ void R_ParseSPRTINFOLump(UINT16 wadNum, UINT16 lumpNum);
|
||||||
|
|
||||||
// Sprite rotation
|
// Sprite rotation
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
|
INT32 R_GetRollAngle(angle_t rollangle);
|
||||||
void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, spriteframe_t *sprframe, INT32 rot, UINT8 flip);
|
void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, spriteframe_t *sprframe, INT32 rot, UINT8 flip);
|
||||||
void R_FreeSingleRotSprite(spritedef_t *spritedef);
|
void R_FreeSingleRotSprite(spritedef_t *spritedef);
|
||||||
void R_FreeSkinRotSprite(size_t skinnum);
|
void R_FreeSkinRotSprite(size_t skinnum);
|
||||||
extern fixed_t cosang2rad[ROTANGLES];
|
extern fixed_t rollcosang[ROTANGLES];
|
||||||
extern fixed_t sinang2rad[ROTANGLES];
|
extern fixed_t rollsinang[ROTANGLES];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // __R_PATCH__
|
#endif // __R_PATCH__
|
||||||
|
|
|
@ -500,7 +500,7 @@ void R_InitSprites(void)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
INT32 angle, ra;
|
INT32 angle;
|
||||||
float fa;
|
float fa;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -508,14 +508,11 @@ void R_InitSprites(void)
|
||||||
negonearray[i] = -1;
|
negonearray[i] = -1;
|
||||||
|
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
for (angle = 0; angle < ROTANGLES; angle++)
|
for (angle = 1; angle < ROTANGLES; angle++)
|
||||||
{
|
{
|
||||||
ra = (ROTANGDIFF * angle);
|
fa = ANG2RAD(FixedAngle((ROTANGDIFF * angle)<<FRACBITS));
|
||||||
if (!ra)
|
rollcosang[angle] = FLOAT_TO_FIXED(cos(-fa));
|
||||||
ra = (ROTANGDIFF / 2) + 1;
|
rollsinang[angle] = FLOAT_TO_FIXED(sin(-fa));
|
||||||
fa = ANG2RAD(FixedAngle(ra<<FRACBITS));
|
|
||||||
cosang2rad[angle] = FLOAT_TO_FIXED(cos(-fa));
|
|
||||||
sinang2rad[angle] = FLOAT_TO_FIXED(sin(-fa));
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1129,8 +1126,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
fixed_t spr_offset, spr_topoffset;
|
fixed_t spr_offset, spr_topoffset;
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
patch_t *rotsprite = NULL;
|
patch_t *rotsprite = NULL;
|
||||||
angle_t arollangle = thing->rollangle;
|
INT32 rollangle = 0;
|
||||||
UINT32 rollangle = AngleFixed(arollangle)>>FRACBITS;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PROPERPAPER
|
#ifndef PROPERPAPER
|
||||||
|
@ -1262,11 +1258,11 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
spr_topoffset = spritecachedinfo[lump].topoffset;
|
spr_topoffset = spritecachedinfo[lump].topoffset;
|
||||||
|
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
if (rollangle > 0)
|
if (thing->rollangle)
|
||||||
{
|
{
|
||||||
|
rollangle = R_GetRollAngle(thing->rollangle);
|
||||||
if (!sprframe->rotsprite.cached[rot])
|
if (!sprframe->rotsprite.cached[rot])
|
||||||
R_CacheRotSprite(thing->sprite, (thing->frame & FF_FRAMEMASK), sprinfo, sprframe, rot, flip);
|
R_CacheRotSprite(thing->sprite, (thing->frame & FF_FRAMEMASK), sprinfo, sprframe, rot, flip);
|
||||||
rollangle /= ROTANGDIFF;
|
|
||||||
rotsprite = sprframe->rotsprite.patch[rot][rollangle];
|
rotsprite = sprframe->rotsprite.patch[rot][rollangle];
|
||||||
if (rotsprite != NULL)
|
if (rotsprite != NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue