Index: code/graphics/2d.cpp
===================================================================
--- code/graphics/2d.cpp	(revision 10989)
+++ code/graphics/2d.cpp	(working copy)
@@ -230,7 +230,7 @@
 			xy_tmp = (*x) * Gr_resize_X;
 			break;
 		}
-		(*x) = fl2i(xy_tmp);
+		(*x) = fl2ir(xy_tmp);
 	}
 
 	if ( y ) {
@@ -251,17 +251,17 @@
 			xy_tmp = (*y) * Gr_resize_Y;
 			break;
 		}
-		(*y) = fl2i(xy_tmp);
+		(*y) = fl2ir(xy_tmp);
 	}
 
 	if ( w ) {
 		xy_tmp = (*w) * ((resize_mode == GR_RESIZE_FULL) ? Gr_full_resize_X : Gr_resize_X);
-		(*w) = fl2i(xy_tmp);
+		(*w) = fl2ir(xy_tmp);
 	}
 
 	if ( h ) {
 		xy_tmp = (*h) * ((resize_mode == GR_RESIZE_FULL) ? Gr_full_resize_Y : Gr_resize_Y);
-		(*h) = fl2i(xy_tmp);
+		(*h) = fl2ir(xy_tmp);
 	}
 
 	return true;
@@ -302,7 +302,7 @@
 			xy_tmp = (*x) / Gr_resize_X;
 			break;
 		}
-		(*x) = fl2i(xy_tmp);
+		(*x) = fl2ir(xy_tmp);
 	}
 
 	if ( y ) {
@@ -323,17 +323,17 @@
 			xy_tmp = (*y) / Gr_resize_Y;
 			break;
 		}
-		(*y) = fl2i(xy_tmp);
+		(*y) = fl2ir(xy_tmp);
 	}
 
 	if ( w ) {
 		xy_tmp = (*w) / ((resize_mode == GR_RESIZE_FULL) ? Gr_full_resize_X : Gr_resize_X);
-		(*w) = fl2i(xy_tmp);
+		(*w) = fl2ir(xy_tmp);
 	}
 
 	if ( h ) {
 		xy_tmp = (*h) / ((resize_mode == GR_RESIZE_FULL) ? Gr_full_resize_Y : Gr_resize_Y);
-		(*h) = fl2i(xy_tmp);
+		(*h) = fl2ir(xy_tmp);
 	}
 
 	return true;
Index: code/math/floating.h
===================================================================
--- code/math/floating.h	(revision 10989)
+++ code/math/floating.h	(working copy)
@@ -29,6 +29,7 @@
 #define fl_abs(fl) fabsf(fl)
 #define i2fl(i) ((float)(i))
 #define fl2i(fl) ((int)(fl))
+#define fl2ir(fl) ((int)(fl + ((fl < 0.0f) ? -0.5f : 0.5f)))
 #define flceil(fl) (int)ceil(fl)
 #define flfloor(fl) (int)floor(fl)
 #define f2fl(fx) ((float)(fx)/65536.0f)
