DEADSOFTWARE

alternate sky scaling
[d2df-sdl.git] / src / game / g_game.pas
index c09158d4428909d9041a06e6ea7b2b505f0f56ad..ab82f010edd0b0294f0338d3b6199400797f0efe 100644 (file)
@@ -1440,7 +1440,7 @@ var
   w: Word;
   i, b: Integer;
 
-  function sendMonsPos (monidx: Integer; mon: TMonster): Boolean;
+  function sendMonsPos (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
     if (mon.MonsterType = MONSTER_BARREL) then
@@ -2442,7 +2442,7 @@ procedure DrawMinimap(p: TPlayer; RenderRect: e_graphics.TRect);
 var
   a, aX, aY, aX2, aY2, Scale, ScaleSz: Integer;
 
-  function monDraw (monidx: Integer; mon: TMonster): Boolean;
+  function monDraw (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
     with mon do
@@ -3298,8 +3298,12 @@ begin
 end;
 
 procedure g_Game_SetupScreenSize();
+const
+  RES_FACTOR = 4.0 / 3.0;
 var
-  d: Single;
+  s: Single;
+  rf: Single;
+  bw, bh: Word;
 begin
 // Ðàçìåð ýêðàíîâ èãðîêîâ:
   gPlayerScreenSize.X := gScreenWidth-196;
@@ -3311,14 +3315,24 @@ begin
 // Ðàçìåð çàäíåãî ïëàíà:
   if BackID <> DWORD(-1) then
   begin
-    d := SKY_STRETCH;
-
-    if (gScreenWidth*d > gMapInfo.Width) or
-       (gScreenHeight*d > gMapInfo.Height) then
-      d := 1.0;
-
-    gBackSize.X := Round(gScreenWidth*d);
-    gBackSize.Y := Round(gScreenHeight*d);
+    s := SKY_STRETCH;
+    if (gScreenWidth*s > gMapInfo.Width) or
+       (gScreenHeight*s > gMapInfo.Height) then
+    begin
+      gBackSize.X := gScreenWidth;
+      gBackSize.Y := gScreenHeight;
+    end
+    else
+    begin
+      e_GetTextureSize(BackID, @bw, @bh);
+      rf := Single(bw) / Single(bh);
+      if (rf > RES_FACTOR) then bw := Round(Single(bh) * RES_FACTOR)
+      else if (rf < RES_FACTOR) then bh := Round(Single(bw) / RES_FACTOR);
+      s := Max(gScreenWidth / bw, gScreenHeight / bh);
+      if (s < 1.0) then s := 1.0;
+      gBackSize.X := Round(bw*s);
+      gBackSize.Y := Round(bh*s);
+    end;
   end;
 end;
 
@@ -4171,7 +4185,7 @@ procedure g_Game_RestartRound(NoMapRestart: Boolean = False);
 var
   i, n, nb, nr: Integer;
 
-  function monRespawn (monidx: Integer; mon: TMonster): Boolean;
+  function monRespawn (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
     if not mon.FNoRespawn then mon.Respawn();
@@ -4960,7 +4974,7 @@ begin
     exit;
   end;
 
-  if cmd = 'dbg_sq_coldet' then
+  if cmd = 'cd_sq_enabled' then
   begin
     case getBool(1) of
       -1: begin end;
@@ -4971,6 +4985,7 @@ begin
     exit;
   end;
 
+  {
   if (cmd = 'sq_use_grid') or (cmd = 'sq_use_tree') then
   begin
     gdbg_map_use_tree_coldet := (cmd = 'sq_use_tree');
@@ -4984,7 +4999,9 @@ begin
     if gdbg_map_use_tree_draw then g_Console_Add('render acceleration: tree') else g_Console_Add('render acceleration: grid');
     exit;
   end;
+  }
 
+  {
   if (cmd = 't_dump_node_queries') then
   begin
     case getBool(1) of
@@ -4995,6 +5012,29 @@ begin
     if gdbg_map_dump_coldet_tree_queries then g_Console_Add('grid coldet tree queries: tan') else g_Console_Add('grid coldet tree queries: ona');
     exit;
   end;
+  }
+
+  if (cmd = 'mon_sq_enabled') then
+  begin
+    case getBool(1) of
+      -1: begin end;
+       0: gmon_debug_use_sqaccel := false;
+       1: gmon_debug_use_sqaccel := true;
+    end;
+    if gmon_debug_use_sqaccel then g_Console_Add('accelerated monster coldet: tan') else g_Console_Add('accelerated monster coldet: ona');
+    exit;
+  end;
+
+  if (cmd = 'wtrace_sq_enabled') then
+  begin
+    case getBool(1) of
+      -1: begin end;
+       0: gwep_debug_fast_trace := false;
+       1: gwep_debug_fast_trace := true;
+    end;
+    if gwep_debug_fast_trace then g_Console_Add('accelerated weapon hitscan: tan') else g_Console_Add('accelerated weapon hitscan: ona');
+    exit;
+  end;
 end;
 
 procedure DebugCommands(P: SArray);