I committed too much last time, so here goes for a big commit.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@774 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
9d24482f9a
commit
c2988990c2
23 changed files with 619 additions and 406 deletions
|
@ -1158,6 +1158,7 @@ void CL_PlayDemo_f (void)
|
|||
else
|
||||
cls.demoplayback = DPB_QUAKEWORLD;
|
||||
cls.state = ca_demostart;
|
||||
net_message.packing = SZ_RAWBYTES;
|
||||
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, 0);
|
||||
realtime = 0;
|
||||
cl.gametime = 0;
|
||||
|
|
|
@ -200,6 +200,9 @@ void IN_Button7Up(void) {KeyUp(&in_button7);}
|
|||
void IN_Button8Down(void) {KeyDown(&in_button8);}
|
||||
void IN_Button8Up(void) {KeyUp(&in_button8);}
|
||||
|
||||
float in_rotate;
|
||||
void IN_Rotate_f (void) {in_rotate += atoi(Cmd_Argv(1));}
|
||||
|
||||
|
||||
//is this useful?
|
||||
|
||||
|
@ -361,7 +364,7 @@ Moves the local angle positions
|
|||
*/
|
||||
void CL_AdjustAngles (int pnum)
|
||||
{
|
||||
float speed;
|
||||
float speed, quant;
|
||||
float up, down;
|
||||
|
||||
if (in_speed.state[pnum] & 1)
|
||||
|
@ -369,6 +372,18 @@ void CL_AdjustAngles (int pnum)
|
|||
else
|
||||
speed = host_frametime;
|
||||
|
||||
if (in_rotate && pnum==0)
|
||||
{
|
||||
quant = in_rotate;
|
||||
// if (quant < -800)
|
||||
// quant = -800;
|
||||
// else if (quant > 800)
|
||||
// quant = 800;
|
||||
quant *= speed;
|
||||
in_rotate -= quant;
|
||||
cl.viewangles[pnum][YAW] += quant;
|
||||
}
|
||||
|
||||
if (!(in_strafe.state[pnum] & 1))
|
||||
{
|
||||
cl.viewangles[pnum][YAW] -= speed*cl_yawspeed.value*CL_KeyState (&in_right, pnum);
|
||||
|
@ -1298,6 +1313,8 @@ void CL_InitInput (void)
|
|||
Cmd_AddCommand (vahunk("-button8%s", spn), IN_Button8Up);
|
||||
}
|
||||
|
||||
Cmd_AddCommand("rotate", IN_Rotate_f);
|
||||
|
||||
Cvar_Register (&cl_nodelta, inputnetworkcvargroup);
|
||||
|
||||
Cvar_Register (&cl_c2sImpulseBackup, inputnetworkcvargroup);
|
||||
|
|
|
@ -71,6 +71,8 @@ cvar_t lookspring = {"lookspring","0", NULL, CVAR_ARCHIVE};
|
|||
cvar_t lookstrafe = {"lookstrafe","0", NULL, CVAR_ARCHIVE};
|
||||
cvar_t sensitivity = {"sensitivity","3", NULL, CVAR_ARCHIVE};
|
||||
|
||||
cvar_t cl_staticsounds = {"cl_staticsounds", "1"};
|
||||
|
||||
cvar_t m_pitch = {"m_pitch","0.022", NULL, CVAR_ARCHIVE};
|
||||
cvar_t m_yaw = {"m_yaw","0.022"};
|
||||
cvar_t m_forward = {"m_forward","1"};
|
||||
|
@ -104,6 +106,8 @@ cvar_t msg = {"msg", "1", NULL, CVAR_ARCHIVE | CVAR_USERINFO};
|
|||
cvar_t cl_nofake = {"cl_nofake", "2"};
|
||||
cvar_t cl_chatsound = {"cl_chatsound", "1"};
|
||||
|
||||
cvar_t cl_muzzleflash = {"cl_muzzleflash", "1"};
|
||||
|
||||
cvar_t cl_item_bobbing = {"cl_model_bobbing", "0"};
|
||||
|
||||
cvar_t requiredownloads = {"requiredownloads","1", NULL, CVAR_ARCHIVE};
|
||||
|
@ -1118,7 +1122,7 @@ void CL_CheckServerInfo(void)
|
|||
cl.bunnyspeedcap = Q_atof(Info_ValueForKey(cl.serverinfo, "pm_bunnyspeedcap"));
|
||||
movevars.slidefix = (Q_atof(Info_ValueForKey(cl.serverinfo, "pm_slidefix")) != 0);
|
||||
movevars.airstep = (Q_atof(Info_ValueForKey(cl.serverinfo, "pm_airstep")) != 0);
|
||||
movevars.walljump = (Q_atof(Info_ValueForKey(cl.serverinfo, "pm_walljump")) != 0);
|
||||
movevars.walljump = (Q_atof(Info_ValueForKey(cl.serverinfo, "pm_walljump")));
|
||||
movevars.ktjump = Q_atof(Info_ValueForKey(cl.serverinfo, "pm_ktjump"));
|
||||
|
||||
// Initialize cl.maxpitch & cl.minpitch
|
||||
|
@ -2110,6 +2114,7 @@ void CL_POP3Poll_f(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
void SCR_ShowPic_Script_f(void);
|
||||
/*
|
||||
=================
|
||||
CL_Init
|
||||
|
@ -2189,11 +2194,15 @@ void CL_Init (void)
|
|||
|
||||
Cvar_Register (&localid, cl_controlgroup);
|
||||
|
||||
Cvar_Register (&cl_muzzleflash, cl_controlgroup);
|
||||
|
||||
Cvar_Register (&baseskin, "Teamplay");
|
||||
Cvar_Register (&noskins, "Teamplay");
|
||||
|
||||
Cvar_Register (&cl_item_bobbing, "Item effects");
|
||||
|
||||
Cvar_Register (&cl_staticsounds, "Item effects");
|
||||
|
||||
//
|
||||
// info mirrors
|
||||
//
|
||||
|
@ -2244,6 +2253,8 @@ void CL_Init (void)
|
|||
Cmd_AddCommand ("playdemo", CL_PlayDemo_f);
|
||||
Cmd_AddCommand ("timedemo", CL_TimeDemo_f);
|
||||
|
||||
Cmd_AddCommand ("showpic", SCR_ShowPic_Script_f);
|
||||
|
||||
Cmd_AddCommand ("startdemos", CL_Startdemos_f);
|
||||
Cmd_AddCommand ("demos", CL_Demos_f);
|
||||
Cmd_AddCommand ("stopdemo", CL_Stopdemo_f);
|
||||
|
|
|
@ -511,6 +511,104 @@ int CL_CalcNet (void)
|
|||
|
||||
//=============================================================================
|
||||
|
||||
//note: this will overwrite existing files.
|
||||
//returns true if the download is going to be downloaded after the call.
|
||||
qboolean CL_EnqueDownload(char *filename, qboolean verbose, qboolean ignorefailedlist)
|
||||
{
|
||||
downloadlist_t *dl;
|
||||
if (strchr(filename, '\\') || strchr(filename, ':') || strstr(filename, ".."))
|
||||
{
|
||||
Con_Printf("Denying download of \"%s\"\n", filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cls.demoplayback)
|
||||
return false;
|
||||
|
||||
if (!ignorefailedlist)
|
||||
{
|
||||
for (dl = cl.faileddownloads; dl; dl = dl->next) //yeah, so it failed... Ignore it.
|
||||
{
|
||||
if (!strcmp(dl->name, filename))
|
||||
{
|
||||
if (verbose)
|
||||
Con_Printf("We've failed to download \"%s\" already\n", filename);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (dl = cl.downloadlist; dl; dl = dl->next) //It's already on our list. Ignore it.
|
||||
{
|
||||
if (!strcmp(dl->name, filename))
|
||||
{
|
||||
if (verbose)
|
||||
Con_Printf("Already waiting for \"%s\"\n", filename);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp(cls.downloadname, filename))
|
||||
{
|
||||
if (verbose)
|
||||
Con_Printf("Already downloading \"%s\"\n", filename);
|
||||
return true;
|
||||
}
|
||||
|
||||
dl = Z_Malloc(sizeof(downloadlist_t));
|
||||
strcpy(dl->name, filename);
|
||||
dl->next = cl.downloadlist;
|
||||
cl.downloadlist = dl;
|
||||
|
||||
if (verbose)
|
||||
Con_Printf("Enqued download of \"%s\"\n", filename);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CL_SendDownloadRequest(char *filename)
|
||||
{
|
||||
downloadlist_t *dl, *nxt;
|
||||
if(cl.downloadlist) //remove from enqued download list
|
||||
{
|
||||
if (!strcmp(cl.downloadlist->name, filename))
|
||||
{
|
||||
dl = cl.downloadlist;
|
||||
cl.downloadlist = cl.downloadlist->next;
|
||||
Z_Free(dl);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (dl = cl.downloadlist->next; dl->next; dl = dl->next)
|
||||
{
|
||||
if (!strcmp(dl->next->name, filename))
|
||||
{
|
||||
nxt = dl->next->next;
|
||||
Z_Free(dl->next);
|
||||
dl->next = nxt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
strcpy (cls.downloadname, filename);
|
||||
Con_TPrintf (TL_DOWNLOADINGFILE, cls.downloadname);
|
||||
|
||||
// download to a temp name, and only rename
|
||||
// to the real name when done, so if interrupted
|
||||
// a runt file wont be left
|
||||
COM_StripExtension (cls.downloadname, cls.downloadtempname);
|
||||
strcat (cls.downloadtempname, ".tmp");
|
||||
|
||||
MSG_WriteByte (&cls.netchan.message, clc_stringcmd);
|
||||
MSG_WriteString (&cls.netchan.message, va("download %s", cls.downloadname));
|
||||
|
||||
//prevent ftp/http from changing stuff
|
||||
cls.downloadtype = DL_QWPENDING;
|
||||
cls.downloadpercent = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
CL_CheckOrDownloadFile
|
||||
|
@ -535,7 +633,8 @@ qboolean CL_CheckOrDownloadFile (char *filename, int nodelay)
|
|||
}
|
||||
|
||||
//ZOID - can't download when recording
|
||||
if (cls.demorecording) {
|
||||
if (cls.demorecording)
|
||||
{
|
||||
Con_TPrintf (TL_NODOWNLOADINDEMO, filename);
|
||||
return true;
|
||||
}
|
||||
|
@ -543,43 +642,10 @@ qboolean CL_CheckOrDownloadFile (char *filename, int nodelay)
|
|||
if (cls.demoplayback)
|
||||
return true;
|
||||
|
||||
if (cl.faileddownloads)
|
||||
{
|
||||
for (failed = cl.faileddownloads; failed; failed = failed->next) //yeah, so it failed... Ignore it.
|
||||
{
|
||||
if (!strcmp(failed->name, filename))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (!nodelay)
|
||||
return !CL_EnqueDownload(filename, false, false);
|
||||
|
||||
for (failed = cl.downloadlist; failed; failed = failed->next) //It's already on our list. Ignore it.
|
||||
{
|
||||
if (!strcmp(failed->name, filename))
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((!requiredownloads.value && !nodelay) || nodelay==-1)
|
||||
{
|
||||
downloadlist_t *new;
|
||||
new = Z_Malloc(sizeof(downloadlist_t));
|
||||
strcpy(new->name, filename);
|
||||
new->next = cl.downloadlist;
|
||||
cl.downloadlist = new;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
strcpy (cls.downloadname, filename);
|
||||
Con_TPrintf (TL_DOWNLOADINGFILE, cls.downloadname);
|
||||
|
||||
// download to a temp name, and only rename
|
||||
// to the real name when done, so if interrupted
|
||||
// a runt file wont be left
|
||||
COM_StripExtension (cls.downloadname, cls.downloadtempname);
|
||||
strcat (cls.downloadtempname, ".tmp");
|
||||
|
||||
MSG_WriteByte (&cls.netchan.message, clc_stringcmd);
|
||||
MSG_WriteString (&cls.netchan.message, va("download %s", cls.downloadname));
|
||||
CL_SendDownloadRequest(filename);
|
||||
|
||||
SCR_EndLoadingPlaque(); //release console.
|
||||
|
||||
|
@ -693,8 +759,9 @@ void Model_NextDownload (void)
|
|||
if (!CL_CheckOrDownloadFile(s, cls.downloadnumber==1)) //world is required to be loaded.
|
||||
return; // started a download
|
||||
|
||||
if (CL_CheckMD2Skins(s))
|
||||
return;
|
||||
if (strstr(s, ".md2"))
|
||||
if (CL_CheckMD2Skins(s))
|
||||
return;
|
||||
}
|
||||
|
||||
if (cl.playernum[0] == -1)
|
||||
|
@ -928,6 +995,58 @@ char *ZLibDownloadDecode(int *messagesize, char *input, int finalsize)
|
|||
}
|
||||
#endif
|
||||
|
||||
void CL_DownloadFailed(void);
|
||||
|
||||
#ifdef PEXT_CHUNKEDDOWNLOADS
|
||||
void CL_ParseChunkedDownload(void)
|
||||
{
|
||||
qbyte *name;
|
||||
int totalsize;
|
||||
int chunknum;
|
||||
|
||||
chunknum = MSG_ReadLong();
|
||||
if (chunknum < 0)
|
||||
{
|
||||
totalsize = MSG_ReadLong();
|
||||
name = MSG_ReadString();
|
||||
if (cls.demoplayback)
|
||||
return;
|
||||
|
||||
if (totalsize < 0)
|
||||
{
|
||||
if (totalsize == -2)
|
||||
Con_Printf("Server permissions deny downloading file %s\n", name);
|
||||
else
|
||||
Con_Printf("Couldn't find file %s on the server\n", name);
|
||||
|
||||
CL_DownloadFailed();
|
||||
|
||||
CL_RequestNextDownload();
|
||||
return;
|
||||
}
|
||||
|
||||
if (cls.downloadmethod == DL_QWCHUNKS)
|
||||
Host_EndGame("Received second download - \"%s\"\n", name);
|
||||
|
||||
//start the new download
|
||||
cls.downloadmethod = DL_QWCHUNKS;
|
||||
cls.downloadpercent = 0;
|
||||
|
||||
strcpy(cls.downloadname, name);
|
||||
COM_StripExtension(name, cls.downloadtempname);
|
||||
COM_DefaultExtension(cls.downloadtempname, ".tmp");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (cls.demoplayback)
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
=====================
|
||||
CL_ParseDownload
|
||||
|
@ -941,6 +1060,15 @@ void CL_ParseDownload (void)
|
|||
qbyte name[1024];
|
||||
int r;
|
||||
|
||||
#ifdef PEXT_CHUNKEDDOWNLOADS
|
||||
#pragma message fixme
|
||||
if (cls.fteprotocolextensions & PEXT_CHUNKEDDOWNLOADS)
|
||||
{
|
||||
CL_ParseChunkedDownload();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// read the data
|
||||
size = MSG_ReadShort ();
|
||||
percent = MSG_ReadByte ();
|
||||
|
@ -959,7 +1087,7 @@ void CL_ParseDownload (void)
|
|||
strcpy(cls.downloadtempname, "unknown.tmp");
|
||||
}
|
||||
|
||||
if (size == -1)
|
||||
if (size < 0)
|
||||
{
|
||||
Con_TPrintf (TL_FILENOTFOUND);
|
||||
if (cls.downloadqw)
|
||||
|
@ -2097,6 +2225,7 @@ CL_ParseStaticSound
|
|||
*/
|
||||
void CL_ParseStaticSound (void)
|
||||
{
|
||||
extern cvar_t cl_staticsounds;
|
||||
vec3_t org;
|
||||
int sound_num, vol, atten;
|
||||
int i;
|
||||
|
@ -2106,6 +2235,9 @@ void CL_ParseStaticSound (void)
|
|||
sound_num = MSG_ReadByte ();
|
||||
vol = MSG_ReadByte ();
|
||||
atten = MSG_ReadByte ();
|
||||
|
||||
if (!cl_staticsounds.value)
|
||||
return;
|
||||
|
||||
S_StaticSound (cl.sound_precache[sound_num], org, vol, atten);
|
||||
}
|
||||
|
@ -2572,8 +2704,16 @@ void CL_MuzzleFlash (void)
|
|||
entity_state_t *s1;
|
||||
int pnum;
|
||||
|
||||
extern cvar_t cl_muzzleflash;
|
||||
|
||||
i = MSG_ReadShort ();
|
||||
|
||||
//was it us?
|
||||
if (i == cl.playernum[0])
|
||||
{
|
||||
if (!cl_muzzleflash.value)
|
||||
return;
|
||||
}
|
||||
|
||||
pack = &cl.frames[cls.netchan.incoming_sequence&UPDATE_MASK].packet_entities;
|
||||
|
||||
|
|
|
@ -580,6 +580,33 @@ void SCR_ShowPic_Update(void)
|
|||
CL_CheckOrDownloadFile(sp->picname, false);
|
||||
}
|
||||
|
||||
void SCR_ShowPic_Script_f(void)
|
||||
{
|
||||
char *imgname;
|
||||
char *name;
|
||||
int x, y;
|
||||
int zone;
|
||||
showpic_t *sp;
|
||||
|
||||
imgname = Cmd_Argv(1);
|
||||
name = Cmd_Argv(2);
|
||||
x = atoi(Cmd_Argv(3));
|
||||
y = atoi(Cmd_Argv(4));
|
||||
zone = atoi(Cmd_Argv(5));
|
||||
|
||||
|
||||
|
||||
sp = SCR_ShowPic_Find(name);
|
||||
|
||||
Z_Free(sp->picname);
|
||||
sp->picname = Z_Malloc(strlen(imgname)+1);
|
||||
strcpy(sp->picname, imgname);
|
||||
|
||||
sp->zone = zone;
|
||||
sp->x = x;
|
||||
sp->y = y;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
||||
/*
|
||||
|
@ -735,13 +762,14 @@ void SCR_CalcRefdef (void)
|
|||
|
||||
void SCR_CrosshairPosition(int pnum, int *x, int *y)
|
||||
{
|
||||
extern cvar_t cl_crossx, cl_crossy, crosshaircorrect;
|
||||
extern cvar_t cl_crossx, cl_crossy, crosshaircorrect, v_viewheight;
|
||||
|
||||
vrect_t rect;
|
||||
SCR_VRectForPlayer(&rect, pnum);
|
||||
|
||||
if (cl.worldmodel && crosshaircorrect.value)
|
||||
{
|
||||
float adj;
|
||||
trace_t tr;
|
||||
vec3_t end;
|
||||
vec3_t start;
|
||||
|
@ -764,7 +792,14 @@ void SCR_CrosshairPosition(int pnum, int *x, int *y)
|
|||
}
|
||||
else
|
||||
{
|
||||
start[2]+=cl.viewheight[pnum]/4;
|
||||
adj=cl.viewheight[pnum];
|
||||
if (v_viewheight.value < -7)
|
||||
adj+=-7;
|
||||
else if (v_viewheight.value > 4)
|
||||
adj+=4;
|
||||
else
|
||||
adj+=v_viewheight.value;
|
||||
start[2]+=adj/4;
|
||||
ML_Project(tr.endpos, end, cl.simangles[pnum], start, (float)rect.width/rect.height, r_refdef.fov_y);
|
||||
*x = rect.x+rect.width*end[0];
|
||||
*y = rect.y+rect.height*(1-end[1]);
|
||||
|
|
|
@ -1828,7 +1828,7 @@ void CL_UpdateBeams (void)
|
|||
float yaw, pitch;
|
||||
float forward, offset;
|
||||
|
||||
extern cvar_t cl_truelightning;
|
||||
extern cvar_t cl_truelightning, v_viewheight;
|
||||
|
||||
// update lightning
|
||||
for (i=0, b=cl_beams ; i< MAX_BEAMS ; i++, b++)
|
||||
|
@ -1842,7 +1842,17 @@ void CL_UpdateBeams (void)
|
|||
// VectorSubtract(cl.simorg, b->start, org);
|
||||
// VectorAdd(b->end, org, b->end); //move the end point by simorg-start
|
||||
|
||||
VectorCopy (cl.simorg[0], b->start); //move the start point to player origin
|
||||
VectorCopy (cl.simorg[0], b->start); //move the start point to view origin
|
||||
b->start[2] += cl.crouch[0];
|
||||
if (v_viewheight.value)
|
||||
{
|
||||
if (v_viewheight.value <= -7)
|
||||
b->start[2] += -7;
|
||||
else if (v_viewheight.value >= 4)
|
||||
b->start[2] += 4;
|
||||
else
|
||||
b->start[2] += v_viewheight.value;
|
||||
}
|
||||
|
||||
|
||||
//rotate the end point to face in the view direction. This gives a smoother shafting. turning looks great.
|
||||
|
|
|
@ -474,8 +474,8 @@ void VQ3_RenderView(const q3refdef_t *ref)
|
|||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
gl_ztrickdisabled|=16;
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglDisable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
R_RenderView();
|
||||
|
@ -484,7 +484,7 @@ void VQ3_RenderView(const q3refdef_t *ref)
|
|||
{
|
||||
gl_ztrickdisabled&=~16;
|
||||
GL_Set2D ();
|
||||
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL_TexEnv(GL_MODULATE);
|
||||
}
|
||||
#endif
|
||||
|
@ -492,8 +492,8 @@ void VQ3_RenderView(const q3refdef_t *ref)
|
|||
#ifdef RGLQUAKE
|
||||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglEnable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -289,7 +289,7 @@ typedef struct
|
|||
int socketip6;
|
||||
int socketipx;
|
||||
|
||||
enum {DL_NONE, DL_QW, DL_HTTP, DL_FTP} downloadmethod;
|
||||
enum {DL_NONE, DL_QW, DL_QWCHUNKS, DL_QWPENDING, DL_HTTP, DL_FTP} downloadmethod;
|
||||
FILE *downloadqw; // file transfer from server
|
||||
char downloadtempname[MAX_OSPATH];
|
||||
char downloadname[MAX_OSPATH];
|
||||
|
|
|
@ -1000,6 +1000,11 @@ void V_AddEntity(entity_t *in)
|
|||
cl_numvisedicts++;
|
||||
|
||||
*ent = *in;
|
||||
|
||||
ent->angles[0]*=-1;
|
||||
AngleVectors(ent->angles, ent->axis[0], ent->axis[1], ent->axis[2]);
|
||||
VectorInverse(ent->axis[1]);
|
||||
ent->angles[0]*=-1;
|
||||
}
|
||||
|
||||
void V_AddLight (vec3_t org, float quant, float r, float g, float b)
|
||||
|
|
|
@ -36,13 +36,13 @@ consolecolours_t consolecolours[] = {
|
|||
|
||||
int con_ormask;
|
||||
console_t con_main;
|
||||
console_t *con; // point to either con_main
|
||||
console_t *con_current; // point to either con_main
|
||||
|
||||
|
||||
#ifdef QTERM
|
||||
#include <windows.h>
|
||||
typedef struct qterm_s {
|
||||
console_t console;
|
||||
console_t *console;
|
||||
qboolean running;
|
||||
HANDLE process;
|
||||
HANDLE pipein;
|
||||
|
@ -85,15 +85,58 @@ extern int key_linepos;
|
|||
|
||||
qboolean con_initialized;
|
||||
|
||||
void Con_ResizeCon (console_t *con);
|
||||
|
||||
void Con_Resize (console_t *con);
|
||||
qboolean Con_IsActive (console_t *con)
|
||||
{
|
||||
return (con == con_current);
|
||||
}
|
||||
void Con_Destroy (console_t *con)
|
||||
{
|
||||
console_t *prev;
|
||||
for (prev = &con_main; prev->next; prev = prev->next)
|
||||
{
|
||||
if (prev->next == con)
|
||||
{
|
||||
prev->next = con->next;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BZ_Free(con);
|
||||
}
|
||||
console_t *Con_FindConsole(char *name)
|
||||
{
|
||||
console_t *con;
|
||||
for (con = &con_main; con; con = con->next)
|
||||
{
|
||||
if (!strcmp(con->name, name))
|
||||
return con;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
console_t *Con_Create(char *name)
|
||||
{
|
||||
console_t *con;
|
||||
con = BZ_Malloc(sizeof(console_t));
|
||||
Q_strncpyz(con->name, name, sizeof(con->name));
|
||||
|
||||
Con_ResizeCon(con);
|
||||
con->next = con_main.next;
|
||||
con_main.next = con;
|
||||
|
||||
return con;
|
||||
}
|
||||
void Con_SetVisible (console_t *con)
|
||||
{
|
||||
con_current = con;
|
||||
}
|
||||
void Con_PrintCon (console_t *con, char *txt);
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef QTERM
|
||||
void Con_PrintCon (char *txt, console_t *con);
|
||||
void QT_Update(void)
|
||||
{
|
||||
char buffer[2048];
|
||||
|
@ -104,8 +147,11 @@ void QT_Update(void)
|
|||
{
|
||||
if (!qt->running)
|
||||
{
|
||||
if (con == &qt->console)
|
||||
if (Con_IsActive(qt->console))
|
||||
continue;
|
||||
|
||||
Con_Destroy(qt->console);
|
||||
|
||||
if (prev)
|
||||
prev->next = qt->next;
|
||||
else
|
||||
|
@ -129,48 +175,44 @@ void QT_Update(void)
|
|||
{
|
||||
ReadFile(qt->pipeout, buffer, sizeof(buffer)-32, &ret, NULL);
|
||||
buffer[ret] = '\0';
|
||||
Con_PrintCon(buffer, &qt->console);
|
||||
Con_PrintCon(qt->console, buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Con_PrintCon("Process ended\n", &qt->console);
|
||||
Con_PrintCon(qt->console, "Process ended\n");
|
||||
qt->running = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void QT_KeyPress(int key)
|
||||
void QT_KeyPress(void *user, int key)
|
||||
{
|
||||
qbyte k[2];
|
||||
qterm_t *qt;
|
||||
qterm_t *qt = user;
|
||||
DWORD send = key; //get around a gcc warning
|
||||
for (qt = qterms; qt; qt = qt->next)
|
||||
{
|
||||
if (&qt->console == con)
|
||||
{
|
||||
k[0] = key;
|
||||
k[1] = '\0';
|
||||
|
||||
if (qt->running)
|
||||
{
|
||||
if (*k == '\r')
|
||||
{
|
||||
|
||||
k[0] = key;
|
||||
k[1] = '\0';
|
||||
|
||||
if (qt->running)
|
||||
{
|
||||
if (*k == '\r')
|
||||
{
|
||||
// *k = '\r';
|
||||
// WriteFile(qt->pipein, k, 1, &key, NULL);
|
||||
// Con_PrintCon(k, &qt->console);
|
||||
*k = '\n';
|
||||
}
|
||||
if (GetFileSize(qt->pipein, NULL)<512)
|
||||
{
|
||||
WriteFile(qt->pipein, k, 1, &send, NULL);
|
||||
Con_PrintCon(k, &qt->console);
|
||||
}
|
||||
}
|
||||
return;
|
||||
*k = '\n';
|
||||
}
|
||||
if (GetFileSize(qt->pipein, NULL)<512)
|
||||
{
|
||||
WriteFile(qt->pipein, k, 1, &send, NULL);
|
||||
Con_PrintCon(qt->console, k);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void QT_Create(char *command)
|
||||
|
@ -236,15 +278,14 @@ void QT_Create(char *command)
|
|||
CloseHandle(ProcInfo.hThread);
|
||||
|
||||
qt->running = true;
|
||||
qt->console.redirect = QT_KeyPress;
|
||||
|
||||
Con_Resize(&qt->console);
|
||||
Con_PrintCon("Started Process\n", &qt->console);
|
||||
qt->console = Con_Create("QTerm");
|
||||
qt->console->redirect = QT_KeyPress;
|
||||
Con_PrintCon(qt->console, "Started Process\n");
|
||||
Con_SetVisible(qt->console);
|
||||
|
||||
qt->next = qterms;
|
||||
qterms = activeqterm = qt;
|
||||
|
||||
con = &qt->console;
|
||||
}
|
||||
|
||||
void Con_QTerm_f(void)
|
||||
|
@ -365,7 +406,7 @@ Con_Resize
|
|||
|
||||
================
|
||||
*/
|
||||
void Con_Resize (console_t *con)
|
||||
void Con_ResizeCon (console_t *con)
|
||||
{
|
||||
int i, j, width, oldwidth, oldtotallines, numlines, numchars;
|
||||
unsigned short tbuf[CON_TEXTSIZE];
|
||||
|
@ -421,7 +462,6 @@ void Con_Resize (console_t *con)
|
|||
con->current = con->totallines - 1;
|
||||
con->display = con->current;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
|
@ -432,12 +472,9 @@ If the line width has changed, reformat the buffer.
|
|||
*/
|
||||
void Con_CheckResize (void)
|
||||
{
|
||||
#ifdef QTERM
|
||||
qterm_t *qt;
|
||||
for (qt = qterms; qt; qt=qt->next)
|
||||
Con_Resize(&qt->console);
|
||||
#endif
|
||||
Con_Resize (&con_main);
|
||||
console_t *c;
|
||||
for (c = &con_main; c; c = c->next)
|
||||
Con_ResizeCon (c);
|
||||
}
|
||||
|
||||
|
||||
|
@ -455,8 +492,8 @@ void Con_Init (void)
|
|||
TRACE(("dbg: Con_Init: con_debuglog forced\n"));
|
||||
#endif
|
||||
|
||||
con = &con_main;
|
||||
con->linewidth = -1;
|
||||
con_current = &con_main;
|
||||
con_main.linewidth = -1;
|
||||
Con_CheckResize ();
|
||||
|
||||
Con_Printf ("Console initialized.\n");
|
||||
|
@ -516,7 +553,7 @@ If no console is visible, the notify window will pop up.
|
|||
#define INVIS_CHAR2 (char)138 //green
|
||||
#define INVIS_CHAR3 (char)160 //blue
|
||||
|
||||
void Con_PrintCon (char *txt, console_t *con)
|
||||
void Con_PrintCon (console_t *con, char *txt)
|
||||
{
|
||||
int y;
|
||||
int c, l;
|
||||
|
@ -630,35 +667,14 @@ void Con_PrintCon (char *txt, console_t *con)
|
|||
}
|
||||
void Con_Print (char *txt)
|
||||
{
|
||||
Con_PrintCon(txt, &con_main); //client console
|
||||
Con_PrintCon(&con_main, txt); //client console
|
||||
}
|
||||
|
||||
void Con_CycleConsole(void)
|
||||
{
|
||||
console_t *old = con;
|
||||
#ifdef QTERM
|
||||
qterm_t *qt;
|
||||
for (qt = qterms; qt; qt=qt->next)
|
||||
{
|
||||
if (old == &qt->console)
|
||||
{
|
||||
if (qt->next)
|
||||
{
|
||||
con = &qt->next->console;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (old == &con_main)
|
||||
{
|
||||
if (qterms)
|
||||
{
|
||||
con = &qterms->console;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
con = &con_main;
|
||||
con_current = con_current->next;
|
||||
if (!con_current)
|
||||
con_current = &con_main;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -830,7 +846,7 @@ void Con_DrawInput (void)
|
|||
if (key_dest != key_console && cls.state == ca_active)
|
||||
return; // don't draw anything (allways draw if not active)
|
||||
|
||||
if (con != &con_main)
|
||||
if (con_current != &con_main)
|
||||
return;
|
||||
|
||||
|
||||
|
@ -867,14 +883,14 @@ void Con_DrawInput (void)
|
|||
|
||||
i = strlen(text);
|
||||
|
||||
if (i >= con->linewidth) //work out the start point
|
||||
si = i - con->linewidth;
|
||||
if (i >= con_current->linewidth) //work out the start point
|
||||
si = i - con_current->linewidth;
|
||||
else
|
||||
si = 0;
|
||||
|
||||
y = con->vislines-22;
|
||||
y = con_current->vislines-22;
|
||||
|
||||
for (i=0,p=0,x=8; x<=con->linewidth*8 ; p++) //draw it
|
||||
for (i=0,p=0,x=8; x<=con_current->linewidth*8 ; p++) //draw it
|
||||
{
|
||||
if (text[p] == '^')
|
||||
{
|
||||
|
@ -905,7 +921,7 @@ void Con_DrawInput (void)
|
|||
break;
|
||||
if (si <= i)
|
||||
{
|
||||
Draw_ColouredCharacter ( x, con->vislines - 22, text[p]|mask);
|
||||
Draw_ColouredCharacter ( x, con_current->vislines - 22, text[p]|mask);
|
||||
x+=8;
|
||||
}
|
||||
i++;
|
||||
|
@ -1064,23 +1080,21 @@ void Con_PrintToSys(void) //send all the stuff that was con_printed to sys_print
|
|||
{
|
||||
int line, row, x;
|
||||
short *text;
|
||||
console_t *curcon = con;
|
||||
if (!con)
|
||||
return;
|
||||
console_t *curcon = &con_main;
|
||||
|
||||
row = curcon->current - con->totallines+1;
|
||||
for (line = 0; line < con->totallines-1; line++, row++) //skip empty lines.
|
||||
row = curcon->current - curcon->totallines+1;
|
||||
for (line = 0; line < curcon->totallines-1; line++, row++) //skip empty lines.
|
||||
{
|
||||
text = curcon->text + (row % con->totallines)*con->linewidth;
|
||||
for (x = 0; x < con->linewidth; x++)
|
||||
text = curcon->text + (row % curcon->totallines)*curcon->linewidth;
|
||||
for (x = 0; x < curcon->linewidth; x++)
|
||||
if (((qbyte)(text[x])&255) != ' ')
|
||||
goto breakout;
|
||||
}
|
||||
breakout:
|
||||
for (; line < con->totallines-1; line++, row++)
|
||||
for (; line < curcon->totallines-1; line++, row++)
|
||||
{
|
||||
text = curcon->text + (row % con->totallines)*con->linewidth;
|
||||
for (x = 0; x < con->linewidth; x++)
|
||||
text = curcon->text + (row % curcon->totallines)*curcon->linewidth;
|
||||
for (x = 0; x < curcon->linewidth; x++)
|
||||
Sys_Printf("%c", (qbyte)text[x]&255);
|
||||
Sys_Printf("\n");
|
||||
}
|
||||
|
@ -1110,7 +1124,7 @@ void Con_DrawConsole (int lines, qboolean noback)
|
|||
extern int relitsurface;
|
||||
#endif
|
||||
|
||||
console_t *curcon = con;
|
||||
console_t *curcon = con_current;
|
||||
|
||||
if (lines <= 0)
|
||||
return;
|
||||
|
@ -1125,7 +1139,7 @@ void Con_DrawConsole (int lines, qboolean noback)
|
|||
Draw_ConsoleBackground (lines);
|
||||
|
||||
// draw the text
|
||||
con->vislines = lines;
|
||||
con_current->vislines = lines;
|
||||
|
||||
// changed to line things up better
|
||||
rows = (lines-22)>>3; // rows of text to draw
|
||||
|
@ -1136,7 +1150,7 @@ void Con_DrawConsole (int lines, qboolean noback)
|
|||
if (curcon->display != curcon->current)
|
||||
{
|
||||
// draw arrows to show the buffer is backscrolled
|
||||
for (x=0 ; x<con->linewidth ; x+=4)
|
||||
for (x=0 ; x<curcon->linewidth ; x+=4)
|
||||
Draw_Character ( (x+1)<<3, y, '^');
|
||||
|
||||
y -= 8;
|
||||
|
@ -1148,14 +1162,15 @@ void Con_DrawConsole (int lines, qboolean noback)
|
|||
{
|
||||
if (row < 0)
|
||||
break;
|
||||
if (curcon->current - row >= con->totallines)
|
||||
if (curcon->current - row >= curcon->totallines)
|
||||
break; // past scrollback wrap point
|
||||
|
||||
text = curcon->text + (row % con->totallines)*con->linewidth;
|
||||
text = curcon->text + (row % curcon->totallines)*curcon->linewidth;
|
||||
|
||||
for (x=0 ; x<con->linewidth ; x++)
|
||||
for (x=0 ; x<curcon->linewidth ; x++)
|
||||
{
|
||||
Draw_ColouredCharacter ( (x+1)<<3, y, text[x]);
|
||||
if (text[x])
|
||||
Draw_ColouredCharacter ( (x+1)<<3, y, text[x]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1188,9 +1203,9 @@ void Con_DrawConsole (int lines, qboolean noback)
|
|||
else
|
||||
txt = progresstext;
|
||||
|
||||
x = con->linewidth - ((con->linewidth * 7) / 40);
|
||||
x = curcon->linewidth - ((curcon->linewidth * 7) / 40);
|
||||
y = x - strlen(txt) - 8;
|
||||
i = con->linewidth/3;
|
||||
i = curcon->linewidth/3;
|
||||
if (strlen(txt) > i)
|
||||
{
|
||||
y = x - i - 11;
|
||||
|
@ -1222,7 +1237,7 @@ void Con_DrawConsole (int lines, qboolean noback)
|
|||
sprintf(dlbar + strlen(dlbar), " %02d%%", (int)progresspercent);
|
||||
|
||||
// draw it
|
||||
y = con->vislines-22 + 8;
|
||||
y = curcon->vislines-22 + 8;
|
||||
for (i = 0; i < strlen(dlbar); i++)
|
||||
Draw_ColouredCharacter ( (i+1)<<3, y, (unsigned char)dlbar[i] | M_COLOR_WHITE);
|
||||
|
||||
|
|
|
@ -243,8 +243,8 @@ int PaddedPrint (char *s, int x)
|
|||
if (x)
|
||||
nextcolx = (int)((x + COLUMNWIDTH)/COLUMNWIDTH)*COLUMNWIDTH;
|
||||
|
||||
if (nextcolx > con->linewidth - MINCOLUMNWIDTH
|
||||
|| (x && nextcolx + strlen(s) >= con->linewidth))
|
||||
if (nextcolx > con_main.linewidth - MINCOLUMNWIDTH
|
||||
|| (x && nextcolx + strlen(s) >= con_main.linewidth))
|
||||
{
|
||||
Con_Printf ("\n");
|
||||
x=0;
|
||||
|
@ -356,7 +356,7 @@ void Key_Console (int key)
|
|||
char *clipText;
|
||||
#endif
|
||||
|
||||
if (con->redirect)
|
||||
if (con_current->redirect)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{ // command completion
|
||||
|
@ -366,7 +366,7 @@ void Key_Console (int key)
|
|||
return;
|
||||
}
|
||||
}
|
||||
con->redirect(key);
|
||||
con_current->redirect(con_current, key);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -513,27 +513,27 @@ void Key_Console (int key)
|
|||
|
||||
if (key == K_PGUP || key==K_MWHEELUP)
|
||||
{
|
||||
con->display -= 2;
|
||||
con_current->display -= 2;
|
||||
return;
|
||||
}
|
||||
|
||||
if (key == K_PGDN || key==K_MWHEELDOWN)
|
||||
{
|
||||
con->display += 2;
|
||||
if (con->display > con->current)
|
||||
con->display = con->current;
|
||||
con_current->display += 2;
|
||||
if (con_current->display > con_current->current)
|
||||
con_current->display = con_current->current;
|
||||
return;
|
||||
}
|
||||
|
||||
if (key == K_HOME)
|
||||
{
|
||||
con->display = con->current - con->totallines + 10;
|
||||
con_current->display = con_current->current - con_current->totallines + 10;
|
||||
return;
|
||||
}
|
||||
|
||||
if (key == K_END)
|
||||
{
|
||||
con->display = con->current;
|
||||
con_current->display = con_current->current;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1324,16 +1324,16 @@ void M_Menu_Main_f (void)
|
|||
mainm = M_CreateMenu(0);
|
||||
mainm->key = MC_Main_Key;
|
||||
|
||||
MC_AddPicture(mainm, 0, 4, "m_main_plaque");
|
||||
p = Draw_SafeCachePic("m_main_logo");
|
||||
MC_AddPicture(mainm, 0, 4, "pics/m_main_plaque");
|
||||
p = Draw_SafeCachePic("pics/m_main_logo");
|
||||
if (!p)
|
||||
return;
|
||||
MC_AddPicture(mainm, 0, 173, "m_main_logo");
|
||||
MC_AddPicture(mainm, 68, 13, "m_main_game");
|
||||
MC_AddPicture(mainm, 68, 53, "m_main_multiplayer");
|
||||
MC_AddPicture(mainm, 68, 93, "m_main_options");
|
||||
MC_AddPicture(mainm, 68, 133, "m_main_video");
|
||||
MC_AddPicture(mainm, 68, 173, "m_main_quit");
|
||||
MC_AddPicture(mainm, 0, 173, "pics/m_main_logo");
|
||||
MC_AddPicture(mainm, 68, 13, "pics/m_main_game");
|
||||
MC_AddPicture(mainm, 68, 53, "pics/m_main_multiplayer");
|
||||
MC_AddPicture(mainm, 68, 93, "pics/m_main_options");
|
||||
MC_AddPicture(mainm, 68, 133, "pics/m_main_video");
|
||||
MC_AddPicture(mainm, 68, 173, "pics/m_main_quit");
|
||||
|
||||
mainm->selecteditem = (menuoption_t *)
|
||||
MC_AddConsoleCommand (mainm, 68, 13, "", "menu_single\n");
|
||||
|
@ -1386,16 +1386,22 @@ void M_Menu_Main_f (void)
|
|||
m_state = m_complex;
|
||||
key_dest = key_menu;
|
||||
m_entersound = true;
|
||||
mainm = M_CreateMenu(0);
|
||||
mainm->key = MC_Main_Key;
|
||||
mainm = M_CreateMenu(0);
|
||||
|
||||
MC_AddPicture(mainm, 16, 4, "gfx/qplaque.lmp");
|
||||
p = Draw_SafeCachePic("gfx/ttl_main.lmp");
|
||||
if (!p)
|
||||
{
|
||||
Con_ToggleConsole_f();
|
||||
MC_AddRedText(mainm, 16, 0, "MAIN MENU", false);
|
||||
|
||||
mainm->selecteditem = (menuoption_t *)
|
||||
MC_AddConsoleCommand (mainm, 64, 32, "Join server", "menu_servers\n");
|
||||
MC_AddConsoleCommand (mainm, 64, 40, "Options", "menu_options\n");
|
||||
MC_AddConsoleCommand (mainm, 64, 48, "Quit", "menu_quit\n");
|
||||
return;
|
||||
}
|
||||
mainm->key = MC_Main_Key;
|
||||
MC_AddPicture(mainm, 16, 4, "gfx/qplaque.lmp");
|
||||
|
||||
MC_AddPicture(mainm, (320-p->width)/2, 4, "gfx/ttl_main.lmp");
|
||||
MC_AddPicture(mainm, 72, 32, "gfx/mainmenu.lmp");
|
||||
|
||||
|
|
|
@ -748,7 +748,7 @@ char *Media_NextTrack(void)
|
|||
|
||||
|
||||
//Avi files are specific to windows. Bit of a bummer really.
|
||||
#if defined(_WIN32) && !defined(MINGW)
|
||||
#if defined(_WIN32) && !defined(__GNUC__)
|
||||
#define WINAVI
|
||||
#endif
|
||||
|
||||
|
@ -1318,7 +1318,7 @@ void Media_RecordFrame (void)
|
|||
{
|
||||
case CT_AVI:
|
||||
//ask gl for it
|
||||
glReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, framebuffer );
|
||||
qglReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, framebuffer );
|
||||
|
||||
// swap rgb to bgr
|
||||
c = glwidth*glheight*3;
|
||||
|
@ -1351,11 +1351,11 @@ skipframe:
|
|||
if (y < scr_con_current) y = scr_con_current;
|
||||
if (y > vid.height-8)
|
||||
y = vid.height-8;
|
||||
glColor4f(1, 0, 0, sin(realtime*4)/4+0.75);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
qglColor4f(1, 0, 0, sin(realtime*4)/4+0.75);
|
||||
qglEnable(GL_BLEND);
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
GL_TexEnv(GL_MODULATE);
|
||||
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
Draw_String((strlen(capturemessage.string)+1)*8, y, "RECORDING");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,6 +112,7 @@ typedef struct {
|
|||
|
||||
qboolean M_Audio_Key (int key, struct menu_s *menu)
|
||||
{
|
||||
int i, x, y;
|
||||
audiomenuinfo_t *info = menu->data;
|
||||
soundcardinfo_t *sc;
|
||||
for (sc = sndcardinfo; sc; sc = sc->next)
|
||||
|
@ -142,6 +143,15 @@ qboolean M_Audio_Key (int key, struct menu_s *menu)
|
|||
{
|
||||
info->testsoundsource->common.posx-=10;
|
||||
}
|
||||
if (key >= '0' && key <= '5')
|
||||
{
|
||||
i = key - '0';
|
||||
x = info->testsoundsource->common.posx - 320/2;
|
||||
y = info->testsoundsource->common.posy - 200/2;
|
||||
sc->yaw[i] = (-atan2 (y,x)*180/M_PI) - 90;
|
||||
|
||||
sc->dist[i] = 50/sqrt(x*x+y*y);
|
||||
}
|
||||
|
||||
menu->selecteditem = NULL;
|
||||
|
||||
|
@ -170,17 +180,19 @@ void M_Audio_StartSound (struct menu_s *menu)
|
|||
|
||||
for (i = 0; i < sc->sn.numchannels; i++)
|
||||
{
|
||||
info->speaker[i]->common.posx = 320/2 - sin(sc->yaw[i]*M_PI/180) * 50;
|
||||
info->speaker[i]->common.posy = 200/2 - cos(sc->yaw[i]*M_PI/180) * 50;
|
||||
info->speaker[i]->common.posx = 320/2 - sin(sc->yaw[i]*M_PI/180) * 50/sc->dist[i];
|
||||
info->speaker[i]->common.posy = 200/2 - cos(sc->yaw[i]*M_PI/180) * 50/sc->dist[i];
|
||||
}
|
||||
for (; i < 6; i++)
|
||||
info->speaker[i]->common.posy = -100;
|
||||
|
||||
if (lasttime+0.5 < Sys_DoubleTime())
|
||||
{
|
||||
lasttime = Sys_DoubleTime();
|
||||
org[0] = listener_origin[0] + listener_right[0]*(info->testsoundsource->common.posx-320/2) + listener_forward[0]*(info->testsoundsource->common.posy-200/2);
|
||||
org[1] = listener_origin[1] + listener_right[1]*(info->testsoundsource->common.posx-320/2) + listener_forward[1]*(info->testsoundsource->common.posy-200/2);
|
||||
org[2] = listener_origin[2] + listener_right[2]*(info->testsoundsource->common.posx-320/2) + listener_forward[2]*(info->testsoundsource->common.posy-200/2);
|
||||
S_StartSound(-1, 0, S_PrecacheSound("misc/menu1.wav"), org, 1, 4);
|
||||
org[0] = listener_origin[0] + 2*(listener_right[0]*(info->testsoundsource->common.posx-320/2) + listener_forward[0]*(info->testsoundsource->common.posy-200/2));
|
||||
org[1] = listener_origin[1] + 2*(listener_right[1]*(info->testsoundsource->common.posx-320/2) + listener_forward[1]*(info->testsoundsource->common.posy-200/2));
|
||||
org[2] = listener_origin[2] + 2*(listener_right[2]*(info->testsoundsource->common.posx-320/2) + listener_forward[2]*(info->testsoundsource->common.posy-200/2));
|
||||
S_StartSound(-2, 0, S_PrecacheSound("player/pain3.wav"), org, 1, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,9 +16,7 @@ qboolean M_Script_Key (int key, menu_t *menu)
|
|||
if (key >= '0' && key <= '9')
|
||||
{
|
||||
if (key == '0') //specal case so that "hello" < "0"... (plus matches impulses)
|
||||
Cbuf_AddText(va("set option 10\n%s\n", menualias.string), RESTRICT_LOCAL);
|
||||
else
|
||||
Cbuf_AddText(va("set option %c\n%s\n", key, menualias.string), RESTRICT_LOCAL);
|
||||
Cbuf_AddText(va("set option %i\n%s\n", key-'0'+1, menualias.string), RESTRICT_LOCAL);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -796,6 +796,7 @@ void M_Menu_Quit_f (void)
|
|||
void M_Menu_MediaFiles_f (void);
|
||||
void M_Menu_FPS_f (void);
|
||||
void M_Menu_Particles_f (void);
|
||||
void M_Menu_Audio_Speakers_f (void);
|
||||
static qboolean internalmenusregistered;
|
||||
void M_Init_Internal (void)
|
||||
{
|
||||
|
@ -834,6 +835,7 @@ void M_Init_Internal (void)
|
|||
Cmd_AddRemCommand ("menu_options", M_Menu_Options_f);
|
||||
Cmd_AddRemCommand ("menu_video", M_Menu_Video_f);
|
||||
Cmd_AddRemCommand ("menu_audio", M_Menu_Audio_f);
|
||||
Cmd_AddRemCommand ("menu_speakers", M_Menu_Audio_Speakers_f);
|
||||
Cmd_AddRemCommand ("menu_fps", M_Menu_FPS_f);
|
||||
Cmd_AddRemCommand ("menu_particles", M_Menu_Particles_f);
|
||||
}
|
||||
|
|
|
@ -612,18 +612,18 @@ void PF_CL_drawfill (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
|||
#ifdef RGLQUAKE
|
||||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
glColor4f(rgb[0], rgb[1], rgb[2], alpha);
|
||||
qglColor4f(rgb[0], rgb[1], rgb[2], alpha);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
qglDisable(GL_TEXTURE_2D);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
glVertex2f(pos[0], pos[1]);
|
||||
glVertex2f(pos[0]+size[0], pos[1]);
|
||||
glVertex2f(pos[0]+size[0], pos[1]+size[1]);
|
||||
glVertex2f(pos[0], pos[1]+size[1]);
|
||||
glEnd();
|
||||
qglBegin(GL_QUADS);
|
||||
qglVertex2f(pos[0], pos[1]);
|
||||
qglVertex2f(pos[0]+size[0], pos[1]);
|
||||
qglVertex2f(pos[0]+size[0], pos[1]+size[1]);
|
||||
qglVertex2f(pos[0], pos[1]+size[1]);
|
||||
qglEnd();
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
qglEnable(GL_TEXTURE_2D);
|
||||
}
|
||||
#endif
|
||||
G_FLOAT(OFS_RETURN) = 1;
|
||||
|
@ -1267,8 +1267,8 @@ void MP_Draw(void)
|
|||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
GL_TexEnv(GL_MODULATE);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglEnable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -2418,17 +2418,17 @@ void GL_DrawTexturedParticle(particle_t *p, part_type_t *type)
|
|||
}
|
||||
|
||||
lasttype = type;
|
||||
glEnd();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglEnable(GL_TEXTURE_2D);
|
||||
GL_Bind(type->texturenum);
|
||||
if (type->blendmode == BM_ADD) //addative
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_FLAT);
|
||||
glBegin(GL_QUADS);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_FLAT);
|
||||
qglBegin(GL_QUADS);
|
||||
}
|
||||
|
||||
scale = (p->org[0] - r_origin[0])*vpn[0] + (p->org[1] - r_origin[1])*vpn[1]
|
||||
|
@ -2439,7 +2439,7 @@ void GL_DrawTexturedParticle(particle_t *p, part_type_t *type)
|
|||
else
|
||||
scale = 0.25 + scale * 0.001;
|
||||
|
||||
glColor4f ( p->rgb[0],
|
||||
qglColor4f (p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
|
@ -2454,14 +2454,14 @@ void GL_DrawTexturedParticle(particle_t *p, part_type_t *type)
|
|||
x = 0;
|
||||
y = scale;
|
||||
}
|
||||
glTexCoord2f(0,0);
|
||||
glVertex3f (p->org[0] - x*pright[0] - y*pup[0], p->org[1] - x*pright[1] - y*pup[1], p->org[2] - x*pright[2] - y*pup[2]);
|
||||
glTexCoord2f(0,1);
|
||||
glVertex3f (p->org[0] - y*pright[0] + x*pup[0], p->org[1] - y*pright[1] + x*pup[1], p->org[2] - y*pright[2] + x*pup[2]);
|
||||
glTexCoord2f(1,1);
|
||||
glVertex3f (p->org[0] + x*pright[0] + y*pup[0], p->org[1] + x*pright[1] + y*pup[1], p->org[2] + x*pright[2] + y*pup[2]);
|
||||
glTexCoord2f(1,0);
|
||||
glVertex3f (p->org[0] + y*pright[0] - x*pup[0], p->org[1] + y*pright[1] - x*pup[1], p->org[2] + y*pright[2] - x*pup[2]);
|
||||
qglTexCoord2f(0,0);
|
||||
qglVertex3f (p->org[0] - x*pright[0] - y*pup[0], p->org[1] - x*pright[1] - y*pup[1], p->org[2] - x*pright[2] - y*pup[2]);
|
||||
qglTexCoord2f(0,1);
|
||||
qglVertex3f (p->org[0] - y*pright[0] + x*pup[0], p->org[1] - y*pright[1] + x*pup[1], p->org[2] - y*pright[2] + x*pup[2]);
|
||||
qglTexCoord2f(1,1);
|
||||
qglVertex3f (p->org[0] + x*pright[0] + y*pup[0], p->org[1] + x*pright[1] + y*pup[1], p->org[2] + x*pright[2] + y*pup[2]);
|
||||
qglTexCoord2f(1,0);
|
||||
qglVertex3f (p->org[0] + y*pright[0] - x*pup[0], p->org[1] + y*pright[1] - x*pup[1], p->org[2] + y*pright[2] - x*pup[2]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2475,17 +2475,17 @@ void GL_DrawSketchParticle(particle_t *p, part_type_t *type)
|
|||
if (lasttype != type)
|
||||
{
|
||||
lasttype = type;
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglDisable(GL_TEXTURE_2D);
|
||||
GL_Bind(type->texturenum);
|
||||
// if (type->blendmode == BM_ADD) //addative
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_LINES);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_SMOOTH);
|
||||
qglBegin(GL_LINES);
|
||||
}
|
||||
|
||||
scale = (p->org[0] - r_origin[0])*vpn[0] + (p->org[1] - r_origin[1])*vpn[1]
|
||||
|
@ -2496,7 +2496,7 @@ void GL_DrawSketchParticle(particle_t *p, part_type_t *type)
|
|||
else
|
||||
scale = 0.25 + scale * 0.001;
|
||||
|
||||
glColor4f ( p->rgb[0]/2,
|
||||
qglColor4f (p->rgb[0]/2,
|
||||
p->rgb[1]/2,
|
||||
p->rgb[2]/2,
|
||||
p->alpha*2);
|
||||
|
@ -2513,10 +2513,10 @@ void GL_DrawSketchParticle(particle_t *p, part_type_t *type)
|
|||
x = 0;
|
||||
y = scale;
|
||||
}
|
||||
glVertex3f (p->org[0] - x*pright[0] - y*pup[0], p->org[1] - x*pright[1] - y*pup[1], p->org[2] - x*pright[2] - y*pup[2]);
|
||||
glVertex3f (p->org[0] + x*pright[0] + y*pup[0], p->org[1] + x*pright[1] + y*pup[1], p->org[2] + x*pright[2] + y*pup[2]);
|
||||
glVertex3f (p->org[0] + y*pright[0] - x*pup[0], p->org[1] + y*pright[1] - x*pup[1], p->org[2] + y*pright[2] - x*pup[2]);
|
||||
glVertex3f (p->org[0] - y*pright[0] + x*pup[0], p->org[1] - y*pright[1] + x*pup[1], p->org[2] - y*pright[2] + x*pup[2]);
|
||||
qglVertex3f (p->org[0] - x*pright[0] - y*pup[0], p->org[1] - x*pright[1] - y*pup[1], p->org[2] - x*pright[2] - y*pup[2]);
|
||||
qglVertex3f (p->org[0] + x*pright[0] + y*pup[0], p->org[1] + x*pright[1] + y*pup[1], p->org[2] + x*pright[2] + y*pup[2]);
|
||||
qglVertex3f (p->org[0] + y*pright[0] - x*pup[0], p->org[1] + y*pright[1] - x*pup[1], p->org[2] + y*pright[2] - x*pup[2]);
|
||||
qglVertex3f (p->org[0] - y*pright[0] + x*pup[0], p->org[1] - y*pright[1] + x*pup[1], p->org[2] - y*pright[2] + x*pup[2]);
|
||||
}
|
||||
|
||||
void GL_DrawTrifanParticle(particle_t *p, part_type_t *type)
|
||||
|
@ -2525,19 +2525,19 @@ void GL_DrawTrifanParticle(particle_t *p, part_type_t *type)
|
|||
vec3_t v;
|
||||
float scale;
|
||||
|
||||
glEnd();
|
||||
qglEnd();
|
||||
|
||||
if (lasttype != type)
|
||||
{
|
||||
lasttype = type;
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
qglDisable(GL_TEXTURE_2D);
|
||||
if (type->blendmode == BM_ADD) //addative
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_SMOOTH);
|
||||
}
|
||||
|
||||
scale = (p->org[0] - r_origin[0])*vpn[0] + (p->org[1] - r_origin[1])*vpn[1]
|
||||
|
@ -2551,13 +2551,13 @@ void GL_DrawTrifanParticle(particle_t *p, part_type_t *type)
|
|||
if ((p->vel[0]*p->vel[0]+p->vel[1]*p->vel[1]+p->vel[2]*p->vel[2])*2*scale > 30*30)
|
||||
scale = 1+1/30/Length(p->vel)*2;*/
|
||||
|
||||
glBegin (GL_TRIANGLE_FAN);
|
||||
glColor4f ( p->rgb[0],
|
||||
qglBegin (GL_TRIANGLE_FAN);
|
||||
qglColor4f (p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
glVertex3fv (p->org);
|
||||
glColor4f ( p->rgb[0]/2,
|
||||
qglVertex3fv (p->org);
|
||||
qglColor4f (p->rgb[0]/2,
|
||||
p->rgb[1]/2,
|
||||
p->rgb[2]/2,
|
||||
0);
|
||||
|
@ -2566,10 +2566,10 @@ void GL_DrawTrifanParticle(particle_t *p, part_type_t *type)
|
|||
v[0] = p->org[0] - p->vel[0]*scale + vright[0]*cost[i%7]*p->scale + vup[0]*sint[i%7]*p->scale;
|
||||
v[1] = p->org[1] - p->vel[1]*scale + vright[1]*cost[i%7]*p->scale + vup[1]*sint[i%7]*p->scale;
|
||||
v[2] = p->org[2] - p->vel[2]*scale + vright[2]*cost[i%7]*p->scale + vup[2]*sint[i%7]*p->scale;
|
||||
glVertex3fv (v);
|
||||
qglVertex3fv (v);
|
||||
}
|
||||
glEnd ();
|
||||
glBegin (GL_LINES);
|
||||
qglEnd ();
|
||||
qglBegin (GL_LINES);
|
||||
}
|
||||
|
||||
void GL_DrawSparkedParticle(particle_t *p, part_type_t *type)
|
||||
|
@ -2577,30 +2577,30 @@ void GL_DrawSparkedParticle(particle_t *p, part_type_t *type)
|
|||
if (lasttype != type)
|
||||
{
|
||||
lasttype = type;
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglDisable(GL_TEXTURE_2D);
|
||||
GL_Bind(type->texturenum);
|
||||
if (type->blendmode == BM_ADD) //addative
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_LINES);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_SMOOTH);
|
||||
qglBegin(GL_LINES);
|
||||
}
|
||||
|
||||
glColor4f ( p->rgb[0],
|
||||
qglColor4f (p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
glVertex3f (p->org[0], p->org[1], p->org[2]);
|
||||
qglVertex3f (p->org[0], p->org[1], p->org[2]);
|
||||
|
||||
glColor4f ( p->rgb[0],
|
||||
qglColor4f (p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
0);
|
||||
glVertex3f (p->org[0]-p->vel[0]/10, p->org[1]-p->vel[1]/10, p->org[2]-p->vel[2]/10);
|
||||
qglVertex3f (p->org[0]-p->vel[0]/10, p->org[1]-p->vel[1]/10, p->org[2]-p->vel[2]/10);
|
||||
|
||||
}
|
||||
|
||||
|
@ -2609,30 +2609,30 @@ void GL_DrawSketchSparkParticle(particle_t *p, part_type_t *type)
|
|||
if (lasttype != type)
|
||||
{
|
||||
lasttype = type;
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglDisable(GL_TEXTURE_2D);
|
||||
GL_Bind(type->texturenum);
|
||||
if (type->blendmode == BM_ADD) //addative
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_LINES);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_SMOOTH);
|
||||
qglBegin(GL_LINES);
|
||||
}
|
||||
|
||||
glColor4f ( p->rgb[0],
|
||||
qglColor4f (p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
glVertex3f (p->org[0], p->org[1], p->org[2]);
|
||||
qglVertex3f (p->org[0], p->org[1], p->org[2]);
|
||||
|
||||
glColor4f ( p->rgb[0],
|
||||
qglColor4f (p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
0);
|
||||
glVertex3f (p->org[0]-p->vel[0]/10, p->org[1]-p->vel[1]/10, p->org[2]-p->vel[2]/10);
|
||||
qglVertex3f (p->org[0]-p->vel[0]/10, p->org[1]-p->vel[1]/10, p->org[2]-p->vel[2]/10);
|
||||
}
|
||||
|
||||
void GL_DrawParticleBeam_Textured(beamseg_t *b, part_type_t *type)
|
||||
|
@ -2660,36 +2660,36 @@ void GL_DrawParticleBeam_Textured(beamseg_t *b, part_type_t *type)
|
|||
if (lasttype != type)
|
||||
{
|
||||
lasttype = type;
|
||||
glEnd();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglEnable(GL_TEXTURE_2D);
|
||||
GL_Bind(type->texturenum);
|
||||
if (type->blendmode == BM_ADD) //addative
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_QUADS);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_SMOOTH);
|
||||
qglBegin(GL_QUADS);
|
||||
}
|
||||
glColor4f(q->rgb[0],
|
||||
qglColor4f(q->rgb[0],
|
||||
q->rgb[1],
|
||||
q->rgb[2],
|
||||
q->alpha);
|
||||
// glBegin(GL_LINE_LOOP);
|
||||
// qglBegin(GL_LINE_LOOP);
|
||||
VectorSubtract(r_refdef.vieworg, q->org, v);
|
||||
VectorNormalize(v);
|
||||
CrossProduct(c->dir, v, cr);
|
||||
ts = (c->texture_s*type->rotationstartmin + particletime*type->rotationmin)/754;
|
||||
|
||||
VectorMA(q->org, -q->scale, cr, point);
|
||||
glTexCoord2f(ts, 0);
|
||||
glVertex3fv(point);
|
||||
qglTexCoord2f(ts, 0);
|
||||
qglVertex3fv(point);
|
||||
VectorMA(q->org, q->scale, cr, point);
|
||||
glTexCoord2f(ts, 1);
|
||||
glVertex3fv(point);
|
||||
qglTexCoord2f(ts, 1);
|
||||
qglVertex3fv(point);
|
||||
|
||||
glColor4f(p->rgb[0],
|
||||
qglColor4f(p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
|
@ -2700,12 +2700,12 @@ void GL_DrawParticleBeam_Textured(beamseg_t *b, part_type_t *type)
|
|||
ts = (b->texture_s*type->rotationstartmin + particletime*type->rotationmin)/754;
|
||||
|
||||
VectorMA(p->org, p->scale, cr, point);
|
||||
glTexCoord2f(ts, 1);
|
||||
glVertex3fv(point);
|
||||
qglTexCoord2f(ts, 1);
|
||||
qglVertex3fv(point);
|
||||
VectorMA(p->org, -p->scale, cr, point);
|
||||
glTexCoord2f(ts, 0);
|
||||
glVertex3fv(point);
|
||||
// glEnd();
|
||||
qglTexCoord2f(ts, 0);
|
||||
qglVertex3fv(point);
|
||||
// qglEnd();
|
||||
}
|
||||
|
||||
void GL_DrawParticleBeam_Untextured(beamseg_t *b, part_type_t *type)
|
||||
|
@ -2734,20 +2734,20 @@ void GL_DrawParticleBeam_Untextured(beamseg_t *b, part_type_t *type)
|
|||
if (lasttype != type)
|
||||
{
|
||||
lasttype = type;
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglDisable(GL_TEXTURE_2D);
|
||||
GL_Bind(type->texturenum);
|
||||
if (type->blendmode == BM_ADD) //addative
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
// else if (type->blendmode == BM_SUBTRACT) //subtractive
|
||||
// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
else
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_QUADS);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglShadeModel(GL_SMOOTH);
|
||||
qglBegin(GL_QUADS);
|
||||
}
|
||||
|
||||
// glBegin(GL_LINE_LOOP);
|
||||
// qglBegin(GL_LINE_LOOP);
|
||||
VectorSubtract(r_refdef.vieworg, q->org, v);
|
||||
VectorNormalize(v);
|
||||
CrossProduct(c->dir, v, cr);
|
||||
|
@ -2769,55 +2769,55 @@ void GL_DrawParticleBeam_Untextured(beamseg_t *b, part_type_t *type)
|
|||
//back in
|
||||
//front in
|
||||
//front out
|
||||
glColor4f(q->rgb[0],
|
||||
qglColor4f(q->rgb[0],
|
||||
q->rgb[1],
|
||||
q->rgb[2],
|
||||
0);
|
||||
glVertex3fv(point[0]);
|
||||
glColor4f(q->rgb[0],
|
||||
qglVertex3fv(point[0]);
|
||||
qglColor4f(q->rgb[0],
|
||||
q->rgb[1],
|
||||
q->rgb[2],
|
||||
q->alpha);
|
||||
glVertex3fv(q->org);
|
||||
qglVertex3fv(q->org);
|
||||
|
||||
glColor4f(p->rgb[0],
|
||||
qglColor4f(p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
glVertex3fv(p->org);
|
||||
glColor4f(p->rgb[0],
|
||||
qglVertex3fv(p->org);
|
||||
qglColor4f(p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
0);
|
||||
glVertex3fv(point[3]);
|
||||
qglVertex3fv(point[3]);
|
||||
|
||||
//front out
|
||||
//front in
|
||||
//back in
|
||||
//back out
|
||||
glColor4f(p->rgb[0],
|
||||
qglColor4f(p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
0);
|
||||
glVertex3fv(point[2]);
|
||||
glColor4f(p->rgb[0],
|
||||
qglVertex3fv(point[2]);
|
||||
qglColor4f(p->rgb[0],
|
||||
p->rgb[1],
|
||||
p->rgb[2],
|
||||
p->alpha);
|
||||
glVertex3fv(p->org);
|
||||
qglVertex3fv(p->org);
|
||||
|
||||
glColor4f(q->rgb[0],
|
||||
qglColor4f(q->rgb[0],
|
||||
q->rgb[1],
|
||||
q->rgb[2],
|
||||
q->alpha);
|
||||
glVertex3fv(q->org);
|
||||
glColor4f(q->rgb[0],
|
||||
qglVertex3fv(q->org);
|
||||
qglColor4f(q->rgb[0],
|
||||
q->rgb[1],
|
||||
q->rgb[2],
|
||||
0);
|
||||
glVertex3fv(point[1]);
|
||||
qglVertex3fv(point[1]);
|
||||
|
||||
// glEnd();
|
||||
// qglEnd();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -3240,14 +3240,14 @@ void R_DrawParticles (void)
|
|||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
extern cvar_t r_drawflat;
|
||||
glDepthMask(0);
|
||||
qglDepthMask(0);
|
||||
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glEnable (GL_BLEND);
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglEnable (GL_BLEND);
|
||||
GL_TexEnv(GL_MODULATE);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
qglBegin(GL_QUADS);
|
||||
|
||||
if (r_drawflat.value == 2)
|
||||
DrawParticleTypes(GL_DrawSketchParticle, GL_DrawSketchSparkParticle, GL_DrawParticleBeam_Textured, GL_DrawParticleBeam_Untextured);//GL_DrawParticleBeam_Sketched, GL_DrawParticleBeam_Sketched);
|
||||
|
@ -3256,10 +3256,10 @@ void R_DrawParticles (void)
|
|||
else
|
||||
DrawParticleTypes(GL_DrawTexturedParticle, GL_DrawSparkedParticle, GL_DrawParticleBeam_Textured, GL_DrawParticleBeam_Untextured);
|
||||
|
||||
glEnd();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglEnable(GL_TEXTURE_2D);
|
||||
|
||||
glDepthMask(1);
|
||||
qglDepthMask(1);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -177,6 +177,8 @@ cvar_t scr_chatmodecvar = {"scr_chatmode", "0"};
|
|||
|
||||
#ifdef Q3SHADERS
|
||||
extern cvar_t r_vertexlight;
|
||||
cvar_t gl_shadeq1 = {"gl_shadeq1", "0", NULL, CVAR_CHEAT}; //FIXME: :(
|
||||
cvar_t gl_shadeq1_name = {"gl_shadeq1_name", "*"};
|
||||
#endif
|
||||
|
||||
cvar_t r_bloodstains = {"r_bloodstains", "1"};
|
||||
|
@ -335,6 +337,8 @@ void GLRenderer_Init(void)
|
|||
Cvar_Register (&gl_schematics, GLRENDEREROPTIONS);
|
||||
#ifdef Q3SHADERS
|
||||
Cvar_Register (&r_vertexlight, GLRENDEREROPTIONS);
|
||||
Cvar_Register (&gl_shadeq1, GLRENDEREROPTIONS);
|
||||
Cvar_Register (&gl_shadeq1_name, GLRENDEREROPTIONS);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -344,7 +344,9 @@ void S_Control_f (void)
|
|||
soundcardinfo_t *sc;
|
||||
card = atoi(command+4);
|
||||
|
||||
for (i = 0, sc = sndcardinfo; i < card && sc; i++,sc=sc->next);
|
||||
for (i = 0, sc = sndcardinfo; i < card && sc; i++,sc=sc->next)
|
||||
;
|
||||
|
||||
if (!sc)
|
||||
{
|
||||
Con_Printf("Sound card %i is invalid (try resetting first)\n", card);
|
||||
|
@ -700,28 +702,21 @@ SND_Spatialize
|
|||
*/
|
||||
void SND_Spatialize(soundcardinfo_t *sc, channel_t *ch)
|
||||
{
|
||||
vec_t dot, dotforward, dotup;
|
||||
vec_t dotright, dotforward, dotup;
|
||||
vec_t dist;
|
||||
vec_t scale[MAXSOUNDCHANNELS];
|
||||
vec_t scale;
|
||||
vec3_t source_vec;
|
||||
sfx_t *snd;
|
||||
int i;
|
||||
|
||||
// anything coming from the view entity will allways be full volume
|
||||
if (ch->entnum == -1 || ch->entnum == cl.playernum[0]+1)
|
||||
{
|
||||
ch->vol[0] = ch->master_vol;
|
||||
ch->vol[1] = ch->master_vol;
|
||||
ch->vol[2] = ch->master_vol;
|
||||
ch->vol[3] = ch->master_vol;
|
||||
ch->vol[4] = ch->master_vol;
|
||||
ch->vol[5] = ch->master_vol;
|
||||
|
||||
ch->delay[0] = 0;
|
||||
ch->delay[1] = 0;
|
||||
ch->delay[2] = 0;
|
||||
ch->delay[3] = 0;
|
||||
ch->delay[4] = 0;
|
||||
ch->delay[5] = 0;
|
||||
for (i = 0; i < sc->sn.numchannels; i++)
|
||||
{
|
||||
ch->vol[i] = ch->master_vol;
|
||||
ch->delay[i] = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -731,71 +726,22 @@ void SND_Spatialize(soundcardinfo_t *sc, channel_t *ch)
|
|||
|
||||
dist = VectorNormalize(source_vec) * ch->dist_mult;
|
||||
|
||||
dot = DotProduct(listener_right, source_vec);
|
||||
dotforward = -DotProduct(listener_forward, source_vec);
|
||||
dotright = DotProduct(listener_right, source_vec);
|
||||
dotforward = DotProduct(listener_forward, source_vec);
|
||||
dotup = DotProduct(listener_up, source_vec);
|
||||
|
||||
if (sc->sn.numchannels == 1)
|
||||
for (i = 0; i < sc->sn.numchannels; i++)
|
||||
{
|
||||
scale[0] = 1.0;
|
||||
scale[1] = 1.0;
|
||||
scale[2] = 1.0;
|
||||
scale[3] = 1.0;
|
||||
scale[4] = 1.0;
|
||||
scale[5] = 1.0;
|
||||
ch->delay[0] = 0;
|
||||
ch->delay[1] = 0;
|
||||
ch->delay[2] = 0;
|
||||
ch->delay[3] = 0;
|
||||
ch->delay[4] = 0;
|
||||
ch->delay[5] = 0;
|
||||
scale = 1 + (dotright*sin(sc->yaw[i]*M_PI/180) + dotforward*cos(sc->yaw[i]*M_PI/180));// - dotup*cos(sc->pitch[0])*2;
|
||||
scale = (1.0 - dist) * scale * sc->dist[i];
|
||||
// if (scale < 0.5)
|
||||
// scale = 0.5;
|
||||
ch->vol[i] = (int) (ch->master_vol * scale);
|
||||
if (ch->vol[i] < 0)
|
||||
ch->vol[i] = 0;
|
||||
|
||||
ch->delay[i] = 0;//(scale[0]-1)*1024;
|
||||
}
|
||||
else
|
||||
{
|
||||
scale[0] = 2.0 + dot*sin(sc->yaw[0]*M_PI/180) + dotforward*cos(sc->yaw[0]*M_PI/180);// - dotup*cos(sc->pitch[0])*2;
|
||||
scale[1] = 2.0 + dot*sin(sc->yaw[1]*M_PI/180) + dotforward*cos(sc->yaw[1]*M_PI/180);// - dotup*cos(sc->pitch[1])*2;
|
||||
scale[2] = 2.0 + dot*sin(sc->yaw[2]*M_PI/180) + dotforward*cos(sc->yaw[2]*M_PI/180);// - dotup*cos(sc->pitch[2])*2;
|
||||
scale[3] = 2.0 + dot*sin(sc->yaw[3]*M_PI/180) + dotforward*cos(sc->yaw[3]*M_PI/180);// - dotup*cos(sc->pitch[3])*2;
|
||||
scale[4] = 2.0 + dot*sin(sc->yaw[4]*M_PI/180) + dotforward*cos(sc->yaw[4]*M_PI/180);// - dotup*cos(sc->pitch[4])*2;
|
||||
scale[5] = 2.0 + dot*sin(sc->yaw[5]*M_PI/180) + dotforward*cos(sc->yaw[5]*M_PI/180);// - dotup*cos(sc->pitch[5])*2;
|
||||
ch->delay[0] = 0;//(scale[0]-1)*1024;
|
||||
ch->delay[1] = 0;//(scale[1]-1)*1024;
|
||||
ch->delay[2] = 0;//(scale[2]-1)*1024;
|
||||
ch->delay[3] = 0;//(scale[3]-1)*1024;
|
||||
ch->delay[4] = 0;//(scale[4]-1)*1024;
|
||||
ch->delay[5] = 0;//(scale[5]-1)*1024;
|
||||
}
|
||||
|
||||
// add in distance effect
|
||||
scale[0] = (1.0 - dist) * scale[0] * sc->dist[0]; //default fl
|
||||
ch->vol[0] = (int) (ch->master_vol * scale[0]);
|
||||
if (ch->vol[0] < 0)
|
||||
ch->vol[0] = 0;
|
||||
|
||||
scale[1] = (1.0 - dist) * scale[1] * sc->dist[1]; //fr
|
||||
ch->vol[1] = (int) (ch->master_vol * scale[1]);
|
||||
if (ch->vol[1] < 0)
|
||||
ch->vol[1] = 0;
|
||||
|
||||
scale[2] = (1.0 - dist) * scale[2] * sc->dist[2]; //rl
|
||||
ch->vol[2] = (int) (ch->master_vol * scale[2]);
|
||||
if (ch->vol[2] < 0)
|
||||
ch->vol[2] = 0;
|
||||
|
||||
scale[3] = (1.0 - dist) * scale[3] * sc->dist[3]; //rr
|
||||
ch->vol[3] = (int) (ch->master_vol * scale[3]);
|
||||
if (ch->vol[3] < 0)
|
||||
ch->vol[3] = 0;
|
||||
|
||||
scale[4] = (1.0 - dist) * scale[4] * sc->dist[4];
|
||||
ch->vol[4] = (int) (ch->master_vol * scale[4]);
|
||||
if (ch->vol[4] < 0)
|
||||
ch->vol[4] = 0;
|
||||
|
||||
scale[5] = (1.0 - dist) * scale[5] * sc->dist[5];
|
||||
ch->vol[5] = (int) (ch->master_vol * scale[5]);
|
||||
if (ch->vol[5] < 0)
|
||||
ch->vol[5] = 0;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
|
|
|
@ -200,7 +200,7 @@ void VARGS Sys_DebugLog(char *file, char *fmt, ...)
|
|||
send(sock, data, strlen(data), 0);
|
||||
}
|
||||
#endif
|
||||
fd = fopen(file, "wb");
|
||||
fd = fopen(file, "ab");
|
||||
fprintf(fd, "%s", data);
|
||||
fclose(fd);
|
||||
};
|
||||
|
|
|
@ -79,6 +79,8 @@ cvar_t crosshairsize = {"crosshairsize", "8", NULL, CVAR_ARCHIVE};
|
|||
cvar_t cl_crossx = {"cl_crossx", "0", NULL, CVAR_ARCHIVE};
|
||||
cvar_t cl_crossy = {"cl_crossy", "0", NULL, CVAR_ARCHIVE};
|
||||
cvar_t crosshaircorrect = {"crosshaircorrect", "0", NULL, CVAR_SEMICHEAT};
|
||||
cvar_t crosshairimage = {"crosshairimage", ""};
|
||||
cvar_t crosshairalpha = {"crosshairalpha", ""};
|
||||
|
||||
cvar_t gl_cshiftpercent = {"gl_cshiftpercent", "100"};
|
||||
|
||||
|
@ -91,6 +93,8 @@ cvar_t v_suitcshift = {"v_suitcshift", "0"};
|
|||
cvar_t v_ringcshift = {"v_ringcshift", "0"};
|
||||
cvar_t v_pentcshift = {"v_pentcshift", "0"};
|
||||
|
||||
cvar_t v_viewheight = {"v_viewheight", "0"};
|
||||
|
||||
extern cvar_t cl_chasecam;
|
||||
|
||||
float v_dmg_time[MAX_SPLITS], v_dmg_roll[MAX_SPLITS], v_dmg_pitch[MAX_SPLITS];
|
||||
|
@ -1059,7 +1063,14 @@ void V_CalcRefdef (int pnum)
|
|||
// view is the weapon model (only visible from inside body)
|
||||
view = &cl.viewent[pnum];
|
||||
|
||||
bob = V_CalcBob (pnum);
|
||||
if (v_viewheight.value < -7)
|
||||
bob=-7;
|
||||
else if (v_viewheight.value > 4)
|
||||
bob=4;
|
||||
else if (v_viewheight.value)
|
||||
bob=v_viewheight.value;
|
||||
else
|
||||
bob = V_CalcBob (pnum);
|
||||
|
||||
// refresh position from simulated origin
|
||||
VectorCopy (cl.simorg[pnum], r_refdef.vieworg);
|
||||
|
@ -1106,17 +1117,14 @@ void V_CalcRefdef (int pnum)
|
|||
|
||||
CalcGunAngle (pnum);
|
||||
|
||||
VectorCopy (cl.simorg[pnum], view->origin);
|
||||
view->origin[2] += cl.viewheight[pnum];
|
||||
view->origin[2] += cl.crouch[pnum];
|
||||
VectorCopy (r_refdef.vieworg, view->origin);
|
||||
|
||||
for (i=0 ; i<3 ; i++)
|
||||
{
|
||||
view->origin[i] += forward[i]*bob*0.4;
|
||||
// view->origin[i] += right[i]*bob*0.4;
|
||||
// view->origin[i] += right[i]*sin(cl.time*5.5342452354235)*0.1;
|
||||
// view->origin[i] += up[i]*bob*0.8;
|
||||
}
|
||||
view->origin[2] += bob;
|
||||
|
||||
// fudge position around to keep amount of weapon visible
|
||||
// roughly equal with different FOV
|
||||
|
@ -1455,10 +1463,14 @@ void V_Init (void)
|
|||
|
||||
Cvar_Register (&v_bonusflash, VIEWVARS);
|
||||
|
||||
Cvar_Register (&v_viewheight, VIEWVARS);
|
||||
|
||||
Cvar_Register (&crosshaircolor, VIEWVARS);
|
||||
Cvar_Register (&crosshair, VIEWVARS);
|
||||
Cvar_Register (&crosshairsize, VIEWVARS);
|
||||
Cvar_Register (&crosshaircorrect, VIEWVARS);
|
||||
Cvar_Register (&crosshairimage, VIEWVARS);
|
||||
Cvar_Register (&crosshairalpha, VIEWVARS);
|
||||
Cvar_Register (&cl_crossx, VIEWVARS);
|
||||
Cvar_Register (&cl_crossy, VIEWVARS);
|
||||
Cvar_Register (&gl_cshiftpercent, VIEWVARS);
|
||||
|
|
|
@ -824,21 +824,20 @@ static void TP_InitMacros(void)
|
|||
//ones added by Spike, for fuhquake compatability
|
||||
Cmd_AddMacro("connectiontype", Macro_ConnectionType);
|
||||
Cmd_AddMacro("demoplayback", Macro_demoplayback);
|
||||
/*
|
||||
$droploc
|
||||
$droptime
|
||||
$ledpoint
|
||||
$ledstatus
|
||||
$matchname
|
||||
$matchstatus
|
||||
$matchtype
|
||||
$mp3info
|
||||
$need
|
||||
$point
|
||||
$pointatloc
|
||||
$pointloc
|
||||
$triggermatch
|
||||
*/
|
||||
Cmd_AddMacro("need", Macro_Need);
|
||||
Cmd_AddMacro("point", Macro_PointName);
|
||||
Cmd_AddMacro("pointatloc", Macro_PointNameAtLocation);
|
||||
Cmd_AddMacro("pointloc", Macro_PointLocation);
|
||||
|
||||
// Cmd_AddMacro("droploc", Macro_LastDrop);
|
||||
// Cmd_AddMacro("droptime", Macro_LastDropTime);
|
||||
// Cmd_AddMacro("ledpoint", Macro_Point_LED);
|
||||
// Cmd_AddMacro("ledstatus", Macro_MyStatus_LED);
|
||||
// Cmd_AddMacro("matchname", Macro_Match_Name);
|
||||
// Cmd_AddMacro("matchstatus", Macro_Match_Status);
|
||||
// Cmd_AddMacro("matchtype", Macro_Match_Type);
|
||||
// Cmd_AddMacro("mp3info", );
|
||||
// Cmd_AddMacro("triggermatch", Macro_LastTrigger_Match);
|
||||
}
|
||||
|
||||
#define MAX_MACRO_STRING 1024
|
||||
|
|
Loading…
Reference in a new issue