diff --git a/engine/client/cl_demo.c b/engine/client/cl_demo.c index 2928ffa40..44223a4eb 100644 --- a/engine/client/cl_demo.c +++ b/engine/client/cl_demo.c @@ -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; diff --git a/engine/client/cl_input.c b/engine/client/cl_input.c index 4a1f95333..74b69d81d 100644 --- a/engine/client/cl_input.c +++ b/engine/client/cl_input.c @@ -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); diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 3a3b50623..06386936b 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -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); diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index 307dc6b6e..8e607c2bc 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -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; diff --git a/engine/client/cl_screen.c b/engine/client/cl_screen.c index b713aedb5..42a25462d 100644 --- a/engine/client/cl_screen.c +++ b/engine/client/cl_screen.c @@ -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]); diff --git a/engine/client/cl_tent.c b/engine/client/cl_tent.c index eadbdfd9c..33364a45d 100644 --- a/engine/client/cl_tent.c +++ b/engine/client/cl_tent.c @@ -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. diff --git a/engine/client/cl_ui.c b/engine/client/cl_ui.c index da926f895..e62b734ab 100644 --- a/engine/client/cl_ui.c +++ b/engine/client/cl_ui.c @@ -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 diff --git a/engine/client/client.h b/engine/client/client.h index 3c75d4b3b..dd6aa32d9 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -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]; diff --git a/engine/client/clq2_ents.c b/engine/client/clq2_ents.c index d599a1d75..c8d9b60a9 100644 --- a/engine/client/clq2_ents.c +++ b/engine/client/clq2_ents.c @@ -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) diff --git a/engine/client/console.c b/engine/client/console.c index 6d5ea7076..1d7c604d2 100644 --- a/engine/client/console.c +++ b/engine/client/console.c @@ -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 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 ; xlinewidth ; x+=4) + for (x=0 ; xlinewidth ; 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 ; xlinewidth ; x++) + for (x=0 ; xlinewidth ; 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); diff --git a/engine/client/keys.c b/engine/client/keys.c index 0fbb6a1ff..68498dbee 100644 --- a/engine/client/keys.c +++ b/engine/client/keys.c @@ -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; } diff --git a/engine/client/m_items.c b/engine/client/m_items.c index 25f3d3696..44fbc817f 100644 --- a/engine/client/m_items.c +++ b/engine/client/m_items.c @@ -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"); diff --git a/engine/client/m_mp3.c b/engine/client/m_mp3.c index 07aac5da5..99ffe9140 100644 --- a/engine/client/m_mp3.c +++ b/engine/client/m_mp3.c @@ -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"); } } diff --git a/engine/client/m_options.c b/engine/client/m_options.c index 237efa1df..e054200e1 100644 --- a/engine/client/m_options.c +++ b/engine/client/m_options.c @@ -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); } } diff --git a/engine/client/m_script.c b/engine/client/m_script.c index 8b3aeaf37..2ca9e759c 100644 --- a/engine/client/m_script.c +++ b/engine/client/m_script.c @@ -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; diff --git a/engine/client/menu.c b/engine/client/menu.c index 26ce4fce5..97119d687 100644 --- a/engine/client/menu.c +++ b/engine/client/menu.c @@ -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); } diff --git a/engine/client/pr_menu.c b/engine/client/pr_menu.c index ffa133eb1..26009ca85 100644 --- a/engine/client/pr_menu.c +++ b/engine/client/pr_menu.c @@ -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 diff --git a/engine/client/r_part.c b/engine/client/r_part.c index 6391e753c..e2c665d63 100644 --- a/engine/client/r_part.c +++ b/engine/client/r_part.c @@ -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 diff --git a/engine/client/renderer.c b/engine/client/renderer.c index e1564cbca..468ad8a8e 100644 --- a/engine/client/renderer.c +++ b/engine/client/renderer.c @@ -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 diff --git a/engine/client/snd_dma.c b/engine/client/snd_dma.c index f8579af54..e23222c02 100644 --- a/engine/client/snd_dma.c +++ b/engine/client/snd_dma.c @@ -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; } // ======================================================================= diff --git a/engine/client/sys_win.c b/engine/client/sys_win.c index 465e8b257..709f035a7 100644 --- a/engine/client/sys_win.c +++ b/engine/client/sys_win.c @@ -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); }; diff --git a/engine/client/view.c b/engine/client/view.c index f6bf8b840..4ced26f83 100644 --- a/engine/client/view.c +++ b/engine/client/view.c @@ -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); diff --git a/engine/client/zqtp.c b/engine/client/zqtp.c index bd7c5da43..dc30842af 100644 --- a/engine/client/zqtp.c +++ b/engine/client/zqtp.c @@ -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