mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 03:00:46 +00:00
Game angle interpolation (cl_angleinterpolation) and engine model animation smoothing (r_animsmoothing).
git-svn-id: https://svn.eduke32.com/eduke32@525 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
2bf47cbbed
commit
004e4da3de
12 changed files with 181 additions and 46 deletions
|
@ -153,6 +153,8 @@ typedef struct BPACK
|
||||||
typedef struct BPACK {
|
typedef struct BPACK {
|
||||||
unsigned long mdanimtims;
|
unsigned long mdanimtims;
|
||||||
short mdanimcur;
|
short mdanimcur;
|
||||||
|
short mdcurframe, mdoldframe;
|
||||||
|
short mdsmooth;
|
||||||
short angoff;
|
short angoff;
|
||||||
short pitch, roll;
|
short pitch, roll;
|
||||||
long xoff, yoff, zoff;
|
long xoff, yoff, zoff;
|
||||||
|
@ -277,13 +279,13 @@ SPRITE VARIABLES:
|
||||||
EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
|
EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
|
||||||
|
|
||||||
Example: if the linked lists look like the following:
|
Example: if the linked lists look like the following:
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
????????????????????????????????
|
||||||
Sector lists: Status lists:
|
Sector lists: Status lists:
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ
|
???????????????????????????????J
|
||||||
Sector0: 4, 5, 8 Status0: 2, 0, 8
|
Sector0: 4, 5, 8 Status0: 2, 0, 8
|
||||||
Sector1: 16, 2, 0, 7 Status1: 4, 5, 16, 7, 3, 9
|
Sector1: 16, 2, 0, 7 Status1: 4, 5, 16, 7, 3, 9
|
||||||
Sector2: 3, 9
|
Sector2: 3, 9
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
????????????????????????????????
|
||||||
Notice that each number listed above is shown exactly once on both the
|
Notice that each number listed above is shown exactly once on both the
|
||||||
left and right side. This is because any sprite that exists must
|
left and right side. This is because any sprite that exists must
|
||||||
be in some sector, and must have some kind of status that you define.
|
be in some sector, and must have some kind of status that you define.
|
||||||
|
@ -501,6 +503,7 @@ extern long r_glowmapping;
|
||||||
extern long r_vertexarrays;
|
extern long r_vertexarrays;
|
||||||
extern long r_vbos;
|
extern long r_vbos;
|
||||||
extern long r_vbocount;
|
extern long r_vbocount;
|
||||||
|
extern long r_animsmoothing;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void hicinit(void);
|
void hicinit(void);
|
||||||
|
|
|
@ -55,6 +55,7 @@ extern void (APIENTRY * bglPolygonOffset)( GLfloat factor, GLfloat units );
|
||||||
extern void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode );
|
extern void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode );
|
||||||
extern void (APIENTRY * bglEnable)( GLenum cap );
|
extern void (APIENTRY * bglEnable)( GLenum cap );
|
||||||
extern void (APIENTRY * bglDisable)( GLenum cap );
|
extern void (APIENTRY * bglDisable)( GLenum cap );
|
||||||
|
extern void (APIENTRY * bglGetDoublev)( GLenum pname, GLdouble *params );
|
||||||
extern void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params );
|
extern void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params );
|
||||||
extern void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params );
|
extern void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params );
|
||||||
extern void (APIENTRY * bglPushAttrib)( GLbitfield mask );
|
extern void (APIENTRY * bglPushAttrib)( GLbitfield mask );
|
||||||
|
@ -79,7 +80,9 @@ extern void (APIENTRY * bglPushMatrix)( void );
|
||||||
extern void (APIENTRY * bglPopMatrix)( void );
|
extern void (APIENTRY * bglPopMatrix)( void );
|
||||||
extern void (APIENTRY * bglLoadIdentity)( void );
|
extern void (APIENTRY * bglLoadIdentity)( void );
|
||||||
extern void (APIENTRY * bglLoadMatrixf)( const GLfloat *m );
|
extern void (APIENTRY * bglLoadMatrixf)( const GLfloat *m );
|
||||||
|
extern void (APIENTRY * bglLoadMatrixd)( const GLdouble *m );
|
||||||
extern void (APIENTRY * bglMultMatrixf)( const GLfloat *m );
|
extern void (APIENTRY * bglMultMatrixf)( const GLfloat *m );
|
||||||
|
extern void (APIENTRY * bglMultMatrixd)( const GLdouble *m );
|
||||||
extern void (APIENTRY * bglRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
|
extern void (APIENTRY * bglRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
|
||||||
extern void (APIENTRY * bglScalef)(GLfloat x, GLfloat y, GLfloat z);
|
extern void (APIENTRY * bglScalef)(GLfloat x, GLfloat y, GLfloat z);
|
||||||
extern void (APIENTRY * bglTranslatef)(GLfloat x, GLfloat y, GLfloat z);
|
extern void (APIENTRY * bglTranslatef)(GLfloat x, GLfloat y, GLfloat z);
|
||||||
|
@ -181,7 +184,9 @@ extern void (APIENTRY * bgluTessNormal) (GLUtesselator* tess, GLdouble valueX, G
|
||||||
extern void (APIENTRY * bgluTessProperty) (GLUtesselator* tess, GLenum which, GLdouble data);
|
extern void (APIENTRY * bgluTessProperty) (GLUtesselator* tess, GLenum which, GLdouble data);
|
||||||
extern void (APIENTRY * bgluTessVertex) (GLUtesselator* tess, GLdouble *location, GLvoid* data);
|
extern void (APIENTRY * bgluTessVertex) (GLUtesselator* tess, GLdouble *location, GLvoid* data);
|
||||||
extern GLUtesselator* (APIENTRY * bgluNewTess) (void);
|
extern GLUtesselator* (APIENTRY * bgluNewTess) (void);
|
||||||
|
|
||||||
extern void (APIENTRY * bgluPerspective) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
|
extern void (APIENTRY * bgluPerspective) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
|
||||||
|
|
||||||
extern const GLubyte * (APIENTRY * bgluErrorString) (GLenum error);
|
extern const GLubyte * (APIENTRY * bgluErrorString) (GLenum error);
|
||||||
|
|
||||||
#ifdef RENDERTYPEWIN
|
#ifdef RENDERTYPEWIN
|
||||||
|
|
|
@ -84,6 +84,7 @@ extern int updatesectors;
|
||||||
int polymer_init(void);
|
int polymer_init(void);
|
||||||
void polymer_glinit(void);
|
void polymer_glinit(void);
|
||||||
void polymer_loadboard(void);
|
void polymer_loadboard(void);
|
||||||
|
void polymer_drawroom(short sectnum);
|
||||||
void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum, int root);
|
void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum, int root);
|
||||||
void polymer_rotatesprite(long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2);
|
void polymer_rotatesprite(long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2);
|
||||||
void polymer_drawmaskwall(long damaskwallcnt);
|
void polymer_drawmaskwall(long damaskwallcnt);
|
||||||
|
@ -102,7 +103,7 @@ int polymer_initwall(short wallnum);
|
||||||
void polymer_updatewall(short wallnum);
|
void polymer_updatewall(short wallnum);
|
||||||
void polymer_drawwall(short wallnum);
|
void polymer_drawwall(short wallnum);
|
||||||
// HSR
|
// HSR
|
||||||
void polymer_extractfrustum(void);
|
void polymer_extractfrustum(GLdouble* modelview, GLdouble* projection);
|
||||||
int polymer_portalinfrustum(short wallnum);
|
int polymer_portalinfrustum(short wallnum);
|
||||||
void polymer_addcliplane(_equation clip, _equation left, _equation right, float refx, float refy);
|
void polymer_addcliplane(_equation clip, _equation left, _equation right, float refx, float refy);
|
||||||
int polymer_wallincliplanes(short wallnum);
|
int polymer_wallincliplanes(short wallnum);
|
||||||
|
|
|
@ -26,6 +26,7 @@ void (APIENTRY * bglPolygonOffset)( GLfloat factor, GLfloat units );
|
||||||
void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode );
|
void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode );
|
||||||
void (APIENTRY * bglEnable)( GLenum cap );
|
void (APIENTRY * bglEnable)( GLenum cap );
|
||||||
void (APIENTRY * bglDisable)( GLenum cap );
|
void (APIENTRY * bglDisable)( GLenum cap );
|
||||||
|
void (APIENTRY * bglGetDoublev)( GLenum pname, GLdouble *params );
|
||||||
void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params );
|
void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params );
|
||||||
void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params );
|
void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params );
|
||||||
void (APIENTRY * bglPushAttrib)( GLbitfield mask );
|
void (APIENTRY * bglPushAttrib)( GLbitfield mask );
|
||||||
|
@ -50,7 +51,9 @@ void (APIENTRY * bglPushMatrix)( void );
|
||||||
void (APIENTRY * bglPopMatrix)( void );
|
void (APIENTRY * bglPopMatrix)( void );
|
||||||
void (APIENTRY * bglLoadIdentity)( void );
|
void (APIENTRY * bglLoadIdentity)( void );
|
||||||
void (APIENTRY * bglLoadMatrixf)( const GLfloat *m );
|
void (APIENTRY * bglLoadMatrixf)( const GLfloat *m );
|
||||||
|
void (APIENTRY * bglLoadMatrixd)( const GLdouble *m );
|
||||||
void (APIENTRY * bglMultMatrixf)( const GLfloat *m );
|
void (APIENTRY * bglMultMatrixf)( const GLfloat *m );
|
||||||
|
void (APIENTRY * bglMultMatrixd)( const GLdouble *m );
|
||||||
void (APIENTRY * bglRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
|
void (APIENTRY * bglRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
|
||||||
void (APIENTRY * bglScalef)(GLfloat x, GLfloat y, GLfloat z);
|
void (APIENTRY * bglScalef)(GLfloat x, GLfloat y, GLfloat z);
|
||||||
void (APIENTRY * bglTranslatef)(GLfloat x, GLfloat y, GLfloat z);
|
void (APIENTRY * bglTranslatef)(GLfloat x, GLfloat y, GLfloat z);
|
||||||
|
@ -252,6 +255,7 @@ int loadgldriver(const char *driver)
|
||||||
bglPolygonMode = GETPROC("glPolygonMode");
|
bglPolygonMode = GETPROC("glPolygonMode");
|
||||||
bglEnable = GETPROC("glEnable");
|
bglEnable = GETPROC("glEnable");
|
||||||
bglDisable = GETPROC("glDisable");
|
bglDisable = GETPROC("glDisable");
|
||||||
|
bglGetDoublev = GETPROC("glGetDoublev");
|
||||||
bglGetFloatv = GETPROC("glGetFloatv");
|
bglGetFloatv = GETPROC("glGetFloatv");
|
||||||
bglGetIntegerv = GETPROC("glGetIntegerv");
|
bglGetIntegerv = GETPROC("glGetIntegerv");
|
||||||
bglPushAttrib = GETPROC("glPushAttrib");
|
bglPushAttrib = GETPROC("glPushAttrib");
|
||||||
|
@ -276,7 +280,9 @@ int loadgldriver(const char *driver)
|
||||||
bglPopMatrix = GETPROC("glPopMatrix");
|
bglPopMatrix = GETPROC("glPopMatrix");
|
||||||
bglLoadIdentity = GETPROC("glLoadIdentity");
|
bglLoadIdentity = GETPROC("glLoadIdentity");
|
||||||
bglLoadMatrixf = GETPROC("glLoadMatrixf");
|
bglLoadMatrixf = GETPROC("glLoadMatrixf");
|
||||||
|
bglLoadMatrixd = GETPROC("glLoadMatrixd");
|
||||||
bglMultMatrixf = GETPROC("glMultMatrixf");
|
bglMultMatrixf = GETPROC("glMultMatrixf");
|
||||||
|
bglMultMatrixd = GETPROC("glMultMatrixd");
|
||||||
bglRotatef = GETPROC("glRotatef");
|
bglRotatef = GETPROC("glRotatef");
|
||||||
bglScalef = GETPROC("glScalef");
|
bglScalef = GETPROC("glScalef");
|
||||||
bglTranslatef = GETPROC("glTranslatef");
|
bglTranslatef = GETPROC("glTranslatef");
|
||||||
|
@ -413,6 +419,7 @@ int unloadgldriver(void)
|
||||||
bglPolygonMode = NULL;
|
bglPolygonMode = NULL;
|
||||||
bglEnable = NULL;
|
bglEnable = NULL;
|
||||||
bglDisable = NULL;
|
bglDisable = NULL;
|
||||||
|
bglGetDoublev = NULL;
|
||||||
bglGetFloatv = NULL;
|
bglGetFloatv = NULL;
|
||||||
bglGetIntegerv = NULL;
|
bglGetIntegerv = NULL;
|
||||||
bglPushAttrib = NULL;
|
bglPushAttrib = NULL;
|
||||||
|
@ -437,7 +444,9 @@ int unloadgldriver(void)
|
||||||
bglPopMatrix = NULL;
|
bglPopMatrix = NULL;
|
||||||
bglLoadIdentity = NULL;
|
bglLoadIdentity = NULL;
|
||||||
bglLoadMatrixf = NULL;
|
bglLoadMatrixf = NULL;
|
||||||
|
bglLoadMatrixd = NULL;
|
||||||
bglMultMatrixf = NULL;
|
bglMultMatrixf = NULL;
|
||||||
|
bglMultMatrixd = NULL;
|
||||||
bglRotatef = NULL;
|
bglRotatef = NULL;
|
||||||
bglScalef = NULL;
|
bglScalef = NULL;
|
||||||
bglTranslatef = NULL;
|
bglTranslatef = NULL;
|
||||||
|
|
|
@ -859,6 +859,7 @@ static void updateanimation (md2model *m, spritetype *tspr)
|
||||||
{
|
{
|
||||||
mdanim_t *anim;
|
mdanim_t *anim;
|
||||||
long i, j;
|
long i, j;
|
||||||
|
int fps;
|
||||||
|
|
||||||
if (mdpause)
|
if (mdpause)
|
||||||
{
|
{
|
||||||
|
@ -880,25 +881,49 @@ if (!anim) { m->interpol = 0; return; }
|
||||||
{
|
{
|
||||||
spriteext[tspr->owner].mdanimcur = (short)anim->startframe;
|
spriteext[tspr->owner].mdanimcur = (short)anim->startframe;
|
||||||
spriteext[tspr->owner].mdanimtims = mdtims;
|
spriteext[tspr->owner].mdanimtims = mdtims;
|
||||||
m->cframe = m->nframe = anim->startframe;
|
|
||||||
m->interpol = 0;
|
m->interpol = 0;
|
||||||
|
if (!r_animsmoothing)
|
||||||
|
{
|
||||||
|
m->cframe = m->nframe = anim->startframe;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
spriteext[tspr->owner].mdsmooth = 1;
|
||||||
|
}
|
||||||
|
|
||||||
i = (mdtims-spriteext[tspr->owner].mdanimtims)*((anim->fpssc*timerticspersec)/120);
|
if (spriteext[tspr->owner].mdsmooth)
|
||||||
|
fps = anim->fpssc / r_animsmoothing;
|
||||||
|
else
|
||||||
|
fps = anim->fpssc;
|
||||||
|
|
||||||
|
i = (mdtims-spriteext[tspr->owner].mdanimtims)*((fps*timerticspersec)/120);
|
||||||
j = ((anim->endframe+1-anim->startframe)<<16);
|
j = ((anim->endframe+1-anim->startframe)<<16);
|
||||||
//Just in case you play the game for a VERY long time...
|
//Just in case you play the game for a VERY long time...
|
||||||
if (i < 0) { i = 0; spriteext[tspr->owner].mdanimtims = mdtims; }
|
if (i < 0) { i = 0; spriteext[tspr->owner].mdanimtims = mdtims; }
|
||||||
//compare with j*2 instead of j to ensure i stays > j-65536 for MDANIM_ONESHOT
|
//compare with j*2 instead of j to ensure i stays > j-65536 for MDANIM_ONESHOT
|
||||||
if ((i >= j+j) && (anim->fpssc)) //Keep mdanimtims close to mdtims to avoid the use of MOD
|
if ((i >= j+j) && (fps)) //Keep mdanimtims close to mdtims to avoid the use of MOD
|
||||||
spriteext[tspr->owner].mdanimtims += j/((anim->fpssc*timerticspersec)/120);
|
spriteext[tspr->owner].mdanimtims += j/((fps*timerticspersec)/120);
|
||||||
|
|
||||||
if (anim->flags&MDANIM_ONESHOT)
|
if (anim->flags&MDANIM_ONESHOT)
|
||||||
{ if (i > j-65536) i = j-65536; }
|
{ if (i > j-65536) i = j-65536; }
|
||||||
else { if (i >= j) { i -= j; if (i >= j) i %= j; } }
|
else { if (i >= j) { i -= j; if (i >= j) i %= j; } }
|
||||||
|
|
||||||
|
if (r_animsmoothing)
|
||||||
|
{
|
||||||
|
m->nframe = (i>>16)+anim->startframe;
|
||||||
|
if (m->nframe != spriteext[tspr->owner].mdcurframe)
|
||||||
|
{
|
||||||
|
spriteext[tspr->owner].mdoldframe = spriteext[tspr->owner].mdcurframe;
|
||||||
|
spriteext[tspr->owner].mdcurframe = m->nframe;
|
||||||
|
}
|
||||||
|
m->cframe = spriteext[tspr->owner].mdoldframe;
|
||||||
|
if (m->nframe > anim->startframe)
|
||||||
|
spriteext[tspr->owner].mdsmooth = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
m->cframe = (i>>16)+anim->startframe;
|
m->cframe = (i>>16)+anim->startframe;
|
||||||
m->nframe = m->cframe+1; if (m->nframe > anim->endframe) m->nframe = anim->startframe;
|
m->nframe = m->cframe+1; if (m->nframe > anim->endframe) m->nframe = anim->startframe;
|
||||||
|
}
|
||||||
m->interpol = ((float)(i&65535))/65536.f;
|
m->interpol = ((float)(i&65535))/65536.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,11 @@ short cursky;
|
||||||
// CONTROL
|
// CONTROL
|
||||||
float frustum[16]; // left right top bottom
|
float frustum[16]; // left right top bottom
|
||||||
|
|
||||||
|
GLdouble modelviewmatrix[16];
|
||||||
|
GLdouble projectionmatrix[16];
|
||||||
|
GLint viewport[4];
|
||||||
|
GLint portal[4];
|
||||||
|
|
||||||
_cliplane *cliplanes;
|
_cliplane *cliplanes;
|
||||||
int cliplanecount, maxcliplanecount;
|
int cliplanecount, maxcliplanecount;
|
||||||
|
|
||||||
|
@ -77,6 +82,8 @@ void polymer_glinit(void)
|
||||||
bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
bglViewport(0, 0, xdim, ydim);
|
bglViewport(0, 0, xdim, ydim);
|
||||||
|
|
||||||
|
bglGetIntegerv(GL_VIEWPORT, viewport);
|
||||||
|
|
||||||
// texturing
|
// texturing
|
||||||
bglEnable(GL_TEXTURE_2D);
|
bglEnable(GL_TEXTURE_2D);
|
||||||
bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
|
bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
|
||||||
|
@ -94,6 +101,9 @@ void polymer_glinit(void)
|
||||||
bglLoadIdentity();
|
bglLoadIdentity();
|
||||||
bgluPerspective((float)(pr_fov) / (2048.0f / 360.0f), (float)xdim / (float)ydim, 0.001f, 1000000.0f);
|
bgluPerspective((float)(pr_fov) / (2048.0f / 360.0f), (float)xdim / (float)ydim, 0.001f, 1000000.0f);
|
||||||
|
|
||||||
|
// get the new projection matrix
|
||||||
|
bglGetDoublev(GL_PROJECTION_MATRIX, projectionmatrix);
|
||||||
|
|
||||||
bglMatrixMode(GL_MODELVIEW);
|
bglMatrixMode(GL_MODELVIEW);
|
||||||
bglLoadIdentity();
|
bglLoadIdentity();
|
||||||
|
|
||||||
|
@ -175,11 +185,18 @@ void polymer_drawrooms(long daposx, long daposy, long daposz, sho
|
||||||
bglScalef(1.0f / 1000.0f, 1.0f / 16000.0f, 1.0f / 1000.0f);
|
bglScalef(1.0f / 1000.0f, 1.0f / 16000.0f, 1.0f / 1000.0f);
|
||||||
bglTranslatef(pos[0], pos[1], pos[2]);
|
bglTranslatef(pos[0], pos[1], pos[2]);
|
||||||
|
|
||||||
|
// get the new modelview
|
||||||
|
bglGetDoublev(GL_MODELVIEW_MATRIX, modelviewmatrix);
|
||||||
|
|
||||||
if (pr_frustumculling)
|
if (pr_frustumculling)
|
||||||
polymer_extractfrustum();
|
polymer_extractfrustum(modelviewmatrix, projectionmatrix);
|
||||||
|
|
||||||
|
// initialize the portal to the whole viewport
|
||||||
|
memcpy(portal, viewport, sizeof(GLint) * 4);
|
||||||
|
|
||||||
cliplanecount = 0;
|
cliplanecount = 0;
|
||||||
|
|
||||||
|
// game tic
|
||||||
if (updatesectors || 1)
|
if (updatesectors || 1)
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -198,6 +215,7 @@ void polymer_drawrooms(long daposx, long daposy, long daposz, sho
|
||||||
updatesectors = 0;
|
updatesectors = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// external view (editor)
|
||||||
if (dacursectnum == -1)
|
if (dacursectnum == -1)
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -216,6 +234,7 @@ void polymer_drawrooms(long daposx, long daposy, long daposz, sho
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unflag all sectors
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < numsectors)
|
while (i < numsectors)
|
||||||
{
|
{
|
||||||
|
@ -223,7 +242,9 @@ void polymer_drawrooms(long daposx, long daposy, long daposz, sho
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
prsectors[dacursectnum]->drawingstate = 2; // SEED OF LIFE
|
polymer_drawroom(dacursectnum);
|
||||||
|
|
||||||
|
/*prsectors[dacursectnum]->drawingstate = 2; // SEED OF LIFE
|
||||||
|
|
||||||
drawnsectors = 1;
|
drawnsectors = 1;
|
||||||
while (drawnsectors > 0)
|
while (drawnsectors > 0)
|
||||||
|
@ -243,20 +264,11 @@ void polymer_drawrooms(long daposx, long daposy, long daposz, sho
|
||||||
j = 0;
|
j = 0;
|
||||||
while (j < sec->wallnum)
|
while (j < sec->wallnum)
|
||||||
{
|
{
|
||||||
if (((pr_frustumculling == 0) || polymer_portalinfrustum(sec->wallptr + j)) &&
|
if ((pr_frustumculling == 0) || polymer_portalinfrustum(sec->wallptr + j))
|
||||||
((pr_cliplanes == 0) || polymer_wallincliplanes(sec->wallptr + j)))
|
|
||||||
{
|
{
|
||||||
polymer_drawwall(sec->wallptr + j);
|
polymer_drawwall(sec->wallptr + j);
|
||||||
if ((wal->nextsector != -1) && (prsectors[wal->nextsector]) && (prsectors[wal->nextsector]->drawingstate == 0))
|
if ((wal->nextsector != -1) && (prsectors[wal->nextsector]) && (prsectors[wal->nextsector]->drawingstate == 0))
|
||||||
prsectors[wal->nextsector]->drawingstate = 1;
|
prsectors[wal->nextsector]->drawingstate = 1;
|
||||||
if (wal->nextsector == -1 && pr_cliplanes)
|
|
||||||
{ // add a 2D cliplane for map limits
|
|
||||||
polymer_addcliplane(equation(wal->x, wal->y, wall[wal->point2].x, wall[wal->point2].y),
|
|
||||||
equation(daposx, daposy, wal->x, wal->y),
|
|
||||||
equation(daposx, daposy, wall[wal->point2].x, wall[wal->point2].y),
|
|
||||||
(float)(daposx + wal->x + wall[wal->point2].x) / 3.0f,
|
|
||||||
(float)(daposy + wal->y + wall[wal->point2].y) / 3.0f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
j++;
|
j++;
|
||||||
|
@ -276,11 +288,50 @@ void polymer_drawrooms(long daposx, long daposy, long daposz, sho
|
||||||
prsectors[i]->drawingstate = 2;
|
prsectors[i]->drawingstate = 2;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (pr_verbosity >= 3) OSD_Printf("PR : Rooms drawn.\n");
|
if (pr_verbosity >= 3) OSD_Printf("PR : Rooms drawn.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void polymer_drawroom(short sectnum)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
sectortype *sec;
|
||||||
|
walltype *wal;
|
||||||
|
GLint curportal[4];
|
||||||
|
|
||||||
|
sec = §or[i];
|
||||||
|
wal = &wall[sec->wallptr];
|
||||||
|
|
||||||
|
memcpy(curportal, portal, sizeof(GLint) * 4);
|
||||||
|
|
||||||
|
// first draw the sector
|
||||||
|
polymer_drawsector(sectnum);
|
||||||
|
prsectors[sectnum]->drawingstate = 1;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < sec->wallnum)
|
||||||
|
{
|
||||||
|
if (polymer_checkportal(sec->wallptr + i))
|
||||||
|
{
|
||||||
|
polymer_drawwall(sec->wallptr + i);
|
||||||
|
if ((wal->nextsector != -1) && (prsectors[wal->nextsector]->drawingstate == 0))
|
||||||
|
polymer_drawroom(wal->nextsector);
|
||||||
|
memcpy(portal, curportal, sizeof(GLint) * 4);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
wal = &wall[sec->wallptr + i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int polymer_checkportal(short wallnum)
|
||||||
|
{ // Returns 1 if the wall is in the current portal and sets the current portal to the wall, returns 0 otherwise
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void polymer_rotatesprite(long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2)
|
void polymer_rotatesprite(long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -977,17 +1028,15 @@ void polymer_drawwall(short wallnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HSR
|
// HSR
|
||||||
void polymer_extractfrustum(void)
|
void polymer_extractfrustum(GLdouble* modelview, GLdouble* projection)
|
||||||
{
|
{
|
||||||
GLfloat matrix[16];
|
GLdouble matrix[16];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
bglMatrixMode(GL_TEXTURE);
|
bglMatrixMode(GL_TEXTURE);
|
||||||
bglGetFloatv(GL_PROJECTION_MATRIX, matrix);
|
bglLoadMatrixd(projection);
|
||||||
bglLoadMatrixf(matrix);
|
bglMultMatrixd(modelview);
|
||||||
bglGetFloatv(GL_MODELVIEW_MATRIX, matrix);
|
bglGetDoublev(GL_TEXTURE_MATRIX, matrix);
|
||||||
bglMultMatrixf(matrix);
|
|
||||||
bglGetFloatv(GL_TEXTURE_MATRIX, matrix);
|
|
||||||
bglLoadIdentity();
|
bglLoadIdentity();
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
|
@ -162,6 +162,8 @@ long r_vertexarrays = 1;
|
||||||
long r_vbos = 0;
|
long r_vbos = 0;
|
||||||
long r_vbocount = 64;
|
long r_vbocount = 64;
|
||||||
|
|
||||||
|
// model animation smoothing cvar
|
||||||
|
long r_animsmoothing = 0;
|
||||||
|
|
||||||
static float fogresult, ofogresult, fogcol[4];
|
static float fogresult, ofogresult, fogcol[4];
|
||||||
|
|
||||||
|
@ -5375,6 +5377,12 @@ static int osdcmd_polymostvars(const osdfuncparm_t *parm)
|
||||||
else r_vbocount = val;
|
else r_vbocount = val;
|
||||||
return OSDCMD_OK;
|
return OSDCMD_OK;
|
||||||
}
|
}
|
||||||
|
else if (!Bstrcasecmp(parm->name, "r_animsmoothing")) {
|
||||||
|
if (showval) { OSD_Printf("r_animsmoothing is %d\n", r_animsmoothing); }
|
||||||
|
else if (val < 1) { OSD_Printf("Value out of range.\n"); }
|
||||||
|
else r_animsmoothing = val;
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
else if (!Bstrcasecmp(parm->name, "glpolygonmode")) {
|
else if (!Bstrcasecmp(parm->name, "glpolygonmode")) {
|
||||||
if (showval) { OSD_Printf("glpolygonmode is %d\n", glpolygonmode); }
|
if (showval) { OSD_Printf("glpolygonmode is %d\n", glpolygonmode); }
|
||||||
else glpolygonmode = val;
|
else glpolygonmode = val;
|
||||||
|
@ -5464,6 +5472,7 @@ void polymost_initosdfuncs(void)
|
||||||
OSD_RegisterFunction("r_vertexarrays","r_vertexarrays: enable/disable using vertex arrays when drawing models",osdcmd_polymostvars);
|
OSD_RegisterFunction("r_vertexarrays","r_vertexarrays: enable/disable using vertex arrays when drawing models",osdcmd_polymostvars);
|
||||||
OSD_RegisterFunction("r_vbos","r_vbos: enable/disable using Vertex Buffer Objects when drawing models",osdcmd_polymostvars);
|
OSD_RegisterFunction("r_vbos","r_vbos: enable/disable using Vertex Buffer Objects when drawing models",osdcmd_polymostvars);
|
||||||
OSD_RegisterFunction("r_vbocount","r_vbocount: sets the number of Vertex Buffer Objects to use when drawing models",osdcmd_polymostvars);
|
OSD_RegisterFunction("r_vbocount","r_vbocount: sets the number of Vertex Buffer Objects to use when drawing models",osdcmd_polymostvars);
|
||||||
|
OSD_RegisterFunction("r_animsmoothing","r_animsmoothing: enable/disable model animation smoothing",osdcmd_polymostvars);
|
||||||
#endif
|
#endif
|
||||||
OSD_RegisterFunction("usemodels","usemodels: enable/disable model rendering in >8-bit mode",osdcmd_polymostvars);
|
OSD_RegisterFunction("usemodels","usemodels: enable/disable model rendering in >8-bit mode",osdcmd_polymostvars);
|
||||||
OSD_RegisterFunction("usehightile","usehightile: enable/disable hightile texture rendering in >8-bit mode",osdcmd_polymostvars);
|
OSD_RegisterFunction("usehightile","usehightile: enable/disable hightile texture rendering in >8-bit mode",osdcmd_polymostvars);
|
||||||
|
|
|
@ -291,6 +291,7 @@ void CONFIG_SetDefaults(void)
|
||||||
ud.viewbob = 1;
|
ud.viewbob = 1;
|
||||||
ud.weaponsway = 1;
|
ud.weaponsway = 1;
|
||||||
ud.weaponswitch = 3; // new+empty
|
ud.weaponswitch = 3; // new+empty
|
||||||
|
ud.angleinterpolation = 50;
|
||||||
UseJoystick = 0;
|
UseJoystick = 0;
|
||||||
UseMouse = 1;
|
UseMouse = 1;
|
||||||
VoiceToggle = 2;
|
VoiceToggle = 2;
|
||||||
|
@ -685,6 +686,8 @@ int32 CONFIG_ReadSetup(void)
|
||||||
SCRIPT_GetNumber(scripthandle, "Screen Setup", "GLVBOs", &r_vbos);
|
SCRIPT_GetNumber(scripthandle, "Screen Setup", "GLVBOs", &r_vbos);
|
||||||
SCRIPT_GetNumber(scripthandle, "Screen Setup", "GLVBOCount", &r_vbocount);
|
SCRIPT_GetNumber(scripthandle, "Screen Setup", "GLVBOCount", &r_vbocount);
|
||||||
|
|
||||||
|
SCRIPT_GetNumber(scripthandle, "Screen Setup", "GLAnimationSmoothing", &r_animsmoothing);
|
||||||
|
|
||||||
dummy = usemodels;
|
dummy = usemodels;
|
||||||
SCRIPT_GetNumber(scripthandle, "Screen Setup", "UseModels",&dummy);
|
SCRIPT_GetNumber(scripthandle, "Screen Setup", "UseModels",&dummy);
|
||||||
usemodels = dummy != 0;
|
usemodels = dummy != 0;
|
||||||
|
@ -722,6 +725,8 @@ int32 CONFIG_ReadSetup(void)
|
||||||
SCRIPT_GetNumber(scripthandle, "Misc", "UsePrecache",&dummy);
|
SCRIPT_GetNumber(scripthandle, "Misc", "UsePrecache",&dummy);
|
||||||
useprecache = dummy != 0;
|
useprecache = dummy != 0;
|
||||||
|
|
||||||
|
SCRIPT_GetNumber(scripthandle, "Misc","AngleInterpolation",&ud.angleinterpolation);
|
||||||
|
|
||||||
// weapon choices are defaulted in checkcommandline, which may override them
|
// weapon choices are defaulted in checkcommandline, which may override them
|
||||||
if (!CommandWeaponChoice)
|
if (!CommandWeaponChoice)
|
||||||
for (i=0;i<10;i++)
|
for (i=0;i<10;i++)
|
||||||
|
@ -825,6 +830,7 @@ void CONFIG_WriteSetup(void)
|
||||||
SCRIPT_PutNumber(scripthandle, "Misc", "UsePrecache",useprecache,false,false);
|
SCRIPT_PutNumber(scripthandle, "Misc", "UsePrecache",useprecache,false,false);
|
||||||
SCRIPT_PutNumber(scripthandle, "Misc", "ViewBobbing",ud.viewbob,false,false);
|
SCRIPT_PutNumber(scripthandle, "Misc", "ViewBobbing",ud.viewbob,false,false);
|
||||||
SCRIPT_PutNumber(scripthandle, "Misc", "WeaponSway",ud.weaponsway,false,false);
|
SCRIPT_PutNumber(scripthandle, "Misc", "WeaponSway",ud.weaponsway,false,false);
|
||||||
|
SCRIPT_PutNumber(scripthandle, "Misc", "AngleInterpolation",ud.angleinterpolation,false,false);
|
||||||
|
|
||||||
SCRIPT_PutNumber(scripthandle, "Screen Setup", "Detail",ud.detail,false,false);
|
SCRIPT_PutNumber(scripthandle, "Screen Setup", "Detail",ud.detail,false,false);
|
||||||
#if defined(POLYMOST) && defined(USE_OPENGL)
|
#if defined(POLYMOST) && defined(USE_OPENGL)
|
||||||
|
@ -844,6 +850,8 @@ void CONFIG_WriteSetup(void)
|
||||||
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLVertexArrays", r_vertexarrays,false,false);
|
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLVertexArrays", r_vertexarrays,false,false);
|
||||||
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLVBOs", r_vbos,false,false);
|
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLVBOs", r_vbos,false,false);
|
||||||
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLVBOCount", r_vbocount,false,false);
|
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLVBOCount", r_vbocount,false,false);
|
||||||
|
|
||||||
|
SCRIPT_PutNumber(scripthandle, "Screen Setup", "GLAnimationSmoothing",r_animsmoothing,false,false);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RENDERTYPEWIN
|
#ifdef RENDERTYPEWIN
|
||||||
SCRIPT_PutNumber(scripthandle, "Screen Setup", "MaxRefreshFreq",maxrefreshfreq,false,false);
|
SCRIPT_PutNumber(scripthandle, "Screen Setup", "MaxRefreshFreq",maxrefreshfreq,false,false);
|
||||||
|
|
|
@ -366,7 +366,7 @@ struct user_defs {
|
||||||
|
|
||||||
int32 entered_name,screen_tilting,shadows,fta_on,executions,auto_run;
|
int32 entered_name,screen_tilting,shadows,fta_on,executions,auto_run;
|
||||||
int32 coords,tickrate,levelstats,m_coop,coop,screen_size,lockout,crosshair;
|
int32 coords,tickrate,levelstats,m_coop,coop,screen_size,lockout,crosshair;
|
||||||
int32 wchoice[MAXPLAYERS][MAX_WEAPONS],playerai;
|
int32 wchoice[MAXPLAYERS][MAX_WEAPONS],playerai,angleinterpolation;
|
||||||
|
|
||||||
int32 respawn_monsters,respawn_items,respawn_inventory,recstat,monsters_off,brightness;
|
int32 respawn_monsters,respawn_items,respawn_inventory,recstat,monsters_off,brightness;
|
||||||
int32 m_respawn_items,m_respawn_monsters,m_respawn_inventory,m_recstat,m_monsters_off,detail;
|
int32 m_respawn_items,m_respawn_monsters,m_respawn_inventory,m_recstat,m_monsters_off,detail;
|
||||||
|
@ -502,7 +502,7 @@ struct spriteinterpolate {
|
||||||
long x;
|
long x;
|
||||||
long y;
|
long y;
|
||||||
long z;
|
long z;
|
||||||
int ang;
|
short ang, oldang, angdir, angdif;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct spriteinterpolate sprpos[MAXSPRITES];
|
extern struct spriteinterpolate sprpos[MAXSPRITES];
|
||||||
|
|
|
@ -4250,7 +4250,7 @@ int EGS(int whatsect,long s_x,long s_y,long s_z,int s_pn,int s_s,int s_xr,int s_
|
||||||
sprpos[i].x = sprite[i].x;
|
sprpos[i].x = sprite[i].x;
|
||||||
sprpos[i].y = sprite[i].y;
|
sprpos[i].y = sprite[i].y;
|
||||||
sprpos[i].z = sprite[i].z;
|
sprpos[i].z = sprite[i].z;
|
||||||
sprpos[i].ang = sprite[i].ang;
|
sprpos[i].ang = sprpos[i].oldang = sprite[i].ang;
|
||||||
|
|
||||||
if (actorscrptr[s_pn])
|
if (actorscrptr[s_pn])
|
||||||
{
|
{
|
||||||
|
@ -4385,7 +4385,7 @@ int spawn(int j, int pn)
|
||||||
sprpos[i].x = sprite[i].x;
|
sprpos[i].x = sprite[i].x;
|
||||||
sprpos[i].y = sprite[i].y;
|
sprpos[i].y = sprite[i].y;
|
||||||
sprpos[i].z = sprite[i].z;
|
sprpos[i].z = sprite[i].z;
|
||||||
sprpos[i].ang = sprite[i].ang;
|
sprpos[i].ang = sprpos[i].oldang = sprite[i].ang;
|
||||||
|
|
||||||
if (PN != SPEAKER && PN != LETTER && PN != DUCK && PN != TARGET && PN != TRIPBOMB && PN != VIEWSCREEN && PN != VIEWSCREEN2 && (CS&48))
|
if (PN != SPEAKER && PN != LETTER && PN != DUCK && PN != TARGET && PN != TRIPBOMB && PN != VIEWSCREEN && PN != VIEWSCREEN2 && (CS&48))
|
||||||
if (!(PN >= CRACK1 && PN <= CRACK4))
|
if (!(PN >= CRACK1 && PN <= CRACK4))
|
||||||
|
@ -6772,6 +6772,14 @@ PALONLY:
|
||||||
t->z = sprpos[i].z+mulscale16((long)(s->z-sprpos[i].z),smoothratio);
|
t->z = sprpos[i].z+mulscale16((long)(s->z-sprpos[i].z),smoothratio);
|
||||||
t->ang = sprpos[i].ang+mulscale16((long)(s->ang-sprpos[i].ang),smoothratio);
|
t->ang = sprpos[i].ang+mulscale16((long)(s->ang-sprpos[i].ang),smoothratio);
|
||||||
#endif
|
#endif
|
||||||
|
if (ud.angleinterpolation)
|
||||||
|
{
|
||||||
|
if (sprpos[i].ang != sprpos[i].oldang)
|
||||||
|
t->ang = (sprpos[i].oldang + (mulscale16((long)(sprpos[i].angdif),smoothratio) * sprpos[i].angdir)) & 2047;
|
||||||
|
else
|
||||||
|
t->ang = sprpos[i].ang;
|
||||||
|
}
|
||||||
|
|
||||||
if (t4)
|
if (t4)
|
||||||
{
|
{
|
||||||
l = *(long *)(t4+8);
|
l = *(long *)(t4+8);
|
||||||
|
|
|
@ -6385,6 +6385,8 @@ void LoadActor(long iActor)
|
||||||
|
|
||||||
void execute(int iActor,int iPlayer,long lDist)
|
void execute(int iActor,int iPlayer,long lDist)
|
||||||
{
|
{
|
||||||
|
short temp, temp2;
|
||||||
|
|
||||||
g_i = iActor; // Sprite ID
|
g_i = iActor; // Sprite ID
|
||||||
g_p = iPlayer; // Player ID
|
g_p = iPlayer; // Player ID
|
||||||
g_x = lDist; // ??
|
g_x = lDist; // ??
|
||||||
|
@ -6440,6 +6442,21 @@ void execute(int iActor,int iPlayer,long lDist)
|
||||||
sprpos[g_i].ang = g_sp->ang;
|
sprpos[g_i].ang = g_sp->ang;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (ud.angleinterpolation)
|
||||||
|
{
|
||||||
|
temp = (g_sp->ang & 2047) - sprpos[g_i].ang;
|
||||||
|
sprpos[g_i].oldang = sprpos[g_i].ang;
|
||||||
|
if (temp)
|
||||||
|
{
|
||||||
|
temp2 = temp/klabs(temp);
|
||||||
|
if (klabs(temp) > 1024) temp2 = -(temp2);
|
||||||
|
sprpos[g_i].angdir = temp2;
|
||||||
|
sprpos[g_i].angdif = min(ud.angleinterpolation,klabs(temp));
|
||||||
|
sprpos[g_i].ang += sprpos[g_i].angdif * sprpos[g_i].angdir;
|
||||||
|
sprpos[g_i].ang &= 2047;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (g_sp->statnum == 1)
|
if (g_sp->statnum == 1)
|
||||||
{
|
{
|
||||||
if (badguy(g_sp))
|
if (badguy(g_sp))
|
||||||
|
|
|
@ -643,6 +643,7 @@ cvar[] =
|
||||||
|
|
||||||
{ "cl_weaponsway", "cl_weaponsway: enable/disable player weapon swaying\n", (void*)&ud.weaponsway, CVAR_BOOL, 0, 0, 1 },
|
{ "cl_weaponsway", "cl_weaponsway: enable/disable player weapon swaying\n", (void*)&ud.weaponsway, CVAR_BOOL, 0, 0, 1 },
|
||||||
{ "cl_weaponswitch", "cl_weaponswitch: enable/disable auto weapon switching", (void*)&ud.weaponswitch, CVAR_INT|256, 0, 0, 3 },
|
{ "cl_weaponswitch", "cl_weaponswitch: enable/disable auto weapon switching", (void*)&ud.weaponswitch, CVAR_INT|256, 0, 0, 3 },
|
||||||
|
{ "cl_angleinterpolation", "cl_angleinterpolation: enable/disable angle interpolation", (void*)&ud.angleinterpolation, CVAR_INT, 0, 0, 256 },
|
||||||
#if defined(POLYMOST) && defined(USE_OPENGL)
|
#if defined(POLYMOST) && defined(USE_OPENGL)
|
||||||
{ "r_anamorphic", "r_anamorphic: enable/disable widescreen mode", (void*)&glwidescreen, CVAR_BOOL, 0, 0, 1 },
|
{ "r_anamorphic", "r_anamorphic: enable/disable widescreen mode", (void*)&glwidescreen, CVAR_BOOL, 0, 0, 1 },
|
||||||
{ "r_projectionhack", "r_projectionhack: enable/disable projection hack", (void*)&glprojectionhacks, CVAR_BOOL, 0, 0, 1 },
|
{ "r_projectionhack", "r_projectionhack: enable/disable projection hack", (void*)&glprojectionhacks, CVAR_BOOL, 0, 0, 1 },
|
||||||
|
|
Loading…
Reference in a new issue