diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index f535fd4e4..4acac0c9a 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -1492,6 +1492,8 @@ void CL_CheckServerInfo(void) cl.minpitch = -89.9; } + cl.hexen2pickups = atoi(Info_ValueForKey(cl.serverinfo, "sv_pupglow")); + allowed = atoi(Info_ValueForKey(cl.serverinfo, "allow")); if (allowed & 1) cls.allow_watervis = true; diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index 7285cccf8..b17edf0a7 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -991,11 +991,6 @@ int CL_LoadModels(int stage, qboolean dontactuallyload) // Host_EndGame("Worldmodel wasn't loaded\n"); } - if (cl.worldmodel && cl.worldmodel->fromgame == fg_quake) - cl.hexen2pickups = cl.worldmodel->hulls[MAX_MAP_HULLSDH2-1].available; - else - cl.hexen2pickups = false; - #ifdef CSQC_DAT CSQC_WorldLoaded(); #endif diff --git a/engine/client/cl_screen.c b/engine/client/cl_screen.c index 14a306373..316f50abc 100644 --- a/engine/client/cl_screen.c +++ b/engine/client/cl_screen.c @@ -447,12 +447,15 @@ void SCR_DrawCenterString (vrect_t *rect, cprint_t *p) if (p->flags & CPRINT_BACKGROUND) { //hexen2 style plaque. - int lines, len; if (rect->width > 320) { - rect->x = (rect->x + rect->width/2) - 160; + rect->x = (rect->x + rect->width/2) - (160); rect->width = 320; } + if (rect->width < 32) + return; + rect->x += 16; + rect->width -= 32; } Font_BeginString(font_conchar, rect->x, rect->y, &left, &top); @@ -484,8 +487,11 @@ void SCR_DrawCenterString (vrect_t *rect, cprint_t *p) if (p->flags & CPRINT_BACKGROUND) { //hexen2 style plaque. - x = rect->x+(rect->width-320)/2; - Draw_TextBox(x-6, y-8, 320/8-1, linecount); + int px, py, pw; + px = rect->x; + py = ( y * vid.height) / (float)vid.pixelheight; + pw = rect->width+8; + Draw_TextBox(px-16, py-8-8, pw/8, linecount+2); } for (l = 0; l < linecount; l++, y += Font_CharHeight()) diff --git a/engine/client/image.c b/engine/client/image.c index 5cd936026..9ba62f062 100644 --- a/engine/client/image.c +++ b/engine/client/image.c @@ -2012,11 +2012,14 @@ texid_t R_LoadHiResTexture(char *name, char *subpath, unsigned int flags) *data = '#'; } - snprintf(fname, sizeof(fname)-1, "%s/%s", subpath, name); - tex = R_FindTexture(fname); - if (TEXVALID(tex)) //don't bother if it already exists. - return tex; + snprintf(fname, sizeof(fname)-1, "%s/%s", subpath, name); /*should be safe if its null*/ if (subpath && *subpath) + { + tex = R_FindTexture(fname); + if (TEXVALID(tex)) //don't bother if it already exists. + return tex; + } + if (!(flags & IF_SUBDIRONLY)) { tex = R_FindTexture(name); if (TEXVALID(tex)) //don't bother if it already exists. @@ -2024,12 +2027,18 @@ texid_t R_LoadHiResTexture(char *name, char *subpath, unsigned int flags) } - tex = R_LoadCompressed(fname); - if (TEXVALID(tex)) - return tex; - tex = R_LoadCompressed(name); - if (TEXVALID(tex)) - return tex; + if (subpath && *subpath) + { + tex = R_LoadCompressed(fname); + if (TEXVALID(tex)) + return tex; + } + if (!(flags & IF_SUBDIRONLY)) + { + tex = R_LoadCompressed(name); + if (TEXVALID(tex)) + return tex; + } if (strchr(name, '/')) //never look in a root dir for the pic i = 0; @@ -2053,7 +2062,11 @@ texid_t R_LoadHiResTexture(char *name, char *subpath, unsigned int flags) snprintf(fname, sizeof(fname)-1, tex_path[i].path, subpath, nicename, tex_extensions[e].name); } else + { + if (flags & IF_SUBDIRONLY) + continue; snprintf(fname, sizeof(fname)-1, tex_path[i].path, nicename, tex_extensions[e].name); + } TRACE(("dbg: Mod_LoadHiResTexture: trying %s\n", fname)); if ((buf = COM_LoadFile (fname, 5))) { @@ -2094,32 +2107,35 @@ texid_t R_LoadHiResTexture(char *name, char *subpath, unsigned int flags) } } - /*still failed? attempt to load quake lmp files, which have no real format id*/ - snprintf(fname, sizeof(fname)-1, "%s%s", nicename, ".lmp"); - if ((buf = COM_LoadFile (fname, 5))) + if (!(flags & IF_SUBDIRONLY)) { - extern cvar_t vid_hardwaregamma; - tex = r_nulltex; - if (com_filesize >= 8) + /*still failed? attempt to load quake lmp files, which have no real format id*/ + snprintf(fname, sizeof(fname)-1, "%s%s", nicename, ".lmp"); + if ((buf = COM_LoadFile (fname, 5))) { - image_width = LittleLong(((int*)buf)[0]); - image_height = LittleLong(((int*)buf)[1]); - if (image_width*image_height+8 == com_filesize) + extern cvar_t vid_hardwaregamma; + tex = r_nulltex; + if (com_filesize >= 8) { - tex = R_LoadTexture8(name, image_width, image_height, buf+8, flags, 1); + image_width = LittleLong(((int*)buf)[0]); + image_height = LittleLong(((int*)buf)[1]); + if (image_width*image_height+8 == com_filesize) + { + tex = R_LoadTexture8(name, image_width, image_height, buf+8, flags, 1); + } } + BZ_Free(buf); + return tex; } - BZ_Free(buf); - return tex; - } - //now look in wad files. (halflife compatability) - data = W_GetTexture(name, &image_width, &image_height, &alphaed); - if (data) - { - tex = R_LoadTexture32 (name, image_width, image_height, (unsigned*)data, flags); - BZ_Free(data); - return tex; + //now look in wad files. (halflife compatability) + data = W_GetTexture(name, &image_width, &image_height, &alphaed); + if (data) + { + tex = R_LoadTexture32 (name, image_width, image_height, (unsigned*)data, flags); + BZ_Free(data); + return tex; + } } return r_nulltex; } diff --git a/engine/client/m_single.c b/engine/client/m_single.c index c68aa4958..515bd8cca 100644 --- a/engine/client/m_single.c +++ b/engine/client/m_single.c @@ -180,6 +180,8 @@ void M_Menu_SinglePlayer_f (void) menu = M_CreateMenu(0); MC_AddPicture(menu, 16, 0, 35, 176, "gfx/menu/hplaque.lmp"); + Cvar_Get("cl_playerclass", "1", CVAR_USERINFO|CVAR_ARCHIVE, "Hexen2"); + y = 64-20; if (!strncmp(Cmd_Argv(1), "class", 5)) diff --git a/engine/client/render.h b/engine/client/render.h index 3c932d9be..8ef8a147b 100644 --- a/engine/client/render.h +++ b/engine/client/render.h @@ -245,7 +245,9 @@ enum imageflags IF_NOPICMIP = 1<<1, IF_NOMIPMAP = 1<<2, IF_NOALPHA = 1<<3, - IF_NOGAMMA = 1<<4 + IF_NOGAMMA = 1<<4, + + IF_SUBDIRONLY = 1<<31 }; enum uploadfmt diff --git a/engine/common/fs.c b/engine/common/fs.c index 4b798c9fd..5ef25f423 100644 --- a/engine/common/fs.c +++ b/engine/common/fs.c @@ -1803,7 +1803,7 @@ void COM_Gamedir (const char *dir) #define DPCOMPAT "set dpcompat_set 1\nset dpcompat_trailparticles 1\n" #define NEXCFG DPCOMPAT "set sv_maxairspeed \"400\"\nset sv_jumpvelocity 270\nset sv_mintic \"0.01\"\ncl_nolerp 0\nset r_particlesdesc effectinfo\n" #define DMFCFG "set com_parseutf8 1\npm_airstep 1\n" -#define HEX2CFG "set sv_maxspeed 640\nset watervis 1\nset r_wateralpha 0.5\n" +#define HEX2CFG "set sv_maxspeed 640\nset watervis 1\nset r_wateralpha 0.5\nset sv_pupglow 1\n" typedef struct { const char *protocolname; //sent to the master server when this is the current gamemode. diff --git a/engine/gl/gl_alias.c b/engine/gl/gl_alias.c index f1291392a..7ed205ffc 100644 --- a/engine/gl/gl_alias.c +++ b/engine/gl/gl_alias.c @@ -841,7 +841,7 @@ static qboolean R_CalcModelLighting(entity_t *e, model_t *clmodel, unsigned int if ((e->model->flags & EF_ROTATE) && cl.hexen2pickups) { shadelight[0] = shadelight[1] = shadelight[2] = - ambientlight[0] = ambientlight[1] = ambientlight[2] = 128+sin(cl.time*4)*64; + ambientlight[0] = ambientlight[1] = ambientlight[2] = 128+sin(cl.servertime*4)*64; } if ((e->drawflags & MLS_MASKIN) == MLS_ABSLIGHT) { diff --git a/engine/gl/gl_model.c b/engine/gl/gl_model.c index 6f006bfef..ebbf67ed9 100644 --- a/engine/gl/gl_model.c +++ b/engine/gl/gl_model.c @@ -1085,7 +1085,7 @@ TRACE(("dbg: RMod_LoadTextures: inittexturedescs\n")); mipheight = tx->height; } - tn.base = R_LoadReplacementTexture(mt->name, loadname, IF_NOALPHA); + tn.base = R_LoadReplacementTexture(mt->name, loadname, IF_NOALPHA|IF_SUBDIRONLY); if (!TEXVALID(tn.base)) { tn.base = R_LoadReplacementTexture(mt->name, "bmodels", (*mt->name == '{')?0:IF_NOALPHA); @@ -1098,7 +1098,7 @@ TRACE(("dbg: RMod_LoadTextures: inittexturedescs\n")); snprintf(altname, sizeof(altname)-1, "%s_luma", mt->name); if (gl_load24bit.value) { - tn.fullbright = R_LoadReplacementTexture(altname, loadname, IF_NOGAMMA); + tn.fullbright = R_LoadReplacementTexture(altname, loadname, IF_NOGAMMA|IF_SUBDIRONLY); if (!TEXVALID(tn.fullbright)) tn.fullbright = R_LoadReplacementTexture(altname, "bmodels", IF_NOGAMMA); } @@ -1114,7 +1114,7 @@ TRACE(("dbg: RMod_LoadTextures: inittexturedescs\n")); if (gl_bump.ival<2) //set to 2 to have faster loading. { snprintf(altname, sizeof(altname)-1, "%s_norm", mt->name); - tn.bump = R_LoadReplacementTexture(altname, loadname, IF_NOALPHA|IF_NOGAMMA); + tn.bump = R_LoadReplacementTexture(altname, loadname, IF_NOALPHA|IF_NOGAMMA|IF_SUBDIRONLY); if (!TEXVALID(tn.bump)) tn.bump = R_LoadReplacementTexture(altname, "bmodels", IF_NOALPHA|IF_NOGAMMA); } @@ -1145,7 +1145,7 @@ TRACE(("dbg: RMod_LoadTextures: inittexturedescs\n")); if (gl_specular.value && gl_load24bit.value) { snprintf(altname, sizeof(altname)-1, "%s_gloss", mt->name); - tn.specular = R_LoadHiResTexture(altname, loadname, IF_NOALPHA|IF_NOGAMMA); + tn.specular = R_LoadHiResTexture(altname, loadname, IF_NOALPHA|IF_NOGAMMA|IF_SUBDIRONLY); if (!TEXVALID(tn.specular)) tn.specular = R_LoadHiResTexture(altname, "bmodels", IF_NOALPHA|IF_NOGAMMA); } diff --git a/engine/server/pr_q1qvm.c b/engine/server/pr_q1qvm.c index e81094f9d..f2ff0d6ff 100755 --- a/engine/server/pr_q1qvm.c +++ b/engine/server/pr_q1qvm.c @@ -1217,8 +1217,6 @@ Con_DPrintf("PF_readcmd: %s\n%s", s, output); case G_SETPAUSE: { - int i; - client_t *cl; int pause = VM_LONG(arg[0]); if ((sv.paused&1) == (pause&1)) break; //nothing changed, ignore it. diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 4c047a2e3..637292b47 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -148,6 +148,7 @@ cvar_t sv_cullplayers_trace = CVARF("sv_cullplayers_trace", "", CVAR_SERVERINFO) cvar_t sv_cullentities_trace = CVARF("sv_cullentities_trace", "", CVAR_SERVERINFO); cvar_t sv_phs = CVAR("sv_phs", "1"); cvar_t sv_resetparms = CVAR("sv_resetparms", "0"); +cvar_t sv_pupglow = CVARF("sv_pupglow", "", CVAR_SERVERINFO); cvar_t sv_master = CVAR("sv_master", "0"); cvar_t sv_masterport = CVAR("sv_masterport", "0"); @@ -3623,6 +3624,7 @@ void SV_InitLocal (void) Cvar_Register (&timeout, cvargroup_servercontrol); Cvar_Register (&zombietime, cvargroup_servercontrol); + Cvar_Register (&sv_pupglow, cvargroup_serverinfo); Cvar_Register (&sv_loadentfiles, cvargroup_servercontrol); Cvar_Register (&sv_maxvelocity, cvargroup_serverphysics);