+/* 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;
+ }
+}
+
+static void initScrollTables() {
+ int i = 0;
+ float scrollSpeed = FAR_SCROLL_SPEED;
+ float speedIncrement = (NEAR_SCROLL_SPEED - FAR_SCROLL_SPEED) / ((float) (REFLECTION_HEIGHT - 1));
+ for (i = 0; i < REFLECTION_HEIGHT; i++) {
+ scrollSpeedTable[i] = scrollSpeed;
+ scrollSpeed += speedIncrement;
+ scrollTable[i] = 0.0f;
+ scrollTableRounded[i] = 0;
+ }
+}