fix a couple of issues.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4750 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2014-09-12 13:14:51 +00:00
parent 389a2ee285
commit 1daac61ea9
14 changed files with 63 additions and 61 deletions

View File

@ -4802,6 +4802,8 @@ void CL_ExecInitialConfigs(char *resetcommand)
SCR_ShowPic_Clear(true);
Cbuf_AddText("unbindall\n", RESTRICT_LOCAL);
Cbuf_AddText("bind volup \"inc volume 0.1\"\n", RESTRICT_LOCAL);
Cbuf_AddText("bind voldown \"inc volume -0.1\"\n", RESTRICT_LOCAL);
Cbuf_AddText("cl_warncmd 0\n", RESTRICT_LOCAL);
Cbuf_AddText("cvar_purgedefaults\n", RESTRICT_LOCAL); //reset cvar defaults to their engine-specified values. the tail end of 'exec default.cfg' will update non-cheat defaults to mod-specified values.
Cbuf_AddText("cvarreset *\n", RESTRICT_LOCAL); //reset all cvars to their current (engine) defaults
@ -4819,7 +4821,7 @@ void CL_ExecInitialConfigs(char *resetcommand)
Cbuf_AddText ("exec hexen.rc\n", RESTRICT_LOCAL);
else
{ //they didn't give us an rc file!
Cbuf_AddText ("bind ` toggleconsole\n", RESTRICT_LOCAL); //in case default.cfg does not exist. :(
// Cbuf_AddText ("bind ` toggleconsole\n", RESTRICT_LOCAL); //in case default.cfg does not exist. :(
Cbuf_AddText ("exec default.cfg\n", RESTRICT_LOCAL);
if (COM_FCheckExists ("config.cfg"))
Cbuf_AddText ("exec config.cfg\n", RESTRICT_LOCAL);

View File

@ -2266,8 +2266,6 @@ void BoostGamma(qbyte *rgba, int width, int height)
#if defined(GLQUAKE) || defined(D3DQUAKE)
#ifndef GL_COMPRESSED_RGB_S3TC_DXT1_EXT
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
@ -3108,8 +3106,6 @@ texid_t R_LoadBumpmapTexture(const char *name, const char *subpath)
return r_nulltex;
}
#endif
// ocrana led functions
static int ledcolors[8][3] =
{

View File

@ -4235,12 +4235,13 @@ typedef struct
qbyte srcdata[1];
} mp3decoder_t;
static void S_MP3_Abort(sfx_t *sfx)
static void S_MP3_Purge(sfx_t *sfx)
{
mp3decoder_t *dec = sfx->decoder.buf;
sfx->decoder.buf = NULL;
sfx->decoder.abort = NULL;
sfx->decoder.ended = NULL;
sfx->decoder.purge = NULL;
sfx->decoder.decodedata = NULL;
qacmStreamClose(dec->acm, 0);
@ -4374,7 +4375,8 @@ qboolean S_LoadMP3Sound (sfx_t *s, qbyte *data, int datalen, int sndspeed)
memcpy(dec->srcdata, data, datalen);
dec->srclen = datalen;
s->decoder.buf = dec;
s->decoder.abort = S_MP3_Abort;
s->decoder.ended = S_MP3_Purge;
s->decoder.purge = S_MP3_Purge;
s->decoder.decodedata = S_MP3_Locate;
dec->dstdata = NULL;

View File

@ -1409,19 +1409,18 @@ int M_GameType (void)
if (FS_Restarted(&cachedrestarts))
{
int q1 = COM_FDepthFile("gfx/sp_menu.lmp", true);
int h2 = COM_FDepthFile("gfx/menu/title2.lmp", true);
#if defined(Q2CLIENT)
int q1, h2, q2;
q1 = COM_FDepthFile("gfx/sp_menu.lmp", true);
h2 = COM_FDepthFile("gfx/menu/title2.lmp", true);
q2 = COM_FDepthFile("pics/m_banner_game.pcx", true);
int q2 = COM_FDepthFile("pics/m_banner_game.pcx", true);
if (q2 < h2 && q2 < q1)
cached = MGT_QUAKE2;
else if (h2 < q1)
cached = MGT_HEXEN2;
else
#endif
if (h2 < q1)
cached = MGT_HEXEN2;
else
cached = MGT_QUAKE1;
}

View File

@ -572,10 +572,10 @@ static void OpenAL_ChannelUpdate(soundcardinfo_t *sc, channel_t *chan, unsigned
if (!sbuf.length && (chan->pos>>PITCHSHIFT) == sbuf.soundoffset)
{
chan->sfx = NULL;
if (sfx->decoder.abort)
if (sfx->decoder.ended)
{
if (!S_IsPlayingSomewhere(sfx))
sfx->decoder.abort(sfx);
sfx->decoder.ended(sfx);
}
}
sbuf.soundoffset = 0;

View File

@ -2067,8 +2067,10 @@ void S_Purge(qboolean retaintouched)
continue;
/*stop the decoder first*/
if (sfx->decoder.abort)
sfx->decoder.abort(sfx);
if (sfx->decoder.purge)
sfx->decoder.purge(sfx);
else if (sfx->decoder.ended)
sfx->decoder.ended(sfx);
/*if there's any data associated still, kill it. if present, it should be a single sfxcache_t (with data in same alloc)*/
if (sfx->decoder.buf)
@ -2421,10 +2423,10 @@ void S_StopAllSounds(qboolean clear)
{
s = sc->channel[i].sfx;
sc->channel[i].sfx = NULL;
if (s->decoder.abort)
if (s->decoder.ended)
if (!S_IsPlayingSomewhere(s)) //if we aint playing it elsewhere, free it compleatly.
{
s->decoder.abort(s);
s->decoder.ended(s);
}
if (sc->ChannelUpdate)
sc->ChannelUpdate(sc, &sc->channel[i], true);
@ -2540,14 +2542,8 @@ void S_Music_Clear(sfx_t *onlyifsample)
sc->channel[i].pos = 0;
sc->channel[i].sfx = NULL;
if (s)
if (s->decoder.abort)
if (!S_IsPlayingSomewhere(s)) //if we aint playing it elsewhere, free it compleatly.
{
s->decoder.abort(s);
// if (s->cache.data)
// Cache_Free(&s->cache);
}
if (s && s->decoder.ended && !S_IsPlayingSomewhere(s)) //if we aint playing it elsewhere, free it compleatly.
s->decoder.ended(s);
}
}
}

View File

@ -162,10 +162,10 @@ void S_PaintChannels(soundcardinfo_t *sc, int endtime)
else if (!ch->looping)
{
ch->sfx = NULL;
if (s->decoder.abort)
if (s->decoder.ended)
{
if (!S_IsPlayingSomewhere(s))
s->decoder.abort(s);
s->decoder.ended(s);
}
}
}
@ -265,10 +265,10 @@ void S_PaintChannels(soundcardinfo_t *sc, int endtime)
else
{ // channel just stopped
ch->sfx = NULL;
if (s->decoder.abort)
if (s->decoder.ended)
{
if (!S_IsPlayingSomewhere(s))
s->decoder.abort(s);
s->decoder.ended(s);
}
break;
}

View File

@ -93,7 +93,8 @@ qboolean S_LoadOVSound (sfx_t *s, qbyte *data, int datalen, int sndspeed)
buffer->s = s;
s->decoder.buf = buffer;
s->decoder.decodedata = OV_DecodeSome;
s->decoder.abort = OV_CancelDecoder;
s->decoder.purge = OV_CancelDecoder;
s->decoder.ended = OV_CancelDecoder;
if (!OV_StartDecode(data, datalen, buffer))
{
@ -248,7 +249,8 @@ void OV_CancelDecoder(sfx_t *s)
dec = s->decoder.buf;
s->decoder.buf = NULL;
s->decoder.abort = NULL;
s->decoder.purge = NULL;
s->decoder.ended = NULL;
s->decoder.decodedata = NULL;
p_ov_clear (&dec->vf); //close the decoder

View File

@ -40,19 +40,22 @@ typedef struct
typedef struct {
struct sfxcache_s *(*decodedata) (struct sfx_s *sfx, struct sfxcache_s *buf, int start, int length); //retrurn true when done.
void (*abort) (struct sfx_s *sfx); //it's not playing elsewhere. free entirly
void (*ended) (struct sfx_s *sfx); //sound stopped playing and is now silent (allow rewinding or something).
void (*purge) (struct sfx_s *sfx); //sound is being purged from memory. destroy everything.
void *buf;
} sfxdecode_t;
typedef struct sfx_s
{
char name[MAX_OSPATH];
sfxdecode_t decoder;
qboolean failedload:1; //no more super-spammy
qboolean touched:1; //if the sound is still relevent
#ifdef AVAIL_OPENAL
unsigned int openal_buffer;
#endif
qboolean failedload:1; //no more super-spammy
qboolean touched:1; //if the sound is still relevent
sfxdecode_t decoder;
} sfx_t;
// !!! if this is changed, it much be changed in asm_i386.h too !!!

View File

@ -438,13 +438,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#endif
//remove any options that depend upon GL.
#ifndef SERVERONLY
// undefine things not supported yet for D3D
#if defined(D3DQUAKE) && !defined(GLQUAKE)
#undef IMAGEFMT_DDS // this is dumb
#undef IMAGEFMT_BLP // this is dumb
#endif
#if !defined(GLQUAKE)
#undef IMAGEFMT_DDS // this is dumb
#undef IMAGEFMT_BLP // this is dumb
#endif
#if !defined(Q3BSPS)

View File

@ -780,6 +780,8 @@ static qintptr_t VARGS Plug_Net_TCPListen(void *offset, quintptr_t mask, const q
int maxcount = VM_LONG(arg[2]);
netadr_t a;
if (!currentplug)
return -3; //streams depend upon current plugin context. which isn't valid in a thread.
if (!localip)
localip = "0.0.0.0"; //pass "[::]" for ipv6
@ -840,7 +842,7 @@ static qintptr_t VARGS Plug_Net_Accept(void *offset, quintptr_t mask, const qint
int _true = 1;
char adr[MAX_ADR_SIZE];
if (handle < 0 || handle >= pluginstreamarraylen || pluginstreamarray[handle].plugin != currentplug || pluginstreamarray[handle].type != STREAM_SOCKET)
if (!currentplug || handle < 0 || handle >= pluginstreamarraylen || pluginstreamarray[handle].plugin != currentplug || pluginstreamarray[handle].type != STREAM_SOCKET)
return -2;
sock = pluginstreamarray[handle].socket;
@ -880,7 +882,7 @@ qintptr_t VARGS Plug_Net_TCPConnect(void *offset, quintptr_t mask, const qintptr
int handle;
vfsfile_t *stream = FS_OpenTCP(remoteip, remoteport);
if (!stream)
if (!currentplug || !stream)
return -1;
handle = Plug_NewStreamHandle(STREAM_VFS);
pluginstreamarray[handle].vfs = stream;
@ -938,6 +940,8 @@ qintptr_t VARGS Plug_FS_Open(void *offset, quintptr_t mask, const qintptr_t *arg
if (VM_OOB(arg[1], sizeof(int)))
return -2;
if (!currentplug)
return -3; //streams depend upon current plugin context. which isn't valid in a thread.
ret = VM_POINTER(arg[1]);
*ret = -1;

View File

@ -771,6 +771,7 @@
AdditionalIncludeDirectories="../libs/speex,..\client,../libs/freetype2/include,../common,../server,../gl,../sw,../qclib,../libs,../libs/dxsdk7/include,../d3d,../d3d9,../libs/dxsdk9/include"
PreprocessorDefinitions="_DEBUG;GLQUAKE;WIN32;_WINDOWS;MULTITHREAD;USE_MSVCRT_DEBUG"
BasicRuntimeChecks="3"
SmallerTypeCheck="true"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
FloatingPointModel="2"
@ -779,6 +780,7 @@
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
DisableSpecificWarnings="4996"
/>

View File

@ -4202,7 +4202,7 @@ char *Shader_DefaultBSPWater(shader_t *s, const char *shortname)
type = 3;
else
type = 0;
alpha = Shader_FloatArgument(s, "ALPHA");
alpha = Shader_FloatArgument(s, "#ALPHA");
if (alpha)
explicitalpha = true;
else

View File

@ -10587,18 +10587,18 @@ void PR_DumpPlatform_f(void)
{"PFLAGS_FULLDYNAMIC", "const float", QW|NQ, "When set in self.pflags, enables fully-customised dynamic lights. Custom rtlight information is not otherwise used.", PFLAGS_FULLDYNAMIC},
//including these for csqc stat types.
// {"EV_VOID", "const float", QW|NQ, NULL, ev_void},
{"EV_STRING", "const float", QW|NQ, NULL, ev_string},
{"EV_FLOAT", "const float", QW|NQ, NULL, ev_float},
{"EV_VECTOR", "const float", QW|NQ, NULL, ev_vector},
{"EV_ENTITY", "const float", QW|NQ, NULL, ev_entity},
// {"EV_FIELD", "const float", QW|NQ, NULL, ev_field},
{"EV_FUNCTION", "const float", QW|NQ, NULL, ev_function},
{"EV_POINTER", "const float", QW|NQ, NULL, ev_pointer},
{"EV_INTEGER", "const float", QW|NQ, NULL, ev_integer},
{"EV_VARIANT", "const float", QW|NQ, NULL, ev_variant},
// {"EV_STRUCT", "const float", QW|NQ, NULL, ev_struct},
// {"EV_UNION", "const float", QW|NQ, NULL, ev_union},
// {"EV_VOID", "const float", QW|NQ|CS, NULL, ev_void},
{"EV_STRING", "const float", QW|NQ|CS, NULL, ev_string},
{"EV_FLOAT", "const float", QW|NQ|CS, NULL, ev_float},
{"EV_VECTOR", "const float", QW|NQ|CS, NULL, ev_vector},
{"EV_ENTITY", "const float", QW|NQ|CS, NULL, ev_entity},
// {"EV_FIELD", "const float", QW|NQ|CS, NULL, ev_field},
{"EV_FUNCTION", "const float", QW|NQ|CS, NULL, ev_function},
{"EV_POINTER", "const float", QW|NQ|CS, NULL, ev_pointer},
{"EV_INTEGER", "const float", QW|NQ|CS, NULL, ev_integer},
{"EV_VARIANT", "const float", QW|NQ|CS, NULL, ev_variant},
// {"EV_STRUCT", "const float", QW|NQ|CS, NULL, ev_struct},
// {"EV_UNION", "const float", QW|NQ|CS, NULL, ev_union},
{"gamestate", "hashtable", ALL, "Special hash table index for hash_add and hash_get. Entries in this table will persist over map changes (and doesn't need to be created/deleted).", 0},
{"HASH_REPLACE", "const float", ALL, "Used with hash_add. Attempts to remove the old value instead of adding two values for a single key.", 256},