cvar_t scr_conspeed = {CVAR_SAVE, "scr_conspeed","900"}; // LordHavoc: quake used 300
cvar_t scr_conalpha = {CVAR_SAVE, "scr_conalpha", "1"};
cvar_t scr_conbrightness = {CVAR_SAVE, "scr_conbrightness", "0.2"};
+cvar_t scr_conforcewhiledisconnected = {CVAR_SAVE, "scr_conforcewhiledisconnected", "1"};
cvar_t scr_centertime = {0, "scr_centertime","2"};
cvar_t scr_showram = {CVAR_SAVE, "showram","1"};
cvar_t scr_showturtle = {CVAR_SAVE, "showturtle","0"};
cvar_t scr_printspeed = {0, "scr_printspeed","8"};
cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640"};
cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480"};
+cvar_t vid_pixelaspect = {CVAR_SAVE, "vid_pixelaspect", "1"};
cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","0"};
cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9"};
+cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"};
cvar_t cl_avidemo = {0, "cl_avidemo", "0"};
+cvar_t r_textshadow = {0, "r_textshadow", "0"};
+cvar_t r_letterbox = {0, "r_letterbox", "0"};
int jpeg_supported = false;
int clearconsole;
int clearnotify;
+extern int con_vislines;
+
qboolean scr_drawloading = false;
void DrawCrosshair(int num);
for a few moments
==============
*/
-void SCR_CenterPrint (char *str)
+void SCR_CenterPrint(char *str)
{
strlcpy (scr_centerstring, str, sizeof (scr_centerstring));
scr_centertime_off = scr_centertime.value;
{
Con_CheckResize ();
- if (key_dest == key_game && cls.signon != SIGNONS)
+ if (key_dest == key_game && cls.signon != SIGNONS && scr_conforcewhiledisconnected.integer)
key_consoleactive |= KEY_CONSOLEACTIVE_FORCED;
else
key_consoleactive &= ~KEY_CONSOLEACTIVE_FORCED;
}
else
{
+ con_vislines = 0;
if (key_dest == key_game || key_dest == key_message)
Con_DrawNotify (); // only draw notify in game
}
Cvar_RegisterVariable (&scr_conspeed);
Cvar_RegisterVariable (&scr_conalpha);
Cvar_RegisterVariable (&scr_conbrightness);
+ Cvar_RegisterVariable (&scr_conforcewhiledisconnected);
Cvar_RegisterVariable (&scr_showram);
Cvar_RegisterVariable (&scr_showturtle);
Cvar_RegisterVariable (&scr_showpause);
Cvar_RegisterVariable (&scr_printspeed);
Cvar_RegisterVariable (&vid_conwidth);
Cvar_RegisterVariable (&vid_conheight);
+ Cvar_RegisterVariable (&vid_pixelaspect);
Cvar_RegisterVariable (&scr_screenshot_jpeg);
Cvar_RegisterVariable (&scr_screenshot_jpeg_quality);
Cvar_RegisterVariable (&cl_avidemo);
+ Cvar_RegisterVariable (&r_textshadow);
+ Cvar_RegisterVariable (&r_letterbox);
Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
Cmd_AddCommand ("sizedown",SCR_SizeDown_f);
DrawQ_SuperPic(x,y,picname,width,height,0,0,red,green,blue,alpha,1,0,red,green,blue,alpha,0,1,red,green,blue,alpha,1,1,red,green,blue,alpha,flags);
}
-void DrawQ_String(float x, float y, const char *string, int maxlen, float scalex, float scaley, float red, float green, float blue, float alpha, int flags)
+void DrawQ_String_Real(float x, float y, const char *string, int maxlen, float scalex, float scaley, float red, float green, float blue, float alpha, int flags)
{
int size, len;
drawqueue_t *dq;
r_refdef.drawqueuesize += dq->size;
}
+void DrawQ_String(float x, float y, const char *string, int maxlen, float scalex, float scaley, float red, float green, float blue, float alpha, int flags)
+{
+ if (r_textshadow.integer)
+ DrawQ_String_Real(x+scalex*0.25,y+scaley*0.25,string,maxlen,scalex,scaley,0,0,0,alpha*0.8,flags);
+
+ DrawQ_String_Real(x,y,string,maxlen,scalex,scaley,red,green,blue,alpha,flags);
+}
+
void DrawQ_Fill (float x, float y, float w, float h, float red, float green, float blue, float alpha, int flags)
{
DrawQ_SuperPic(x,y,NULL,w,h,0,0,red,green,blue,alpha,1,0,red,green,blue,alpha,0,1,red,green,blue,alpha,1,1,red,green,blue,alpha,flags);
dq->scalex = 0;
dq->scaley = 0;
p = (void *)(dq + 1);
- m = p;(qbyte *)p += sizeof(drawqueuemesh_t);
+ m = p;p = (qbyte*)p + sizeof(drawqueuemesh_t);
m->num_triangles = mesh->num_triangles;
m->num_vertices = mesh->num_vertices;
m->texture = mesh->texture;
- m->data_element3i = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));(qbyte *)p += m->num_triangles * sizeof(int[3]);
- m->data_vertex3f = p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));(qbyte *)p += m->num_vertices * sizeof(float[3]);
- m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));(qbyte *)p += m->num_vertices * sizeof(float[2]);
- m->data_color4f = p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));(qbyte *)p += m->num_vertices * sizeof(float[4]);
+ m->data_element3i = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (qbyte*)p + m->num_triangles * sizeof(int[3]);
+ m->data_vertex3f = p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));p = (qbyte*)p + m->num_vertices * sizeof(float[3]);
+ m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (qbyte*)p + m->num_vertices * sizeof(float[2]);
+ m->data_color4f = p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));p = (qbyte*)p + m->num_vertices * sizeof(float[4]);
r_refdef.drawqueuesize += dq->size;
}
drawqueue_t * dq;
if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize)
{
- Con_DPrintf("DrawQueue full !\n");
+ Con_DPrint("DrawQueue full !\n");
return;
}
dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
drawqueue_t *dq;
if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize)
{
- Con_DPrintf("DrawQueue full !\n");
+ Con_DPrint("DrawQueue full !\n");
return;
}
dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
*/
void SCR_ScreenShot_f (void)
{
- static int i = 0;
- char filename[16];
- char checkname[MAX_OSPATH];
- const char* extens;
+ static int shotnumber;
+ static char oldname[MAX_QPATH];
+ char base[MAX_QPATH];
+ char filename[MAX_QPATH];
+ qbyte *buffer1;
+ qbyte *buffer2;
+ qbyte *buffer3;
qboolean jpeg = (scr_screenshot_jpeg.integer != 0);
- if (jpeg)
- extens = "jpg";
- else
- extens = "tga";
+ sprintf (base, "screenshots/%s", scr_screenshot_name.string);
- // find a file name to save it to
- for (; i<=9999 ; i++)
+ if (strcmp (oldname, scr_screenshot_name.string))
{
- sprintf (filename, "dp%04i.%s", i, extens);
- sprintf (checkname, "%s/%s", fs_gamedir, filename);
- if (!FS_SysFileExists(checkname))
- break;
+ sprintf(oldname, "%s", scr_screenshot_name.string);
+ shotnumber = 0;
}
- if (i==10000)
+
+ // find a file name to save it to
+ for (;shotnumber < 1000000;shotnumber++)
+ if (!FS_SysFileExists(va("%s/%s%06d.tga", fs_gamedir, base, shotnumber)) && !FS_SysFileExists(va("%s/%s%06d.jpg", fs_gamedir, base, shotnumber)))
+ break;
+ if (shotnumber >= 1000000)
{
- Con_Printf ("SCR_ScreenShot_f: Couldn't create the image file\n");
+ Con_Print("SCR_ScreenShot_f: Couldn't create the image file\n");
return;
}
- if (SCR_ScreenShot (filename, vid.realx, vid.realy, vid.realwidth, vid.realheight, jpeg))
- Con_Printf ("Wrote %s\n", filename);
+ sprintf(filename, "%s%06d.%s", base, shotnumber, jpeg ? "jpg" : "tga");
+
+ buffer1 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3);
+ buffer2 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3);
+ buffer3 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3 + 18);
+
+ if (SCR_ScreenShot (filename, buffer1, buffer2, buffer3, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg))
+ Con_Printf("Wrote %s\n", filename);
else
- Con_Printf ("unable to write %s\n", filename);
+ Con_Printf("unable to write %s\n", filename);
+
+ Mem_Free (buffer1);
+ Mem_Free (buffer2);
+ Mem_Free (buffer3);
+
+ shotnumber++;
}
static int cl_avidemo_frame = 0;
void SCR_CaptureAVIDemo(void)
{
+ static qbyte *avi_buffer1 = NULL;
+ static qbyte *avi_buffer2 = NULL;
+ static qbyte *avi_buffer3 = NULL;
char filename[32];
qboolean jpeg = (scr_screenshot_jpeg.integer != 0);
- if (jpeg)
- sprintf(filename, "dpavi%06d.jpg", cl_avidemo_frame);
- else
- sprintf(filename, "dpavi%06d.tga", cl_avidemo_frame);
+ if (!cl_avidemo.integer)
+ {
+ if (avi_buffer1 != NULL)
+ {
+ Mem_Free (avi_buffer1);
+ Mem_Free (avi_buffer2);
+ Mem_Free (avi_buffer3);
+ avi_buffer1 = NULL;
+ avi_buffer2 = NULL;
+ avi_buffer3 = NULL;
+ }
+ cl_avidemo_frame = 0;
+ return;
+ }
+
+ if (avi_buffer1 == NULL)
+ {
+ avi_buffer1 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3);
+ avi_buffer2 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3);
+ avi_buffer3 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3 + 18);
+ }
- if (SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight, jpeg))
+ sprintf(filename, "video/dp%06d.%s", cl_avidemo_frame, jpeg ? "jpg" : "tga");
+
+ if (SCR_ScreenShot(filename, avi_buffer1, avi_buffer2, avi_buffer3, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg))
cl_avidemo_frame++;
else
{
Cvar_SetValueQuick(&cl_avidemo, 0);
- Con_Printf("avi saving failed on frame %i, out of disk space? stopping avi demo catpure.\n", cl_avidemo_frame);
+ Con_Printf("avi saving failed on frame %i, out of disk space? stopping avi demo capture.\n", cl_avidemo_frame);
cl_avidemo_frame = 0;
}
}
{
float angles[3];
char *name;
-}
-envmapinfo[6] =
-{
- {{ 0, 0, 0}, "ft"},
- {{ 0, 90, 0}, "rt"},
- {{ 0, 180, 0}, "bk"},
- {{ 0, 270, 0}, "lf"},
- {{-90, 90, 0}, "up"},
- {{ 90, 90, 0}, "dn"}
+ qboolean flipx, flipy, flipdiagonaly;
+}
+envmapinfo[12] =
+{
+ {{ 0, 0, 0}, "rt", true, false, false},
+ {{ 0, 90, 0}, "ft", true, false, false},
+ {{ 0, 180, 0}, "lf", true, false, false},
+ {{ 0, 270, 0}, "bk", true, false, false},
+ {{-90, 180, 0}, "up", false, true, false},
+ {{ 90, 180, 0}, "dn", false, true, false},
+
+ {{ 0, 0, 0}, "px", true, true, true},
+ {{ 0, 90, 0}, "py", false, true, false},
+ {{ 0, 180, 0}, "nx", false, false, true},
+ {{ 0, 270, 0}, "ny", true, false, false},
+ {{-90, 180, 0}, "pz", false, false, true},
+ {{ 90, 180, 0}, "nz", false, false, true}
};
static void R_Envmap_f (void)
{
int j, size;
char filename[256], basename[256];
+ qbyte *buffer1;
+ qbyte *buffer2;
+ qbyte *buffer3;
if (Cmd_Argc() != 3)
{
- Con_Printf ("envmap <basename> <size>: save out 6 cubic environment map images, usable with loadsky, note that size must one of 128, 256, 512, or 1024 and can't be bigger than your current resolution\n");
+ Con_Print("envmap <basename> <size>: save out 6 cubic environment map images, usable with loadsky, note that size must one of 128, 256, 512, or 1024 and can't be bigger than your current resolution\n");
return;
}
size = atoi(Cmd_Argv(2));
if (size != 128 && size != 256 && size != 512 && size != 1024)
{
- Con_Printf("envmap: size must be one of 128, 256, 512, or 1024\n");
+ Con_Print("envmap: size must be one of 128, 256, 512, or 1024\n");
return;
}
if (size > vid.realwidth || size > vid.realheight)
{
- Con_Printf("envmap: your resolution is not big enough to render that size\n");
+ Con_Print("envmap: your resolution is not big enough to render that size\n");
return;
}
r_refdef.fov_x = 90;
r_refdef.fov_y = 90;
- for (j = 0;j < 6;j++)
+ buffer1 = Mem_Alloc(tempmempool, size * size * 3);
+ buffer2 = Mem_Alloc(tempmempool, size * size * 3);
+ buffer3 = Mem_Alloc(tempmempool, size * size * 3 + 18);
+
+ for (j = 0;j < 12;j++)
{
sprintf(filename, "env/%s%s.tga", basename, envmapinfo[j].name);
Matrix4x4_CreateFromQuakeEntity(&r_refdef.viewentitymatrix, r_vieworigin[0], r_vieworigin[1], r_vieworigin[2], envmapinfo[j].angles[0], envmapinfo[j].angles[1], envmapinfo[j].angles[2], 1);
R_ClearScreen();
+ R_Mesh_Start();
R_RenderView();
- SCR_ScreenShot(filename, vid.realx, vid.realy + vid.realheight - (r_refdef.y + r_refdef.height), size, size, false);
+ R_Mesh_Finish();
+ SCR_ScreenShot(filename, buffer1, buffer2, buffer3, vid.realx, vid.realy + vid.realheight - (r_refdef.y + r_refdef.height), size, size, envmapinfo[j].flipx, envmapinfo[j].flipy, envmapinfo[j].flipdiagonaly, false);
}
+ Mem_Free (buffer1);
+ Mem_Free (buffer2);
+ Mem_Free (buffer3);
+
envmap = false;
}
if (!scr_initialized || !con_initialized || vid_hidden)
return; // not initialized yet
- if (cl_avidemo.integer)
- SCR_CaptureAVIDemo();
- else
- cl_avidemo_frame = 0;
+ SCR_CaptureAVIDemo();
if (cls.signon == SIGNONS)
R_TimeReport("other");
SCR_DrawNet ();
SCR_DrawTurtle ();
SCR_DrawPause ();
- Sbar_Draw();
+ if (!r_letterbox.value)
+ Sbar_Draw();
SHOWLMP_drawall();
SCR_CheckDrawCenterString();
}
{
SHOWLMP_clear();
}
-