fix some crashes and other annoying issues.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4659 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2014-05-16 17:45:37 +00:00
parent 4c3cb29108
commit c0f8c28e2c
12 changed files with 53 additions and 34 deletions

View File

@ -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;

View File

@ -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"

View File

@ -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},

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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 ; i<cl.worldmodel->numleafs ; i++, leaf++)
for (i=0,leaf=cl.worldmodel->leafs ; i<cl.worldmodel->numvisleafs ; 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 ; i<cl.worldmodel->numleafs ; i++, leaf++)
for (i=0,leaf=cl.worldmodel->leafs ; i<cl.worldmodel->numvisleafs ; 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 ; i<cl.worldmodel->numleafs ; i++)
for (i=0 ; i<cl.worldmodel->numvisleafs ; 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) ; i<m ; i++)
{
@ -1536,7 +1536,7 @@ static qboolean Sh_VisOverlaps(qbyte *v1, qbyte *v2)
static qboolean Sh_LeafInView(qbyte *lightvis, qbyte *vvis)
{
int i;
int m = (cl.worldmodel->numleafs);
int m = (cl.worldmodel->numvisleafs);
mleaf_t *wl = cl.worldmodel->leafs;
unsigned char lv;

View File

@ -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;

View File

@ -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