]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_sprites.c
added #define snprintf _snprintf for win32
[xonotic/darkplaces.git] / r_sprites.c
index 27da0a66d4b4b832d99dd3e2ace2e473296d9a48..e7f561179493f4903c9ab1d5bd13e1808995af2d 100644 (file)
@@ -28,7 +28,7 @@ void R_ClipSpriteImage (entity_t *e, msprite_t *psprite, frameblend_t *blend, ve
 
 void R_ClipSprite (entity_t *e, frameblend_t *blend)
 {
-       vec3_t right, up, org;
+       vec3_t forward, right, up, org;
        msprite_t *psprite;
 
        if (!blend[0].lerp)
@@ -39,12 +39,11 @@ void R_ClipSprite (entity_t *e, frameblend_t *blend)
        if (psprite->type == SPR_ORIENTED)
        {
                // bullet marks on walls
-               vec3_t forward;
                AngleVectors (e->render.angles, forward, right, up);
                // nudge it toward the view, so it will be infront of the wall
                VectorSubtract(e->render.origin, vpn, org);
                // don't draw if it's a backface
-               if (DotProduct(r_origin, forward) < (DotProduct(org, forward) + 1.0f))
+               if (DotProduct(r_origin, forward) > (DotProduct(org, forward) - 1.0f))
                        return;
        }
        else
@@ -73,7 +72,7 @@ void GL_DrawSpriteImage (mspriteframe_t *frame, vec3_t origin, vec3_t up, vec3_t
 {
        byte alphaub;
        alphaub = bound(0, alpha, 255);
-       transpolybegin(R_GetTexture(frame->texture), 0, R_GetTexture(frame->fogtexture), currententity->render.effects & EF_ADDITIVE ? TPOLYTYPE_ADD : TPOLYTYPE_ALPHA);
+       transpolybegin(R_GetTexture(frame->texture), 0, R_GetTexture(frame->fogtexture), ((currententity->render.effects & EF_ADDITIVE) || (currententity->render.model->flags & EF_ADDITIVE)) ? TPOLYTYPE_ADD : TPOLYTYPE_ALPHA);
        transpolyvertub(origin[0] + frame->down * up[0] + frame->left  * right[0], origin[1] + frame->down * up[1] + frame->left  * right[1], origin[2] + frame->down * up[2] + frame->left  * right[2], 0, 1, red, green, blue, alphaub);
        transpolyvertub(origin[0] + frame->up   * up[0] + frame->left  * right[0], origin[1] + frame->up   * up[1] + frame->left  * right[1], origin[2] + frame->up   * up[2] + frame->left  * right[2], 0, 0, red, green, blue, alphaub);
        transpolyvertub(origin[0] + frame->up   * up[0] + frame->right * right[0], origin[1] + frame->up   * up[1] + frame->right * right[1], origin[2] + frame->up   * up[2] + frame->right * right[2], 1, 0, red, green, blue, alphaub);
@@ -88,7 +87,7 @@ R_DrawSpriteModel
 */
 void R_DrawSpriteModel (entity_t *e, frameblend_t *blend)
 {
-       vec3_t          right, up, org, color, mins, maxs;
+       vec3_t          forward, right, up, org, color, mins, maxs;
        byte            colorub[4];
        msprite_t       *psprite;
 
@@ -107,15 +106,14 @@ void R_DrawSpriteModel (entity_t *e, frameblend_t *blend)
        //psprite = e->model->cache.data;
 
        if (psprite->type == SPR_ORIENTED)
-       {       // bullet marks on walls
-               vec3_t forward;
+       {
+               // bullet marks on walls
                AngleVectors (e->render.angles, forward, right, up);
                VectorSubtract(e->render.origin, vpn, org);
-               if (DotProduct(r_origin, forward) < DotProduct(e->render.origin, forward))
-                       return; // backface
        }
        else
-       {       // normal sprite
+       {
+               // normal sprite
                VectorCopy(vup, up);
                VectorCopy(vright, right);
                VectorCopy(e->render.origin, org);