Skip to content

Commit e1e188a

Browse files
author
Goober5000
committed
use the entire range of RAND_MAX, not the range divided by 32
1 parent aaa80df commit e1e188a

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

code/model/modelinterp.cpp

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3603,8 +3603,22 @@ void submodel_get_two_random_points(int model_num, int submodel_num, vec3d *v1,
36033603
return;
36043604
}
36053605

3606-
int vn1 = (myrand()>>5) % nv;
3607-
int vn2 = (myrand()>>5) % nv;
3606+
#ifndef NDEBUG
3607+
if (RAND_MAX < nv)
3608+
{
3609+
static int submodel_get_two_random_points_warned = false;
3610+
if (!submodel_get_two_random_points_warned)
3611+
{
3612+
polymodel *pm = model_get(model_num);
3613+
Warning(LOCATION, "RAND_MAX is only %d, but submodel %d for model %s has %d vertices! Explosions will not propagate through the entire model!", RAND_MAX, submodel_num, pm->filename, nv);
3614+
submodel_get_two_random_points_warned = true;
3615+
}
3616+
}
3617+
#endif
3618+
3619+
Assert(nv > 0); // Goober5000 - to avoid div-0 error
3620+
int vn1 = myrand() % nv;
3621+
int vn2 = myrand() % nv;
36083622

36093623
*v1 = *Interp_verts[vn1];
36103624
*v2 = *Interp_verts[vn2];
@@ -3641,9 +3655,22 @@ void submodel_get_two_random_points_better(int model_num, int submodel_num, vec3
36413655
return;
36423656
}
36433657

3658+
#ifndef NDEBUG
3659+
if (RAND_MAX < nv)
3660+
{
3661+
static int submodel_get_two_random_points_warned = false;
3662+
if (!submodel_get_two_random_points_warned)
3663+
{
3664+
polymodel *pm = model_get(model_num);
3665+
Warning(LOCATION, "RAND_MAX is only %d, but submodel %d for model %s has %d vertices! Explosions will not propagate through the entire model!", RAND_MAX, submodel_num, pm->filename, nv);
3666+
submodel_get_two_random_points_warned = true;
3667+
}
3668+
}
3669+
#endif
3670+
36443671
Assert(nv > 0); // Goober5000 - to avoid div-0 error
3645-
int vn1 = (myrand()>>5) % nv;
3646-
int vn2 = (myrand()>>5) % nv;
3672+
int vn1 = myrand() % nv;
3673+
int vn2 = myrand() % nv;
36473674

36483675
*v1 = tree->point_list[vn1];
36493676
*v2 = tree->point_list[vn2];

0 commit comments

Comments
 (0)