27 Mar 2017
This commit is contained in:
parent
3dfa909805
commit
5932684d40
|
@ -49,6 +49,9 @@ typedef struct event_api_s
|
|||
void ( *EV_PlayerTraceExt )( float *start, float *end, int traceFlags, int (*pfnIgnore)( struct physent_s *pe ), struct pmtrace_s *tr );
|
||||
const char *(*EV_SoundForIndex)( int index );
|
||||
struct msurface_s *( *EV_TraceSurface )( int ground, float *vstart, float *vend );
|
||||
struct movevars_s *( *EV_GetMovevars )( void );
|
||||
struct pmtrace_s *( *EV_VisTraceLine )( float *start, float *end, int flags );
|
||||
struct physent_s *( *EV_GetVisent )( int idx );
|
||||
} event_api_t;
|
||||
|
||||
#endif//EVENT_API_H
|
|
@ -58,7 +58,7 @@ GNU General Public License for more details.
|
|||
#define PARM_CLIENT_INGAME 25
|
||||
#define PARM_FEATURES 26 // same as movevars->features
|
||||
#define PARM_ACTIVE_TMU 27 // for debug
|
||||
//reserved
|
||||
#define PARM_LIGHTSTYLEVALUE 28 // second arg is stylenum
|
||||
#define PARM_MAX_IMAGE_UNITS 29
|
||||
#define PARM_CLIENT_ACTIVE 30
|
||||
#define PARM_REBUILD_GAMMA 31 // if true lightmaps rebuilding for gamma change
|
||||
|
@ -66,6 +66,7 @@ GNU General Public License for more details.
|
|||
#define PARM_SURF_SAMPLESIZE 33 // lightmap resolution per face (second arg interpret as facenumber)
|
||||
#define PARM_GL_CONTEXT_TYPE 34 // opengl or opengles
|
||||
#define PARM_GLES_WRAPPER 35 //
|
||||
#define PARM_STENCIL_ACTIVE 36
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -162,12 +163,12 @@ typedef struct render_api_s
|
|||
dlight_t* (*GetDynamicLight)( int number );
|
||||
dlight_t* (*GetEntityLight)( int number );
|
||||
byte (*LightToTexGamma)( byte color ); // software gamma support
|
||||
void (*Reserved0)( void );
|
||||
float (*GetFrameTime)( void );
|
||||
|
||||
// Set renderer info (tell engine about changes)
|
||||
void (*R_SetCurrentEntity)( struct cl_entity_s *ent ); // tell engine about both currententity and currentmodel
|
||||
void (*R_SetCurrentModel)( struct model_s *mod ); // change currentmodel but leave currententity unchanged
|
||||
void (*Reserved1)( void );
|
||||
int (*R_FatPVS)( const float *org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis );
|
||||
void (*R_StoreEfrags)( struct efrag_s **ppefrag, int framecount );// store efrags for static entities
|
||||
|
||||
// Texture tools
|
||||
|
@ -209,7 +210,7 @@ typedef struct render_api_s
|
|||
void (*GL_Reserved2)( void );
|
||||
|
||||
// Misc renderer functions
|
||||
void (*GL_DrawParticles)( const struct ref_viewpass_s *rvp, qboolean solid_pass );
|
||||
void (*GL_DrawParticles)( const struct ref_viewpass_s *rvp, qboolean trans_pass );
|
||||
void (*EnvShot)( const float *vieworg, const char *name, qboolean skyshot, int shotsize ); // creates a cubemap or skybox into gfx\env folder
|
||||
int (*COM_CompareFileTime)( const char *filename1, const char *filename2, int *iCompare );
|
||||
void (*Host_Error)( const char *error, ... ); // cause Host Error
|
||||
|
|
|
@ -1199,6 +1199,9 @@ void CL_EmitEntities( void )
|
|||
// set client ideal pitch when mlook is disabled
|
||||
CL_SetIdealPitch ();
|
||||
|
||||
// think thirdperson camera
|
||||
clgame.dllFuncs.CAM_Think ();
|
||||
|
||||
// link all the visible clients first
|
||||
CL_LinkPlayers ( &cl.frames[cl.parsecountmod] );
|
||||
|
||||
|
@ -1214,9 +1217,6 @@ void CL_EmitEntities( void )
|
|||
// fire events (client and server)
|
||||
CL_FireEvents ();
|
||||
|
||||
// think thirdperson camera
|
||||
clgame.dllFuncs.CAM_Think ();
|
||||
|
||||
// handle spectator camera movement
|
||||
CL_MoveSpectatorCamera();
|
||||
|
||||
|
|
|
@ -1194,7 +1194,7 @@ static model_t *CL_LoadSpriteModel( const char *filename, uint type, uint texFla
|
|||
}
|
||||
|
||||
// load new map sprite
|
||||
if( CL_LoadHudSprite( name, &clgame.sprites[i], type, 0 ))
|
||||
if( CL_LoadHudSprite( name, &clgame.sprites[i], type, texFlags ))
|
||||
{
|
||||
if( i < ( MAX_IMAGES - 1 ))
|
||||
clgame.sprites[i].needload = clgame.load_sequence;
|
||||
|
@ -2293,6 +2293,22 @@ physent_t *pfnGetPhysent( int idx )
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnGetVisent
|
||||
|
||||
=============
|
||||
*/
|
||||
physent_t *pfnGetVisent( int idx )
|
||||
{
|
||||
if( idx >= 0 && idx < clgame.pmove->numvisent )
|
||||
{
|
||||
// return physent
|
||||
return &clgame.pmove->visents[idx];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnSetTraceHull
|
||||
|
@ -2363,6 +2379,17 @@ static struct msurface_s *pfnTraceSurface( int ground, float *vstart, float *ven
|
|||
return PM_TraceSurface( pe, vstart, vend );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnGetMovevars
|
||||
|
||||
=============
|
||||
*/
|
||||
static movevars_t *pfnGetMoveVars( void )
|
||||
{
|
||||
return &clgame.movevars;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnStopAllSounds
|
||||
|
@ -3763,6 +3790,9 @@ static event_api_t gEventApi =
|
|||
CL_PlayerTraceExt,
|
||||
CL_SoundFromIndex,
|
||||
pfnTraceSurface,
|
||||
pfnGetMoveVars,
|
||||
CL_VisTraceLine,
|
||||
pfnGetVisent,
|
||||
};
|
||||
|
||||
static demo_api_t gDemoApi =
|
||||
|
@ -4080,7 +4110,10 @@ qboolean CL_LoadProgs( const char *name )
|
|||
|
||||
CL_InitStudioAPI( );
|
||||
|
||||
// grab them from client.dll
|
||||
// trying to grab them from client.dll
|
||||
cl_righthand = Cvar_FindVar( "cl_righthand" );
|
||||
|
||||
if( cl_righthand == NULL )
|
||||
cl_righthand = Cvar_Get( "cl_righthand", "0", FCVAR_ARCHIVE, "flip viewmodel (left to right)" );
|
||||
|
||||
return true;
|
||||
|
|
|
@ -726,17 +726,17 @@ CL_VisTraceLine
|
|||
trace by visible objects (thats can be non-solid)
|
||||
=============
|
||||
*/
|
||||
pmtrace_t CL_VisTraceLine( vec3_t start, vec3_t end, int flags )
|
||||
pmtrace_t *CL_VisTraceLine( vec3_t start, vec3_t end, int flags )
|
||||
{
|
||||
int old_usehull;
|
||||
pmtrace_t tr;
|
||||
static pmtrace_t tr;
|
||||
|
||||
old_usehull = clgame.pmove->usehull;
|
||||
clgame.pmove->usehull = 2;
|
||||
tr = PM_PlayerTraceExt( clgame.pmove, start, end, flags, clgame.pmove->numvisent, clgame.pmove->visents, -1, NULL );
|
||||
clgame.pmove->usehull = old_usehull;
|
||||
|
||||
return tr;
|
||||
return &tr;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -2622,7 +2622,7 @@ void CL_UpdateFlashlight( cl_entity_t *ent )
|
|||
vec3_t forward, view_ofs;
|
||||
vec3_t vecSrc, vecEnd;
|
||||
float falloff;
|
||||
pmtrace_t trace;
|
||||
pmtrace_t *trace;
|
||||
dlight_t *dl;
|
||||
|
||||
if( ent->index == ( cl.playernum + 1 ))
|
||||
|
@ -2658,14 +2658,14 @@ void CL_UpdateFlashlight( cl_entity_t *ent )
|
|||
dl = CL_AllocDlight( ent->index );
|
||||
#if 0
|
||||
// g-cont. disabled until studio lighting will be finished
|
||||
if( trace.ent > 0 && clgame.pmove->visents[trace.ent].studiomodel )
|
||||
VectorCopy( clgame.pmove->visents[trace.ent].origin, dl->origin );
|
||||
else VectorCopy( trace.endpos, dl->origin );
|
||||
if( trace->ent > 0 && clgame.pmove->visents[trace->ent].studiomodel )
|
||||
VectorCopy( clgame.pmove->visents[trace->ent].origin, dl->origin );
|
||||
else VectorCopy( trace->endpos, dl->origin );
|
||||
#else
|
||||
VectorCopy( trace.endpos, dl->origin );
|
||||
VectorCopy( trace->endpos, dl->origin );
|
||||
#endif
|
||||
// compute falloff
|
||||
falloff = trace.fraction * FLASHLIGHT_DISTANCE;
|
||||
falloff = trace->fraction * FLASHLIGHT_DISTANCE;
|
||||
if( falloff < 500.0f ) falloff = 1.0f;
|
||||
else falloff = 500.0f / falloff;
|
||||
falloff *= falloff;
|
||||
|
|
|
@ -119,6 +119,7 @@ void SCR_CheckStartupVids( void )
|
|||
{
|
||||
cls.movienum = 0;
|
||||
SCR_NextMovie ();
|
||||
Cbuf_Execute();
|
||||
}
|
||||
else cls.movienum = -1;
|
||||
}
|
||||
|
|
|
@ -805,7 +805,7 @@ int CL_PointContents( const vec3_t p );
|
|||
int CL_WaterEntity( const float *rgflPos );
|
||||
cl_entity_t *CL_GetWaterEntity( const float *rgflPos );
|
||||
void CL_SetupPMove( playermove_t *pmove, local_state_t *from, usercmd_t *ucmd, qboolean runfuncs, double time );
|
||||
pmtrace_t CL_VisTraceLine( vec3_t start, vec3_t end, int flags );
|
||||
pmtrace_t *CL_VisTraceLine( vec3_t start, vec3_t end, int flags );
|
||||
pmtrace_t CL_TraceLine( vec3_t start, vec3_t end, int flags );
|
||||
void CL_MoveSpectatorCamera( void );
|
||||
qboolean CL_LocalWeapons( void );
|
||||
|
@ -853,7 +853,7 @@ void CL_WeaponAnim( int iAnim, int body );
|
|||
void CL_ClearEffects( void );
|
||||
void CL_ClearEfrags( void );
|
||||
void CL_TestLights( void );
|
||||
void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean solid_pass );
|
||||
void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean trans_pass );
|
||||
void CL_FireCustomDecal( int textureIndex, int entityIndex, int modelIndex, float *pos, int flags, float scale );
|
||||
void CL_DecalShoot( int textureIndex, int entityIndex, int modelIndex, float *pos, int flags );
|
||||
void CL_PlayerDecal( int textureIndex, int entityIndex, float *pos );
|
||||
|
|
|
@ -808,7 +808,7 @@ byte *GL_ApplyGamma( const byte *source, int pixels, qboolean isNormalMap )
|
|||
byte *out = (byte *)source;
|
||||
int i;
|
||||
|
||||
if( !isNormalMap )
|
||||
if( source && !isNormalMap )
|
||||
{
|
||||
for( i = 0; i < pixels; i++, in += 4 )
|
||||
{
|
||||
|
|
|
@ -203,8 +203,10 @@ typedef struct
|
|||
int realframecount; // not including viewpasses
|
||||
int framecount;
|
||||
|
||||
qboolean fResetVis;
|
||||
|
||||
byte visbytes[(MAX_MAP_LEAFS+7)/8]; // member custom PVS
|
||||
int lightstylevalue[MAX_LIGHTSTYLES]; // value 0 - 65536
|
||||
float lightcache[MAX_LIGHTSTYLES];
|
||||
|
||||
double frametime; // special frametime for multipass rendering (will set to 0 on a nextview)
|
||||
float blend; // global blend value
|
||||
|
|
|
@ -36,7 +36,7 @@ CL_RunLightStyles
|
|||
void CL_RunLightStyles( void )
|
||||
{
|
||||
int i, k, flight, clight;
|
||||
float l, c, lerpfrac, backlerp;
|
||||
float l, lerpfrac, backlerp;
|
||||
float frametime = (cl.time - cl.oldtime);
|
||||
float scale;
|
||||
lightstyle_t *ls;
|
||||
|
@ -52,7 +52,6 @@ void CL_RunLightStyles( void )
|
|||
if( r_fullbright->value || !cl.worldmodel->lightdata )
|
||||
{
|
||||
tr.lightstylevalue[i] = 256 * 256;
|
||||
tr.lightcache[i] = 3.0f;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -67,20 +66,17 @@ void CL_RunLightStyles( void )
|
|||
if( !ls->length )
|
||||
{
|
||||
tr.lightstylevalue[i] = 256 * scale;
|
||||
tr.lightcache[i] = 3.0f * scale;
|
||||
continue;
|
||||
}
|
||||
else if( ls->length == 1 )
|
||||
{
|
||||
// single length style so don't bother interpolating
|
||||
tr.lightstylevalue[i] = ls->map[0] * 22 * scale;
|
||||
tr.lightcache[i] = ( ls->map[0] / 12.0f ) * 3.0f * scale;
|
||||
continue;
|
||||
}
|
||||
else if( !ls->interp || !cl_lightstyle_lerping->value )
|
||||
{
|
||||
tr.lightstylevalue[i] = ls->map[flight%ls->length] * 22 * scale;
|
||||
tr.lightcache[i] = ( ls->map[flight%ls->length] / 12.0f ) * 3.0f * scale;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -88,15 +84,12 @@ void CL_RunLightStyles( void )
|
|||
// frame just gone
|
||||
k = ls->map[flight % ls->length];
|
||||
l = (float)( k * 22.0f ) * backlerp;
|
||||
c = (float)( k / 12.0f ) * backlerp;
|
||||
|
||||
// upcoming frame
|
||||
k = ls->map[clight % ls->length];
|
||||
l += (float)( k * 22.0f ) * lerpfrac;
|
||||
c += (float)( k / 12.0f ) * lerpfrac;
|
||||
|
||||
tr.lightstylevalue[i] = (int)l * scale;
|
||||
tr.lightcache[i] = c * 3.0f * scale;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1076,7 +1076,8 @@ void R_RenderFrame( const ref_viewpass_t *rvp )
|
|||
{
|
||||
if( clgame.drawFuncs.GL_RenderFrame( rvp ))
|
||||
{
|
||||
RI.viewleaf = NULL; // force markleafs next frame
|
||||
tr.realframecount++;
|
||||
tr.fResetVis = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1174,7 +1175,7 @@ static int GL_RenderGetParm( int parm, int arg )
|
|||
case PARM_TEX_SKYTEXNUM:
|
||||
return tr.skytexturenum;
|
||||
case PARM_TEX_LIGHTMAP:
|
||||
ASSERT( arg >= 0 && arg < MAX_LIGHTMAPS );
|
||||
arg = bound( 0, arg, MAX_LIGHTMAPS - 1 );
|
||||
return tr.lightmapTextures[arg];
|
||||
case PARM_SKY_SPHERE:
|
||||
return world.sky_sphere && !world.custom_skybox;
|
||||
|
@ -1209,6 +1210,9 @@ static int GL_RenderGetParm( int parm, int arg )
|
|||
return host.features;
|
||||
case PARM_ACTIVE_TMU:
|
||||
return glState.activeTMU;
|
||||
case PARM_LIGHTSTYLEVALUE:
|
||||
arg = bound( 0, arg, MAX_LIGHTSTYLES - 1 );
|
||||
return tr.lightstylevalue[arg];
|
||||
case PARM_MAP_HAS_DELUXE:
|
||||
return (world.deluxedata != NULL);
|
||||
case PARM_MAX_IMAGE_UNITS:
|
||||
|
@ -1227,6 +1231,8 @@ static int GL_RenderGetParm( int parm, int arg )
|
|||
return glConfig.context;
|
||||
case PARM_GLES_WRAPPER:
|
||||
return glConfig.wrapper;
|
||||
case PARM_STENCIL_ACTIVE:
|
||||
return glState.stencilEnabled;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1307,6 +1313,13 @@ static void R_SetCurrentModel( model_t *mod )
|
|||
RI.currentmodel = mod;
|
||||
}
|
||||
|
||||
static int R_FatPVS( const vec3_t org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis )
|
||||
{
|
||||
int bytes = Mod_FatPVS( org, radius, visbuffer, world.visbytes, merge, fullvis );
|
||||
if( visbuffer ) memcpy( tr.visbytes, visbuffer, world.visbytes );
|
||||
return bytes;
|
||||
}
|
||||
|
||||
static lightstyle_t *CL_GetLightStyle( int number )
|
||||
{
|
||||
ASSERT( number >= 0 && number < MAX_LIGHTSTYLES );
|
||||
|
@ -1325,6 +1338,11 @@ static dlight_t *CL_GetEntityLight( int number )
|
|||
return &cl_elights[number];
|
||||
}
|
||||
|
||||
static float R_GetFrameTime( void )
|
||||
{
|
||||
return tr.frametime;
|
||||
}
|
||||
|
||||
static const char *GL_TextureName( unsigned int texnum )
|
||||
{
|
||||
return R_GetTexture( texnum )->name;
|
||||
|
@ -1398,10 +1416,10 @@ static render_api_t gRenderAPI =
|
|||
CL_GetDynamicLight,
|
||||
CL_GetEntityLight,
|
||||
LightToTexGamma,
|
||||
NULL,
|
||||
R_GetFrameTime,
|
||||
R_SetCurrentEntity,
|
||||
R_SetCurrentModel,
|
||||
NULL,
|
||||
R_FatPVS,
|
||||
R_StoreEfrags,
|
||||
GL_FindTexture,
|
||||
GL_TextureName,
|
||||
|
|
|
@ -655,7 +655,7 @@ CL_DrawParticlesExternal
|
|||
allow to draw effects from custom renderer
|
||||
===============
|
||||
*/
|
||||
void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean solid_pass )
|
||||
void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean trans_pass )
|
||||
{
|
||||
ref_instance_t oldRI = RI;
|
||||
|
||||
|
@ -664,7 +664,10 @@ void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean solid_pass )
|
|||
R_SetupFrustum();
|
||||
R_SetupGL( false ); // don't touch GL-states
|
||||
|
||||
if( solid_pass )
|
||||
// setup PVS for frame
|
||||
memcpy( RI.visbytes, tr.visbytes, world.visbytes );
|
||||
|
||||
if( trans_pass == false )
|
||||
{
|
||||
CL_DrawBeams( false );
|
||||
}
|
||||
|
|
|
@ -1962,10 +1962,11 @@ void R_MarkLeaves( void )
|
|||
|
||||
if( !RI.drawWorld ) return;
|
||||
|
||||
if( FBitSet( r_novis->flags, FCVAR_CHANGED ))
|
||||
if( FBitSet( r_novis->flags, FCVAR_CHANGED ) || tr.fResetVis )
|
||||
{
|
||||
// force recalc viewleaf
|
||||
ClearBits( r_novis->flags, FCVAR_CHANGED );
|
||||
tr.fResetVis = false;
|
||||
RI.viewleaf = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -781,7 +781,7 @@ static float R_SpriteGlowBlend( vec3_t origin, int rendermode, int renderfx, flo
|
|||
{
|
||||
float dist, brightness;
|
||||
vec3_t glowDist;
|
||||
pmtrace_t tr;
|
||||
pmtrace_t *tr;
|
||||
|
||||
VectorSubtract( origin, RI.vieworg, glowDist );
|
||||
dist = VectorLength( glowDist );
|
||||
|
@ -790,7 +790,7 @@ static float R_SpriteGlowBlend( vec3_t origin, int rendermode, int renderfx, flo
|
|||
{
|
||||
tr = CL_VisTraceLine( RI.vieworg, origin, r_traceglow->value ? PM_GLASS_IGNORE : (PM_GLASS_IGNORE|PM_STUDIO_IGNORE));
|
||||
|
||||
if(( 1.0f - tr.fraction ) * dist > 8.0f )
|
||||
if(( 1.0f - tr->fraction ) * dist > 8.0f )
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
|
|
|
@ -352,8 +352,8 @@ pfnGetEngineTimes
|
|||
static void pfnGetEngineTimes( int *framecount, double *current, double *old )
|
||||
{
|
||||
if( framecount ) *framecount = tr.realframecount;
|
||||
if( current ) *current = g_studio.time;
|
||||
if( old ) *old = g_studio.time - g_studio.frametime;
|
||||
if( current ) *current = cl.time;
|
||||
if( old ) *old = cl.oldtime;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -121,6 +121,7 @@ vidmode_t vidmode[] =
|
|||
{ "1680 x 1050 (wide)", 1680, 1050, true },
|
||||
{ "1920 x 1080 (wide)", 1920, 1080, true },
|
||||
{ "1920 x 1200 (wide)", 1920, 1200, true },
|
||||
{ "2560 x 1440 (wide)", 2560, 1440, true },
|
||||
{ "2560 x 1600 (wide)", 2560, 1600, true },
|
||||
{ "1600 x 900 (wide)", 1600, 900, true },
|
||||
};
|
||||
|
@ -1584,7 +1585,7 @@ void GL_InitCommands( void )
|
|||
window_xpos = Cvar_Get( "_window_xpos", "130", FCVAR_RENDERINFO, "window position by horizontal" );
|
||||
window_ypos = Cvar_Get( "_window_ypos", "48", FCVAR_RENDERINFO, "window position by vertical" );
|
||||
|
||||
gl_extensions = Cvar_Get( "gl_extensions", "1", FCVAR_GLCONFIG, "allow gl_extensions" );
|
||||
gl_extensions = Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG, "allow gl_extensions" );
|
||||
gl_compress_textures = Cvar_Get( "gl_compress_textures", "0", FCVAR_GLCONFIG, "compress textures to safe video memory" );
|
||||
gl_texture_nearest = Cvar_Get( "gl_texture_nearest", "0", FCVAR_ARCHIVE, "disable texture filter" );
|
||||
gl_max_size = Cvar_Get( "gl_max_size", "512", FCVAR_ARCHIVE, "no effect in Xash3D just a legacy" );
|
||||
|
|
|
@ -212,38 +212,22 @@ void Cbuf_Execute( void )
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
SCRIPT COMMANDS
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
/*
|
||||
===============
|
||||
Cmd_StuffCmds_f
|
||||
Cbuf_ExecStuffCmds
|
||||
|
||||
Adds command line parameters as script statements
|
||||
Commands lead with a +, and continue until a - or another +
|
||||
xash -dev 3 +map c1a0d
|
||||
xash -nosound -game bshift
|
||||
execute commandline
|
||||
===============
|
||||
*/
|
||||
void Cmd_StuffCmds_f( void )
|
||||
void Cbuf_ExecStuffCmds( void )
|
||||
{
|
||||
int i, j, l = 0;
|
||||
char build[MAX_CMD_LINE]; // this is for all commandline options combined (and is bounds checked)
|
||||
|
||||
if( Cmd_Argc() != 1 )
|
||||
{
|
||||
Msg( "Usage: stuffcmds : execute command line parameters\n" );
|
||||
return;
|
||||
}
|
||||
int i, j, l = 0;
|
||||
|
||||
// no reason to run the commandline arguments twice
|
||||
if( host.stuffcmdsrun ) return;
|
||||
if( !host.stuffcmds_pending )
|
||||
return;
|
||||
|
||||
host.stuffcmdsrun = true;
|
||||
build[0] = 0;
|
||||
|
||||
for( i = 0; i < host.argc; i++ )
|
||||
|
@ -282,6 +266,33 @@ void Cmd_StuffCmds_f( void )
|
|||
// we already reserved space for the terminator
|
||||
build[l++] = 0;
|
||||
Cbuf_InsertText( build );
|
||||
Cbuf_Execute(); // apply now
|
||||
|
||||
// this command can be called only from .rc
|
||||
Cmd_RemoveCommand( "stuffcmds" );
|
||||
host.stuffcmds_pending = false;
|
||||
}
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
SCRIPT COMMANDS
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
/*
|
||||
===============
|
||||
Cmd_StuffCmds_f
|
||||
|
||||
Adds command line parameters as script statements
|
||||
Commands lead with a +, and continue until a - or another +
|
||||
xash -dev 3 +map c1a0d
|
||||
xash -nosound -game bshift
|
||||
===============
|
||||
*/
|
||||
void Cmd_StuffCmds_f( void )
|
||||
{
|
||||
host.stuffcmds_pending = true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -320,7 +320,7 @@ typedef struct host_parm_s
|
|||
int developer; // show all developer's message
|
||||
int old_developer; // keep real dev state (we need enable dev-mode in multiplayer)
|
||||
qboolean key_overstrike; // key overstrike mode
|
||||
qboolean stuffcmdsrun; // execute stuff commands
|
||||
qboolean stuffcmds_pending; // should execute stuff commands
|
||||
qboolean allow_cheats; // this host will allow cheating
|
||||
qboolean con_showalways; // show console always (developer and dedicated)
|
||||
qboolean com_handlecolon; // allow COM_ParseFile to handle colon as single char
|
||||
|
|
|
@ -40,6 +40,7 @@ void Cbuf_Init( void );
|
|||
void Cbuf_Clear( void );
|
||||
void Cbuf_AddText( const char *text );
|
||||
void Cbuf_InsertText( const char *text );
|
||||
void Cbuf_ExecStuffCmds( void );
|
||||
void Cbuf_Execute (void);
|
||||
uint Cmd_Argc( void );
|
||||
char *Cmd_Args( void );
|
||||
|
|
|
@ -995,23 +995,22 @@ int EXPORT Host_Main( const char *progname, int bChangeGame, pfnChangeGame func
|
|||
// execute startup config and cmdline
|
||||
Cbuf_AddText( va( "exec %s.rc\n", SI.ModuleName ));
|
||||
Cbuf_AddText( "exec config.cfg\n" );
|
||||
// intentional fallthrough
|
||||
case HOST_DEDICATED:
|
||||
// if stuffcmds wasn't run, then init.rc is probably missing, use default
|
||||
if( !host.stuffcmdsrun ) Cbuf_AddText( "stuffcmds\n" );
|
||||
|
||||
Cbuf_Execute();
|
||||
break;
|
||||
case HOST_DEDICATED:
|
||||
// allways parse commandline in dedicated-mode
|
||||
host.stuffcmds_pending = true;
|
||||
break;
|
||||
}
|
||||
|
||||
host.change_game = false; // done
|
||||
Cmd_RemoveCommand( "setr" ); // remove potentially backdoor for change render settings
|
||||
Cmd_RemoveCommand( "setgl" );
|
||||
|
||||
// we need to execute it again here
|
||||
oldtime = Sys_DoubleTime() - 0.1;
|
||||
Cbuf_ExecStuffCmds(); // execute stuffcmds (commandline)
|
||||
SCR_CheckStartupVids(); // must be last
|
||||
|
||||
oldtime = Sys_DoubleTime() - 0.1;
|
||||
|
||||
// main window message loop
|
||||
while( !host.crashed )
|
||||
{
|
||||
|
|
Reference in New Issue