maps: make visibility entity optional

Based on q2pro.

Checked with n64jam_chnuckierdbeer map from https://www.moddb.com/games/quake-2/addons/quake-2-re-release-n64-sp-map-jam
This commit is contained in:
Denis Pauk 2024-12-21 16:53:38 +02:00
parent 4025b1aa46
commit 9079f610d0
6 changed files with 77 additions and 9 deletions

View file

@ -65,11 +65,23 @@ Mod_HasFreeSpace(void)
const byte *
Mod_ClusterPVS(int cluster, const model_t *model)
{
if ((cluster == -1) || !model->vis)
if (!model->vis)
{
memset(mod_novis, 0xFF, sizeof(mod_novis));
return mod_novis;
}
if (cluster == -1)
{
memset(mod_novis, 0, sizeof(mod_novis));
return mod_novis;
}
if (cluster < 0 || cluster >= model->numvisibility)
{
Com_Error(ERR_DROP, "%s: bad cluster", __func__);
}
return Mod_DecompressVis((byte *)model->vis +
model->vis->bitofs[cluster][DVIS_PVS],
(byte *)model->vis + model->numvisibility,

View file

@ -66,11 +66,23 @@ Mod_HasFreeSpace(void)
const byte *
GL3_Mod_ClusterPVS(int cluster, const gl3model_t *model)
{
if ((cluster == -1) || !model->vis)
if (!model->vis)
{
memset(mod_novis, 0xFF, sizeof(mod_novis));
return mod_novis;
}
if (cluster == -1)
{
memset(mod_novis, 0, sizeof(mod_novis));
return mod_novis;
}
if (cluster < 0 || cluster >= model->numvisibility)
{
Com_Error(ERR_DROP, "%s: bad cluster", __func__);
}
return Mod_DecompressVis((byte *)model->vis +
model->vis->bitofs[cluster][DVIS_PVS],
(byte *)model->vis + model->numvisibility,

View file

@ -66,11 +66,23 @@ Mod_HasFreeSpace(void)
const byte *
GL4_Mod_ClusterPVS(int cluster, const gl4model_t *model)
{
if ((cluster == -1) || !model->vis)
if (!model->vis)
{
memset(mod_novis, 0xFF, sizeof(mod_novis));
return mod_novis;
}
if (cluster == -1)
{
memset(mod_novis, 0, sizeof(mod_novis));
return mod_novis;
}
if (cluster < 0 || cluster >= model->numvisibility)
{
Com_Error(ERR_DROP, "%s: bad cluster", __func__);
}
return Mod_DecompressVis((byte *)model->vis +
model->vis->bitofs[cluster][DVIS_PVS],
(byte *)model->vis + model->numvisibility,

View file

@ -69,11 +69,23 @@ Mod_HasFreeSpace(void)
const byte *
Mod_ClusterPVS(int cluster, const model_t *model)
{
if ((cluster == -1) || !model->vis)
if (!model->vis)
{
memset(mod_novis, 0xFF, sizeof(mod_novis));
return mod_novis;
}
if (cluster == -1)
{
memset(mod_novis, 0, sizeof(mod_novis));
return mod_novis;
}
if (cluster < 0 || cluster >= model->numvisibility)
{
Com_Error(ERR_DROP, "%s: bad cluster", __func__);
}
return Mod_DecompressVis((byte *)model->vis +
model->vis->bitofs[cluster][DVIS_PVS],
(byte *)model->vis + model->numvisibility,

View file

@ -39,18 +39,29 @@ int registration_sequence;
const byte *
Mod_ClusterPVS(int cluster, const model_t *model)
{
if ((cluster == -1) || !model->vis)
if (!model->vis)
{
memset(mod_novis, 0xFF, sizeof(mod_novis));
return mod_novis;
}
if (cluster == -1)
{
memset(mod_novis, 0, sizeof(mod_novis));
return mod_novis;
}
if (cluster < 0 || cluster >= model->numvisibility)
{
Com_Error(ERR_DROP, "%s: bad cluster", __func__);
}
return Mod_DecompressVis((byte *)model->vis +
model->vis->bitofs[cluster][DVIS_PVS],
(byte *)model->vis + model->numvisibility,
(model->vis->numclusters + 7) >> 3);
}
//===============================================================================
static void

View file

@ -1851,11 +1851,11 @@ CM_LoadCachedMap(const char *name, model_t *mod)
if (!mod->map_vis)
{
Com_Error(ERR_DROP, "%s: Map %s has no visual clusters.",
Com_Printf("%s: Map %s has no visual clusters.",
__func__, name);
}
if (mod->numclusters != mod->map_vis->numclusters)
if (mod->map_vis && mod->numclusters != mod->map_vis->numclusters)
{
Com_Error(ERR_DROP, "%s: Map %s has incorrect number of clusters %d != %d",
__func__, name, mod->numclusters, mod->map_vis->numclusters);
@ -2112,12 +2112,21 @@ CM_DecompressVis(byte *in, byte *out)
byte *
CM_ClusterPVS(int cluster)
{
if (cluster == -1 || !cmod->map_vis)
if (!cmod->map_vis)
{
memset(pvsrow, 0xFF, (cmod->numclusters + 7) >> 3);
}
else if (cluster == -1)
{
memset(pvsrow, 0, (cmod->numclusters + 7) >> 3);
}
else
{
if (cluster < 0 || cluster >= cmod->numclusters)
{
Com_Error(ERR_DROP, "%s: bad cluster", __func__);
}
CM_DecompressVis((byte *)cmod->map_vis +
cmod->map_vis->bitofs[cluster][DVIS_PVS], pvsrow);
}