+/* Normal map preprocessing */
+/* Scale normal with depth and unpack R component (horizontal component) */
+static void processNormal() {
+ int scanline;
+ unsigned int *normalmap = (unsigned int*)background;
+ normalmap += NORMALMAP_SCANLINE * backgroundW;
+ unsigned short *dst = normalmap;
+ float scale;
+ int i;
+ int x;
+
+ for (scanline = 0; scanline < REFLECTION_HEIGHT; scanline++) {
+ scale = 2.0f - (float)scanline / ((float)REFLECTION_HEIGHT - 1);
+ scrollModTable[scanline] = (int) (backgroundW / scale + 0.5f);
+ for (i = 0; i < backgroundW; i++) {
+ x = (int)(i * scale + 0.5f);
+ *dst++ = x < backgroundW ? normalmap[x] & 0xFF : 0;
+ }
+ normalmap += backgroundW;
+ }
+}