Make coop play possible in qw. Create a progs variable called 'current_skill'

and you'll get the nq edict pruning behavior.
This commit is contained in:
Adam Olsen 2001-07-13 22:47:11 +00:00
parent eae97539c2
commit dcaa0b205f
2 changed files with 27 additions and 2 deletions

View file

@ -62,6 +62,7 @@ typedef struct {
float *trace_inopen; float *trace_inopen;
float *trace_inwater; float *trace_inwater;
int *msg_entity; int *msg_entity;
float *current_skill;
} sv_globals_t; } sv_globals_t;
extern sv_globals_t sv_globals; extern sv_globals_t sv_globals;

View file

@ -65,8 +65,25 @@ static int reserved_edicts = MAX_CLIENTS;
static int static int
prune_edict (progs_t *pr, edict_t *ent) prune_edict (progs_t *pr, edict_t *ent)
{ {
if (((int) SVFIELD (ent, spawnflags, float) & SPAWNFLAG_NOT_DEATHMATCH)) if (!sv_globals.current_skill) {
return 1; if (((int) SVFIELD (ent, spawnflags, float) & SPAWNFLAG_NOT_DEATHMATCH))
return 1;
} else {
// remove things from different skill levels or deathmatch
if (deathmatch->int_val) {
if (((int) SVFIELD (ent, spawnflags, float) & SPAWNFLAG_NOT_DEATHMATCH)) {
return 1;
}
} else if (
(*sv_globals.current_skill == 0
&& ((int) SVFIELD (ent, spawnflags, float) & SPAWNFLAG_NOT_EASY))
|| (*sv_globals.current_skill == 1
&& ((int) SVFIELD (ent, spawnflags, float) & SPAWNFLAG_NOT_MEDIUM))
|| (*sv_globals.current_skill >= 2
&& ((int) SVFIELD (ent, spawnflags, float) & SPAWNFLAG_NOT_HARD))) {
return 1;
}
}
return 0; return 0;
} }
@ -125,6 +142,7 @@ void
SV_LoadProgs (void) SV_LoadProgs (void)
{ {
dfunction_t *f; dfunction_t *f;
ddef_t *def;
PR_LoadProgs (&sv_pr_state, sv_progs->string); PR_LoadProgs (&sv_pr_state, sv_progs->string);
if (!sv_pr_state.progs) if (!sv_pr_state.progs)
@ -257,6 +275,12 @@ SV_LoadProgs (void)
sv_fields.glow_size = ED_GetFieldIndex (&sv_pr_state, "glow_size"); sv_fields.glow_size = ED_GetFieldIndex (&sv_pr_state, "glow_size");
sv_fields.glow_color = ED_GetFieldIndex (&sv_pr_state, "glow_color"); sv_fields.glow_color = ED_GetFieldIndex (&sv_pr_state, "glow_color");
sv_fields.colormod = ED_GetFieldIndex (&sv_pr_state, "colormod"); sv_fields.colormod = ED_GetFieldIndex (&sv_pr_state, "colormod");
def = PR_FindGlobal (&sv_pr_state, "current_skill");
if (def)
sv_globals.current_skill = (float *) &sv_pr_state.pr_globals[def->ofs];
else
sv_globals.current_skill = 0;
} }
extern builtin_t sv_builtins[]; extern builtin_t sv_builtins[];