/* ================ R_AliasDrawModel ================ */ void R_AliasDrawModel(void) { if (r_lerpmodels->integer == 0) currententity->backlerp = 0; if ((currententity->flags & (RF_WEAPONMODEL | RF_LEFTHAND)) == (RF_WEAPONMODEL | RF_LEFTHAND)) r_refdef.xscale = -r_refdef.xscale; /* ** we have to set our frame pointers and transformations before ** doing any real work */ R_AliasSetupFrames(); R_AliasSetUpTransform(); // see if the bounding box lets us trivially reject, also sets // trivial accept status if (R_AliasCheckBBox() == BBOX_TRIVIAL_REJECT) goto exit; // set up the skin and verify it exists R_AliasSetupSkin(); r_amodels_drawn++; R_AliasSetupLighting(); R_AliasSetupBlend(); /* ** compute this_frame and old_frame addresses */ R_AliasSetUpLerpData(currententity->backlerp); if (currententity->flags & RF_DEPTHHACK) s_ziscale = (float)0x8000 * (float)0x10000 * 3.0; else s_ziscale = (float)0x8000 * (float)0x10000; R_AliasPreparePoints(); exit: if ((currententity->flags & (RF_WEAPONMODEL | RF_LEFTHAND)) == (RF_WEAPONMODEL | RF_LEFTHAND)) r_refdef.xscale = -r_refdef.xscale; }
/* ================ R_AliasDrawModel ================ */ void R_AliasDrawModel(entity_t *currententity, const model_t *currentmodel) { s_pmdl = (dmdl_t *)currentmodel->extradata; if ( r_lerpmodels->value == 0 ) currententity->backlerp = 0; float oldAliasxscale = aliasxscale; float oldAliasyscale = aliasyscale; if ( currententity->flags & RF_WEAPONMODEL ) { if ( r_lefthand->value == 2.0F ) { return; } float gunfov = 2 * tan((float)r_gunfov->value / 360 * M_PI); aliasxscale = ((float)r_refdef.vrect.width / gunfov) * r_aliasuvscale; aliasyscale = aliasxscale; if ( r_lefthand->value == 1.0F ) aliasxscale = -aliasxscale; } /* ** we have to set our frame pointers and transformations before ** doing any real work */ R_AliasSetupFrames(currententity, currentmodel, s_pmdl); R_AliasSetUpTransform(currententity); // see if the bounding box lets us trivially reject, also sets // trivial accept status if ( R_AliasCheckBBox(currententity) == BBOX_TRIVIAL_REJECT ) { if ( currententity->flags & RF_WEAPONMODEL ) { aliasxscale = oldAliasxscale; aliasyscale = oldAliasyscale; } return; } // set up the skin and verify it exists if ( !R_AliasSetupSkin(currententity, currentmodel) ) { R_Printf( PRINT_ALL, "R_AliasDrawModel %s: NULL skin found\n", currentmodel->name); aliasxscale = oldAliasxscale; aliasyscale = oldAliasyscale; return; } r_amodels_drawn++; R_AliasSetupLighting(currententity); /* ** select the proper span routine based on translucency */ // added double damage shell // reordered to handle blending if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM) ) { int color; // added double color = currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM); // reordered, new shells after old shells (so they get overriden) if ( color == RF_SHELL_RED ) r_aliasblendcolor = SHELL_RED_COLOR; else if ( color == RF_SHELL_GREEN ) r_aliasblendcolor = SHELL_GREEN_COLOR; else if ( color == RF_SHELL_BLUE ) r_aliasblendcolor = SHELL_BLUE_COLOR; else if ( color == (RF_SHELL_RED | RF_SHELL_GREEN) ) r_aliasblendcolor = SHELL_RG_COLOR; else if ( color == (RF_SHELL_RED | RF_SHELL_BLUE) ) r_aliasblendcolor = SHELL_RB_COLOR; else if ( color == (RF_SHELL_BLUE | RF_SHELL_GREEN) ) r_aliasblendcolor = SHELL_BG_COLOR; // added this .. it's yellowish else if ( color == (RF_SHELL_DOUBLE) ) r_aliasblendcolor = SHELL_DOUBLE_COLOR; else if ( color == (RF_SHELL_HALF_DAM) ) r_aliasblendcolor = SHELL_HALF_DAM_COLOR; else r_aliasblendcolor = SHELL_WHITE_COLOR; if ( currententity->alpha > 0.33 ) d_pdrawspans = R_PolysetDrawSpansConstant8_66; else d_pdrawspans = R_PolysetDrawSpansConstant8_33; } else if ( currententity->flags & RF_TRANSLUCENT ) { if ( currententity->alpha > 0.66 ) d_pdrawspans = R_PolysetDrawSpans8_Opaque; else if ( currententity->alpha > 0.33 ) d_pdrawspans = R_PolysetDrawSpans8_66; else d_pdrawspans = R_PolysetDrawSpans8_33; } else { d_pdrawspans = R_PolysetDrawSpans8_Opaque; } /* ** compute this_frame and old_frame addresses */ R_AliasSetUpLerpData(currententity, s_pmdl, currententity->backlerp); if (currententity->flags & RF_DEPTHHACK) s_ziscale = (float)0x8000 * (float)SHIFT16XYZ_MULT * 3.0; else s_ziscale = (float)0x8000 * (float)SHIFT16XYZ_MULT; R_AliasPreparePoints(currententity, finalverts, finalverts_max); if ( currententity->flags & RF_WEAPONMODEL ) { aliasxscale = oldAliasxscale; aliasyscale = oldAliasyscale; } }