DEADSOFTWARE

added optional framebuffer and resolution scaling
[d2df-sdl.git] / src / game / g_holmes.pas
index d16aa603f57a480a8319ae940fde412e0763bb10..c173bd00312e9686a7e4cb9df0165251e0de4ce4 100644 (file)
@@ -2,8 +2,7 @@
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -48,8 +47,9 @@ var
 implementation
 
 uses
-  {rttiobj,} typinfo, e_texture,
-  SysUtils, Classes, GL, SDL2,
+  {$INCLUDE ../nogl/noGLuses.inc}
+  {rttiobj,} typinfo, e_texture, e_res,
+  SysUtils, Classes, SDL2,
   MAPDEF, g_main, g_options,
   utils, hashtable, xparser;
 
@@ -559,7 +559,7 @@ var
 
   procedure clearEdgeBmp ();
   begin
-    SetLength(edgeBmp, (gWinSizeX+4)*(gWinSizeY+4));
+    SetLength(edgeBmp, (gScreenWidth+4)*(gScreenHeight+4));
     FillChar(edgeBmp[0], Length(edgeBmp)*sizeof(edgeBmp[0]), 0);
   end;
 
@@ -574,19 +574,19 @@ var
     begin
       sx := pan.X-(vpx-1);
       len := pan.Width;
-      if (len > gWinSizeX+4) then len := gWinSizeX+4;
+      if (len > gScreenWidth+4) then len := gScreenWidth+4;
       if (sx < 0) then begin len += sx; sx := 0; end;
-      if (sx+len > gWinSizeX+4) then len := gWinSizeX+4-sx;
+      if (sx+len > gScreenWidth+4) then len := gScreenWidth+4-sx;
       if (len < 1) then exit;
       assert(sx >= 0);
-      assert(sx+len <= gWinSizeX+4);
+      assert(sx+len <= gScreenWidth+4);
       y0 := pan.Y-(vpy-1);
       y1 := y0+pan.Height;
       if (y0 < 0) then y0 := 0;
-      if (y1 > gWinSizeY+4) then y1 := gWinSizeY+4;
+      if (y1 > gScreenHeight+4) then y1 := gScreenHeight+4;
       while (y0 < y1) do
       begin
-        FillChar(edgeBmp[y0*(gWinSizeX+4)+sx], len*sizeof(edgeBmp[0]), 1);
+        FillChar(edgeBmp[y0*(gScreenWidth+4)+sx], len*sizeof(edgeBmp[0]), 1);
         Inc(y0);
       end;
     end
@@ -651,15 +651,15 @@ var
     glColor4f(r/255.0, g/255.0, b/255.0, 1.0);
     for y := 1 to vph do
     begin
-      a := @edgeBmp[y*(gWinSizeX+4)+1];
+      a := @edgeBmp[y*(gScreenWidth+4)+1];
       startLine(y);
       for x := 1 to vpw do
       begin
         if (a[0] <> 0) then
         begin
-          if (a[-1] = 0) or (a[1] = 0) or (a[-(gWinSizeX+4)] = 0) or (a[gWinSizeX+4] = 0) or
-             (a[-(gWinSizeX+4)-1] = 0) or (a[-(gWinSizeX+4)+1] = 0) or
-             (a[gWinSizeX+4-1] = 0) or (a[gWinSizeX+4+1] = 0) then
+          if (a[-1] = 0) or (a[1] = 0) or (a[-(gScreenWidth+4)] = 0) or (a[gScreenWidth+4] = 0) or
+             (a[-(gScreenWidth+4)-1] = 0) or (a[-(gScreenWidth+4)+1] = 0) or
+             (a[gScreenWidth+4-1] = 0) or (a[gScreenWidth+4+1] = 0) then
           begin
             putPixel(x);
           end;
@@ -684,7 +684,7 @@ var
     glColor4f(r/255.0, g/255.0, b/255.0, 1.0);
     for y := 1 to vph do
     begin
-      a := @edgeBmp[y*(gWinSizeX+4)+1];
+      a := @edgeBmp[y*(gScreenWidth+4)+1];
       startLine(y);
       for x := 1 to vpw do
       begin
@@ -1249,6 +1249,8 @@ var
   mx, my, mw, mh: Integer;
   //pan: TPanel;
   //ex, ey: Integer;
+  s: AnsiString;
+  dx, dy: Integer;
 begin
   if (gPlayer1 = nil) then exit;
 
@@ -1256,7 +1258,7 @@ begin
 
   gxSetContext(hlmContext);
   try
-    //glScissor(0, gWinSizeY-gPlayerScreenSize.Y-1, vpw, vph);
+    //glScissor(0, gScreenHeight-gPlayerScreenSize.Y-1, vpw, vph);
     //hlmContext.clip := TGxRect.Create(0, gScreenHeight-gPlayerScreenSize.Y-1, gPlayerScreenSize.X, gPlayerScreenSize.Y);
 
     {
@@ -1323,10 +1325,19 @@ begin
 
   if showMapCurPos then
   begin
+    s := Format('mappos:(%d,%d)', [pmsCurMapX, pmsCurMapY]);
     gxSetContext(hlmContext);
     hlmContext.font := 'win8';
+    hlmContext.color := TGxRGBA.Create(0, 0, 0);
+    for dy := -1 to 1 do
+    begin
+      for dx := -1 to 1 do
+      begin
+        if (dx <> 0) or (dy <> 0) then hlmContext.drawText(4+dx, gScreenHeight-10+dy, s);
+      end;
+    end;
     hlmContext.color := TGxRGBA.Create(255, 255, 0);
-    hlmContext.drawText(4, gWinSizeY-10, Format('mappos:(%d,%d)', [pmsCurMapX, pmsCurMapY]));
+    hlmContext.drawText(4, gScreenHeight-10, s);
     gxSetContext(nil);
   end;
 end;
@@ -1729,7 +1740,7 @@ begin
 
     // load bindings from file
     try
-      st := openDiskFileRO(GameDir+'holmes.rc');
+      st := e_OpenResourceRO(ConfigDirs, 'holmes.rc');
       pr := TFileTextParser.Create(st);
       conwriteln('parsing "holmes.rc"...');
       while (pr.tokType <> pr.TTEOF) do