diff -ur ScummVM-cvs20020821/scummvm/gfx.cpp ScummVM-cvs20020821+hack/scummvm/gfx.cpp
--- ScummVM-cvs20020821/scummvm/gfx.cpp	2002-08-20 08:41:55.000000000 +0200
+++ ScummVM-cvs20020821+hack/scummvm/gfx.cpp	2002-08-22 00:29:43.000000000 +0200
@@ -643,8 +643,50 @@
 
 	blit(flashBuffer, bgbak, flashW*8, flashH);
 
-	// TODO - flashlight should have round corners
+	// Round the corners. This may need some tuning. I have no idea how
+	// the original interpreters did it.
 
+	int r = (_flashlightXStrips < _flashlightYStrips) ?
+			_flashlightXStrips : _flashlightYStrips;
+	
+	if (r > 0) {
+		// At first I thought I could do this by using the Pythagorean
+		// relation to draw circles, but the code got pretty ugly, and
+		// the results were even worse. Rounding errors, I guess.
+		//
+		// Instead, we hard-code a set of nicely rounded corners.
+
+		int corner_data[] = {
+			1,
+			2, 1,
+			3, 2, 1,
+			4, 2, 1, 1,
+			5, 3, 2, 1, 1,
+			6, 4, 3, 2, 1, 1,
+			7, 5, 4, 3, 2, 1, 1,
+			8, 6, 4, 3, 2, 2, 1, 1
+		};
+
+		if (r > 8)
+			r = 8;
+
+		int *ptr = &corner_data[(r * (r - 1)) / 2];
+
+		for (i = 0; i < r; i++) {
+			int minrow = i * 320;
+			int maxrow = (flashH - i - 1) * 320;
+			int maxcol = flashW * 8 - 1;
+			int d = ptr[i];
+
+			for (j = 0; j < d; j++) {
+				flashBuffer[minrow + j] = 0;
+				flashBuffer[minrow + maxcol - j] = 0;
+				flashBuffer[maxrow + j] = 0;
+				flashBuffer[maxrow + maxcol - j] = 0;
+			}
+		}
+	}
+	
 	_flashlightIsDrawn = true;
 }
 
