mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-26 05:41:52 +00:00
attempted v_cshift fix for bad gamecode, move gl crosshair code to r2d, default crosshaircolor to 255 255 255 since now crosshaircolor/crosshairalpha work on crosshair 1
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3765 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
795406b8e4
commit
0a1b14b202
8 changed files with 396 additions and 398 deletions
|
@ -1125,19 +1125,6 @@ void CG_Start (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!R2D_SafeCachePic) //no renderer loaded
|
|
||||||
{
|
|
||||||
CG_Stop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qrenderer != QR_OPENGL && qrenderer != QR_DIRECT3D)
|
|
||||||
{ //sorry.
|
|
||||||
CG_Stop();
|
|
||||||
Host_EndGame("Unable to connect to q3 servers without opengl or d3d.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Z_FreeTags(CGTAGNUM);
|
Z_FreeTags(CGTAGNUM);
|
||||||
SCR_BeginLoadingPlaque();
|
SCR_BeginLoadingPlaque();
|
||||||
|
|
||||||
|
|
|
@ -2203,7 +2203,7 @@ void SCR_DrawTwoDimensional(int uimenu, qboolean nohud)
|
||||||
{
|
{
|
||||||
if (!nohud)
|
if (!nohud)
|
||||||
{
|
{
|
||||||
Draw_Crosshair();
|
R2D_DrawCrosshair();
|
||||||
|
|
||||||
SCR_DrawNet ();
|
SCR_DrawNet ();
|
||||||
SCR_DrawFPS ();
|
SCR_DrawFPS ();
|
||||||
|
|
|
@ -1,355 +0,0 @@
|
||||||
//Config for Crosshairs
|
|
||||||
//crosshairs can be altered or added by editing only this file
|
|
||||||
|
|
||||||
//winquake calls this every frame.
|
|
||||||
//gl calls when changed or animating (that's the diference in animated and non animated)
|
|
||||||
|
|
||||||
//don't use a point more than 8 units away from the centre.
|
|
||||||
//default must be non animated
|
|
||||||
|
|
||||||
#ifdef NUMCROSSHAIRS
|
|
||||||
|
|
||||||
//case 0 is no cursor
|
|
||||||
//case 1 is the console text '+'
|
|
||||||
//neither use this file.
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
Pix(0 - 1, 0, c);
|
|
||||||
Pix(0 - 3, 0, c2);
|
|
||||||
Pix(0 + 1, 0, c);
|
|
||||||
Pix(0 + 3, 0, c2);
|
|
||||||
Pix(0, 0 - 1, c);
|
|
||||||
Pix(0, 0 - 3, c2);
|
|
||||||
Pix(0, 0 + 1, c);
|
|
||||||
Pix(0, 0 + 3, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
Pix(0 - 1, 0, c);
|
|
||||||
Pix(0 - 2, 0, c2);
|
|
||||||
Pix(0 + 1, 0, c);
|
|
||||||
Pix(0 + 2, 0, c2);
|
|
||||||
Pix(0, 0 - 1, c);
|
|
||||||
Pix(0, 0 - 2, c2);
|
|
||||||
Pix(0, 0 + 1, c);
|
|
||||||
Pix(0, 0 + 2, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
Pix(0-1, 0-1, c);
|
|
||||||
Pix(0-2, 0-2, c2);
|
|
||||||
Pix(0+1, 0+1, c);
|
|
||||||
Pix(0+2, 0+2, c2);
|
|
||||||
Pix(0-1, 0+1, c);
|
|
||||||
Pix(0-2, 0+2, c2);
|
|
||||||
Pix(0+1, 0-1, c);
|
|
||||||
Pix(0+2, 0-2, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
Pix(0-1, 0-1, c);
|
|
||||||
Pix(0-3, 0-3, c2);
|
|
||||||
Pix(0+1, 0+1, c);
|
|
||||||
Pix(0+3, 0+3, c2);
|
|
||||||
Pix(0-1, 0+1, c);
|
|
||||||
Pix(0-3, 0+3, c2);
|
|
||||||
Pix(0+1, 0-1, c);
|
|
||||||
Pix(0+3, 0-3, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
Pix(0-1, 0-2, c2);
|
|
||||||
Pix(0+1, 0-2, c2);
|
|
||||||
Pix(0-1, 0+2, c2);
|
|
||||||
Pix(0+1, 0+2, c2);
|
|
||||||
Pix(0-2, 0+1, c);
|
|
||||||
Pix(0-2, 0-1, c);
|
|
||||||
Pix(0+2, 0+1, c);
|
|
||||||
Pix(0+2, 0-1, c);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0+1, 0+1, c2);
|
|
||||||
Pix(0+2, 0 , c);
|
|
||||||
Pix(0+1, 0-1, c2);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0-1, 0-1, c2);
|
|
||||||
Pix(0-2, 0 , c);
|
|
||||||
Pix(0-1, 0+1, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0+2, 0 , c2);
|
|
||||||
Pix(0-2, 0 , c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
Pix(0 , 0-1, c);
|
|
||||||
Pix(0-2, 0+1, c2);
|
|
||||||
Pix(0+2, 0+1, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
Pix(0 , 0-3, c);
|
|
||||||
Pix(0-2, 0-2, c2);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0+2, 0-2, c2);
|
|
||||||
Pix(0-3, 0 , c);
|
|
||||||
Pix(0-2, 0 , c);
|
|
||||||
Pix(0+2, 0 , c);
|
|
||||||
Pix(0+3, 0 , c);
|
|
||||||
Pix(0 , 0+3, c);
|
|
||||||
Pix(0-2, 0+2, c2);
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0+2, 0+2, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
Pix(0-3, 0-3, c2);
|
|
||||||
Pix(0 , 0-3, c);
|
|
||||||
Pix(0+3, 0-3, c2);
|
|
||||||
Pix(0-2, 0-2, c2);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0+2, 0-2, c2);
|
|
||||||
Pix(0-3, 0 , c);
|
|
||||||
Pix(0-2, 0 , c);
|
|
||||||
Pix(0+2, 0 , c);
|
|
||||||
Pix(0+3, 0 , c);
|
|
||||||
Pix(0 , 0+3, c);
|
|
||||||
Pix(0-2, 0+2, c2);
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0-3, 0+3, c2);
|
|
||||||
Pix(0+2, 0+2, c2);
|
|
||||||
Pix(0+3, 0+3, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
Pix(0-4, 0 , c2);
|
|
||||||
Pix(0-3, 0 , c2);
|
|
||||||
Pix(0-2, 0 , c);
|
|
||||||
Pix(0-1, 0 , c);
|
|
||||||
Pix(0+1, 0 , c);
|
|
||||||
Pix(0+2, 0 , c);
|
|
||||||
Pix(0+3, 0 , c2);
|
|
||||||
Pix(0+4, 0 , c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
Pix(0 , 0-4, c2);
|
|
||||||
Pix(0 , 0-3, c2);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0 , 0-1, c);
|
|
||||||
Pix(0 , 0+1, c);
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0 , 0+3, c2);
|
|
||||||
Pix(0 , 0+4, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
Pix(0-4, 0 , c2);
|
|
||||||
Pix(0-3, 0 , c2);
|
|
||||||
Pix(0-2, 0 , c);
|
|
||||||
Pix(0-1, 0 , c);
|
|
||||||
Pix(0+1, 0 , c);
|
|
||||||
Pix(0+2, 0 , c);
|
|
||||||
Pix(0+3, 0 , c2);
|
|
||||||
Pix(0+4, 0 , c2);
|
|
||||||
|
|
||||||
Pix(0 , 0-4, c2);
|
|
||||||
Pix(0 , 0-3, c2);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0 , 0-1, c);
|
|
||||||
Pix(0 , 0+1, c);
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0 , 0+3, c2);
|
|
||||||
Pix(0 , 0+4, c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 15:
|
|
||||||
Pix(0 , 0-4, c);
|
|
||||||
Pix(0-3, 0-3, c2);
|
|
||||||
Pix(0 , 0-3, c);
|
|
||||||
Pix(0+3, 0-3, c2);
|
|
||||||
Pix(0-2, 0-2, c2);
|
|
||||||
Pix(0 , 0-2, c);
|
|
||||||
Pix(0+2, 0-2, c2);
|
|
||||||
Pix(0-4, 0 , c);
|
|
||||||
Pix(0-3, 0 , c);
|
|
||||||
Pix(0-2, 0 , c);
|
|
||||||
Pix(0+2, 0 , c);
|
|
||||||
Pix(0+3, 0 , c);
|
|
||||||
Pix(0+4, 0 , c);
|
|
||||||
Pix(0 , 0+3, c);
|
|
||||||
Pix(0-2, 0+2, c2);
|
|
||||||
Pix(0 , 0+2, c);
|
|
||||||
Pix(0-3, 0+3, c2);
|
|
||||||
Pix(0+2, 0+2, c2);
|
|
||||||
Pix(0+3, 0+3, c2);
|
|
||||||
Pix(0 , 0+4, c);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 16:
|
|
||||||
Pix(0 , 0 , c);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 17:
|
|
||||||
Pix(0 , 0 , c);
|
|
||||||
Pix(0 , 1, c2);
|
|
||||||
Pix(0 , 2, c2);
|
|
||||||
Pix( 1, 3, c);
|
|
||||||
Pix( 1, 0 , c2);
|
|
||||||
Pix( 2, 0 , c2);
|
|
||||||
Pix( 3, 1, c);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 18:
|
|
||||||
Pix(0 , 0 , c);
|
|
||||||
Pix(-2, 0 , c2);
|
|
||||||
Pix(-3, 0 , c2);
|
|
||||||
Pix( 2, 0 , c2);
|
|
||||||
Pix( 3, 0 , c2);
|
|
||||||
Pix(-3, 1 , c2);
|
|
||||||
Pix( 3, 1 , c2);
|
|
||||||
Pix(-3, 2 , c2);
|
|
||||||
Pix( 3, 2 , c2);
|
|
||||||
Pix(-2, 2 , c2);
|
|
||||||
Pix( 2, 2 , c2);
|
|
||||||
Pix(-2, 3 , c2);
|
|
||||||
Pix( 2, 3 , c2);
|
|
||||||
Pix(-1, 3 , c2);
|
|
||||||
Pix( 1, 3 , c2);
|
|
||||||
Pix( 0, 3 , c2);
|
|
||||||
Pix( 0, 4 , c2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 19: //tripointer
|
|
||||||
Pix(0 , -1, c); //north
|
|
||||||
Pix(0 , -2, c);
|
|
||||||
Pix(0 , -3, c);
|
|
||||||
|
|
||||||
Pix(1 , 1 , c);
|
|
||||||
Pix(2 , 2 , c);//east
|
|
||||||
Pix(3 , 3 , c);
|
|
||||||
|
|
||||||
Pix(-1, 1 , c);//west
|
|
||||||
Pix(-2, 2 , c);
|
|
||||||
Pix(-3, 3 , c);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 20: //twin circles
|
|
||||||
{
|
|
||||||
#define DEG(a) (a * (3.14 / 180))
|
|
||||||
#define SCLE 8 //don't let it get bigger than 16 wide (+-8)
|
|
||||||
#define SCLE2 4
|
|
||||||
|
|
||||||
int a;
|
|
||||||
#ifndef GLQUAKE
|
|
||||||
for (a = 0; a < 360; a+=5) //softquake doesn't draw as many pixels.
|
|
||||||
#else
|
|
||||||
for (a = 0; a < 360; a+=1) //glquake gets high precision - done less, ya see
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
Pix((int)(sin(DEG(a)) * SCLE ), (int)(cos(DEG(a)) * SCLE ) , c );
|
|
||||||
Pix((int)(cos(DEG(a)) * SCLE2), (int)(sin(DEG(a)) * SCLE2) , c2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef SCLE
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
#else
|
|
||||||
//what's the next?
|
|
||||||
#define FIRSTANIMATEDCROSHAIR 21
|
|
||||||
#endif
|
|
||||||
#ifdef NUMCROSSHAIRS
|
|
||||||
|
|
||||||
case FIRSTANIMATEDCROSHAIR: //spinners
|
|
||||||
{
|
|
||||||
#define DEG(a) (a * (3.14 / 180))
|
|
||||||
#define SPEED 6
|
|
||||||
#define SCLE 8 //don't let it get bigger than 16 wide (+-8)
|
|
||||||
#define SCLE2 4
|
|
||||||
#define TIMER realtime
|
|
||||||
Pix((int)(sin(TIMER*SPEED ) * SCLE ), (int)(cos(TIMER*SPEED ) * SCLE ) , c );
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(90 )) * SCLE ), (int)(cos(TIMER*SPEED+DEG(90 )) * SCLE ) , c );
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(180)) * SCLE ), (int)(cos(TIMER*SPEED+DEG(180)) * SCLE ) , c );
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(270)) * SCLE ), (int)(cos(TIMER*SPEED+DEG(270)) * SCLE ) , c );
|
|
||||||
|
|
||||||
Pix((int)(cos(TIMER*SPEED ) * SCLE2), (int)(sin(TIMER*SPEED ) * SCLE2) , c2);
|
|
||||||
Pix((int)(cos(TIMER*SPEED+DEG(90 )) * SCLE2), (int)(sin(TIMER*SPEED+DEG(90 )) * SCLE2) , c2);
|
|
||||||
Pix((int)(cos(TIMER*SPEED+DEG(180)) * SCLE2), (int)(sin(TIMER*SPEED+DEG(180)) * SCLE2) , c2);
|
|
||||||
Pix((int)(cos(TIMER*SPEED+DEG(270)) * SCLE2), (int)(sin(TIMER*SPEED+DEG(270)) * SCLE2) , c2);
|
|
||||||
|
|
||||||
#undef SCLE
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case (FIRSTANIMATEDCROSHAIR+1):
|
|
||||||
{
|
|
||||||
#define DEG(a) (a * (3.14 / 180))
|
|
||||||
#define SPEED 6
|
|
||||||
#define SCLE 4 //don't let it get bigger than 16 wide (+-8)
|
|
||||||
#define TIMER realtime
|
|
||||||
|
|
||||||
Pix((int)(sin(TIMER*SPEED ) * SCLE), (int)(sin(TIMER*SPEED ) * -SCLE) , c );
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(180)) * SCLE), (int)(sin(TIMER*SPEED+DEG(180)) * -SCLE) , c2);
|
|
||||||
|
|
||||||
Pix((int)(cos(TIMER*SPEED ) * SCLE), (int)(cos(TIMER*SPEED ) * SCLE ) , c );
|
|
||||||
Pix((int)(cos(TIMER*SPEED+DEG(180)) * SCLE), (int)(cos(TIMER*SPEED+DEG(180)) * SCLE ) , c2);
|
|
||||||
|
|
||||||
#undef SCLE
|
|
||||||
#undef SPEED
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case (FIRSTANIMATEDCROSHAIR+2):
|
|
||||||
{
|
|
||||||
#define DEG(a) (a * (3.14 / 180))
|
|
||||||
#define SPEED 6
|
|
||||||
#define SCLE 4 //don't let it get bigger than 16 wide (+-8)
|
|
||||||
#define TIMER realtime
|
|
||||||
|
|
||||||
Pix((int)(sin(TIMER*SPEED ) * SCLE), (int)(sin(TIMER*SPEED ) * -SCLE) , c );
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(90)) * SCLE), (int)(sin(TIMER*SPEED+DEG(90)) * -SCLE) , c2);
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(180)) * SCLE), (int)(sin(TIMER*SPEED+DEG(180)) * -SCLE) , c);
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(270)) * SCLE), (int)(sin(TIMER*SPEED+DEG(270)) * -SCLE) , c2);
|
|
||||||
|
|
||||||
Pix((int)(cos(TIMER*SPEED ) * SCLE), (int)(cos(TIMER*SPEED ) * SCLE ) , c );
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(90)) * SCLE), (int)(sin(TIMER*SPEED+DEG(90)) * SCLE) , c2);
|
|
||||||
Pix((int)(cos(TIMER*SPEED+DEG(180)) * SCLE), (int)(cos(TIMER*SPEED+DEG(180)) * SCLE ) , c);
|
|
||||||
Pix((int)(sin(TIMER*SPEED+DEG(270)) * SCLE), (int)(sin(TIMER*SPEED+DEG(270)) * SCLE) , c2);
|
|
||||||
|
|
||||||
#undef SCLE
|
|
||||||
#undef SPEED
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case (FIRSTANIMATEDCROSHAIR+3):
|
|
||||||
{
|
|
||||||
int a;
|
|
||||||
#define DEG(a) (a * (3.14 / 180))
|
|
||||||
#define SPEED 9
|
|
||||||
#define SPEED2 4
|
|
||||||
#define SIZE 8 //don't let it get bigger than 16 wide (+-8)
|
|
||||||
#define SCLE 8
|
|
||||||
#define TIMER realtime
|
|
||||||
|
|
||||||
for (a = -SIZE; a < SIZE; a+=2)
|
|
||||||
{
|
|
||||||
Pix(a, (int)(sin(TIMER*SPEED2) * SCLE), c);
|
|
||||||
Pix((int)(sin(TIMER*SPEED) * SCLE), a, c2);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#else
|
|
||||||
|
|
||||||
//what did we reach
|
|
||||||
#define NUMCROSSHAIRS FIRSTANIMATEDCROSHAIR+3
|
|
||||||
#define CROSSHAIR_H
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -58,6 +58,7 @@ extern char *q_renderername;
|
||||||
|
|
||||||
mpic_t *R2D_SafeCachePic (char *path);
|
mpic_t *R2D_SafeCachePic (char *path);
|
||||||
mpic_t *R2D_SafePicFromWad (char *name);
|
mpic_t *R2D_SafePicFromWad (char *name);
|
||||||
|
void R2D_DrawCrosshair (void);
|
||||||
void R2D_ScalePic (int x, int y, int width, int height, mpic_t *pic);
|
void R2D_ScalePic (int x, int y, int width, int height, mpic_t *pic);
|
||||||
void R2D_SubPic(int x, int y, int width, int height, mpic_t *pic, int srcx, int srcy, int srcwidth, int srcheight);
|
void R2D_SubPic(int x, int y, int width, int height, mpic_t *pic, int srcx, int srcy, int srcwidth, int srcheight);
|
||||||
void R2D_TransPicTranslate (int x, int y, int width, int height, qbyte *pic, qbyte *translation);
|
void R2D_TransPicTranslate (int x, int y, int width, int height, qbyte *pic, qbyte *translation);
|
||||||
|
@ -75,7 +76,6 @@ void R2D_FillBlock(int x, int y, int w, int h);
|
||||||
|
|
||||||
extern void (*Draw_Init) (void);
|
extern void (*Draw_Init) (void);
|
||||||
extern void (*Draw_TinyCharacter) (int x, int y, unsigned int num);
|
extern void (*Draw_TinyCharacter) (int x, int y, unsigned int num);
|
||||||
extern void (*Draw_Crosshair) (void);
|
|
||||||
extern qboolean (*Draw_IsCached) (char *picname); //can be null
|
extern qboolean (*Draw_IsCached) (char *picname); //can be null
|
||||||
|
|
||||||
extern void (*R_Init) (void);
|
extern void (*R_Init) (void);
|
||||||
|
@ -180,7 +180,6 @@ typedef struct rendererinfo_s {
|
||||||
|
|
||||||
void (*Draw_Init) (void);
|
void (*Draw_Init) (void);
|
||||||
void (*Draw_Shutdown) (void);
|
void (*Draw_Shutdown) (void);
|
||||||
void (*Draw_Crosshair) (void); //TODO: MARKED FOR DEMOLITION
|
|
||||||
|
|
||||||
texid_t (*IMG_LoadTexture) (char *identifier, int width, int height, uploadfmt_t fmt, void *data, unsigned int flags);
|
texid_t (*IMG_LoadTexture) (char *identifier, int width, int height, uploadfmt_t fmt, void *data, unsigned int flags);
|
||||||
texid_t (*IMG_LoadTexture8Pal24) (char *identifier, int width, int height, qbyte *data, qbyte *palette24, unsigned int flags);
|
texid_t (*IMG_LoadTexture8Pal24) (char *identifier, int width, int height, qbyte *data, qbyte *palette24, unsigned int flags);
|
||||||
|
|
|
@ -1340,7 +1340,7 @@ static void QCBUILTIN PF_R_RenderScene(progfuncs_t *prinst, struct globalvars_s
|
||||||
}
|
}
|
||||||
|
|
||||||
if (csqc_addcrosshair)
|
if (csqc_addcrosshair)
|
||||||
Draw_Crosshair();
|
R2D_DrawCrosshair();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void QCBUILTIN PF_cs_getstatf(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
static void QCBUILTIN PF_cs_getstatf(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
|
|
@ -8,6 +8,10 @@ texid_t missing_texture;
|
||||||
texid_t translate_texture;
|
texid_t translate_texture;
|
||||||
shader_t *translate_shader;
|
shader_t *translate_shader;
|
||||||
|
|
||||||
|
texid_t ch_int_texture;
|
||||||
|
vec3_t ch_color;
|
||||||
|
shader_t *shader_crosshair;
|
||||||
|
|
||||||
static mpic_t *conback;
|
static mpic_t *conback;
|
||||||
static mpic_t *draw_backtile;
|
static mpic_t *draw_backtile;
|
||||||
static shader_t *shader_draw_fill, *shader_draw_fill_trans;
|
static shader_t *shader_draw_fill, *shader_draw_fill_trans;
|
||||||
|
@ -37,6 +41,16 @@ void R2D_ScreenAngle_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
void R2D_Conheight_Callback(struct cvar_s *var, char *oldvalue);
|
void R2D_Conheight_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
void R2D_Conwidth_Callback(struct cvar_s *var, char *oldvalue);
|
void R2D_Conwidth_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
|
||||||
|
extern cvar_t crosshair;
|
||||||
|
extern cvar_t crosshaircolor;
|
||||||
|
extern cvar_t crosshairsize;
|
||||||
|
extern cvar_t crosshairimage;
|
||||||
|
extern cvar_t crosshairalpha;
|
||||||
|
void R2D_Crosshair_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void R2D_CrosshairImage_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void R2D_CrosshairColor_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
|
||||||
|
|
||||||
//We need this for minor things though, so we'll just use the slow accurate method.
|
//We need this for minor things though, so we'll just use the slow accurate method.
|
||||||
//this is unlikly to be called too often.
|
//this is unlikly to be called too often.
|
||||||
qbyte GetPaletteIndex(int red, int green, int blue)
|
qbyte GetPaletteIndex(int red, int green, int blue)
|
||||||
|
@ -92,6 +106,7 @@ void R2D_Init(void)
|
||||||
|
|
||||||
missing_texture = R_LoadTexture8("no_texture", 16, 16, (unsigned char*)r_notexture_mip + r_notexture_mip->offsets[0], IF_NOALPHA|IF_NOGAMMA, 0);
|
missing_texture = R_LoadTexture8("no_texture", 16, 16, (unsigned char*)r_notexture_mip + r_notexture_mip->offsets[0], IF_NOALPHA|IF_NOGAMMA, 0);
|
||||||
translate_texture = r_nulltex;
|
translate_texture = r_nulltex;
|
||||||
|
ch_int_texture = r_nulltex;
|
||||||
|
|
||||||
draw_backtile = R_RegisterShader("gfx/backtile.lmp",
|
draw_backtile = R_RegisterShader("gfx/backtile.lmp",
|
||||||
"{\n"
|
"{\n"
|
||||||
|
@ -201,6 +216,21 @@ void R2D_Init(void)
|
||||||
"]\n"
|
"]\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
|
shader_crosshair = R_RegisterShader("crosshairshader",
|
||||||
|
"{\n"
|
||||||
|
#ifdef USE_EGL
|
||||||
|
"program default2d\n"
|
||||||
|
#endif
|
||||||
|
"nomipmaps\n"
|
||||||
|
"{\n"
|
||||||
|
"map $diffuse\n"
|
||||||
|
"blendfunc blend\n"
|
||||||
|
"rgbgen vertex\n"
|
||||||
|
"alphagen vertex\n"
|
||||||
|
"}\n"
|
||||||
|
"}\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
Cvar_Hook(&gl_font, R2D_Font_Callback);
|
Cvar_Hook(&gl_font, R2D_Font_Callback);
|
||||||
Cvar_Hook(&vid_conautoscale, R2D_Conautoscale_Callback);
|
Cvar_Hook(&vid_conautoscale, R2D_Conautoscale_Callback);
|
||||||
|
@ -208,9 +238,16 @@ void R2D_Init(void)
|
||||||
Cvar_Hook(&vid_conheight, R2D_Conheight_Callback);
|
Cvar_Hook(&vid_conheight, R2D_Conheight_Callback);
|
||||||
Cvar_Hook(&vid_conwidth, R2D_Conwidth_Callback);
|
Cvar_Hook(&vid_conwidth, R2D_Conwidth_Callback);
|
||||||
|
|
||||||
|
Cvar_Hook(&crosshair, R2D_Crosshair_Callback);
|
||||||
|
Cvar_Hook(&crosshairimage, R2D_CrosshairImage_Callback);
|
||||||
|
Cvar_Hook(&crosshaircolor, R2D_CrosshairColor_Callback);
|
||||||
|
|
||||||
Cvar_ForceCallback(&gl_conback);
|
Cvar_ForceCallback(&gl_conback);
|
||||||
Cvar_ForceCallback(&vid_conautoscale);
|
Cvar_ForceCallback(&vid_conautoscale);
|
||||||
Cvar_ForceCallback(&gl_font);
|
Cvar_ForceCallback(&gl_font);
|
||||||
|
|
||||||
|
Cvar_ForceCallback(&crosshair);
|
||||||
|
Cvar_ForceCallback(&crosshaircolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
mpic_t *R2D_SafeCachePic (char *path)
|
mpic_t *R2D_SafeCachePic (char *path)
|
||||||
|
@ -694,4 +731,304 @@ void R2D_FadeScreen (void)
|
||||||
Sbar_Changed();
|
Sbar_Changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//crosshairs
|
||||||
|
#define CS_HEIGHT 8
|
||||||
|
#define CS_WIDTH 8
|
||||||
|
unsigned char crosshair_pixels[] =
|
||||||
|
{
|
||||||
|
// 2 + (spaced)
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x55,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
// 3 +
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x36,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 4 X
|
||||||
|
0x00,
|
||||||
|
0x22,
|
||||||
|
0x14,
|
||||||
|
0x00,
|
||||||
|
0x14,
|
||||||
|
0x22,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 5 X (spaced)
|
||||||
|
0x41,
|
||||||
|
0x00,
|
||||||
|
0x14,
|
||||||
|
0x00,
|
||||||
|
0x14,
|
||||||
|
0x00,
|
||||||
|
0x41,
|
||||||
|
0x00,
|
||||||
|
// 6 diamond (unconnected)
|
||||||
|
0x00,
|
||||||
|
0x14,
|
||||||
|
0x22,
|
||||||
|
0x00,
|
||||||
|
0x22,
|
||||||
|
0x14,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 7 diamond
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x14,
|
||||||
|
0x22,
|
||||||
|
0x14,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 8 four points
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x22,
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 9 three points
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x22,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 10
|
||||||
|
0x08,
|
||||||
|
0x2a,
|
||||||
|
0x00,
|
||||||
|
0x63,
|
||||||
|
0x00,
|
||||||
|
0x2a,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
// 11
|
||||||
|
0x49,
|
||||||
|
0x2a,
|
||||||
|
0x00,
|
||||||
|
0x63,
|
||||||
|
0x00,
|
||||||
|
0x2a,
|
||||||
|
0x49,
|
||||||
|
0x00,
|
||||||
|
// 12 horizontal line
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x77,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 13 vertical line
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
// 14 larger +
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x77,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
// 15 angle
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x70,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
// 16 dot
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
// 17 weird angle thing
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x38,
|
||||||
|
0x48,
|
||||||
|
0x08,
|
||||||
|
0x10,
|
||||||
|
0x00,
|
||||||
|
// 18 circle w/ dot
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x6b,
|
||||||
|
0x41,
|
||||||
|
0x63,
|
||||||
|
0x3e,
|
||||||
|
0x08,
|
||||||
|
// 19 tripoint
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x08,
|
||||||
|
0x00,
|
||||||
|
0x14,
|
||||||
|
0x22,
|
||||||
|
0x41,
|
||||||
|
0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
void R2D_Crosshair_Update(void)
|
||||||
|
{
|
||||||
|
int crossdata[CS_WIDTH*CS_HEIGHT];
|
||||||
|
int c;
|
||||||
|
int w, h;
|
||||||
|
unsigned char *x;
|
||||||
|
|
||||||
|
c = crosshair.ival;
|
||||||
|
|
||||||
|
if (crosshairimage.string[0] && c == 1)
|
||||||
|
{
|
||||||
|
shader_crosshair->defaulttextures.base = R_LoadHiResTexture (crosshairimage.string, "crosshairs", IF_NOMIPMAP|IF_NOGAMMA);
|
||||||
|
if (TEXVALID(shader_crosshair->defaulttextures.base))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (c <= 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
c -= 2;
|
||||||
|
c = c % (sizeof(crosshair_pixels) / (CS_HEIGHT*sizeof(*crosshair_pixels)));
|
||||||
|
|
||||||
|
if (!TEXVALID(ch_int_texture))
|
||||||
|
ch_int_texture = R_AllocNewTexture(CS_WIDTH, CS_HEIGHT);
|
||||||
|
shader_crosshair->defaulttextures.base = ch_int_texture;
|
||||||
|
|
||||||
|
Q_memset(crossdata, 0, sizeof(crossdata));
|
||||||
|
|
||||||
|
x = crosshair_pixels + (CS_HEIGHT * c);
|
||||||
|
for (h = 0; h < CS_HEIGHT; h++)
|
||||||
|
{
|
||||||
|
int pix = x[h];
|
||||||
|
for (w = 0; w < CS_WIDTH; w++)
|
||||||
|
{
|
||||||
|
if (pix & 0x1)
|
||||||
|
crossdata[CS_WIDTH * h + w] = 0xffffffff;
|
||||||
|
pix >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
R_Upload(ch_int_texture, NULL, TF_RGBA32, crossdata, NULL, CS_WIDTH, CS_HEIGHT, IF_NOMIPMAP|IF_NOGAMMA);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void R2D_CrosshairImage_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
R2D_Crosshair_Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void R2D_Crosshair_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
R2D_Crosshair_Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void R2D_CrosshairColor_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
SCR_StringToRGB(var->string, ch_color, 255);
|
||||||
|
|
||||||
|
ch_color[0] = bound(0, ch_color[0], 1);
|
||||||
|
ch_color[1] = bound(0, ch_color[1], 1);
|
||||||
|
ch_color[2] = bound(0, ch_color[2], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void R2D_DrawCrosshair(void)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
int sc;
|
||||||
|
float sx, sy, sizex, sizey;
|
||||||
|
|
||||||
|
float size, chc;
|
||||||
|
|
||||||
|
if (crosshair.ival < 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// old style
|
||||||
|
if (crosshair.ival == 1 && !crosshairimage.string[0])
|
||||||
|
{
|
||||||
|
for (sc = 0; sc < cl.splitclients; sc++)
|
||||||
|
{
|
||||||
|
SCR_CrosshairPosition(sc, &x, &y);
|
||||||
|
Font_BeginString(font_conchar, x, y, &x, &y);
|
||||||
|
x -= Font_CharWidth('+' | 0xe000 | CON_WHITEMASK)/2;
|
||||||
|
y -= Font_CharHeight()/2;
|
||||||
|
Font_ForceColour(ch_color[0], ch_color[1], ch_color[2], crosshairalpha.value);
|
||||||
|
Font_DrawChar(x, y, '+' | 0xe000 | CON_WHITEMASK);
|
||||||
|
Font_InvalidateColour();
|
||||||
|
Font_EndString(font_conchar);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = crosshairsize.value;
|
||||||
|
|
||||||
|
if (size < 0)
|
||||||
|
{
|
||||||
|
size = -size;
|
||||||
|
sizex = size;
|
||||||
|
sizey = size;
|
||||||
|
chc = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sizex = (size*vid.rotpixelwidth) / (float)vid.width;
|
||||||
|
sizey = (size*vid.rotpixelheight) / (float)vid.height;
|
||||||
|
chc = size * chc;
|
||||||
|
}
|
||||||
|
|
||||||
|
sizex = (int)sizex;
|
||||||
|
sizex = ((sizex)*(int)vid.width) / (float)vid.rotpixelwidth;
|
||||||
|
|
||||||
|
sizey = (int)sizey;
|
||||||
|
sizey = ((sizey)*(int)vid.height) / (float)vid.rotpixelheight;
|
||||||
|
|
||||||
|
R2D_ImageColours(ch_color[0], ch_color[1], ch_color[2], crosshairalpha.value);
|
||||||
|
for (sc = 0; sc < cl.splitclients; sc++)
|
||||||
|
{
|
||||||
|
SCR_CrosshairPosition(sc, &x, &y);
|
||||||
|
|
||||||
|
//translate to pixel coord, for rounding
|
||||||
|
x = ((x-sizex-chc)*vid.rotpixelwidth) / (float)vid.width;
|
||||||
|
y = ((y-sizey-chc)*vid.rotpixelheight) / (float)vid.height;
|
||||||
|
|
||||||
|
//translate to screen coords
|
||||||
|
sx = ((x)*(int)vid.width) / (float)vid.rotpixelwidth;
|
||||||
|
sy = ((y)*(int)vid.height) / (float)vid.rotpixelheight;
|
||||||
|
|
||||||
|
R2D_Image(sx, sy, sizex*2, sizey*2, 0, 0, 1, 1, shader_crosshair);
|
||||||
|
}
|
||||||
|
R2D_ImageColours(1, 1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -645,9 +645,6 @@ void (*Draw_Shutdown) (void);
|
||||||
|
|
||||||
//void (*Draw_TinyCharacter) (int x, int y, unsigned int num);
|
//void (*Draw_TinyCharacter) (int x, int y, unsigned int num);
|
||||||
|
|
||||||
void (*Draw_Crosshair) (void);
|
|
||||||
void (*Draw_SubPic) (int x, int y, int width, int height, mpic_t *pic, int srcx, int srcy, int srcwidth, int srcheight);
|
|
||||||
|
|
||||||
void (*R_Init) (void);
|
void (*R_Init) (void);
|
||||||
void (*R_DeInit) (void);
|
void (*R_DeInit) (void);
|
||||||
void (*R_RenderView) (void); // must set r_refdef first
|
void (*R_RenderView) (void); // must set r_refdef first
|
||||||
|
@ -702,7 +699,6 @@ rendererinfo_t dedicatedrendererinfo = {
|
||||||
|
|
||||||
NULL, //Draw_Init;
|
NULL, //Draw_Init;
|
||||||
NULL, //Draw_Shutdown;
|
NULL, //Draw_Shutdown;
|
||||||
NULL, //Draw_Crosshair;
|
|
||||||
|
|
||||||
NULL, //R_LoadTexture
|
NULL, //R_LoadTexture
|
||||||
NULL, //R_LoadTexture8Pal24
|
NULL, //R_LoadTexture8Pal24
|
||||||
|
@ -1247,7 +1243,6 @@ void R_SetRenderer(rendererinfo_t *ri)
|
||||||
|
|
||||||
Draw_Init = ri->Draw_Init;
|
Draw_Init = ri->Draw_Init;
|
||||||
Draw_Shutdown = ri->Draw_Shutdown;
|
Draw_Shutdown = ri->Draw_Shutdown;
|
||||||
Draw_Crosshair = ri->Draw_Crosshair;
|
|
||||||
|
|
||||||
R_Init = ri->R_Init;
|
R_Init = ri->R_Init;
|
||||||
R_DeInit = ri->R_DeInit;
|
R_DeInit = ri->R_DeInit;
|
||||||
|
|
|
@ -70,13 +70,13 @@ cvar_t v_ipitch_level = SCVAR("v_ipitch_level", "0.3");
|
||||||
cvar_t v_idlescale = SCVAR("v_idlescale", "0");
|
cvar_t v_idlescale = SCVAR("v_idlescale", "0");
|
||||||
|
|
||||||
cvar_t crosshair = SCVARF("crosshair", "0", CVAR_ARCHIVE);
|
cvar_t crosshair = SCVARF("crosshair", "0", CVAR_ARCHIVE);
|
||||||
cvar_t crosshaircolor = SCVARF("crosshaircolor", "79", CVAR_ARCHIVE | CVAR_RENDERERCALLBACK);
|
cvar_t crosshaircolor = SCVARF("crosshaircolor", "255 255 255", CVAR_ARCHIVE);
|
||||||
cvar_t crosshairsize = SCVARF("crosshairsize", "8", CVAR_ARCHIVE);
|
cvar_t crosshairsize = SCVARF("crosshairsize", "8", CVAR_ARCHIVE);
|
||||||
|
|
||||||
cvar_t cl_crossx = SCVARF("cl_crossx", "0", CVAR_ARCHIVE);
|
cvar_t cl_crossx = SCVARF("cl_crossx", "0", CVAR_ARCHIVE);
|
||||||
cvar_t cl_crossy = SCVARF("cl_crossy", "0", CVAR_ARCHIVE);
|
cvar_t cl_crossy = SCVARF("cl_crossy", "0", CVAR_ARCHIVE);
|
||||||
cvar_t crosshaircorrect = SCVARF("crosshaircorrect", "0", CVAR_SEMICHEAT);
|
cvar_t crosshaircorrect = SCVARF("crosshaircorrect", "0", CVAR_SEMICHEAT);
|
||||||
cvar_t crosshairimage = SCVARF("crosshairimage", "", CVAR_RENDERERCALLBACK);
|
cvar_t crosshairimage = SCVAR("crosshairimage", "");
|
||||||
cvar_t crosshairalpha = SCVAR("crosshairalpha", "1");
|
cvar_t crosshairalpha = SCVAR("crosshairalpha", "1");
|
||||||
|
|
||||||
cvar_t gl_cshiftpercent = SCVAR("gl_cshiftpercent", "100");
|
cvar_t gl_cshiftpercent = SCVAR("gl_cshiftpercent", "100");
|
||||||
|
@ -448,30 +448,65 @@ V_cshift_f
|
||||||
*/
|
*/
|
||||||
void V_cshift_f (void)
|
void V_cshift_f (void)
|
||||||
{
|
{
|
||||||
if (Cmd_Argc() != 5 && Cmd_Argc() != 1) //this is actually to warn of a malice bug (and prevent a totally black screen) more than it is to help the user. :/
|
int r, g, b, p;
|
||||||
{ //The 1 is so teamfortress can use it to clear.
|
|
||||||
if (Cmd_FromGamecode()) //nehahra does nasty things and becomes unplayable.
|
r = g = b = p = 0;
|
||||||
|
|
||||||
|
if (Cmd_Argc() >= 5)
|
||||||
|
{
|
||||||
|
r = atoi(Cmd_Argv(1));
|
||||||
|
g = atoi(Cmd_Argv(2));
|
||||||
|
b = atoi(Cmd_Argv(3));
|
||||||
|
p = atoi(Cmd_Argv(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Cmd_FromGamecode())
|
||||||
|
{
|
||||||
|
if (Cmd_Argc() >= 5)
|
||||||
{
|
{
|
||||||
cl.cshifts[CSHIFT_SERVER].destcolor[0] = 0;
|
qboolean term = false;
|
||||||
cl.cshifts[CSHIFT_SERVER].destcolor[1] = 0;
|
int i;
|
||||||
cl.cshifts[CSHIFT_SERVER].destcolor[2] = 0;
|
char *c = Cmd_Argv(4);
|
||||||
cl.cshifts[CSHIFT_SERVER].percent = 0;
|
|
||||||
|
// malice jumbles commands into a v_cshift so this attempts to fix
|
||||||
|
while (isdigit(*c))
|
||||||
|
c++;
|
||||||
|
|
||||||
|
if (*c)
|
||||||
|
{
|
||||||
|
Cbuf_AddText(c, RESTRICT_SERVER);
|
||||||
|
term = true;
|
||||||
|
}
|
||||||
|
for (i = 5; i < Cmd_Argc(); i++)
|
||||||
|
{
|
||||||
|
Cbuf_AddText(" ", RESTRICT_SERVER);
|
||||||
|
Cbuf_AddText(Cmd_Argv(i), RESTRICT_SERVER);
|
||||||
|
term = true;
|
||||||
|
}
|
||||||
|
if (term)
|
||||||
|
Cbuf_AddText("\n", RESTRICT_SERVER);
|
||||||
}
|
}
|
||||||
|
else if (Cmd_Argc() > 1)
|
||||||
|
Con_DPrintf("broken v_cshift from gamecode\n");
|
||||||
|
|
||||||
|
// ensure we always clear out or set for nehahra
|
||||||
|
cl.cshifts[CSHIFT_SERVER].destcolor[0] = r;
|
||||||
|
cl.cshifts[CSHIFT_SERVER].destcolor[1] = g;
|
||||||
|
cl.cshifts[CSHIFT_SERVER].destcolor[2] = b;
|
||||||
|
cl.cshifts[CSHIFT_SERVER].percent = p;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Cmd_Argc() != 5 && Cmd_Argc() != 1)
|
||||||
|
{
|
||||||
Con_Printf("v_cshift: v_cshift <r> <g> <b> <alpha>\n");
|
Con_Printf("v_cshift: v_cshift <r> <g> <b> <alpha>\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Cmd_FromGamecode())
|
|
||||||
{
|
cshift_empty.destcolor[0] = r;
|
||||||
cl.cshifts[CSHIFT_SERVER].destcolor[0] = atoi(Cmd_Argv(1));
|
cshift_empty.destcolor[1] = g;
|
||||||
cl.cshifts[CSHIFT_SERVER].destcolor[1] = atoi(Cmd_Argv(2));
|
cshift_empty.destcolor[2] = b;
|
||||||
cl.cshifts[CSHIFT_SERVER].destcolor[2] = atoi(Cmd_Argv(3));
|
cshift_empty.percent = p;
|
||||||
cl.cshifts[CSHIFT_SERVER].percent = atoi(Cmd_Argv(4));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cshift_empty.destcolor[0] = atoi(Cmd_Argv(1));
|
|
||||||
cshift_empty.destcolor[1] = atoi(Cmd_Argv(2));
|
|
||||||
cshift_empty.destcolor[2] = atoi(Cmd_Argv(3));
|
|
||||||
cshift_empty.percent = atoi(Cmd_Argv(4));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue