/* =============== R_SetupFrame =============== */ void R_SetupFrame (void) { int edgecount; vrect_t vrect; float w, h; // don't allow cheats in multiplayer if (cl.maxclients > 1) Cvar_Set ("r_fullbright", "0"); R_AnimateLight (); r_framecount++; // build the transformation matrix for the given view angles VectorCopy (r_refdef.vieworg, r_origin); AngleVectors (r_refdef.viewangles, vpn, vright, vup); // current viewleaf r_oldviewleaf = r_viewleaf; r_viewleaf = Mod_PointInLeaf (r_origin, cl.worldmodel); V_SetContentsColor (r_viewleaf->contents); V_CalcBlend (); r_cache_thrash = false; c_brush_polys = 0; c_alias_polys = 0; }
/* =============== R_SetupFrame =============== */ void R_SetupFrame (void) { // don't allow cheats in multiplayer r_fullbright.value = 0; r_lightmap.value = 0; if (!atoi(Info_ValueForKey(cl.serverinfo, "watervis"))) r_wateralpha.value = 1; R_AnimateLight (); r_framecount++; // build the transformation matrix for the given view angles VectorCopy (r_refdef.vieworg, r_origin); AngleVectors (r_refdef.viewangles, vpn, vright, vup); // current viewleaf r_oldviewleaf = r_viewleaf; r_viewleaf = Mod_PointInLeaf (r_origin, cl.worldmodel); V_SetContentsColor (r_viewleaf->contents); V_CalcBlend (); r_cache_thrash = false; c_brush_polys = 0; c_alias_polys = 0; }
/* =============== R_SetupView =============== */ void R_SetupView (void) { Fog_SetupFrame (); //johnfitz // build the transformation matrix for the given view angles VectorCopy (r_refdef.vieworg, r_origin); AngleVectors (r_refdef.viewangles, vpn, vright, vup); // current viewleaf r_oldviewleaf = r_viewleaf; r_viewleaf = Mod_PointInLeaf (r_origin, cl.worldmodel); V_SetContentsColor (r_viewleaf->contents); V_CalcBlend (); r_cache_thrash = false; //johnfitz -- calculate r_fovx and r_fovy here r_fovx = r_refdef.fov_x; r_fovy = r_refdef.fov_y; render_warp = false; if (r_waterwarp.value) { int contents = Mod_PointInLeaf (r_origin, cl.worldmodel)->contents; if (contents == CONTENTS_WATER || contents == CONTENTS_SLIME || contents == CONTENTS_LAVA) { if (r_waterwarp.value == 1) render_warp = true; else { //variance is a percentage of width, where width = 2 * tan(fov / 2) otherwise the effect is too dramatic at high FOV and too subtle at low FOV. what a mess! r_fovx = atan(tan(DEG2RAD(r_refdef.fov_x) / 2) * (0.97 + sin(cl.time * 1.5) * 0.03)) * 2 / M_PI_DIV_180; r_fovy = atan(tan(DEG2RAD(r_refdef.fov_y) / 2) * (1.03 - sin(cl.time * 1.5) * 0.03)) * 2 / M_PI_DIV_180; } } } //johnfitz R_SetFrustum (r_fovx, r_fovy); //johnfitz -- use r_fov* vars R_MarkSurfaces (); //johnfitz -- create texture chains from PVS R_CullSurfaces (); //johnfitz -- do after R_SetFrustum and R_MarkSurfaces R_UpdateWarpTextures (); //johnfitz -- do this before R_Clear //johnfitz -- cheat-protect some draw modes r_drawflat_cheatsafe = r_fullbright_cheatsafe = r_lightmap_cheatsafe = false; r_drawworld_cheatsafe = true; if (cl.maxclients == 1) { if (!r_drawworld.value) r_drawworld_cheatsafe = false; if (r_drawflat.value) r_drawflat_cheatsafe = true; else if (r_fullbright.value || !cl.worldmodel->lightdata) r_fullbright_cheatsafe = true; else if (r_lightmap.value) r_lightmap_cheatsafe = true; } //johnfitz }
void V_PrepBlend (void) { int i, j; if (cl_cshift_powerup->int_val || (cl.sv_cshifts & INFO_CSHIFT_POWERUP)) V_CalcPowerupCshift (); r_data->vid->cshift_changed = false; for (i = 0; i < NUM_CSHIFTS; i++) { if (cl.cshifts[i].percent != cl.prev_cshifts[i].percent) { r_data->vid->cshift_changed = true; cl.prev_cshifts[i].percent = cl.cshifts[i].percent; } for (j = 0; j < 3; j++) { if (cl.cshifts[i].destcolor[j] != cl.prev_cshifts[i].destcolor[j]) { r_data->vid->cshift_changed = true; cl.prev_cshifts[i].destcolor[j] = cl.cshifts[i].destcolor[j]; } } } // drop the damage value V_DropCShift (&cl.cshifts[CSHIFT_DAMAGE], 150); // drop the bonus value V_DropCShift (&cl.cshifts[CSHIFT_BONUS], 100); if (!r_data->vid->cshift_changed && !r_data->vid->recalc_refdef) return; V_CalcBlend (); }
void V_RenderView (void) { char *p; cl.simangles[ROLL] = 0; // FIXME @@@ if (cls.state != ca_active) { V_CalcBlend (); return; } view_frame = &cl.frames[cl.validsequence & UPDATE_MASK]; if (!cls.nqdemoplayback) view_message = view_frame->playerstate[cl.viewplayernum]; DropPunchAngle (); if (cl.intermission) // intermission / finale rendering V_CalcIntermissionRefdef (); else V_CalcRefdef (); R_PushDlights (); r_refdef2.time = cl.time; // restrictions r_refdef2.allow_cheats = (Info_ValueForKey(cl.serverinfo, "*cheats")[0] && com_serveractive) || cls.demoplayback; if (cls.demoplayback || cl.spectator) { r_refdef2.allow_lumas = true; r_refdef2.max_fbskins = 1; r_refdef2.max_watervis = 1; } else { r_refdef2.allow_lumas = !strcmp(Info_ValueForKey(cl.serverinfo, "24bit_fbs"), "0") ? false : true; r_refdef2.max_fbskins = *(p = Info_ValueForKey(cl.serverinfo, "fbskins")) ? bound(0, Q_atof(p), 1) : cl.teamfortress ? 0 : 1; r_refdef2.max_watervis = *(p = Info_ValueForKey(cl.serverinfo, "watervis")) ? bound(0, Q_atof(p), 1) : 0; } // r_refdef2.viewplayernum = Cam_PlayerNum(); // r_refdef2.lightstyles = cl_lightstyle; R_RenderView (); }
/* ============= V_PrepBlend ============= */ void V_PrepBlend (void) { if (cls.state != ca_active) { cl.cshifts[CSHIFT_CONTENTS].percent = 0; cl.cshifts[CSHIFT_POWERUP].percent = 0; cl.cshifts[CSHIFT_CUSTOM].percent = 0; } else { V_CalcPowerupCshift (); } // drop the damage value V_DropCShift (&cl.cshifts[CSHIFT_DAMAGE], 150); // drop the bonus value V_DropCShift (&cl.cshifts[CSHIFT_BONUS], 100); V_CalcBlend (); }
/* ============= V_UpdateBlend -- johnfitz -- V_UpdatePalette cleaned up and renamed ============= */ void V_UpdateBlend (void) { int i, j; qboolean blend_changed; V_CalcPowerupCshift (); blend_changed = false; for (i=0 ; i<NUM_CSHIFTS ; i++) { if (cl.cshifts[i].percent != cl.prev_cshifts[i].percent) { blend_changed = true; cl.prev_cshifts[i].percent = cl.cshifts[i].percent; } for (j=0 ; j<3 ; j++) if (cl.cshifts[i].destcolor[j] != cl.prev_cshifts[i].destcolor[j]) { blend_changed = true; cl.prev_cshifts[i].destcolor[j] = cl.cshifts[i].destcolor[j]; } } // drop the damage value cl.cshifts[CSHIFT_DAMAGE].percent -= host_frametime*150; if (cl.cshifts[CSHIFT_DAMAGE].percent <= 0) cl.cshifts[CSHIFT_DAMAGE].percent = 0; // drop the bonus value cl.cshifts[CSHIFT_BONUS].percent -= host_frametime*100; if (cl.cshifts[CSHIFT_BONUS].percent <= 0) cl.cshifts[CSHIFT_BONUS].percent = 0; if (blend_changed) V_CalcBlend (); }
void V_UpdatePalette (void) { int i, j; qboolean new_ptr; byte *basepal, *newpal; byte pal[768]; float r,g,b,a; int ir, ig, ib; qboolean force; V_CalcPowerupCshift (); new_ptr = false; for (i=0 ; i<NUM_CSHIFTS ; i++) { if (cl.cshifts[i].percent != cl.prev_cshifts[i].percent) { new_ptr = true; cl.prev_cshifts[i].percent = cl.cshifts[i].percent; } for (j=0 ; j<3 ; j++) if (cl.cshifts[i].destcolor[j] != cl.prev_cshifts[i].destcolor[j]) { new_ptr = true; cl.prev_cshifts[i].destcolor[j] = cl.cshifts[i].destcolor[j]; } } // drop the damage value cl.cshifts[CSHIFT_DAMAGE].percent -= host_frametime*150; if (cl.cshifts[CSHIFT_DAMAGE].percent <= 0) cl.cshifts[CSHIFT_DAMAGE].percent = 0; // drop the bonus value cl.cshifts[CSHIFT_BONUS].percent -= host_frametime*100; if (cl.cshifts[CSHIFT_BONUS].percent <= 0) cl.cshifts[CSHIFT_BONUS].percent = 0; force = V_CheckGamma (); if (!new_ptr && !force) return; V_CalcBlend (); a = v_blend[3]; r = 255*v_blend[0]*a; g = 255*v_blend[1]*a; b = 255*v_blend[2]*a; a = 1-a; for (i=0 ; i<256 ; i++) { ir = i*a + r; ig = i*a + g; ib = i*a + b; if (ir > 255) ir = 255; if (ig > 255) ig = 255; if (ib > 255) ib = 255; ramps[0][i] = gammatable[ir]; ramps[1][i] = gammatable[ig]; ramps[2][i] = gammatable[ib]; } basepal = host_basepal; newpal = pal; for (i=0 ; i<256 ; i++) { ir = basepal[0]; ig = basepal[1]; ib = basepal[2]; basepal += 3; newpal[0] = ramps[0][ir]; newpal[1] = ramps[1][ig]; newpal[2] = ramps[2][ib]; newpal += 3; } render.ShiftPalette (pal); }