--- quake2/ref_soft/r_alias.c 2018/04/24 17:58:33 1.1 +++ quake2/ref_soft/r_alias.c 2018/04/24 18:02:09 1.1.1.3 @@ -8,6 +8,10 @@ #define LIGHT_MIN 5 // lowest light value we'll allow, to avoid the // need for inner-loop light clamping +//PGM +extern byte iractive; +//PGM + int r_amodels_drawn; affinetridesc_t r_affinetridesc; @@ -233,6 +237,13 @@ void R_AliasPreparePoints (void) ((CACHE_SIZE - 1) / sizeof(finalvert_t)) + 3]; finalvert_t *pfinalverts; +//PGM + iractive = (r_newrefdef.rdflags & RDF_IRGOGGLES && currententity->flags & RF_IR_VISIBLE); +// iractive = 0; +// if(r_newrefdef.rdflags & RDF_IRGOGGLES && currententity->flags & RF_IR_VISIBLE) +// iractive = 1; +//PGM + // put work vertexes on stack, cache aligned pfinalverts = (finalvert_t *) (((long)&finalverts[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); @@ -399,7 +410,7 @@ void R_AliasSetUpTransform (void) R_AliasTransformFinalVerts ================ */ -#if id386 +#if id386 && !defined __linux__ void R_AliasTransformFinalVerts( int numpoints, finalvert_t *fv, dtrivertx_t *oldv, dtrivertx_t *newv ) { float lightcos; @@ -474,7 +485,7 @@ top_of_loop: __asm mov eax, currententity __asm mov eax, dword ptr [eax+ENTITY_FLAGS] - __asm mov ebx, RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE + __asm mov ebx, RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM __asm and eax, ebx __asm jz not_powersuit @@ -733,7 +744,8 @@ void R_AliasTransformFinalVerts( int num plightnormal = r_avertexnormals[newv->lightnormalindex]; - if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE ) ) + // PMM - added double damage shell + if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM) ) { lerped_vert[0] += plightnormal[0] * POWERSUIT_SCALE; lerped_vert[1] += plightnormal[1] * POWERSUIT_SCALE; @@ -823,7 +835,8 @@ static qboolean R_AliasSetupSkin (void) skinnum = currententity->skinnum; if ((skinnum >= s_pmdl->num_skins) || (skinnum < 0)) { - ri.Con_Printf (PRINT_ALL, "R_AliasSetupSkin: no such skin # %d\n", skinnum); + ri.Con_Printf (PRINT_ALL, "R_AliasSetupSkin %s: no such skin # %d\n", + currentmodel->name, skinnum); skinnum = 0; } @@ -947,12 +960,14 @@ void R_AliasSetupFrames( dmdl_t *pmdl ) if ( ( thisframe >= pmdl->num_frames ) || ( thisframe < 0 ) ) { - ri.Con_Printf (PRINT_ALL, "R_AliasSetupFrames: no such thisframe %d\n", thisframe); + ri.Con_Printf (PRINT_ALL, "R_AliasSetupFrames %s: no such thisframe %d\n", + currentmodel->name, thisframe); thisframe = 0; } if ( ( lastframe >= pmdl->num_frames ) || ( lastframe < 0 ) ) { - ri.Con_Printf (PRINT_ALL, "R_AliasSetupFrames: no such lastframe %d\n", lastframe); + ri.Con_Printf (PRINT_ALL, "R_AliasSetupFrames %s: no such lastframe %d\n", + currentmodel->name, lastframe); lastframe = 0; } @@ -1055,7 +1070,8 @@ void R_AliasDrawModel (void) // set up the skin and verify it exists if ( !R_AliasSetupSkin () ) { - ri.Con_Printf( PRINT_ALL, "R_AliasDrawModel - NULL skin found\n" ); + ri.Con_Printf( PRINT_ALL, "R_AliasDrawModel %s: NULL skin found\n", + currentmodel->name); return; } @@ -1065,11 +1081,16 @@ void R_AliasDrawModel (void) /* ** select the proper span routine based on translucency */ - if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE ) ) + // PMM - added double damage shell + // PMM - 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; - color = currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE ); + // PMM - added double + color = currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM); + // PMM - reordered, old code first +/* if ( color == RF_SHELL_RED ) r_aliasblendcolor = SHELL_RED_COLOR; else if ( color == RF_SHELL_GREEN ) @@ -1082,9 +1103,41 @@ void R_AliasDrawModel (void) r_aliasblendcolor = SHELL_RB_COLOR; else if ( color == (RF_SHELL_BLUE | RF_SHELL_GREEN) ) r_aliasblendcolor = SHELL_BG_COLOR; + // PMM - 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; + // pmm + else + r_aliasblendcolor = SHELL_WHITE_COLOR; +*/ + if ( color & RF_SHELL_RED ) + { + if ( ( color & RF_SHELL_BLUE) && ( color & RF_SHELL_GREEN) ) + r_aliasblendcolor = SHELL_WHITE_COLOR; + else if ( color & (RF_SHELL_BLUE | RF_SHELL_DOUBLE)) + r_aliasblendcolor = SHELL_RB_COLOR; + else + r_aliasblendcolor = SHELL_RED_COLOR; + } + else if ( color & RF_SHELL_BLUE) + { + if ( color & RF_SHELL_DOUBLE ) + r_aliasblendcolor = SHELL_CYAN_COLOR; + else + r_aliasblendcolor = SHELL_BLUE_COLOR; + } + 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 if ( color & RF_SHELL_GREEN ) + r_aliasblendcolor = SHELL_GREEN_COLOR; else r_aliasblendcolor = SHELL_WHITE_COLOR; + if ( currententity->alpha > 0.33 ) d_pdrawspans = R_PolysetDrawSpansConstant8_66; else