QUAKETC with dpmaster fix.
don't archive csprogs when it's getting saved into demos anyway. bound bones when using a model with less bones than the relative skeletal object. mute(dprint) xinput restarts. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5205 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
922b0ca2bb
commit
f3ae58608b
14 changed files with 227 additions and 83 deletions
|
@ -1792,6 +1792,8 @@ void INS_StartupJoystick (void)
|
|||
}
|
||||
if (pXInputGetState)
|
||||
{
|
||||
XINPUT_STATE xistate;
|
||||
numdevs = 0;
|
||||
for (id = 0; id < 4; id++)
|
||||
{
|
||||
if (joy_count == countof(wjoy))
|
||||
|
@ -1802,8 +1804,11 @@ void INS_StartupJoystick (void)
|
|||
wjoy[joy_count].devid = DEVID_UNSET;//id;
|
||||
wjoy[joy_count].numbuttons = 18; //xinput supports 16 buttons, we emulate two more with the two triggers.
|
||||
joy_count++;
|
||||
|
||||
if (ERROR_DEVICE_NOT_AVAILABLE != pXInputGetState(id, &xistate))
|
||||
numdevs++;
|
||||
}
|
||||
Con_Printf("XInput is enabled (max %i controllers)\n", id);
|
||||
Con_DPrintf("XInput is enabled (%i controllers found)\n", numdevs);
|
||||
}
|
||||
else
|
||||
Con_Printf("XInput not installed\n");
|
||||
|
|
|
@ -140,11 +140,21 @@ net_masterlist_t net_masterlist[] = {
|
|||
// {MP_QUAKEWORLD, CVARFC("net_qwmasterextraHistoric", "kubus.rulez.pl:27000", CVAR_NOSAVE, Net_Masterlist_Callback), "kubus.rulez.pl"},
|
||||
// {MP_QUAKEWORLD, CVARFC("net_qwmasterextraHistoric", "telefrag.me:27000", CVAR_NOSAVE, Net_Masterlist_Callback), "telefrag.me"},
|
||||
// {MP_QUAKEWORLD, CVARFC("net_qwmasterextraHistoric", "master.teamdamage.com:27000", CVAR_NOSAVE, Net_Masterlist_Callback), "master.teamdamage.com"},
|
||||
#endif
|
||||
|
||||
//Total conversions will need to define their own in defaults.cfg or whatever.
|
||||
{MP_DPMASTER, CVARFC("net_masterextra1", "ghdigital.com:27950 207.55.114.154:27950", CVAR_NOSAVE, Net_Masterlist_Callback)}, //207.55.114.154 (was 69.59.212.88 (admin: LordHavoc)
|
||||
{MP_DPMASTER, CVARFC("net_masterextra2", "dpmaster.deathmask.net:27950 107.161.23.68:27950 [2604:180::4ac:98c1]:27950", CVAR_NOSAVE, Net_Masterlist_Callback)}, //107.161.23.68 (admin: Willis)
|
||||
{MP_DPMASTER, CVARFC("net_masterextra3", "dpmaster.tchr.no:27950 92.62.40.73:27950", CVAR_NOSAVE, Net_Masterlist_Callback)}, //92.62.40.73 (admin: tChr)
|
||||
#else
|
||||
{MP_DPMASTER, CVARFC("net_masterextra1", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
{MP_DPMASTER, CVARFC("net_masterextra2", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
{MP_DPMASTER, CVARFC("net_masterextra3", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
#endif
|
||||
{MP_DPMASTER, CVARFC("net_masterextra4", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
{MP_DPMASTER, CVARFC("net_masterextra5", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
{MP_DPMASTER, CVARFC("net_masterextra6", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
{MP_DPMASTER, CVARFC("net_masterextra7", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
{MP_DPMASTER, CVARFC("net_masterextra8", "", CVAR_NOSAVE, Net_Masterlist_Callback)},
|
||||
|
||||
#ifdef Q2CLIENT
|
||||
// {MP_QUAKE2, CVARFC("net_q2masterextra1", "satan.idsoftware.com:27900", CVAR_NOSAVE, Net_Masterlist_Callback), "Official Quake2 master server"},
|
||||
|
@ -275,7 +285,14 @@ void SV_Master_SingleHeartbeat(net_masterlist_t *master)
|
|||
break;
|
||||
#endif
|
||||
case MP_DPMASTER:
|
||||
if (sv_listen_dp.value || sv_listen_nq.value) //set listen to 1 to allow qw connections, 2 to allow nq connections too.
|
||||
//fte normally uses quakeworld masters for clients that support qw protocols, and dpmaster for clients that support nq protocols.
|
||||
//unfortunately qwmasters don't support ipv6, and total conversions don't want to use qwmasters.
|
||||
//we default to FTE-Quake when running quake so at least that part is fair.
|
||||
//however, I made QSS also look for FTE-Quake servers too, so that's messy with listen_nq 0, but that's true if listen_dp is set.
|
||||
//so we want to be quite permissive here, at least with custom builds that will default to these cvars set to 0.
|
||||
#if defined(NQPROT) && !defined(QUAKETC)
|
||||
if (sv_listen_dp.value || sv_listen_nq.value)
|
||||
#endif
|
||||
{
|
||||
if (sv_reportheartbeats.value)
|
||||
{
|
||||
|
@ -2471,6 +2488,7 @@ void MasterInfo_Request(master_t *mast)
|
|||
case MP_NETQUAKE:
|
||||
//there is no nq udp master protocol
|
||||
break;
|
||||
#endif
|
||||
case MP_DPMASTER:
|
||||
{
|
||||
char *str;
|
||||
|
@ -2483,14 +2501,13 @@ void MasterInfo_Request(master_t *mast)
|
|||
//for compat with dp, we use the nq netchan version. which is stupid, but whatever
|
||||
//we ask for ipv6 addresses from ipv6 masters (assuming it resolved okay)
|
||||
if (mast->adr.type == NA_IPV6)
|
||||
str = va("%c%c%c%cgetserversExt %s %u empty full ipv6"/*\x0A\n"*/, 255, 255, 255, 255, game, NQ_NETCHAN_VERSION);
|
||||
str = va("%c%c%c%cgetserversExt %s %u empty full ipv6"/*\x0A\n"*/, 255, 255, 255, 255, game, com_protocolversion.ival);
|
||||
else
|
||||
str = va("%c%c%c%cgetservers %s %u empty full"/*\x0A\n"*/, 255, 255, 255, 255, game, NQ_NETCHAN_VERSION);
|
||||
str = va("%c%c%c%cgetservers %s %u empty full"/*\x0A\n"*/, 255, 255, 255, 255, game, com_protocolversion.ival);
|
||||
NET_SendPollPacket (strlen(str), str, mast->adr);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case MT_BCAST:
|
||||
|
@ -2523,6 +2540,7 @@ void MasterInfo_Request(master_t *mast)
|
|||
NET_SendPollPacket(net_message.cursize, net_message.data, mast->adr);
|
||||
SZ_Clear(&net_message);
|
||||
break;
|
||||
#endif
|
||||
case MP_DPMASTER: //fixme
|
||||
{
|
||||
char *str;
|
||||
|
@ -2530,7 +2548,6 @@ void MasterInfo_Request(master_t *mast)
|
|||
NET_SendPollPacket (strlen(str), str, mast->adr);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -6854,6 +6854,7 @@ void CSQC_Shutdown(void)
|
|||
//when the qclib needs a file, it calls out to this function.
|
||||
void *PDECL CSQC_PRLoadFile (const char *path, unsigned char *(PDECL *buf_get)(void *ctx, size_t len), void *buf_ctx, size_t *sz)
|
||||
{
|
||||
extern cvar_t sv_demo_write_csqc;
|
||||
qbyte *file = NULL;
|
||||
|
||||
if (!strcmp(path, "csprogs.dat"))
|
||||
|
@ -6898,8 +6899,16 @@ void *PDECL CSQC_PRLoadFile (const char *path, unsigned char *(PDECL *buf_get)(v
|
|||
file = NULL; //not valid
|
||||
}
|
||||
|
||||
//we write the csprogs into our archive if it was loaded from outside of there.
|
||||
//this is to ensure that demos will play on the same machine later on...
|
||||
//this is unreliable though, and redundant if we're writing the csqc into the demos themselves.
|
||||
//also kinda irrelevant with sv_pure.
|
||||
#ifndef FTE_TARGET_WEB
|
||||
if (file)
|
||||
if (file
|
||||
#ifndef CLIENTONLY
|
||||
&& !sv_demo_write_csqc.ival
|
||||
#endif
|
||||
)
|
||||
//back it up
|
||||
COM_WriteFile(newname, FS_GAMEONLY, file, *sz);
|
||||
#endif
|
||||
|
|
|
@ -297,6 +297,7 @@ extern cvar_t fs_gamename;
|
|||
extern cvar_t pm_downloads_url;
|
||||
extern cvar_t pm_autoupdate;
|
||||
extern cvar_t com_protocolname;
|
||||
extern cvar_t com_protocolversion;
|
||||
extern cvar_t com_nogamedirnativecode;
|
||||
extern cvar_t com_parseutf8;
|
||||
extern cvar_t com_parseezquake;
|
||||
|
|
|
@ -1224,7 +1224,7 @@ const float *Alias_GetBoneInformation(galiasinfo_t *inf, framestate_t *framestat
|
|||
|
||||
//try to return data in-place.
|
||||
if (numgroups==1 && lerps[0].lerpcount == 1)
|
||||
return Alias_ConvertBoneData(lerps[0].skeltype, lerps[0].pose[0], lerps[0].endbone, inf->ofsbones, targettype, targetbuffer, targetbufferalt, maxbufferbones);
|
||||
return Alias_ConvertBoneData(lerps[0].skeltype, lerps[0].pose[0], min(lerps[0].endbone, inf->numbones), inf->ofsbones, targettype, targetbuffer, targetbufferalt, maxbufferbones);
|
||||
|
||||
for (lerp = lerps; numgroups--; lerp++)
|
||||
{
|
||||
|
|
|
@ -109,6 +109,7 @@ cvar_t gameversion_min = CVARD("gameversion_min","", "gamecode version for serve
|
|||
cvar_t gameversion_max = CVARD("gameversion_max","", "gamecode version for server browsers");
|
||||
cvar_t fs_gamename = CVARAFD("com_fullgamename", NULL, "fs_gamename", CVAR_NOSET, "The filesystem is trying to run this game");
|
||||
cvar_t com_protocolname = CVARAD("com_protocolname", NULL, "com_gamename", "The protocol game name used for dpmaster queries. For compatibility with DP, you can set this to 'DarkPlaces-Quake' in order to be listed in DP's master server, and to list DP servers.");
|
||||
cvar_t com_protocolversion = CVARAD("com_protocolversion", "3", NULL, "The protocol version used for dpmaster queries."); //3 by default, for compat with DP/NQ, even if our QW protocol uses different versions entirely. really it only matters for master servers.
|
||||
cvar_t com_parseutf8 = CVARD("com_parseutf8", "1", "Interpret console messages/playernames/etc as UTF-8. Requires special fonts. -1=iso 8859-1. 0=quakeascii(chat uses high chars). 1=utf8, revert to ascii on decode errors. 2=utf8 ignoring errors"); //1 parse. 2 parse, but stop parsing that string if a char was malformed.
|
||||
cvar_t com_parseezquake = CVARD("com_parseezquake", "0", "Treat chevron chars from configs as a per-character flag. You should use this only for compat with nquake's configs.");
|
||||
cvar_t com_highlightcolor = CVARD("com_highlightcolor", STRINGIFY(COLOR_RED), "ANSI colour to be used for highlighted text, used when com_parseutf8 is active.");
|
||||
|
|
|
@ -5984,6 +5984,7 @@ void COM_InitFilesystem (void)
|
|||
Cvar_Register(&pm_downloads_url, "Filesystem");
|
||||
Cvar_Register(&pm_autoupdate, "Filesystem");
|
||||
Cvar_Register(&com_protocolname, "Server Info");
|
||||
Cvar_Register(&com_protocolversion, "Server Info");
|
||||
Cvar_Register(&fs_game, "Filesystem");
|
||||
#ifdef Q2SERVER
|
||||
Cvar_Register(&fs_gamedir, "Filesystem");
|
||||
|
|
|
@ -128,11 +128,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
//=========================================
|
||||
|
||||
#define PORT_NQSERVER 26000
|
||||
#define PORT_DPMASTER PORT_Q3MASTER
|
||||
#define PORT_QWCLIENT 27001
|
||||
#define PORT_QWMASTER 27000
|
||||
#define PORT_QWSERVER 27500
|
||||
#define PORT_Q2CLIENT 27901
|
||||
#define PORT_Q2SERVER 27910
|
||||
#define PORT_Q3MASTER 27950
|
||||
#define PORT_Q3SERVER 27960
|
||||
|
||||
//hexen2: 26900
|
||||
|
|
|
@ -782,6 +782,48 @@ static struct charcache_s *Font_LoadPlaceholderGlyph(font_t *f, CHARIDXTYPE char
|
|||
{
|
||||
struct charcache_s *c;
|
||||
unsigned int out[169*4], i, o, g, b, w, h, d, n;
|
||||
if (charidx == 0xe080 || charidx == 0xe081 || charidx == 0xe082 || charidx == 0xe083)
|
||||
{ //scrollbar glyps
|
||||
w = min(16,f->charheight);
|
||||
h = max(1,w/8);
|
||||
d = 0;
|
||||
|
||||
if (charidx == 0xe083) //centre
|
||||
{
|
||||
h *= 3;
|
||||
memset(out+w*h*0, 0xff, w*4*h);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(out+w*h*0, 0xff, w*4*h);
|
||||
memset(out+w*h*1, 0x00, w*4*h);
|
||||
memset(out+w*h*2, 0xff, w*4*h);
|
||||
for (i = 0; i < h; i++)
|
||||
{
|
||||
if (charidx == 0xe080) //left
|
||||
memset(out+w*(i+h*1), 0xff, h*4);
|
||||
if (charidx == 0xe082) //right
|
||||
memset(out+w*(i+h*1)+w-h, 0xff, h*4);
|
||||
}
|
||||
h *= 3;
|
||||
}
|
||||
}
|
||||
else if (charidx == 0xe01d || charidx == 0xe01e || charidx == 0xe01f)
|
||||
{ //horizontal separator
|
||||
w = min(16,f->charheight);
|
||||
h = max(1,w/8);
|
||||
d = 0;
|
||||
memset(out, 0xff, w*4*h);
|
||||
}
|
||||
else if (charidx == 0xe00b)
|
||||
{
|
||||
h = min(16,f->charheight);
|
||||
w = max(1,h/8);
|
||||
d = 1;
|
||||
memset(out, 0xff, w*4*h);
|
||||
}
|
||||
else
|
||||
{
|
||||
d = (f->charheight >= 11);
|
||||
if (d)
|
||||
{ //two rows
|
||||
|
@ -841,10 +883,13 @@ static struct charcache_s *Font_LoadPlaceholderGlyph(font_t *f, CHARIDXTYPE char
|
|||
if (g & 1) out[o+2] = 0xff0000ff;
|
||||
}
|
||||
}
|
||||
|
||||
d = 1;
|
||||
}
|
||||
c = Font_LoadGlyphData(f, charidx, FT_PIXEL_MODE_RGBA, out, w, h, w*4);
|
||||
if (c)
|
||||
{
|
||||
c->advance = w+1;
|
||||
c->advance = w+d;
|
||||
c->left = 0;
|
||||
c->top = (f->charheight-h-1)/2;
|
||||
}
|
||||
|
@ -895,6 +940,7 @@ static struct charcache_s *Font_TryLoadGlyph(font_t *f, CHARIDXTYPE charidx)
|
|||
}
|
||||
return c;
|
||||
}
|
||||
if ((charidx&0x7f) > 0x20)
|
||||
charidx &= 0x7f;
|
||||
}
|
||||
#endif
|
||||
|
@ -1724,7 +1770,9 @@ struct font_s *Font_LoadFont(float vheight, const char *fontfilename)
|
|||
{
|
||||
FMT_AUTO, //freetype, or quake
|
||||
FMT_QUAKE, //first is default
|
||||
FMT_ISO88591, //latin-1 (first 256 chars of unicode too)
|
||||
FMT_ISO88591, //latin-1 (first 256 chars of unicode too, c1 glyphs are usually invisible)
|
||||
FMT_WINDOWS1252,//variation of latin-1 with extra glyphs
|
||||
FMT_KOI8U, //image is 16*16 koi8-u codepage.
|
||||
FMT_HORIZONTAL, //unicode, charcount=width/(height-2). single strip of chars, like halflife.
|
||||
} fmt = FMT_AUTO;
|
||||
|
||||
|
@ -1777,6 +1825,10 @@ struct font_s *Font_LoadFont(float vheight, const char *fontfilename)
|
|||
fmt = FMT_QUAKE;
|
||||
else if (*t == 'l')
|
||||
fmt = FMT_ISO88591;
|
||||
else if (*t == 'w')
|
||||
fmt = FMT_WINDOWS1252;
|
||||
else if (*t == 'k')
|
||||
fmt = FMT_KOI8U;
|
||||
else if (*t == 'h')
|
||||
fmt = FMT_HORIZONTAL;
|
||||
}
|
||||
|
@ -2037,9 +2089,50 @@ struct font_s *Font_LoadFont(float vheight, const char *fontfilename)
|
|||
{
|
||||
if (!f->faces)
|
||||
{
|
||||
static const unsigned short iso88591[] = {
|
||||
0x80,0x81,0x82,0x83, 0x84,0x85,0x86,0x87, 0x88,0x89,0x8a,0x8b, 0x8c,0x8d,0x8e,0x8f,
|
||||
0x90,0x91,0x92,0x93, 0x94,0x95,0x96,0x97, 0x98,0x99,0x9a,0x9b, 0x9c,0x9d,0x9e,0x9f};
|
||||
static const unsigned short win1252[] = {
|
||||
0x20ac, 0x81,0x201a,0x0192, 0x201e,0x2026,0x2020,0x2021, 0x02c6,0x2030,0x0160,0x2039, 0x0152, 0x8d,0x017d, 0x8f,
|
||||
0x90,0x2018,0x2019,0x101c, 0x201d,0x2022,0x2013,0x2014, 0x02dc,0x2122,0x0161,0x203a, 0x0153, 0x9d,0x017e,0x0178};
|
||||
static const unsigned short koi8u[] = {
|
||||
0x2500,0x2502,0x250C,0x2510, 0x2514,0x2518,0x251C,0x2524, 0x252C,0x2534,0x253C,0x2580, 0x2584,0x2588,0x258C,0x2590,
|
||||
0x2591,0x2592,0x2593,0x2320, 0x25A0,0x2219,0x221A,0x2248, 0x2264,0x2265,0x00A0,0x2321, 0x00B0,0x00B2,0x00B7,0x00F7,
|
||||
0x2550,0x2551,0x2552,0x0451, 0x0454,0x2554,0x0456,0x0457, 0x2557,0x2558,0x2559,0x255A, 0x255B,0x0491,0x255D,0x255E,
|
||||
0x255F,0x2560,0x2561,0x0401, 0x0404,0x2563,0x0406,0x0407, 0x2566,0x2567,0x2568,0x2569, 0x256A,0x0490,0x256C,0x00A9,
|
||||
0x044E,0x0430,0x0431,0x0446, 0x0434,0x0435,0x0444,0x0433, 0x0445,0x0438,0x0439,0x043A, 0x043B,0x043C,0x043D,0x043E,
|
||||
0x043F,0x044F,0x0440,0x0441, 0x0442,0x0443,0x0436,0x0432, 0x044C,0x044B,0x0437,0x0448, 0x044D,0x0449,0x0447,0x044A,
|
||||
0x042E,0x0410,0x0411,0x0426, 0x0414,0x0415,0x0424,0x0413, 0x0425,0x0418,0x0419,0x041A, 0x041B,0x041C,0x041D,0x041E,
|
||||
0x041F,0x042F,0x0420,0x0421, 0x0422,0x0423,0x0416,0x0412, 0x042C,0x042B,0x0417,0x0428, 0x042D,0x0429,0x0427,0x042A};
|
||||
const unsigned short *c1;
|
||||
unsigned int c1size;
|
||||
|
||||
if (fmt==FMT_AUTO)
|
||||
fmt=FMT_QUAKE;
|
||||
|
||||
if (fmt == FMT_WINDOWS1252)
|
||||
{ //some tools use these extra ones (latin-1 has no visible c1 entries)
|
||||
c1 = win1252;
|
||||
c1size = countof(win1252);
|
||||
}
|
||||
else if (fmt == FMT_KOI8U)
|
||||
{ //lots of russians in the quake scene
|
||||
c1 = koi8u;
|
||||
c1size = countof(koi8u);
|
||||
}
|
||||
else
|
||||
{
|
||||
c1 = iso88591;
|
||||
c1size = countof(iso88591);
|
||||
}
|
||||
c1size += 128;
|
||||
|
||||
/*force it to load, even if there's nothing there*/
|
||||
for (i = ((fmt==FMT_QUAKE)?32:0); i < ((fmt==FMT_QUAKE)?128:256); i++)
|
||||
{
|
||||
if (i >= 128 && i < c1size)
|
||||
c = Font_GetCharStore(f, c1[i-128]);
|
||||
else
|
||||
c = Font_GetCharStore(f, i);
|
||||
|
||||
c->advance = f->charheight;
|
||||
|
@ -2054,6 +2147,8 @@ struct font_s *Font_LoadFont(float vheight, const char *fontfilename)
|
|||
}
|
||||
}
|
||||
|
||||
if (fmt == FMT_QUAKE)
|
||||
{
|
||||
/*pack the default chars into it*/
|
||||
for (i = 0xe000; i <= 0xe0ff; i++)
|
||||
{
|
||||
|
@ -2069,6 +2164,7 @@ struct font_s *Font_LoadFont(float vheight, const char *fontfilename)
|
|||
c->texplane = defaultplane;
|
||||
}
|
||||
}
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
|
|
|
@ -2768,7 +2768,7 @@ YOU SHOULD NOT EDIT THIS FILE BY HAND
|
|||
"!!cvarf gl_specular\n"
|
||||
"!!cvardf gl_affinemodels=0\n"
|
||||
"!!cvardf r_tessellation_level=5\n"
|
||||
"!!samps diffuse normalmap specular fullbright upper lower paletted\n"
|
||||
"!!samps diffuse normalmap specular fullbright upper lower paletted reflectmask reflectcube\n"
|
||||
|
||||
"#include \"sys/defs.h\"\n"
|
||||
|
||||
|
@ -10998,7 +10998,7 @@ YOU SHOULD NOT EDIT THIS FILE BY HAND
|
|||
"!!cvarf r_glsl_offsetmapping_scale\n"
|
||||
"!!cvardf r_glsl_pcf\n"
|
||||
"!!cvardf r_tessellation_level=5\n"
|
||||
"!!samps shadowmap diffuse normalmap specular upper lower reflectcube reflectmask\n"
|
||||
"!!samps shadowmap diffuse normalmap specular upper lower reflectcube reflectmask projectionmap\n"
|
||||
|
||||
"#include \"sys/defs.h\"\n"
|
||||
|
||||
|
@ -11211,7 +11211,11 @@ YOU SHOULD NOT EDIT THIS FILE BY HAND
|
|||
|
||||
"void main ()\n"
|
||||
"{\n"
|
||||
"#ifdef ORTHO\n"
|
||||
"float colorscale = 1.0;\n"
|
||||
"#else\n"
|
||||
"float colorscale = max(1.0 - (dot(lightvector, lightvector)/(l_lightradius*l_lightradius)), 0.0);\n"
|
||||
"#endif\n"
|
||||
"#ifdef PCF\n"
|
||||
/*filter the light by the shadowmap. logically a boolean, but we allow fractions for softer shadows*/
|
||||
"colorscale *= ShadowmapFilter(s_shadowmap, vtexprojcoord);\n"
|
||||
|
|
|
@ -1170,3 +1170,5 @@ vfile_t *QCC_FindVFile(const char *name);
|
|||
vfile_t *QCC_AddVFile(const char *name, void *data, size_t size);
|
||||
void QCC_CatVFile(vfile_t *, const char *fmt, ...);
|
||||
void QCC_InsertVFile(vfile_t *, size_t pos, const char *fmt, ...);
|
||||
|
||||
void *QCC_ReadFile(const char *fname, unsigned char *(*buf_get)(void *ctx, size_t len), void *buf_ctx, size_t *out_size);
|
||||
|
|
|
@ -144,8 +144,10 @@ cvar_t sv_phs = CVARD("sv_phs", "1", "If 1, do not use the phs. It is genera
|
|||
cvar_t sv_resetparms = CVAR("sv_resetparms", "0");
|
||||
cvar_t sv_pupglow = CVARFD("sv_pupglow", "", CVAR_SERVERINFO, "Instructs clients to enable hexen2-style powerup pulsing.");
|
||||
|
||||
#ifdef SV_MASTER
|
||||
cvar_t sv_master = CVAR("sv_master", "0");
|
||||
cvar_t sv_masterport = CVAR("sv_masterport", "0");
|
||||
#endif
|
||||
|
||||
cvar_t pext_ezquake_nochunks = CVARD("pext_ezquake_nochunks", "0", "Prevents ezquake clients from being able to use the chunked download extension. This sidesteps numerous ezquake issues, and will make downloads slower but more robust.");
|
||||
|
||||
|
@ -1252,12 +1254,12 @@ static void SVC_GetInfo (char *challenge, int fullstatus)
|
|||
//this is a DP protocol query, so some QW fields are not needed
|
||||
Info_RemoveKey(resp, "maxclients"); //replaced with sv_maxclients
|
||||
Info_RemoveKey(resp, "map"); //replaced with mapname
|
||||
Info_RemoveKey(resp, "*gamedir"); //replaced with modname
|
||||
Info_RemoveKey(resp, "*z_ext"); //uninteresting and spammy.
|
||||
Info_SetValueForKey(resp, "gamename", protocolname, sizeof(response) - (resp-response));
|
||||
Info_SetValueForKey(resp, "modname", FS_GetGamedir(true), sizeof(response) - (resp-response));
|
||||
// Info_SetValueForKey(resp, "gamedir", FS_GetGamedir(true), sizeof(response) - (resp-response));
|
||||
#ifdef NQPROT
|
||||
Info_SetValueForKey(resp, "protocol", va("%d", NQ_NETCHAN_VERSION), sizeof(response) - (resp-response));
|
||||
#endif
|
||||
Info_SetValueForKey(resp, "protocol", va("%d", com_protocolversion.ival), sizeof(response) - (resp-response));
|
||||
Info_SetValueForKey(resp, "clients", va("%d", numclients), sizeof(response) - (resp-response));
|
||||
Info_SetValueForKey(resp, "sv_maxclients", maxclients.string, sizeof(response) - (resp-response));
|
||||
Info_SetValueForKey(resp, "mapname", Info_ValueForKey(svs.info, "map"), sizeof(response) - (resp-response));
|
||||
|
@ -4832,6 +4834,7 @@ float SV_Frame (void)
|
|||
IWebRun();
|
||||
#endif
|
||||
|
||||
#ifdef SV_MASTER
|
||||
if (sv_master.ival)
|
||||
{
|
||||
if (sv_masterport.ival)
|
||||
|
@ -4839,6 +4842,7 @@ float SV_Frame (void)
|
|||
else
|
||||
SVM_Think(PORT_QWMASTER);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PLUGINS
|
||||
if (isDedicated)
|
||||
|
@ -5145,8 +5149,10 @@ void SV_InitLocal (void)
|
|||
|
||||
Cvar_Register (&sv_showconnectionlessmessages, cvargroup_servercontrol);
|
||||
Cvar_Register (&sv_banproxies, cvargroup_serverpermissions);
|
||||
#ifdef SV_MASTER
|
||||
Cvar_Register (&sv_master, cvargroup_servercontrol);
|
||||
Cvar_Register (&sv_masterport, cvargroup_servercontrol);
|
||||
#endif
|
||||
|
||||
Cvar_Register (&filterban, cvargroup_servercontrol);
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
!!cvarf gl_specular
|
||||
!!cvardf gl_affinemodels=0
|
||||
!!cvardf r_tessellation_level=5
|
||||
!!samps diffuse normalmap specular fullbright upper lower paletted
|
||||
!!samps diffuse normalmap specular fullbright upper lower paletted reflectmask reflectcube
|
||||
|
||||
#include "sys/defs.h"
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
!!cvarf r_glsl_offsetmapping_scale
|
||||
!!cvardf r_glsl_pcf
|
||||
!!cvardf r_tessellation_level=5
|
||||
!!samps shadowmap diffuse normalmap specular upper lower reflectcube reflectmask
|
||||
!!samps shadowmap diffuse normalmap specular upper lower reflectcube reflectmask projectionmap
|
||||
|
||||
#include "sys/defs.h"
|
||||
|
||||
|
|
Loading…
Reference in a new issue