hedgewars/uWorld.pas
changeset 10318 c2e81eea375f
parent 10317 fe2721f870ab
child 10319 240775460dc5
equal deleted inserted replaced
10317:fe2721f870ab 10318:c2e81eea375f
   788    if (AMShiftX = 0) and (AMShiftY = 0) then
   788    if (AMShiftX = 0) and (AMShiftY = 0) then
   789         DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8);
   789         DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8);
   790 {$ENDIF}
   790 {$ENDIF}
   791 end;
   791 end;
   792 
   792 
   793 procedure DrawWater(Alpha: byte; OffsetY: LongInt);
   793 procedure DrawWater(Alpha: byte; OffsetY, OffsetX: LongInt);
   794 var VertexBuffer : array [0..3] of TVertex2f;
   794 var VertexBuffer : array [0..4] of TVertex2f;
   795     topy: LongInt;
   795     topy, lx, rx: LongInt;
   796 begin
   796 begin
   797     // Water
   797     // Water
   798 topy:= OffsetY + WorldDy + cWaterLine;
   798 topy:= OffsetY + WorldDy + cWaterLine;
   799 
       
   800 if topy > ViewBottomY then
       
   801     exit;
       
   802 
   799 
   803 if SuddenDeathDmg then
   800 if SuddenDeathDmg then
   804     begin
   801     begin
   805     SDWaterColorArray[0].a := Alpha;
   802     SDWaterColorArray[0].a := Alpha;
   806     SDWaterColorArray[1].a := Alpha;
   803     SDWaterColorArray[1].a := Alpha;
   816     end;
   813     end;
   817 
   814 
   818 if topy < 0 then
   815 if topy < 0 then
   819     topy:= 0;
   816     topy:= 0;
   820 
   817 
   821 glDisable(GL_TEXTURE_2D);
   818 // glDisable(GL_TEXTURE_2D);
   822 VertexBuffer[0].X:= -ViewWidth;
   819 
   823 VertexBuffer[0].Y:=  topy;
   820 if (topy < ViewBottomY) and (WorldEdge <> weSea) then
   824 VertexBuffer[1].X:=  ViewWidth;
   821     begin
   825 VertexBuffer[1].Y:=  topy;
   822     VertexBuffer[0].X:= ViewLeftX;
   826 VertexBuffer[2].X:=  ViewWidth;
   823     VertexBuffer[0].Y:= topy;
   827 VertexBuffer[2].Y:=  ViewBottomY;
   824     VertexBuffer[1].X:= ViewRightX;
   828 VertexBuffer[3].X:= -ViewWidth;
   825     VertexBuffer[1].Y:= topy;
   829 VertexBuffer[3].Y:=  ViewBottomY;
   826     VertexBuffer[2].X:= ViewRightX;
   830 
   827     VertexBuffer[2].Y:= ViewBottomY;
   831 DrawWaterBody(@VertexBuffer[0]);
   828     VertexBuffer[3].X:= ViewLeftX;
       
   829     VertexBuffer[3].Y:= ViewBottomY;
       
   830     DrawWaterBody(@VertexBuffer[0]);
       
   831     end;
       
   832 
       
   833 // water world edges? draw water body on the sides too
       
   834 if WorldEdge = weSea then
       
   835     begin
       
   836 
       
   837     lx:= LeftX  + WorldDx - OffsetX;
       
   838     rx:= RightX + WorldDx + OffsetX;
       
   839 
       
   840     if topy < ViewBottomY then
       
   841         begin
       
   842         VertexBuffer[0].X:= lx;
       
   843         VertexBuffer[0].Y:= topy;
       
   844         VertexBuffer[1].X:= RightX;
       
   845         VertexBuffer[1].Y:= topy;
       
   846         VertexBuffer[2].X:= ViewRightX;
       
   847         VertexBuffer[2].Y:= ViewBottomY;
       
   848         VertexBuffer[3].X:= ViewLeftX;
       
   849         VertexBuffer[3].Y:= ViewBottomY;
       
   850         DrawWaterBody(@VertexBuffer[0]);
       
   851         end;
       
   852 
       
   853     if lx > ViewLeftX then
       
   854         begin
       
   855         VertexBuffer[0].X:= lx;
       
   856         VertexBuffer[0].Y:= ViewTopY;
       
   857         VertexBuffer[1].X:= lx;
       
   858         VertexBuffer[1].Y:= topy;
       
   859         VertexBuffer[2].X:= ViewLeftX;
       
   860         VertexBuffer[2].Y:= ViewBottomY;
       
   861         VertexBuffer[3].X:= ViewLeftX;
       
   862         VertexBuffer[3].Y:= ViewTopY;
       
   863         DrawWaterBody(@VertexBuffer[0]);
       
   864         end;
       
   865 
       
   866 
       
   867     if rx < ViewRightX then
       
   868         begin
       
   869         VertexBuffer[0].X:= rx;
       
   870         VertexBuffer[0].Y:= topy;
       
   871         VertexBuffer[1].X:= rx;
       
   872         VertexBuffer[1].Y:= ViewTopY;
       
   873         VertexBuffer[2].X:= ViewRightX;
       
   874         VertexBuffer[2].Y:= ViewTopY;
       
   875         VertexBuffer[3].X:= ViewRightX;
       
   876         VertexBuffer[3].Y:= ViewBottomY;
       
   877         DrawWaterBody(@VertexBuffer[0]);
       
   878         end;
       
   879     end;
   832 
   880 
   833 {$IFNDEF GL2}
   881 {$IFNDEF GL2}
   834 // must not be Tint() as color array seems to stay active and color reset is required
   882 // must not be Tint() as color array seems to stay active and color reset is required
   835 glColor4ub($FF, $FF, $FF, $FF);
   883 glColor4ub($FF, $FF, $FF, $FF);
   836 {$ENDIF}
   884 {$ENDIF}
   837 glEnable(GL_TEXTURE_2D);
   885 //glEnable(GL_TEXTURE_2D);}
   838 end;
   886 end;
   839 
   887 
   840 procedure DrawWaves(Dir, dX, dY: LongInt; tnt: Byte);
   888 procedure DrawWaves(Dir, dX, dY, oX: LongInt; tnt: Byte);
   841 var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
   889 var VertexBuffer, TextureBuffer: array [0..7] of TVertex2f;
   842     lw, waves, shift: GLfloat;
   890     lw, waves, shift: GLfloat;
   843     sprite: TSprite;
   891     sprite: TSprite;
   844     topy: LongInt;
   892     topy: LongInt;
   845 begin
   893 begin
   846 
   894 
       
   895 dY:= -cWaveHeight + dy;
       
   896 ox:= -cWaveHeight + ox;
       
   897 
   847 topy:= cWaterLine + WorldDy + dY;
   898 topy:= cWaterLine + WorldDy + dY;
   848 
   899 
   849 if topY > ViewBottomY then
   900 if (WorldEdge <> weSea) and (topY > ViewBottomY) then
   850     exit;
   901     exit;
   851 
   902 
   852 if SuddenDeathDmg then
   903 if SuddenDeathDmg then
   853     sprite:= sprSDWater
   904     sprite:= sprSDWater
   854 else
   905 else
   855     sprite:= sprWater;
   906     sprite:= sprWater;
   856 
   907 
   857 cWaveWidth:= SpritesData[sprite].Width;
   908 cWaveWidth:= SpritesData[sprite].Width;
   858 
   909 
   859 lw:= ViewWidth;
   910 if WorldEdge = weSea then
   860 waves:= lw * 2 / cWaveWidth;
   911     lw:= playWidth div 2
       
   912 else
       
   913     lw:= ViewWidth;
   861 
   914 
   862 if SuddenDeathDmg then
   915 if SuddenDeathDmg then
   863     Tint(LongInt(tnt) * SDWaterColorArray[2].r div 255 + 255 - tnt,
   916     Tint(LongInt(tnt) * SDWaterColorArray[2].r div 255 + 255 - tnt,
   864          LongInt(tnt) * SDWaterColorArray[2].g div 255 + 255 - tnt,
   917          LongInt(tnt) * SDWaterColorArray[2].g div 255 + 255 - tnt,
   865          LongInt(tnt) * SDWaterColorArray[2].b div 255 + 255 - tnt,
   918          LongInt(tnt) * SDWaterColorArray[2].b div 255 + 255 - tnt,
   872          255
   925          255
   873     );
   926     );
   874 
   927 
   875 glBindTexture(GL_TEXTURE_2D, SpritesData[sprite].Texture^.id);
   928 glBindTexture(GL_TEXTURE_2D, SpritesData[sprite].Texture^.id);
   876 
   929 
   877 VertexBuffer[0].X:= -lw;
   930 if WorldEdge <> weSea then
   878 VertexBuffer[0].Y:= cWaterLine + WorldDy + dY;
   931     begin
   879 VertexBuffer[1].X:= lw;
   932     if topY < ViewBottomY then
   880 VertexBuffer[1].Y:= VertexBuffer[0].Y;
   933         begin
   881 VertexBuffer[2].X:= lw;
   934         VertexBuffer[0].X:= -lw;
   882 VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprite].Height;
   935         VertexBuffer[0].Y:= cWaterLine + WorldDy + dY;
   883 VertexBuffer[3].X:= -lw;
   936         VertexBuffer[1].X:= lw;
   884 VertexBuffer[3].Y:= VertexBuffer[2].Y;
   937         VertexBuffer[1].Y:= VertexBuffer[0].Y;
   885 
   938         VertexBuffer[2].X:= lw;
   886 shift:= - lw / cWaveWidth;
   939         VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprite].Height;
   887 TextureBuffer[0].X:= shift + (( - WorldDx + LongInt(RealTicks shr 6) * Dir + dX) mod cWaveWidth) / (cWaveWidth - 1);
   940         VertexBuffer[3].X:= -lw;
   888 TextureBuffer[0].Y:= 0;
   941         VertexBuffer[3].Y:= VertexBuffer[2].Y;
   889 TextureBuffer[1].X:= TextureBuffer[0].X + waves;
   942         end;
   890 TextureBuffer[1].Y:= TextureBuffer[0].Y;
   943 
   891 TextureBuffer[2].X:= TextureBuffer[1].X;
   944     waves:= lw * 2 / cWaveWidth;
   892 TextureBuffer[2].Y:= SpritesData[sprite].Texture^.ry;
   945     shift:= - lw / cWaveWidth;
   893 TextureBuffer[3].X:= TextureBuffer[0].X;
   946     TextureBuffer[0].X:= shift + (( - WorldDx + LongInt(RealTicks shr 6) * Dir + dX) mod cWaveWidth) / (cWaveWidth - 1);
   894 TextureBuffer[3].Y:= TextureBuffer[2].Y;
   947     TextureBuffer[0].Y:= 0;
   895 
   948     TextureBuffer[1].X:= TextureBuffer[0].X + waves;
   896 
   949     TextureBuffer[1].Y:= TextureBuffer[0].Y;
   897 SetVertexPointer(@VertexBuffer[0], Length(VertexBuffer));
   950     TextureBuffer[2].X:= TextureBuffer[1].X;
   898 SetTexCoordPointer(@TextureBuffer[0], Length(VertexBuffer));
   951     TextureBuffer[2].Y:= SpritesData[sprite].Texture^.ry;
   899 
   952     TextureBuffer[3].X:= TextureBuffer[0].X;
   900 {$IFDEF GL2}
   953     TextureBuffer[3].Y:= TextureBuffer[2].Y;
   901 UpdateModelviewProjection;
   954 
   902 {$ENDIF}
   955 
   903 
   956     SetVertexPointer(@VertexBuffer[0], 4);
   904 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer));
   957     SetTexCoordPointer(@TextureBuffer[0],4);
       
   958 
       
   959     {$IFDEF GL2}
       
   960     UpdateModelviewProjection;
       
   961     {$ENDIF}
       
   962 
       
   963     glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer));
       
   964     end
       
   965 else // weSea: with waterwalls
       
   966     begin
       
   967     topy := cWaterLine + WorldDy;
       
   968 
       
   969     // for GL_TRIANGLE_STRIP
       
   970 
       
   971     VertexBuffer[0].X:= LeftX + WorldDx - SpritesData[sprite].Height - ox;
       
   972     VertexBuffer[0].Y:= ViewTopY;
       
   973     VertexBuffer[1].X:= LeftX + WorldDx - ox;
       
   974     VertexBuffer[1].Y:= ViewTopY;
       
   975     VertexBuffer[2].X:= VertexBuffer[0].X;
       
   976     VertexBuffer[2].Y:= topy + SpritesData[sprite].Height + dy;
       
   977     VertexBuffer[3].X:= VertexBuffer[1].X;
       
   978     VertexBuffer[3].Y:= topy + dy;
       
   979     VertexBuffer[4].X:= RightX + WorldDx + SpritesData[sprite].Height + ox;
       
   980     VertexBuffer[4].Y:= topy + SpritesData[sprite].Height + dy;
       
   981     VertexBuffer[5].X:= RightX + WorldDx + ox;
       
   982     VertexBuffer[5].Y:= topy + dy;
       
   983     VertexBuffer[6].X:= VertexBuffer[4].X;
       
   984     VertexBuffer[6].Y:= ViewTopY;
       
   985     VertexBuffer[7].X:= VertexBuffer[5].X;
       
   986     VertexBuffer[7].Y:= ViewTopY;
       
   987 
       
   988     waves:= 2 * lw / cWaveWidth;
       
   989     shift:= - lw / cWaveWidth;
       
   990     TextureBuffer[3].X:= shift + ((LongInt(RealTicks shr 6) * Dir + ox) mod cWaveWidth) / (cWaveWidth - 1);
       
   991     TextureBuffer[3].Y:= 0;
       
   992     TextureBuffer[5].X:= TextureBuffer[3].X + waves;
       
   993     TextureBuffer[5].Y:= 0;
       
   994     TextureBuffer[4].X:= TextureBuffer[5].X;
       
   995     TextureBuffer[4].Y:= SpritesData[sprite].Texture^.ry;
       
   996     TextureBuffer[2].X:= TextureBuffer[3].X;
       
   997     TextureBuffer[2].Y:= SpritesData[sprite].Texture^.ry;
       
   998 
       
   999     waves:= (topy + dy - ViewTopY) / cWaveWidth;
       
  1000 
       
  1001     // left side
       
  1002     TextureBuffer[1].X:= TextureBuffer[3].X - waves;
       
  1003     TextureBuffer[1].Y:= 0;
       
  1004     TextureBuffer[0].X:= TextureBuffer[1].X;
       
  1005     TextureBuffer[0].Y:= SpritesData[sprite].Texture^.ry;
       
  1006 
       
  1007     // right side
       
  1008     TextureBuffer[7].X:= TextureBuffer[5].X + waves;
       
  1009     TextureBuffer[7].Y:= 0;
       
  1010     TextureBuffer[6].X:= TextureBuffer[7].X;
       
  1011     TextureBuffer[6].Y:= SpritesData[sprite].Texture^.ry;
       
  1012 
       
  1013 
       
  1014     SetVertexPointer(@VertexBuffer[0], 8);
       
  1015     SetTexCoordPointer(@TextureBuffer[0], 8);
       
  1016 
       
  1017     {$IFDEF GL2}
       
  1018     UpdateModelviewProjection;
       
  1019     {$ENDIF}
       
  1020 
       
  1021     glDrawArrays(GL_TRIANGLE_STRIP, 0, 8);
       
  1022     end;
   905 
  1023 
   906 untint;
  1024 untint;
   907 
  1025 
   908 {for i:= -1 to cWaterSprCount do
  1026 {for i:= -1 to cWaterSprCount do
   909     DrawSprite(sprWater,
  1027     DrawSprite(sprWater,
  1128 procedure RenderWorldEdge(Lag: Longword);
  1246 procedure RenderWorldEdge(Lag: Longword);
  1129 var
  1247 var
  1130     VertexBuffer: array [0..3] of TVertex2f;
  1248     VertexBuffer: array [0..3] of TVertex2f;
  1131     c1, c2: LongWord; // couple of colours for edges
  1249     c1, c2: LongWord; // couple of colours for edges
  1132 begin
  1250 begin
  1133 if WorldEdge <> weNone then
  1251 if (WorldEdge <> weNone) and (WorldEdge <> weSea) then
  1134     begin
  1252     begin
  1135 (* I think for a bounded world, will fill the left and right areas with black or something. Also will probably want various border effects/animations based on border type.  Prob also, say, trigger a border animation timer on an impact. *)
  1253 (* I think for a bounded world, will fill the left and right areas with black or something. Also will probably want various border effects/animations based on border type.  Prob also, say, trigger a border animation timer on an impact. *)
  1136 
  1254 
  1137     glDisable(GL_TEXTURE_2D);
  1255     glDisable(GL_TEXTURE_2D);
  1138     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  1256     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  1362     tdx, tdy: Double;
  1480     tdx, tdy: Double;
  1363     s: shortstring;
  1481     s: shortstring;
  1364     offsetX, offsetY, screenBottom: LongInt;
  1482     offsetX, offsetY, screenBottom: LongInt;
  1365     VertexBuffer: array [0..3] of TVertex2f;
  1483     VertexBuffer: array [0..3] of TVertex2f;
  1366 begin
  1484 begin
       
  1485 ScreenBottom:= (WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine);
       
  1486 
       
  1487 // note: offsetY is negative!
       
  1488 offsetY:= 5 * max(-145,min(0, CWaterLine + WorldDy - ViewBottomY)); //10 * Min(0, -145 - ScreenBottom);
       
  1489 
  1367 if (cReducedQuality and rqNoBackground) = 0 then
  1490 if (cReducedQuality and rqNoBackground) = 0 then
  1368     begin
  1491     begin
  1369         // Offsets relative to camera - spare them to wimpier cpus, no bg or flakes for them anyway
  1492         // Offsets relative to camera - spare them to wimpier cpus, no bg or flakes for them anyway
  1370         ScreenBottom:= (WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine);
       
  1371         offsetY:= 10 * Min(0, -145 - ScreenBottom);
       
  1372         SkyOffset:= offsetY div 35 + cWaveHeight;
  1493         SkyOffset:= offsetY div 35 + cWaveHeight;
  1373         HorizontOffset:= SkyOffset;
  1494         HorizontOffset:= SkyOffset;
  1374         if ScreenBottom > SkyOffset then
  1495         if ScreenBottom > SkyOffset then
  1375             HorizontOffset:= HorizontOffset + ((ScreenBottom-SkyOffset) div 20);
  1496             HorizontOffset:= HorizontOffset + ((ScreenBottom-SkyOffset) div 20);
  1376 
  1497 
  1390 DrawVisualGears(4);
  1511 DrawVisualGears(4);
  1391 
  1512 
  1392 if (cReducedQuality and rq2DWater) = 0 then
  1513 if (cReducedQuality and rq2DWater) = 0 then
  1393     begin
  1514     begin
  1394         // Waves
  1515         // Waves
  1395         DrawWater(255, SkyOffset);
  1516         DrawWater(255, SkyOffset, 0);
  1396         ChangeDepth(RM, -cStereo_Water_distant);
  1517         ChangeDepth(RM, -cStereo_Water_distant);
  1397         DrawWaves( 1,  0 - WorldDx div 32, - cWaveHeight + offsetY div 35, 64);
  1518         DrawWaves( 1,  0 - WorldDx div 32, offsetY div 35, -49, 64);
  1398         ChangeDepth(RM, -cStereo_Water_distant);
  1519         ChangeDepth(RM, -cStereo_Water_distant);
  1399         DrawWaves( -1,  25 + WorldDx div 25, - cWaveHeight + offsetY div 38, 48);
  1520         DrawWaves( -1,  25 + WorldDx div 25, offsetY div 38, -37, 48);
  1400         ChangeDepth(RM, -cStereo_Water_distant);
  1521         ChangeDepth(RM, -cStereo_Water_distant);
  1401         DrawWaves( 1,  75 - WorldDx div 19, - cWaveHeight + offsetY div 45, 32);
  1522         DrawWaves( 1,  75 - WorldDx div 19, offsetY div 45, -23, 32);
  1402         ChangeDepth(RM, -cStereo_Water_distant);
  1523         ChangeDepth(RM, -cStereo_Water_distant);
  1403         DrawWaves(-1, 100 + WorldDx div 14, - cWaveHeight + offsetY div 70, 24);
  1524         DrawWaves(-1, 100 + WorldDx div 14, offsetY div 70, -7, 24);
  1404     end
  1525     end
  1405 else
  1526 else
  1406         DrawWaves(-1, 100, - (cWaveHeight + (cWaveHeight shr 1)), 0);
  1527     DrawWaves(-1, 100, - cWaveHeight div 2, - cWaveHeight div 2, 0);
  1407 
  1528 
  1408     changeDepth(RM, cStereo_Land);
  1529     changeDepth(RM, cStereo_Land);
  1409     DrawVisualGears(5);
  1530     DrawVisualGears(5);
  1410     DrawLand(WorldDx, WorldDy);
  1531     DrawLand(WorldDx, WorldDy);
  1411     if WorldEdge = weWrap then
  1532     if WorldEdge = weWrap then
  1412         begin
  1533         begin
  1413         DrawLand(WorldDx - playWidth, WorldDy);
  1534         DrawLand(WorldDx - playWidth, WorldDy);
  1414         DrawLand(WorldDx + playWidth, WorldDy);
  1535         DrawLand(WorldDx + playWidth, WorldDy);
  1415         end;
  1536         end;
  1416 
  1537 
  1417     DrawWater(255, 0);
  1538     DrawWater(255, 0, 0);
  1418 
  1539 
  1419 (*
  1540 (*
  1420 // Attack bar
  1541 // Attack bar
  1421     if CurrentTeam <> nil then
  1542     if CurrentTeam <> nil then
  1422         case AttackBar of
  1543         case AttackBar of
  1461 DrawGears;
  1582 DrawGears;
  1462 DrawVisualGears(6);
  1583 DrawVisualGears(6);
  1463 
  1584 
  1464 
  1585 
  1465 if SuddenDeathDmg then
  1586 if SuddenDeathDmg then
  1466     DrawWater(SDWaterOpacity, 0)
  1587     DrawWater(SDWaterOpacity, 0, 0)
  1467 else
  1588 else
  1468     DrawWater(WaterOpacity, 0);
  1589     DrawWater(WaterOpacity, 0, 0);
  1469 
  1590 
  1470     // Waves
  1591     // Waves
  1471 ChangeDepth(RM, cStereo_Water_near);
  1592 ChangeDepth(RM, cStereo_Water_near);
  1472 DrawWaves( 1, 25 - WorldDx div 9, - cWaveHeight, 12);
  1593 DrawWaves( 1, 25 - WorldDx div 9, 0, 0, 12);
  1473 
  1594 
  1474 if (cReducedQuality and rq2DWater) = 0 then
  1595 if (cReducedQuality and rq2DWater) = 0 then
  1475     begin
  1596     begin
  1476     //DrawWater(WaterOpacity, - offsetY div 40);
  1597     //DrawWater(WaterOpacity, - offsetY div 40);
  1477     ChangeDepth(RM, cStereo_Water_near);
  1598     ChangeDepth(RM, cStereo_Water_near);
  1478     DrawWaves(-1, 50 + WorldDx div 6, - cWaveHeight - offsetY div 40, 8);
  1599     DrawWaves(-1, 50 + WorldDx div 6, - offsetY div 40, 23, 8);
  1479     if SuddenDeathDmg then
  1600     if SuddenDeathDmg then
  1480         DrawWater(SDWaterOpacity, - offsetY div 20)
  1601         DrawWater(SDWaterOpacity, - offsetY div 20, 23)
  1481     else
  1602     else
  1482         DrawWater(WaterOpacity, - offsetY div 20);
  1603         DrawWater(WaterOpacity, - offsetY div 20, 23);
  1483     ChangeDepth(RM, cStereo_Water_near);
  1604     ChangeDepth(RM, cStereo_Water_near);
  1484     DrawWaves( 1, 75 - WorldDx div 4, - cWaveHeight - offsetY div 20, 2);
  1605     DrawWaves( 1, 75 - WorldDx div 4, - offsetY div 20, 37, 2);
  1485         if SuddenDeathDmg then
  1606         if SuddenDeathDmg then
  1486             DrawWater(SDWaterOpacity, - offsetY div 10)
  1607             DrawWater(SDWaterOpacity, - offsetY div 10, 47)
  1487         else
  1608         else
  1488             DrawWater(WaterOpacity, - offsetY div 10);
  1609             DrawWater(WaterOpacity, - offsetY div 10, 47);
  1489         ChangeDepth(RM, cStereo_Water_near);
  1610         ChangeDepth(RM, cStereo_Water_near);
  1490         DrawWaves( -1, 25 + WorldDx div 3, - cWaveHeight - offsetY div 10, 0);
  1611         DrawWaves( -1, 25 + WorldDx div 3, - offsetY div 10, 59, 0);
  1491         end
  1612         end
  1492     else
  1613     else
  1493         DrawWaves(-1, 50, - (cWaveHeight shr 1), 0);
  1614         DrawWaves(-1, 50, cWaveHeight div 2, cWaveHeight div 2, 0);
  1494 
  1615 
  1495 // everything after this ChangeDepth will be drawn outside the screen
  1616 // everything after this ChangeDepth will be drawn outside the screen
  1496 // note: negative parallax gears should last very little for a smooth stereo effect
  1617 // note: negative parallax gears should last very little for a smooth stereo effect
  1497     ChangeDepth(RM, cStereo_Outside);
  1618     ChangeDepth(RM, cStereo_Outside);
  1498     if WorldEdge = weWrap then
  1619     if WorldEdge = weWrap then