From 695ec18595637a8835ba315d1fa26fc919367039 Mon Sep 17 00:00:00 2001 From: bones_was_here Date: Sun, 28 Apr 2024 06:30:37 +1000 Subject: [PATCH] Q1BSP: add a workaround cvar for the Rogue lava men, use it when playing Rogue This doesn't fix them, it just changes the behaviour of the map bug so that they're stuck like in the original Quake engine. Fixing them properly requires moving them, a .ent file is convenient for that. Closes https://github.com/DarkPlacesEngine/darkplaces/issues/109 Signed-off-by: bones_was_here --- cmd.c | 3 +++ model_brush.c | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd.c b/cmd.c index 3e35b336..b67179b5 100644 --- a/cmd.c +++ b/cmd.c @@ -632,8 +632,11 @@ static void Cmd_Exec(cmd_state_t *cmd, const char *filename) ); break; // rogue mission pack has a guardian boss that does not wake up if findradius returns one of the entities around its spawn area + // On r2m3 3 of the 4 monster_lava_man are placed in solid clips so droptofloor() moves them to a lower level if tracebox can + // move them out of solid, if it can't they're stuck (original behaviour), only proper fix is to move them with a .ent file. case GAME_ROGUE: Cbuf_InsertText(cmd, "\n" +"mod_q1bsp_traceoutofsolid 0\n" "sv_gameplayfix_blowupfallenzombies 0\n" "sv_gameplayfix_findradiusdistancetobox 0\n" "sv_gameplayfix_grenadebouncedownslopes 0\n" diff --git a/model_brush.c b/model_brush.c index 83645cf3..f07da506 100644 --- a/model_brush.c +++ b/model_brush.c @@ -61,6 +61,7 @@ cvar_t mod_q3shader_force_terrain_alphaflag = {CF_CLIENT, "mod_q3shader_force_te cvar_t mod_q2bsp_littransparentsurfaces = {CF_CLIENT, "mod_q2bsp_littransparentsurfaces", "0", "allows lighting on rain in 3v3gloom3 and other cases of transparent surfaces that have lightmaps that were ignored by quake2"}; cvar_t mod_q1bsp_polygoncollisions = {CF_CLIENT | CF_SERVER, "mod_q1bsp_polygoncollisions", "0", "disables use of precomputed cliphulls and instead collides with polygons (uses Bounding Interval Hierarchy optimizations)"}; +cvar_t mod_q1bsp_traceoutofsolid = {CF_SHARED, "mod_q1bsp_traceoutofsolid", "1", "enables tracebox to move an entity that's stuck in solid brushwork out to empty space, 1 matches FTEQW and QSS and is required by many community maps (items/monsters will be missing otherwise), 0 matches old versions of DP and the original Quake engine (if your map or QC needs 0 it's buggy)"}; cvar_t mod_q1bsp_zero_hullsize_cutoff = {CF_CLIENT | CF_SERVER, "mod_q1bsp_zero_hullsize_cutoff", "3", "bboxes with an X dimension smaller than this will use the smallest cliphull (0x0x0) instead of being rounded up to the player cliphull (32x32x56) in Q1BSP, or crouching player (32x32x36) in HLBSP"}; cvar_t mod_bsp_portalize = {CF_CLIENT, "mod_bsp_portalize", "1", "enables portal generation from BSP tree (may take several seconds per map), used by r_drawportals, r_useportalculling, r_shadow_realtime_dlight_portalculling, r_shadow_realtime_world_compileportalculling"}; @@ -112,6 +113,7 @@ void Mod_BrushInit(void) Cvar_RegisterVariable(&mod_q3shader_force_addalpha); Cvar_RegisterVariable(&mod_q3shader_force_terrain_alphaflag); Cvar_RegisterVariable(&mod_q1bsp_polygoncollisions); + Cvar_RegisterVariable(&mod_q1bsp_traceoutofsolid); Cvar_RegisterVariable(&mod_q1bsp_zero_hullsize_cutoff); Cvar_RegisterVariable(&mod_recalculatenodeboxes); @@ -760,7 +762,7 @@ static int Mod_Q1BSP_RecursiveHullCheck(RecursiveHullCheckTraceInfo_t *t, int nu // recurse both sides, front side first ret = Mod_Q1BSP_RecursiveHullCheck(t, node->children[p1side], p1f, midf, p1, mid); // if this side is not empty, return what it is (solid or done) - if (ret != HULLCHECKSTATE_EMPTY && !t->trace->allsolid) + if (ret != HULLCHECKSTATE_EMPTY && (!t->trace->allsolid || !mod_q1bsp_traceoutofsolid.integer)) return ret; ret = Mod_Q1BSP_RecursiveHullCheck(t, node->children[p2side], midf, p2f, mid, p2); -- 2.39.2