From 03e1822a0293c0d5410b3a7e6632d338f3ff5475 Mon Sep 17 00:00:00 2001 From: Walter Julius Hennecke Date: Fri, 20 Jan 2012 20:53:31 +0100 Subject: [PATCH] Added SVF_NOCLIENT to some entities Most of them game logic entities such as target_boolean or target_warp. --- cgame/cg_ents.c | 2 +- cgame/cg_public.h | 19 +++++++--------- cgame/cg_servercmds.c | 1 - cgame/tr_types.h | 3 +-- game/g_cmds.c | 2 +- game/g_target.c | 50 +++++++++++++++++++++++++++++++++++++++++- game/q_shared.h | 4 ---- stefgame.suo | Bin 220160 -> 223232 bytes 8 files changed, 60 insertions(+), 21 deletions(-) diff --git a/cgame/cg_ents.c b/cgame/cg_ents.c index d912277..b0d809d 100644 --- a/cgame/cg_ents.c +++ b/cgame/cg_ents.c @@ -111,7 +111,7 @@ static void CG_EntityEffects( centity_t *cent ) { CG_SetEntitySoundPosition( cent ); // add loop sound - if ( cent->currentState.loopSound ) { + if ( cent->currentState.loopSound && cent->currentState.loopSound < 256 ) { trap_S_AddLoopingSound( cent->currentState.number, cent->lerpOrigin, vec3_origin, cgs.gameSounds[ cent->currentState.loopSound ] ); } diff --git a/cgame/cg_public.h b/cgame/cg_public.h index 779e14f..1177af4 100644 --- a/cgame/cg_public.h +++ b/cgame/cg_public.h @@ -112,11 +112,9 @@ typedef enum { CG_GETUSERCMD, CG_SETUSERCMDVALUE, CG_R_REGISTERSHADERNOMIP, - CG_MEMORY_REMAINING, //58 - CG_R_REGISTERSHADER3D, //59 - CG_CVAR_SET_NO_MODIFY, // 60 -//these must match up with cg_syscalls.asm - add more traps HERE! - + CG_MEMORY_REMAINING, + CG_R_REGISTERSHADER3D, //59 + CG_CVAR_SET_NO_MODIFY, // 60 CG_MEMSET = 100, CG_MEMCPY, CG_STRNCPY, @@ -126,19 +124,18 @@ typedef enum { CG_SQRT, CG_FLOOR, CG_CEIL, - CG_TESTPRINTINT, - CG_TESTPRINTFLOAT - - #ifdef XTRA - , + CG_TESTPRINTFLOAT, + +#ifdef XTRA CG_R_REMAP_SHADER = 200, CG_R_ADDPOLYSTOSCENE - #endif +#endif } cgameImport_t; //these must match up with cg_syscalls.asm + /* ================================================================== diff --git a/cgame/cg_servercmds.c b/cgame/cg_servercmds.c index 1346d43..89ab5e7 100644 --- a/cgame/cg_servercmds.c +++ b/cgame/cg_servercmds.c @@ -96,7 +96,6 @@ static void CG_ParseHealthInfo( void ) { cgs.clientinfo[ client ].health = atoi( CG_Argv( i * 2 + 3 ) ); } } - /* ================ CG_ParseServerinfo diff --git a/cgame/tr_types.h b/cgame/tr_types.h index d74ac99..ceddf5b 100644 --- a/cgame/tr_types.h +++ b/cgame/tr_types.h @@ -6,8 +6,7 @@ #define MAX_DLIGHTS 32 // can't be increased, because bit flags are used on surfaces -#define MAX_ENTITIES 1023 // can't be increased without changing drawsurf bit packing - +#define MAX_ENTITIES 2047 // renderfx flags #define RF_LOWLIGHT 0x0001 // subtract ambient to keep it in the dark diff --git a/game/g_cmds.c b/game/g_cmds.c index ad2591b..5fffef9 100644 --- a/game/g_cmds.c +++ b/game/g_cmds.c @@ -5869,7 +5869,7 @@ void Cmd_AdminLogin_f( gentity_t *ent) }*/ //Admin class login thingy - //if( (Q_stricmp(arg, rpg_adminpass.string) == 0) && rpg_adminpass.string[0] ){ + //if( (Q_stricmp(arg, rpg_adminpass.string) == 0) && rpg_adminpass.string[0] ) for ( j=0; g_classData[j].consoleName[0] && j < MAX_CLASSES; j++ ) { trap_Cvar_VariableStringBuffer( va( "rpg_%sPass", g_classData[j].consoleName ), classPass, sizeof(classPass) ); diff --git a/game/g_target.c b/game/g_target.c index 63c5d1e..322090c 100644 --- a/game/g_target.c +++ b/game/g_target.c @@ -84,6 +84,10 @@ void SP_target_give( gentity_t *ent ) //Com_Printf( S_COLOR_RED "Final flags: %u\n", (ent->s.time) ); ent->use = Use_Target_Give; + + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } @@ -154,6 +158,10 @@ void SP_target_delay( gentity_t *ent ) { } ent->count = (int)ent->wait; ent->use = Use_Target_Delay; + + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } @@ -556,6 +564,10 @@ void target_kill_use( gentity_t *self, gentity_t *other, gentity_t *activator ) void SP_target_kill( gentity_t *self ) { self->use = target_kill_use; + + // don't need to send this to clients + self->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(self); } /*QUAKED target_position (0 0.5 0) (-4 -4 -4) (4 4 4) @@ -651,6 +663,10 @@ void SP_target_counter (gentity_t *self) } self->use = target_counter_use; + + // don't need to send this to clients + self->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(self); } /*QUAKED target_objective (1.0 0 0) (-4 -4 -4) (4 4 4) @@ -782,6 +798,10 @@ void SP_target_boolean (gentity_t *self) { } self->use = target_boolean_use; + + // don't need to send this to clients + self->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(self); } /*QUAKED target_gravity (.5 .5 .5) (-8 -8 -8) (8 8 8) PLAYER_ONLY MAP_GRAV @@ -822,6 +842,10 @@ void SP_target_gravity (gentity_t *self) { if(self->count) // support for SP self->targetname2 = G_NewString(va("%i", self->count)); self->use = target_gravity_use; + + // don't need to send this to clients + self->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(self); } /*QUAKED target_shake (.5 .5 .5) (-8 -8 -8) (8 8 8) @@ -872,6 +896,10 @@ void target_evosuit_use (gentity_t *self, gentity_t *other, gentity_t *activator void SP_target_evosuit (gentity_t *self) { self->use = target_evosuit_use; + + // don't need to send this to clients + self->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(self); } //================================================================================== @@ -1731,6 +1759,10 @@ void SP_target_doorLock(gentity_t *ent) { G_SpawnString("unlockMsg", "", &temp); ent->truename = G_NewString(temp); ent->use = target_doorLock_use; + + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } //RPG-X | GSIO01 | 11/05/2009 | MOD START @@ -2514,6 +2546,10 @@ void SP_target_alert(gentity_t *ent) { ent->damage = 0; ent->health = !(ent->spawnflags & 2); + + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } //RPG-X | GSIO01 | 11/05/2009 | MOD END @@ -2680,7 +2716,10 @@ void SP_target_warp(gentity_t *ent) { ent->n00bCount = (ent->spawnflags & 4); ent->use = target_warp_use; - + + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } //RPG-X | GSIO01 | 19/05/2009 | MOD END @@ -2706,6 +2745,10 @@ void SP_target_deactivate(gentity_t *ent) { } ent->use = target_deactivate_use; + + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } /*QUAKED target_serverchange (1 0 0) (-8 -8 -8) (8 8 8) START_ON @@ -2826,7 +2869,12 @@ void SP_target_levelchange(gentity_t *ent) { */ void SP_target_holodeck(gentity_t *ent) { + G_FreeEntity(ent); + return; + // don't need to send this to clients + ent->r.svFlags &= SVF_NOCLIENT; + trap_LinkEntity(ent); } //RPG-X | Harry Young | 15/10/2011 | MOD START diff --git a/game/q_shared.h b/game/q_shared.h index b8578f1..0f64215 100644 --- a/game/q_shared.h +++ b/game/q_shared.h @@ -1167,10 +1167,6 @@ typedef struct entityState_s { int generic1; int generic2; #endif - -#ifdef XTRA - int healthPercent; // XTRA -#endif } entityState_t; typedef enum { diff --git a/stefgame.suo b/stefgame.suo index b44edba4bd77b9c2d92d55f98b341c86fa23d0e4..d01248bdbc6f6eb62bef129bab12d1819f382ec7 100644 GIT binary patch delta 6963 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 SbWH!j0{dZx#%)ii^?v}VHG8)J delta 6808 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