Editors note: i scrapped this together from an #openquake chat log, it may be usefull to you, it was to me at least This is to fix oriented sprites, so you can use sprites as bullet holes and other types of things in which case oriented sprites would be handy. In gl_rmain.c simply replace the old R_DrawSpriteModel function with the following one: //Atomizer - New math function #define VectorScalarMult(a,b,c) {c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;} //Atom void R_DrawSpriteModel (entity_t *e) { vec3_t point; mspriteframe_t *frame; float *up, *right; vec3_t v_forward, v_right, v_up; msprite_t *psprite; //Atomizer - GL_POLYOFFSET //entity_t fixed; vec3_t fixed_origin; //vec3_t multiple = {2,2,2}; vec3_t temp; //memcpy(dest, src, sizeof()); //Atom // don't even bother culling, because it's just a single // polygon without a surface cache frame = R_GetSpriteFrame (e); psprite = currententity->model->cache.data; //Atomizer - GL_POLYOFFSET //memcpy (fixed_origin, e->origin, sizeof(vec3_t)); VectorCopy(e->origin,fixed_origin); //Atom if (psprite->type == SPR_ORIENTED) { // bullet marks on walls AngleVectors (currententity->angles, v_forward, v_right, v_up); //Atomizer - GL_POLYOFFSET VectorScalarMult(v_forward,-2,temp); VectorAdd(temp,fixed_origin,fixed_origin); //Atom up = v_up; right = v_right; } else { // normal sprite up = vup; right = vright; } glColor3f (1,1,1); GL_DisableMultitexture(); GL_Bind(frame->gl_texturenum); glEnable (GL_ALPHA_TEST); glBegin (GL_QUADS); glTexCoord2f (0, 1); //Atomizer - GL_POLYOFFSET //VectorMA (e->origin, frame->down, up, point); VectorMA (fixed_origin, frame->down, up, point); //Atom VectorMA (point, frame->left, right, point); glVertex3fv (point); glTexCoord2f (0, 0); //Atomizer - GL_POLYOFFSET //VectorMA (e->origin, frame->up, up, point); VectorMA (fixed_origin, frame->up, up, point); //Atom VectorMA (point, frame->left, right, point); glVertex3fv (point); glTexCoord2f (1, 0); //Atomizer - GL_POLYOFFSET //VectorMA (e->origin, frame->up, up, point); VectorMA (fixed_origin, frame->up, up, point); //Atom VectorMA (point, frame->right, right, point); glVertex3fv (point); glTexCoord2f (1, 1); //Atomizer - GL_POLYOFFSET //VectorMA (e->origin, frame->down, up, point); VectorMA (fixed_origin, frame->down, up, point); //Atom VectorMA (point, frame->right, right, point); glVertex3fv (point); glEnd (); glDisable (GL_ALPHA_TEST); } |