Index: code/math/fvi.cpp
===================================================================
--- code/math/fvi.cpp	(revision 11156)
+++ code/math/fvi.cpp	(working copy)
@@ -325,7 +325,8 @@
  */
 int fvi_ray_boundingbox( vec3d *min, vec3d *max, vec3d * p0, vec3d *pdir, vec3d *hitpt )
 {
-	int middle = ((1<<0) | (1<<1) | (1<<2));
+	bool inside = true;
+	bool middle[3] = { true, true, true };
 	int i;
 	int which_plane;
 	float maxt[3];
@@ -334,15 +335,17 @@
 	for (i = 0; i < 3; i++) {
 		if (p0->a1d[i] < min->a1d[i]) {
 			candidate_plane[i] = min->a1d[i];
-			middle &= ~(1<<i);
+			middle[i] = false;
+			inside = false;
 		} else if (p0->a1d[i] > max->a1d[i]) {
 			candidate_plane[i] = max->a1d[i];
-			middle &= ~(1<<i);
+			middle[i] = false;
+			inside = false;
 		}
 	}
 
 	// ray origin inside bounding box			
-	if (middle) {
+	if ( inside ) {
 		*hitpt = *p0;
 		return 1;
 	}
@@ -349,19 +352,17 @@
 
 	// calculate T distances to candidate plane
 	for (i = 0; i < 3; i++) {
-		if ( (middle & (1<<i)) || (pdir->a1d[i] == 0.0f) ) {
+		if ( !middle[i] && (pdir->a1d[i] != 0.0f) )
+			maxt[i] = (candidate_plane[i] - p0->a1d[i]) / pdir->a1d[i];
+		else
 			maxt[i] = -1.0f;
-		} else {
-			maxt[i] = (candidate_plane[i] - p0->a1d[i]) / pdir->a1d[i];
-		}
 	}
 
 	// Get largest of the maxt's for final choice of intersection
 	which_plane = 0;
 	for (i = 1; i < 3; i++) {
-		if (maxt[which_plane] < maxt[i]) {
+		if (maxt[which_plane] < maxt[i])
 			which_plane = i;
-		}
 	}
 
 	// check final candidate actually inside box
