diff --git a/engine/client/m_items.c b/engine/client/m_items.c index a483ba9d7..62411a6fc 100644 --- a/engine/client/m_items.c +++ b/engine/client/m_items.c @@ -671,8 +671,11 @@ menutext_t *MC_AddWhiteText(menu_t *menu, int lhs, int rhs, int y, const char *t n->common.posx = lhs; n->common.posy = y; n->common.width = (rhs && rightalign)?rhs-lhs:0; - n->text = (char*)(n+1); - strcpy((char*)(n+1), (text?text:"")); + if (text) + { + n->text = (char*)(n+1); + strcpy((char*)(n+1), (text)); + } n->common.next = menu->options; menu->options = (menuoption_t *)n; diff --git a/engine/client/pr_clcmd.c b/engine/client/pr_clcmd.c index 14b499a22..15605ca37 100644 --- a/engine/client/pr_clcmd.c +++ b/engine/client/pr_clcmd.c @@ -464,6 +464,30 @@ void QCBUILTIN PF_soundlength (pubprogfuncs_t *prinst, struct globalvars_s *pr_g } } +qboolean M_Vid_GetMode(int num, int *w, int *h); +//a bit pointless really +void QCBUILTIN PF_cl_getresolution (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) +{ +// extern cvar_t vid_fullscreen; + float mode = G_FLOAT(OFS_PARM0); + qboolean fixedmodes = (prinst->callargc >= 2)?!G_FLOAT(OFS_PARM1):false; //if true, we should return sane-sized modes suitable for a window... or the mod could make up its own, but whatever. + float *ret = G_VECTOR(OFS_RETURN); + int w, h; + + w=h=0; + if (mode == -1) + { + int bpp, rate; + Sys_GetDesktopParameters(&w, &h, &bpp, &rate); + } + else + M_Vid_GetMode(mode, &w, &h); + + ret[0] = w; + ret[1] = h; + ret[2] = (w&&h)?1:0; +} + #ifdef CL_MASTER #include "cl_master.h" diff --git a/engine/client/pr_csqc.c b/engine/client/pr_csqc.c index 17d3a4cb3..ab15d126b 100644 --- a/engine/client/pr_csqc.c +++ b/engine/client/pr_csqc.c @@ -4866,7 +4866,7 @@ static struct { {"callfunction", PF_callfunction, 605}, {"writetofile", PF_writetofile, 606}, {"isfunction", PF_isfunction, 607}, - {"parseentitydata", PF_parseentitydata, 608}, + {"getresolution", PF_cl_getresolution, 608}, {"keynumtostring_menu", PF_cl_keynumtostring, 609}, //while present in dp's menuqc, dp doesn't actually support keynumtostring=609 in csqc. Which is probably a good thing because csqc would have 3 separate versions if it did. {"findkeysforcommand_dp", PF_cl_findkeysforcommand, 610}, diff --git a/engine/client/pr_menu.c b/engine/client/pr_menu.c index 337debdcc..99a04a9e5 100644 --- a/engine/client/pr_menu.c +++ b/engine/client/pr_menu.c @@ -1005,24 +1005,6 @@ static void QCBUILTIN PF_menu_cvar_string (pubprogfuncs_t *prinst, struct global G_INT(OFS_RETURN) = (int)PR_SetString(prinst, cv->string); } -qboolean M_Vid_GetMode(int num, int *w, int *h); -//a bit pointless really -void QCBUILTIN PF_cl_getresolution (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) -{ -// extern cvar_t vid_fullscreen; - float mode = G_FLOAT(OFS_PARM0); -// qboolean forfullscreen = (prinst->callargc >= 2)?G_FLOAT(OFS_PARM1):vid_fullscreen.ival; - float *ret = G_VECTOR(OFS_RETURN); - int w, h; - - w=h=0; - M_Vid_GetMode(mode, &w, &h); - - ret[0] = w; - ret[1] = h; - ret[2] = 0; -} - diff --git a/engine/client/textedit.c b/engine/client/textedit.c index 41d213906..5c337fa7d 100644 --- a/engine/client/textedit.c +++ b/engine/client/textedit.c @@ -22,16 +22,16 @@ F11 will step through. #else #define editaddcr_default "0" #endif -#if defined(ANDROID) || defined(SERVERONLY) +//#if defined(ANDROID) || defined(SERVERONLY) #define debugger_default "0" -#else -#define debugger_default "1" -#endif +//#else +//#define debugger_default "1" +//#endif static cvar_t editstripcr = CVARD("edit_stripcr", "1", "remove \\r from eols (on load)"); static cvar_t editaddcr = CVARD("edit_addcr", editaddcr_default, "make sure that each line ends with a \\r (on save)"); static cvar_t edittabspacing = CVARD("edit_tabsize", "4", "How wide tab alignment is"); -cvar_t pr_debugger = CVARAD("pr_debugger", debugger_default, "debugger", "When enabled, QC errors and debug events will enable step-by-step tracing."); +cvar_t pr_debugger = CVARAFD("pr_debugger", debugger_default, "debugger", CVAR_SAVE, "When enabled, QC errors and debug events will enable step-by-step tracing."); extern cvar_t pr_sourcedir; static pubprogfuncs_t *editprogfuncs; diff --git a/engine/common/netinc.h b/engine/common/netinc.h index afa70fa57..f2d060f6f 100644 --- a/engine/common/netinc.h +++ b/engine/common/netinc.h @@ -150,6 +150,7 @@ #define NET_ECONNRESET WSAECONNRESET #define NET_ECONNABORTED WSAECONNABORTED #define NET_ECONNREFUSED WSAECONNREFUSED + #define NET_ETIMEDOUT WSAETIMEDOUT #define NET_ENOTCONN WSAENOTCONN #define NET_EACCES WSAEACCES #define NET_EADDRNOTAVAIL WSAEADDRNOTAVAIL @@ -168,6 +169,7 @@ #define NET_ECONNRESET ECONNRESET #define NET_ECONNABORTED ECONNABORTED #define NET_ECONNREFUSED ECONNREFUSED + #define NET_ETIMEDOUT ETIMEDOUT #define NET_ENOTCONN ENOTCONN #define NET_EACCES EACCES #define NET_EADDRNOTAVAIL EADDRNOTAVAIL diff --git a/engine/common/pr_common.h b/engine/common/pr_common.h index 46771e487..aa86fd977 100644 --- a/engine/common/pr_common.h +++ b/engine/common/pr_common.h @@ -343,6 +343,7 @@ void QCBUILTIN PF_R_PolygonEnd(pubprogfuncs_t *prinst, struct globalvars_s *pr_g #define PF_R_PolygonEnd PF_Fixme #endif +void QCBUILTIN PF_cl_getresolution (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals); void QCBUILTIN PF_cl_gethostcachevalue (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals); void QCBUILTIN PF_cl_gethostcachestring (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals); void QCBUILTIN PF_cl_resethostcachemasks(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals); diff --git a/engine/gl/gl_model.c b/engine/gl/gl_model.c index 07e3df3ba..1fd9e8f6a 100644 --- a/engine/gl/gl_model.c +++ b/engine/gl/gl_model.c @@ -4421,7 +4421,7 @@ TRACE(("LoadBrushModel %i\n", __LINE__)); mod->radius = RadiusFromBounds (mod->mins, mod->maxs); -// mod->numleafs = bm->visleafs; + mod->numvisleafs = bm->visleafs; memset(&mod->batches, 0, sizeof(mod->batches)); mod->vbos = NULL; diff --git a/engine/gl/gl_model.h b/engine/gl/gl_model.h index 1033f965d..046ffc0ce 100644 --- a/engine/gl/gl_model.h +++ b/engine/gl/gl_model.h @@ -874,6 +874,7 @@ typedef struct model_s int numplanes; mplane_t *planes; + int numvisleafs; int numleafs; // number of visible leafs, not counting 0 mleaf_t *leafs; diff --git a/engine/gl/gl_shadow.c b/engine/gl/gl_shadow.c index d5ab71011..ccc184c29 100644 --- a/engine/gl/gl_shadow.c +++ b/engine/gl/gl_shadow.c @@ -449,7 +449,7 @@ static void SHM_BeginShadowMesh(dlight_t *dl, int type) unsigned int lb; sh_vertnum = 0; - lb = (cl.worldmodel->numleafs+7)/8; + lb = (cl.worldmodel->numvisleafs+7)/8; if (!dl->die || !dl->key) { sh_shmesh = dl->worldshadowmesh; @@ -978,7 +978,7 @@ static void SHM_MarkLeavesQ2(dlight_t *dl, unsigned char *lvis, unsigned char *v { //static //variation on mark leaves - for (i=0,leaf=cl.worldmodel->leafs ; inumleafs ; i++, leaf++) + for (i=0,leaf=cl.worldmodel->leafs ; inumvisleafs ; i++, leaf++) { cluster = leaf->cluster; if (cluster == -1) @@ -1000,7 +1000,7 @@ static void SHM_MarkLeavesQ2(dlight_t *dl, unsigned char *lvis, unsigned char *v { //dynamic lights will be discarded after this frame anyway, so only include leafs that are visible //variation on mark leaves - for (i=0,leaf=cl.worldmodel->leafs ; inumleafs ; i++, leaf++) + for (i=0,leaf=cl.worldmodel->leafs ; inumvisleafs ; i++, leaf++) { cluster = leaf->cluster; if (cluster == -1) @@ -1028,7 +1028,7 @@ static void SHM_MarkLeavesQ1(dlight_t *dl, unsigned char *lvis) sh_shadowframe++; //variation on mark leaves - for (i=0 ; inumleafs ; i++) + for (i=0 ; inumvisleafs ; i++) { if (lvis[i>>3] & (1<<(i&7))) { @@ -1514,7 +1514,7 @@ static qboolean Sh_VisOverlaps(qbyte *v1, qbyte *v2) int i, m; if (!v2) return false; - m = (cl.worldmodel->numleafs+7)>>3; + m = (cl.worldmodel->numvisleafs+7)>>3; for (i=(m&~3) ; inumleafs); + int m = (cl.worldmodel->numvisleafs); mleaf_t *wl = cl.worldmodel->leafs; unsigned char lv; diff --git a/engine/http/httpclient.c b/engine/http/httpclient.c index fbe947f4e..8ae3266ea 100644 --- a/engine/http/httpclient.c +++ b/engine/http/httpclient.c @@ -711,6 +711,9 @@ void HTTPDL_Establish(struct dl_download *dl) //don't bother binding. its optional. + //FIXME: make the connect call with a non-blocking socket. + //FIXME: use a vfsfile_t instead of a direct socket to support https + //not yet blocking. if (connect(con->sock, (struct sockaddr *)&serveraddr, addresssize) == -1) { @@ -720,6 +723,9 @@ void HTTPDL_Establish(struct dl_download *dl) case NET_EACCES: Con_Printf("HTTP: connect(%s): access denied. Check firewall.\n", server); break; + case NET_ETIMEDOUT: + Con_Printf("HTTP: connect(%s): timed out.\n", server); + break; default: Con_Printf("HTTP: connect(%s): %s", server, strerror(neterrno())); break; diff --git a/engine/server/svmodel.c b/engine/server/svmodel.c index 9552f0ba6..57e97cadb 100644 --- a/engine/server/svmodel.c +++ b/engine/server/svmodel.c @@ -1898,7 +1898,7 @@ qboolean Mod_LoadBrushModel (model_t *mod, void *buffer, size_t buffersize) VectorCopy (bm->maxs, mod->maxs); VectorCopy (bm->mins, mod->mins); - mod->numleafs = bm->visleafs; + mod->numvisleafs = bm->visleafs; if (i < mod->numsubmodels-1) { // duplicate the basic information