+/* Uses the horizontal gradient as an offset to create a warp effect */
+static void
+draw_transparent_vanilla(short *src)
+{
+ int across, down, pixel;
+ char *dirty = dirty_buffer;
+
+ pixel = 0;
+ for (down = 0; down < height - 2; down++, pixel += 2)
+ for (across = 0; across < width-2; across++, pixel++) {
+ int gradx, grady, gradx1, grady1;
+ int x0, x1, x2, y1, y2;
+
+ x0 = src[pixel];
+ x1 = src[pixel + 1];
+ x2 = src[pixel + 2];
+ y1 = src[pixel + width];
+ y2 = src[pixel + 2*width];
+
+ gradx = (x1 - x0);
+ grady = (y1 - x0);
+ gradx1= (x2 - x1);
+ grady1= (y2 - y1);
+ gradx1 = 1 + (gradx + gradx1) / 2;
+ grady1 = 1 + (grady + grady1) / 2;
+
+ if ((2*across+MIN(gradx,gradx1) < 0) ||
+ (2*across+MAX(gradx,gradx1) >= bigwidth)) {
+ gradx = 0;
+ gradx1= 1;
+ }
+ if ((2*down+MIN(grady,grady1) < 0) ||
+ (2*down+MAX(grady,grady1) >= bigheight)) {
+ grady = 0;
+ grady1 = 1;
+ }
+
+ if ((gradx == 0 && gradx1 == 1 && grady == 0 && grady1 == 1)) {
+ if (dirty[pixel] > 0)
+ dirty[pixel]--;
+ } else
+ dirty[pixel] = DIRTY;
+
+ if (dirty[pixel] > 0) {
+ XPutPixel(buffer_map, (across<<1), (down<<1),
+ XGetPixel(orig_map, (across<<1) + gradx, (down<<1) + grady));
+ XPutPixel(buffer_map, (across<<1)+1,(down<<1),
+ XGetPixel(orig_map, (across<<1) + gradx1,(down<<1) + grady));
+ XPutPixel(buffer_map, (across<<1), (down<<1)+1,
+ XGetPixel(orig_map, (across<<1) + gradx, (down<<1) + grady1));
+ XPutPixel(buffer_map, (across<<1)+1,(down<<1)+1,
+ XGetPixel(orig_map, (across<<1) + gradx1,(down<<1) + grady1));
+ }
+ }
+}
+
+
+/* ------------------------------------------- */
+
+
+/* This builds on the above warp effect by adding in a lighting effect: */
+/* brighten pixels by an amount corresponding to the vertical gradient */