mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-12-14 14:11:15 +00:00
Merge branch 'master' (early part) into sdl2
This commit is contained in:
commit
73aa7ef2c7
28 changed files with 96 additions and 79 deletions
|
@ -640,7 +640,7 @@ void CG_GibPlayer( vec3_t playerOrigin ) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
CG_LaunchGib
|
CG_LaunchExplode
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
void CG_LaunchExplode( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
|
void CG_LaunchExplode( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
|
||||||
|
@ -673,7 +673,7 @@ void CG_LaunchExplode( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
|
||||||
#define EXP_JUMP 150
|
#define EXP_JUMP 150
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
CG_GibPlayer
|
CG_BigExplode
|
||||||
|
|
||||||
Generated a bunch of gibs launching out from the bodies location
|
Generated a bunch of gibs launching out from the bodies location
|
||||||
===================
|
===================
|
||||||
|
|
|
@ -74,7 +74,7 @@ void CG_FreeLocalEntity( localEntity_t *le ) {
|
||||||
===================
|
===================
|
||||||
CG_AllocLocalEntity
|
CG_AllocLocalEntity
|
||||||
|
|
||||||
Will allways succeed, even if it requires freeing an old active entity
|
Will always succeed, even if it requires freeing an old active entity
|
||||||
===================
|
===================
|
||||||
*/
|
*/
|
||||||
localEntity_t *CG_AllocLocalEntity( void ) {
|
localEntity_t *CG_AllocLocalEntity( void ) {
|
||||||
|
|
|
@ -83,7 +83,7 @@ CLIENT INFO
|
||||||
======================
|
======================
|
||||||
CG_ParseAnimationFile
|
CG_ParseAnimationFile
|
||||||
|
|
||||||
Read a configuration file containing animation coutns and rates
|
Read a configuration file containing animation counts and rates
|
||||||
models/players/visor/animation.cfg, etc
|
models/players/visor/animation.cfg, etc
|
||||||
======================
|
======================
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -385,7 +385,7 @@ void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops ) {
|
||||||
#endif
|
#endif
|
||||||
pushReward(sfx, cgs.media.medalGauntlet, ps->persistant[PERS_GAUNTLET_FRAG_COUNT]);
|
pushReward(sfx, cgs.media.medalGauntlet, ps->persistant[PERS_GAUNTLET_FRAG_COUNT]);
|
||||||
reward = qtrue;
|
reward = qtrue;
|
||||||
//Com_Printf("guantlet frag\n");
|
//Com_Printf("gauntlet frag\n");
|
||||||
}
|
}
|
||||||
if (ps->persistant[PERS_DEFEND_COUNT] != ops->persistant[PERS_DEFEND_COUNT]) {
|
if (ps->persistant[PERS_DEFEND_COUNT] != ops->persistant[PERS_DEFEND_COUNT]) {
|
||||||
pushReward(cgs.media.defendSound, cgs.media.medalDefend, ps->persistant[PERS_DEFEND_COUNT]);
|
pushReward(cgs.media.defendSound, cgs.media.medalDefend, ps->persistant[PERS_DEFEND_COUNT]);
|
||||||
|
|
|
@ -269,7 +269,7 @@ static void CG_OffsetThirdPersonView( void ) {
|
||||||
VectorCopy( trace.endpos, view );
|
VectorCopy( trace.endpos, view );
|
||||||
view[2] += (1.0 - trace.fraction) * 32;
|
view[2] += (1.0 - trace.fraction) * 32;
|
||||||
// try another trace to this position, because a tunnel may have the ceiling
|
// try another trace to this position, because a tunnel may have the ceiling
|
||||||
// close enogh that this is poking out
|
// close enough that this is poking out
|
||||||
|
|
||||||
CG_Trace( &trace, cg.refdef.vieworg, mins, maxs, view, cg.predictedPlayerState.clientNum, MASK_SOLID );
|
CG_Trace( &trace, cg.refdef.vieworg, mins, maxs, view, cg.predictedPlayerState.clientNum, MASK_SOLID );
|
||||||
VectorCopy( trace.endpos, view );
|
VectorCopy( trace.endpos, view );
|
||||||
|
|
|
@ -460,7 +460,7 @@ static void CG_NailTrail( centity_t *ent, const weaponInfo_t *wi ) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==========================
|
==========================
|
||||||
CG_NailTrail
|
CG_PlasmaTrail
|
||||||
==========================
|
==========================
|
||||||
*/
|
*/
|
||||||
static void CG_PlasmaTrail( centity_t *cent, const weaponInfo_t *wi ) {
|
static void CG_PlasmaTrail( centity_t *cent, const weaponInfo_t *wi ) {
|
||||||
|
|
|
@ -711,6 +711,10 @@ void S_PaintChannels( int endtime ) {
|
||||||
ltime = s_paintedtime;
|
ltime = s_paintedtime;
|
||||||
sc = ch->thesfx;
|
sc = ch->thesfx;
|
||||||
|
|
||||||
|
if (sc->soundData==NULL || sc->soundLength==0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
sampleOffset = ltime - ch->startSample;
|
sampleOffset = ltime - ch->startSample;
|
||||||
count = end - ltime;
|
count = end - ltime;
|
||||||
if ( sampleOffset + count > sc->soundLength ) {
|
if ( sampleOffset + count > sc->soundLength ) {
|
||||||
|
|
|
@ -841,7 +841,7 @@ static void S_AL_SrcSetup(srcHandle_t src, sfxHandle_t sfx, alSrcPriority_t prio
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
S_AL_NewLoopMaster
|
S_AL_SaveLoopPos
|
||||||
Remove given source as loop master if it is the master and hand off master status to another source in this case.
|
Remove given source as loop master if it is the master and hand off master status to another source in this case.
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1280,7 +1280,7 @@ int BotAIShutdownClient(int client, qboolean restart) {
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_BotFreeMoveState(bs->ms);
|
trap_BotFreeMoveState(bs->ms);
|
||||||
//free the goal state`
|
//free the goal state
|
||||||
trap_BotFreeGoalState(bs->gs);
|
trap_BotFreeGoalState(bs->gs);
|
||||||
//free the chat file
|
//free the chat file
|
||||||
trap_BotFreeChatState(bs->cs);
|
trap_BotFreeChatState(bs->cs);
|
||||||
|
|
|
@ -1790,7 +1790,7 @@ static void PM_DropTimers( void ) {
|
||||||
PM_UpdateViewAngles
|
PM_UpdateViewAngles
|
||||||
|
|
||||||
This can be used as another entry point when only the viewangles
|
This can be used as another entry point when only the viewangles
|
||||||
are being updated isntead of a full move
|
are being updated instead of a full move
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) {
|
void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) {
|
||||||
|
|
|
@ -630,7 +630,7 @@ static void ForceClientSkin( gclient_t *client, char *model, const char *skin )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
ClientCheckName
|
ClientCleanName
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
static void ClientCleanName(const char *in, char *out, int outSize)
|
static void ClientCleanName(const char *in, char *out, int outSize)
|
||||||
|
|
|
@ -476,7 +476,7 @@ void Cmd_Kill_f( gentity_t *ent ) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
BroadCastTeamChange
|
BroadcastTeamChange
|
||||||
|
|
||||||
Let everyone know about a team change
|
Let everyone know about a team change
|
||||||
=================
|
=================
|
||||||
|
@ -1348,7 +1348,7 @@ void Cmd_CallVote_f( gentity_t *ent ) {
|
||||||
|
|
||||||
trap_SendServerCommand( -1, va("print \"%s called a vote.\n\"", ent->client->pers.netname ) );
|
trap_SendServerCommand( -1, va("print \"%s called a vote.\n\"", ent->client->pers.netname ) );
|
||||||
|
|
||||||
// start the voting, the caller autoamtically votes yes
|
// start the voting, the caller automatically votes yes
|
||||||
level.voteTime = level.time;
|
level.voteTime = level.time;
|
||||||
level.voteYes = 1;
|
level.voteYes = 1;
|
||||||
level.voteNo = 0;
|
level.voteNo = 0;
|
||||||
|
@ -1513,7 +1513,7 @@ void Cmd_CallTeamVote_f( gentity_t *ent ) {
|
||||||
trap_SendServerCommand( i, va("print \"%s called a team vote.\n\"", ent->client->pers.netname ) );
|
trap_SendServerCommand( i, va("print \"%s called a team vote.\n\"", ent->client->pers.netname ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// start the voting, the caller autoamtically votes yes
|
// start the voting, the caller automatically votes yes
|
||||||
level.teamVoteTime[cs_offset] = level.time;
|
level.teamVoteTime[cs_offset] = level.time;
|
||||||
level.teamVoteYes[cs_offset] = 1;
|
level.teamVoteYes[cs_offset] = 1;
|
||||||
level.teamVoteNo[cs_offset] = 0;
|
level.teamVoteNo[cs_offset] = 0;
|
||||||
|
|
|
@ -778,7 +778,7 @@ int G_InvulnerabilityEffect( gentity_t *targ, vec3_t dir, vec3_t point, vec3_t i
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
============
|
============
|
||||||
T_Damage
|
G_Damage
|
||||||
|
|
||||||
targ entity that is being damaged
|
targ entity that is being damaged
|
||||||
inflictor entity that is causing the damage
|
inflictor entity that is causing the damage
|
||||||
|
|
|
@ -660,7 +660,7 @@ void FinishSpawningItem( gentity_t *ent ) {
|
||||||
|
|
||||||
ent->r.contents = CONTENTS_TRIGGER;
|
ent->r.contents = CONTENTS_TRIGGER;
|
||||||
ent->touch = Touch_Item;
|
ent->touch = Touch_Item;
|
||||||
// useing an item causes it to respawn
|
// using an item causes it to respawn
|
||||||
ent->use = Use_Item;
|
ent->use = Use_Item;
|
||||||
|
|
||||||
if ( ent->spawnflags & 1 ) {
|
if ( ent->spawnflags & 1 ) {
|
||||||
|
|
|
@ -1519,7 +1519,7 @@ void Hunk_SmallLog( void) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
Com_InitZoneMemory
|
Com_InitHunkZoneMemory
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
void Com_InitHunkMemory( void ) {
|
void Com_InitHunkMemory( void ) {
|
||||||
|
@ -3539,7 +3539,7 @@ void Field_AutoComplete( field_t *field )
|
||||||
==================
|
==================
|
||||||
Com_RandomBytes
|
Com_RandomBytes
|
||||||
|
|
||||||
fills string array with len radom bytes, peferably from the OS randomizer
|
fills string array with len random bytes, preferably from the OS randomizer
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
void Com_RandomBytes( byte *string, int len )
|
void Com_RandomBytes( byte *string, int len )
|
||||||
|
|
|
@ -1326,6 +1326,7 @@ long FS_FOpenFileReadDir(const char *filename, searchpath_t *search, fileHandle_
|
||||||
return FS_fplength(filep);
|
return FS_fplength(filep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*file = 0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -562,7 +562,7 @@ typedef struct {
|
||||||
#define Byte4Copy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3])
|
#define Byte4Copy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3])
|
||||||
|
|
||||||
#define SnapVector(v) {v[0]=((int)(v[0]));v[1]=((int)(v[1]));v[2]=((int)(v[2]));}
|
#define SnapVector(v) {v[0]=((int)(v[0]));v[1]=((int)(v[1]));v[2]=((int)(v[2]));}
|
||||||
// just in case you do't want to use the macros
|
// just in case you don't want to use the macros
|
||||||
vec_t _DotProduct( const vec3_t v1, const vec3_t v2 );
|
vec_t _DotProduct( const vec3_t v1, const vec3_t v2 );
|
||||||
void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out );
|
void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out );
|
||||||
void _VectorAdd( const vec3_t veca, const vec3_t vecb, vec3_t out );
|
void _VectorAdd( const vec3_t veca, const vec3_t vecb, vec3_t out );
|
||||||
|
|
|
@ -53,6 +53,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#define RF_SHADOW_PLANE 0x0100 // use refEntity->shadowPlane
|
#define RF_SHADOW_PLANE 0x0100 // use refEntity->shadowPlane
|
||||||
#define RF_WRAP_FRAMES 0x0200 // mod the model frames by the maxframes to allow continuous
|
#define RF_WRAP_FRAMES 0x0200 // mod the model frames by the maxframes to allow continuous
|
||||||
|
// animation without needing to know the frame count
|
||||||
|
|
||||||
// refdef flags
|
// refdef flags
|
||||||
#define RDF_NOWORLDMODEL 0x0001 // used for player configuration screen
|
#define RDF_NOWORLDMODEL 0x0001 // used for player configuration screen
|
||||||
|
|
|
@ -1550,7 +1550,7 @@ static void R_LoadFogs( lump_t *l, lump_t *brushesLump, lump_t *sidesLump ) {
|
||||||
}
|
}
|
||||||
count = l->filelen / sizeof(*fogs);
|
count = l->filelen / sizeof(*fogs);
|
||||||
|
|
||||||
// create fog strucutres for them
|
// create fog structures for them
|
||||||
s_worldData.numfogs = count + 1;
|
s_worldData.numfogs = count + 1;
|
||||||
s_worldData.fogs = ri.Hunk_Alloc ( s_worldData.numfogs*sizeof(*out), h_low);
|
s_worldData.fogs = ri.Hunk_Alloc ( s_worldData.numfogs*sizeof(*out), h_low);
|
||||||
out = s_worldData.fogs + 1;
|
out = s_worldData.fogs + 1;
|
||||||
|
@ -1776,7 +1776,7 @@ qboolean R_GetEntityToken( char *buffer, int size ) {
|
||||||
|
|
||||||
s = COM_Parse( &s_worldData.entityParsePoint );
|
s = COM_Parse( &s_worldData.entityParsePoint );
|
||||||
Q_strncpyz( buffer, s, size );
|
Q_strncpyz( buffer, s, size );
|
||||||
if ( !s_worldData.entityParsePoint || !s[0] ) {
|
if ( !s_worldData.entityParsePoint && !s[0] ) {
|
||||||
s_worldData.entityParsePoint = s_worldData.entityString;
|
s_worldData.entityParsePoint = s_worldData.entityString;
|
||||||
return qfalse;
|
return qfalse;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -690,7 +690,7 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
if ( !token[0] )
|
if ( !token[0] )
|
||||||
{
|
{
|
||||||
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'animMmap' keyword in shader '%s'\n", shader.name );
|
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'animMap' keyword in shader '%s'\n", shader.name );
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
stage->bundle[0].imageAnimationSpeed = atof( token );
|
stage->bundle[0].imageAnimationSpeed = atof( token );
|
||||||
|
@ -728,7 +728,7 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
if ( !token[0] )
|
if ( !token[0] )
|
||||||
{
|
{
|
||||||
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'videoMmap' keyword in shader '%s'\n", shader.name );
|
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'videoMap' keyword in shader '%s'\n", shader.name );
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
stage->bundle[0].videoMapHandle = ri.CIN_PlayCinematic( token, 0, 0, 256, 256, (CIN_loop | CIN_silent | CIN_shader));
|
stage->bundle[0].videoMapHandle = ri.CIN_PlayCinematic( token, 0, 0, 256, 256, (CIN_loop | CIN_silent | CIN_shader));
|
||||||
|
@ -1476,7 +1476,7 @@ static qboolean ParseShader( char **text )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// sun parms
|
// sun parms
|
||||||
else if ( !Q_stricmp( token, "q3map_sun" ) ) {
|
else if ( !Q_stricmp( token, "q3map_sun" ) || !Q_stricmp( token, "q3map_sunExt" ) ) {
|
||||||
float a, b;
|
float a, b;
|
||||||
|
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
|
@ -1503,6 +1503,9 @@ static qboolean ParseShader( char **text )
|
||||||
tr.sunDirection[0] = cos( a ) * cos( b );
|
tr.sunDirection[0] = cos( a ) * cos( b );
|
||||||
tr.sunDirection[1] = sin( a ) * cos( b );
|
tr.sunDirection[1] = sin( a ) * cos( b );
|
||||||
tr.sunDirection[2] = sin( b );
|
tr.sunDirection[2] = sin( b );
|
||||||
|
|
||||||
|
SkipRestOfLine( text );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else if ( !Q_stricmp( token, "deformVertexes" ) ) {
|
else if ( !Q_stricmp( token, "deformVertexes" ) ) {
|
||||||
ParseDeform( text );
|
ParseDeform( text );
|
||||||
|
|
|
@ -44,6 +44,12 @@ uniform vec4 u_NormalScale;
|
||||||
uniform vec4 u_SpecularScale;
|
uniform vec4 u_SpecularScale;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
|
||||||
|
#if defined(USE_CUBEMAP)
|
||||||
|
uniform vec4 u_CubeMapInfo;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
varying vec4 var_TexCoords;
|
varying vec4 var_TexCoords;
|
||||||
|
|
||||||
varying vec4 var_Color;
|
varying vec4 var_Color;
|
||||||
|
@ -323,19 +329,20 @@ mat3 cotangent_frame( vec3 N, vec3 p, vec2 uv )
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
vec3 viewDir;
|
||||||
vec3 L, N, E, H;
|
vec3 L, N, E, H;
|
||||||
float NL, NH, NE, EH;
|
float NL, NH, NE, EH;
|
||||||
|
|
||||||
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
|
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
|
||||||
#if defined(USE_VERT_TANGENT_SPACE)
|
#if defined(USE_VERT_TANGENT_SPACE)
|
||||||
mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, var_Normal.xyz);
|
mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, var_Normal.xyz);
|
||||||
E = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w);
|
viewDir = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w);
|
||||||
#else
|
#else
|
||||||
mat3 tangentToWorld = cotangent_frame(var_Normal, -var_ViewDir, var_TexCoords.xy);
|
mat3 tangentToWorld = cotangent_frame(var_Normal, -var_ViewDir, var_TexCoords.xy);
|
||||||
E = var_ViewDir;
|
viewDir = var_ViewDir;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
E = normalize(E);
|
E = normalize(viewDir);
|
||||||
|
|
||||||
L = var_LightDir.xyz;
|
L = var_LightDir.xyz;
|
||||||
#if defined(USE_DELUXEMAP)
|
#if defined(USE_DELUXEMAP)
|
||||||
|
@ -497,6 +504,10 @@ void main()
|
||||||
|
|
||||||
vec3 R = reflect(E, N);
|
vec3 R = reflect(E, N);
|
||||||
|
|
||||||
|
// parallax corrected cubemap (cheaper trick)
|
||||||
|
// from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
|
||||||
|
R += u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;
|
||||||
|
|
||||||
vec3 cubeLightColor = textureCubeLod(u_CubeMap, R, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w;
|
vec3 cubeLightColor = textureCubeLod(u_CubeMap, R, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w;
|
||||||
|
|
||||||
#if defined(USE_LIGHTMAP)
|
#if defined(USE_LIGHTMAP)
|
||||||
|
|
|
@ -600,8 +600,6 @@ static void R_LoadVisibility( lump_t *l ) {
|
||||||
byte *buf;
|
byte *buf;
|
||||||
|
|
||||||
len = ( s_worldData.numClusters + 63 ) & ~63;
|
len = ( s_worldData.numClusters + 63 ) & ~63;
|
||||||
s_worldData.novis = ri.Hunk_Alloc( len, h_low );
|
|
||||||
Com_Memset( s_worldData.novis, 0xff, len );
|
|
||||||
|
|
||||||
len = l->filelen;
|
len = l->filelen;
|
||||||
if ( !len ) {
|
if ( !len ) {
|
||||||
|
@ -2722,7 +2720,7 @@ qboolean R_GetEntityToken( char *buffer, int size ) {
|
||||||
|
|
||||||
s = COM_Parse( &s_worldData.entityParsePoint );
|
s = COM_Parse( &s_worldData.entityParsePoint );
|
||||||
Q_strncpyz( buffer, s, size );
|
Q_strncpyz( buffer, s, size );
|
||||||
if ( !s_worldData.entityParsePoint || !s[0] ) {
|
if ( !s_worldData.entityParsePoint && !s[0] ) {
|
||||||
s_worldData.entityParsePoint = s_worldData.entityString;
|
s_worldData.entityParsePoint = s_worldData.entityString;
|
||||||
return qfalse;
|
return qfalse;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2749,7 +2747,8 @@ qboolean R_ParseSpawnVars( char *spawnVarChars, int maxSpawnVarChars, int *numSp
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
if ( com_token[0] != '{' ) {
|
if ( com_token[0] != '{' ) {
|
||||||
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: found %s when expecting {",com_token );
|
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: found %s when expecting {\n",com_token );
|
||||||
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
// go through all the key / value pairs
|
// go through all the key / value pairs
|
||||||
|
@ -2758,7 +2757,8 @@ qboolean R_ParseSpawnVars( char *spawnVarChars, int maxSpawnVarChars, int *numSp
|
||||||
|
|
||||||
// parse key
|
// parse key
|
||||||
if ( !R_GetEntityToken( keyname, sizeof( keyname ) ) ) {
|
if ( !R_GetEntityToken( keyname, sizeof( keyname ) ) ) {
|
||||||
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: EOF without closing brace" );
|
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: EOF without closing brace\n" );
|
||||||
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( keyname[0] == '}' ) {
|
if ( keyname[0] == '}' ) {
|
||||||
|
@ -2767,18 +2767,18 @@ qboolean R_ParseSpawnVars( char *spawnVarChars, int maxSpawnVarChars, int *numSp
|
||||||
|
|
||||||
// parse value
|
// parse value
|
||||||
if ( !R_GetEntityToken( com_token, sizeof( com_token ) ) ) {
|
if ( !R_GetEntityToken( com_token, sizeof( com_token ) ) ) {
|
||||||
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: EOF without closing brace" );
|
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: EOF without closing brace\n" );
|
||||||
break;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( com_token[0] == '}' ) {
|
if ( com_token[0] == '}' ) {
|
||||||
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: closing brace without data" );
|
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: closing brace without data\n" );
|
||||||
break;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( *numSpawnVars == MAX_SPAWN_VARS ) {
|
if ( *numSpawnVars == MAX_SPAWN_VARS ) {
|
||||||
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: MAX_SPAWN_VARS" );
|
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: MAX_SPAWN_VARS\n" );
|
||||||
break;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyLength = strlen(keyname) + 1;
|
keyLength = strlen(keyname) + 1;
|
||||||
|
@ -2786,8 +2786,8 @@ qboolean R_ParseSpawnVars( char *spawnVarChars, int maxSpawnVarChars, int *numSp
|
||||||
|
|
||||||
if (numSpawnVarChars + keyLength + tokenLength > maxSpawnVarChars)
|
if (numSpawnVarChars + keyLength + tokenLength > maxSpawnVarChars)
|
||||||
{
|
{
|
||||||
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: MAX_SPAWN_VAR_CHARS" );
|
ri.Printf( PRINT_ALL, "R_ParseSpawnVars: MAX_SPAWN_VAR_CHARS\n" );
|
||||||
break;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(spawnVarChars + numSpawnVarChars, keyname);
|
strcpy(spawnVarChars + numSpawnVarChars, keyname);
|
||||||
|
|
|
@ -142,7 +142,9 @@ static uniformInfo_t uniformsInfo[] =
|
||||||
{ "u_PrimaryLightOrigin", GLSL_VEC4 },
|
{ "u_PrimaryLightOrigin", GLSL_VEC4 },
|
||||||
{ "u_PrimaryLightColor", GLSL_VEC3 },
|
{ "u_PrimaryLightColor", GLSL_VEC3 },
|
||||||
{ "u_PrimaryLightAmbient", GLSL_VEC3 },
|
{ "u_PrimaryLightAmbient", GLSL_VEC3 },
|
||||||
{ "u_PrimaryLightRadius", GLSL_FLOAT }
|
{ "u_PrimaryLightRadius", GLSL_FLOAT },
|
||||||
|
|
||||||
|
{ "u_CubeMapInfo", GLSL_VEC4 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -698,6 +698,8 @@ typedef enum
|
||||||
UNIFORM_PRIMARYLIGHTAMBIENT,
|
UNIFORM_PRIMARYLIGHTAMBIENT,
|
||||||
UNIFORM_PRIMARYLIGHTRADIUS,
|
UNIFORM_PRIMARYLIGHTRADIUS,
|
||||||
|
|
||||||
|
UNIFORM_CUBEMAPINFO,
|
||||||
|
|
||||||
UNIFORM_COUNT
|
UNIFORM_COUNT
|
||||||
} uniform_t;
|
} uniform_t;
|
||||||
|
|
||||||
|
@ -1179,8 +1181,6 @@ typedef struct {
|
||||||
int clusterBytes;
|
int clusterBytes;
|
||||||
const byte *vis; // may be passed in by CM_LoadMap to save space
|
const byte *vis; // may be passed in by CM_LoadMap to save space
|
||||||
|
|
||||||
byte *novis; // clusterBytes of 0xff
|
|
||||||
|
|
||||||
char *entityString;
|
char *entityString;
|
||||||
char *entityParsePoint;
|
char *entityParsePoint;
|
||||||
} world_t;
|
} world_t;
|
||||||
|
|
|
@ -2863,7 +2863,8 @@ void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene )
|
||||||
vec3_t ambient, directed, lightDir;
|
vec3_t ambient, directed, lightDir;
|
||||||
R_LightForPoint(tr.refdef.vieworg, ambient, directed, lightDir);
|
R_LightForPoint(tr.refdef.vieworg, ambient, directed, lightDir);
|
||||||
tr.refdef.colorScale = 766.0f / (directed[0] + directed[1] + directed[2] + 1.0f);
|
tr.refdef.colorScale = 766.0f / (directed[0] + directed[1] + directed[2] + 1.0f);
|
||||||
if (directed[0] + directed[1] + directed[2] == 0)
|
// only print message for first side
|
||||||
|
if (directed[0] + directed[1] + directed[2] == 0 && cubemapSide == 0)
|
||||||
{
|
{
|
||||||
ri.Printf(PRINT_ALL, "cubemap %d (%f, %f, %f) is outside the lightgrid!\n", cubemapIndex, tr.refdef.vieworg[0], tr.refdef.vieworg[1], tr.refdef.vieworg[2]);
|
ri.Printf(PRINT_ALL, "cubemap %d (%f, %f, %f) is outside the lightgrid!\n", cubemapIndex, tr.refdef.vieworg[0], tr.refdef.vieworg[1], tr.refdef.vieworg[2]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1378,8 +1378,21 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
|
||||||
// testing cube map
|
// testing cube map
|
||||||
//
|
//
|
||||||
if (!(tr.viewParms.flags & VPF_NOCUBEMAPS) && input->cubemapIndex && r_cubeMapping->integer)
|
if (!(tr.viewParms.flags & VPF_NOCUBEMAPS) && input->cubemapIndex && r_cubeMapping->integer)
|
||||||
|
{
|
||||||
|
vec4_t vec;
|
||||||
|
|
||||||
GL_BindToTMU( tr.cubemaps[input->cubemapIndex - 1], TB_CUBEMAP);
|
GL_BindToTMU( tr.cubemaps[input->cubemapIndex - 1], TB_CUBEMAP);
|
||||||
|
|
||||||
|
vec[0] = tr.cubemapOrigins[input->cubemapIndex - 1][0] - backEnd.viewParms.or.origin[0];
|
||||||
|
vec[1] = tr.cubemapOrigins[input->cubemapIndex - 1][1] - backEnd.viewParms.or.origin[1];
|
||||||
|
vec[2] = tr.cubemapOrigins[input->cubemapIndex - 1][2] - backEnd.viewParms.or.origin[2];
|
||||||
|
vec[3] = 1.0f;
|
||||||
|
|
||||||
|
VectorScale4(vec, 1.0f / 1000.0f, vec);
|
||||||
|
|
||||||
|
GLSL_SetUniformVec4(sp, UNIFORM_CUBEMAPINFO, vec);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// draw
|
// draw
|
||||||
//
|
//
|
||||||
|
|
|
@ -753,7 +753,7 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
if ( !token[0] )
|
if ( !token[0] )
|
||||||
{
|
{
|
||||||
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'animMmap' keyword in shader '%s'\n", shader.name );
|
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'animMap' keyword in shader '%s'\n", shader.name );
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
stage->bundle[0].imageAnimationSpeed = atof( token );
|
stage->bundle[0].imageAnimationSpeed = atof( token );
|
||||||
|
@ -794,7 +794,7 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
if ( !token[0] )
|
if ( !token[0] )
|
||||||
{
|
{
|
||||||
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'videoMmap' keyword in shader '%s'\n", shader.name );
|
ri.Printf( PRINT_WARNING, "WARNING: missing parameter for 'videoMap' keyword in shader '%s'\n", shader.name );
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
stage->bundle[0].videoMapHandle = ri.CIN_PlayCinematic( token, 0, 0, 256, 256, (CIN_loop | CIN_silent | CIN_shader));
|
stage->bundle[0].videoMapHandle = ri.CIN_PlayCinematic( token, 0, 0, 256, 256, (CIN_loop | CIN_silent | CIN_shader));
|
||||||
|
|
|
@ -644,7 +644,7 @@ R_ClusterPVS
|
||||||
*/
|
*/
|
||||||
static const byte *R_ClusterPVS (int cluster) {
|
static const byte *R_ClusterPVS (int cluster) {
|
||||||
if (!tr.world->vis || cluster < 0 || cluster >= tr.world->numClusters ) {
|
if (!tr.world->vis || cluster < 0 || cluster >= tr.world->numClusters ) {
|
||||||
return tr.world->novis;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tr.world->vis + cluster * tr.world->clusterBytes;
|
return tr.world->vis + cluster * tr.world->clusterBytes;
|
||||||
|
@ -698,15 +698,13 @@ static void R_MarkLeaves (void) {
|
||||||
|
|
||||||
for(i = 0; i < MAX_VISCOUNTS; i++)
|
for(i = 0; i < MAX_VISCOUNTS; i++)
|
||||||
{
|
{
|
||||||
if(tr.visClusters[i] == cluster)
|
// if the areamask or r_showcluster was modified, invalidate all visclusters
|
||||||
|
// this caused doors to open into undrawn areas
|
||||||
|
if (tr.refdef.areamaskModified || r_showcluster->modified)
|
||||||
{
|
{
|
||||||
//tr.visIndex = i;
|
tr.visClusters[i] = -2;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
else if(tr.visClusters[i] == cluster)
|
||||||
|
|
||||||
// if r_showcluster was just turned on, remark everything
|
|
||||||
if(i != MAX_VISCOUNTS && !tr.refdef.areamaskModified && !r_showcluster->modified)// && !r_dynamicBspOcclusionCulling->modified)
|
|
||||||
{
|
{
|
||||||
if(tr.visClusters[i] != tr.visClusters[tr.visIndex] && r_showcluster->integer)
|
if(tr.visClusters[i] != tr.visClusters[tr.visIndex] && r_showcluster->integer)
|
||||||
{
|
{
|
||||||
|
@ -715,12 +713,6 @@ static void R_MarkLeaves (void) {
|
||||||
tr.visIndex = i;
|
tr.visIndex = i;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the areamask was modified, invalidate all visclusters
|
|
||||||
// this caused doors to open into undrawn areas
|
|
||||||
if (tr.refdef.areamaskModified)
|
|
||||||
{
|
|
||||||
memset(tr.visClusters, -2, sizeof(tr.visClusters));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.visIndex = (tr.visIndex + 1) % MAX_VISCOUNTS;
|
tr.visIndex = (tr.visIndex + 1) % MAX_VISCOUNTS;
|
||||||
|
@ -734,17 +726,6 @@ static void R_MarkLeaves (void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set all nodes to visible if there is no vis
|
|
||||||
// this caused some levels to simply not render
|
|
||||||
if (r_novis->integer || !tr.world->vis || tr.visClusters[tr.visIndex] == -1) {
|
|
||||||
for (i=0 ; i<tr.world->numnodes ; i++) {
|
|
||||||
if (tr.world->nodes[i].contents != CONTENTS_SOLID) {
|
|
||||||
tr.world->nodes[i].visCounts[tr.visIndex] = tr.visCounts[tr.visIndex];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
vis = R_ClusterPVS(tr.visClusters[tr.visIndex]);
|
vis = R_ClusterPVS(tr.visClusters[tr.visIndex]);
|
||||||
|
|
||||||
for (i=0,leaf=tr.world->nodes ; i<tr.world->numnodes ; i++, leaf++) {
|
for (i=0,leaf=tr.world->nodes ; i<tr.world->numnodes ; i++, leaf++) {
|
||||||
|
@ -754,7 +735,7 @@ static void R_MarkLeaves (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check general pvs
|
// check general pvs
|
||||||
if ( !(vis[cluster>>3] & (1<<(cluster&7))) ) {
|
if ( vis && !(vis[cluster>>3] & (1<<(cluster&7))) ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue