From b67a392cb62d1a086243e6596f4049ade38ad157 Mon Sep 17 00:00:00 2001 From: Yamagi Burmeister Date: Sun, 7 Oct 2018 11:56:10 +0200 Subject: [PATCH] Split the gibs per frame limit between gibs and debris. The gibs and debris per frame must be limited to prevent server mem map overflows. Until now debris and gibs were handled the same, the debris spawned by rockets and grenates could prevent the actual gibs of the killed monster from spawning. Before this change 20 entities were spawned at max. Now up tp 40 enties can be spawned. This needs some testings. --- src/g_main.c | 5 ++++- src/g_misc.c | 22 ++++++---------------- src/header/local.h | 6 +++++- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/g_main.c b/src/g_main.c index 31ca8a4..8054ecd 100644 --- a/src/g_main.c +++ b/src/g_main.c @@ -386,7 +386,7 @@ ExitLevel(void) } gibsthisframe = 0; - lastgibframe = 0; + debristhisframe = 0; } /* @@ -401,6 +401,9 @@ G_RunFrame(void) level.framenum++; level.time = level.framenum * FRAMETIME; + gibsthisframe = 0; + debristhisframe = 0; + /* choose a client for monsters to target this frame */ AI_SetSightClient(); diff --git a/src/g_misc.c b/src/g_misc.c index 28d3ad7..6920934 100644 --- a/src/g_misc.c +++ b/src/g_misc.c @@ -1,7 +1,7 @@ #include "header/local.h" +int debristhisframe; int gibsthisframe; -int lastgibframe; /* * QUAKED func_group (0 0 0) ? @@ -139,15 +139,9 @@ ThrowGib(edict_t *self, char *gibname, int damage, int type) vec3_t size; float vscale; - if (level.framenum > lastgibframe) - { - gibsthisframe = 0; - lastgibframe = level.framenum; - } - gibsthisframe++; - if (gibsthisframe > 20) + if (gibsthisframe > MAX_GIBS) { return; } @@ -166,6 +160,7 @@ ThrowGib(edict_t *self, char *gibname, int damage, int type) gib->flags |= FL_NO_KNOCKBACK; gib->takedamage = DAMAGE_YES; gib->die = gib_die; + gib->health = 250; if (type == GIB_ORGANIC) { @@ -293,15 +288,9 @@ ThrowDebris(edict_t *self, char *modelname, float speed, vec3_t origin) edict_t *chunk; vec3_t v; - if (level.framenum > lastgibframe) - { - gibsthisframe = 0; - lastgibframe = level.framenum; - } + debristhisframe++; - gibsthisframe++; - - if (gibsthisframe > 20) + if (debristhisframe > MAX_DEBRIS) { return; } @@ -325,6 +314,7 @@ ThrowDebris(edict_t *self, char *modelname, float speed, vec3_t origin) chunk->classname = "debris"; chunk->takedamage = DAMAGE_YES; chunk->die = debris_die; + chunk->health = 250; gi.linkentity(chunk); } diff --git a/src/header/local.h b/src/header/local.h index 0649461..1a06440 100644 --- a/src/header/local.h +++ b/src/header/local.h @@ -110,6 +110,10 @@ typedef enum AMMO_SLUGS } ammo_t; +/* Maximum debris / gibs per frame */ +#define MAX_GIBS 20 +#define MAX_DEBRIS 20 + /* deadflag */ #define DEAD_NO 0 #define DEAD_DYING 1 @@ -446,8 +450,8 @@ extern spawn_temp_t st; extern int sm_meat_index; extern int snd_fry; +extern int debristhisframe; extern int gibsthisframe; -extern int lastgibframe; /* means of death */