DEADSOFTWARE

add p?_model commands; clean up p?_color and p?_name
[d2df-sdl.git] / src / game / g_game.pas
index 87e4f907deffe20e42522d03beaa16593ae63fd1..8453f05fd1d87ca28799b7f40c2f4e4f1dfef560 100644 (file)
@@ -180,7 +180,6 @@ const
   GAME_OPTION_BOTVSPLAYER  = 32;
   GAME_OPTION_BOTVSMONSTER = 64;
   GAME_OPTION_DMKEYS       = 128;
-  GAME_OPTION_RESPAWNITEMS = 256;
 
   STATE_NONE        = 0;
   STATE_MENU        = 1;
@@ -291,7 +290,8 @@ var
   gMapToDelete: String;
   gTempDelete: Boolean = False;
   gLastMap: Boolean = False;
-  gWinSizeX, gWinSizeY: Integer;
+  gScreenWidth: Word;
+  gScreenHeight: Word;
   gResolutionChange: Boolean = False;
   gRC_Width, gRC_Height: Integer;
   gRC_FullScreen, gRC_Maximized: Boolean;
@@ -1065,7 +1065,7 @@ begin
 
           SortGameStat(CustomStat.PlayerStat);
 
-          if (gSaveStats or gScreenshotStats) and (Length(gPlayers) > 1) then
+          if (gSaveStats or gScreenshotStats) and (Length(CustomStat.PlayerStat) > 1) then
           begin
             t := Now;
             if g_Game_IsNet then StatFilename := NetServerName else StatFilename := 'local';
@@ -2876,7 +2876,7 @@ begin
   end;
 
   // HACK: take stats screenshot immediately after the first frame of the stats showing
-  if gScreenshotStats and not StatShotDone then
+  if gScreenshotStats and (not StatShotDone) and (Length(CustomStat.PlayerStat) > 1) then
   begin
     g_TakeScreenShot('stats/' + StatFilename);
     StatShotDone := True;
@@ -3418,7 +3418,7 @@ begin
     end
     else
     begin
-      glScissor(0, 0, gWinSizeX, gWinSizeY);
+      glScissor(0, 0, gScreenWidth, gScreenHeight);
     end;
     // no need to clear stencil buffer, light blitting will do it for us... but only for normal scale
     if (g_dbg_scale <> 1.0) then glClear(GL_STENCIL_BUFFER_BIT);
@@ -3702,11 +3702,11 @@ begin
     if (sY+sHeight > gMapInfo.Height) then sY := gMapInfo.Height-sHeight;
     if (sX < 0) then sX := 0;
     if (sY < 0) then sY := 0;
-
-    if (gBackSize.X <= gPlayerScreenSize.X) or (gMapInfo.Width <= sWidth) then c := 0 else c := trunc((gBackSize.X-gPlayerScreenSize.X)*sX/(gMapInfo.Width-sWidth));
-    if (gBackSize.Y <= gPlayerScreenSize.Y) or (gMapInfo.Height <= sHeight) then d := 0 else d := trunc((gBackSize.Y-gPlayerScreenSize.Y)*sY/(gMapInfo.Height-sHeight));
   end;
 
+  if (gBackSize.X <= gPlayerScreenSize.X) or (gMapInfo.Width <= sWidth) then c := 0 else c := trunc((gBackSize.X-gPlayerScreenSize.X)*sX/(gMapInfo.Width-sWidth));
+  if (gBackSize.Y <= gPlayerScreenSize.Y) or (gMapInfo.Height <= sHeight) then d := 0 else d := trunc((gBackSize.Y-gPlayerScreenSize.Y)*sY/(gMapInfo.Height-sHeight));
+
   //r_smallmap_h: 0: left; 1: center; 2: right
   //r_smallmap_v: 0: top; 1: center; 2: bottom
   // horiz small map?
@@ -4948,6 +4948,8 @@ begin
     ResName := Map;
   end;
 
+  gTime := 0;
+
   //writeln('********: gsw=', gGameSettings.WAD, '; rn=', ResName);
   result := false;
   if (ResName <> '') and (NewWAD <> '') then
@@ -4984,7 +4986,6 @@ begin
   gExit := 0;
   gPauseMain := false;
   gPauseHolmes := false;
-  gTime := 0;
   NetTimeToUpdate := 1;
   NetTimeToReliable := 0;
   NetTimeToMaster := NetMasterRate;
@@ -5555,27 +5556,6 @@ begin
       if g_Game_IsNet then MH_SEND_GameSettings;
     end;
   end
-  else if (cmd = 'g_respawn_items') and not g_Game_IsClient then
-  begin
-    with gGameSettings do
-    begin
-      if (Length(P) > 1) and
-         ((P[1] = '1') or (P[1] = '0')) then
-      begin
-        if (P[1][1] = '1') then
-          Options := Options or GAME_OPTION_RESPAWNITEMS
-        else
-          Options := Options and (not GAME_OPTION_RESPAWNITEMS);
-      end;
-
-      if (LongBool(Options and GAME_OPTION_RESPAWNITEMS)) then
-        g_Console_Add(_lc[I_MSG_RESPAWNITEMS_ON])
-      else
-        g_Console_Add(_lc[I_MSG_RESPAWNITEMS_OFF]);
-
-      if g_Game_IsNet then MH_SEND_GameSettings;
-    end;
-  end
   else if (cmd = 'g_warmuptime') and not g_Game_IsClient then
   begin
     if Length(P) > 1 then
@@ -5728,87 +5708,93 @@ begin
   end
   else if cmd = 'p1_name' then
   begin
-    if (Length(P) > 1) and gGameOn then
+    if (Length(P) > 1) then
     begin
+      gPlayer1Settings.Name := b_Text_Unformat(P[1]);
       if g_Game_IsClient then
+        MC_SEND_PlayerSettings
+      else if gGameOn and (gPlayer1 <> nil) then
       begin
-        gPlayer1Settings.Name := b_Text_Unformat(P[1]);
-        MC_SEND_PlayerSettings;
-      end
-      else
-        if gPlayer1 <> nil then
-        begin
-          gPlayer1.Name := b_Text_Unformat(P[1]);
-          if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
-        end
-        else
-          gPlayer1Settings.Name := b_Text_Unformat(P[1]);
+        gPlayer1.Name := b_Text_Unformat(P[1]);
+        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
+      end;
     end;
   end
   else if cmd = 'p2_name' then
   begin
-    if (Length(P) > 1) and gGameOn then
+    if (Length(P) > 1) then
     begin
+      gPlayer2Settings.Name := b_Text_Unformat(P[1]);
       if g_Game_IsClient then
+        MC_SEND_PlayerSettings
+      else if gGameOn and (gPlayer2 <> nil) then
       begin
-        gPlayer2Settings.Name := b_Text_Unformat(P[1]);
-        MC_SEND_PlayerSettings;
-      end
-      else
-        if gPlayer2 <> nil then
-        begin
-          gPlayer2.Name := b_Text_Unformat(P[1]);
-          if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
-        end
-        else
-          gPlayer2Settings.Name := b_Text_Unformat(P[1]);
+        gPlayer2.Name := b_Text_Unformat(P[1]);
+        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
+      end;
     end;
   end
   else if cmd = 'p1_color' then
   begin
     if Length(P) > 3 then
+    begin
+      gPlayer1Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
+                                     EnsureRange(StrToIntDef(P[2], 0), 0, 255),
+                                     EnsureRange(StrToIntDef(P[3], 0), 0, 255));
       if g_Game_IsClient then
+        MC_SEND_PlayerSettings
+      else if gGameOn and (gPlayer1 <> nil) then
       begin
-        gPlayer1Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                       EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                       EnsureRange(StrToIntDef(P[3], 0), 0, 255));
-        MC_SEND_PlayerSettings;
-      end
-      else
-        if gPlayer1 <> nil then
-        begin
-          gPlayer1.Model.SetColor(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                  EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                  EnsureRange(StrToIntDef(P[3], 0), 0, 255));
-          if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
-        end
-        else
-          gPlayer1Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                         EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                         EnsureRange(StrToIntDef(P[3], 0), 0, 255));
+        gPlayer1.SetColor(gPlayer1Settings.Color);
+        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
+      end;
+    end;
   end
-  else if (cmd = 'p2_color') and not g_Game_IsNet then
+  else if cmd = 'p2_color' then
   begin
     if Length(P) > 3 then
+    begin
+      gPlayer2Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
+                                     EnsureRange(StrToIntDef(P[2], 0), 0, 255),
+                                     EnsureRange(StrToIntDef(P[3], 0), 0, 255));
       if g_Game_IsClient then
+        MC_SEND_PlayerSettings
+      else if gGameOn and (gPlayer2 <> nil) then
       begin
-        gPlayer2Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                       EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                       EnsureRange(StrToIntDef(P[3], 0), 0, 255));
-        MC_SEND_PlayerSettings;
-      end
-      else
-        if gPlayer2 <> nil then
-        begin
-          gPlayer2.Model.SetColor(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                  EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                  EnsureRange(StrToIntDef(P[3], 0), 0, 255));
-          if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
-        end
-        else
-          gPlayer2Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                         EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                         EnsureRange(StrToIntDef(P[3], 0), 0, 255));
+        gPlayer2.SetColor(gPlayer2Settings.Color);
+        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
+      end;
+    end;
+  end
+  else if cmd = 'p1_model' then
+  begin
+    if (Length(P) > 1) then
+    begin
+      gPlayer1Settings.Model := P[1];
+      if g_Game_IsClient then
+        MC_SEND_PlayerSettings
+      else if gGameOn and (gPlayer1 <> nil) then
+      begin
+        gPlayer1.FActualModelName := gPlayer1Settings.Model;
+        gPlayer1.SetModel(gPlayer1Settings.Model);
+        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
+      end;
+    end;
+  end
+  else if cmd = 'p2_model' then
+  begin
+    if (Length(P) > 1) then
+    begin
+      gPlayer2Settings.Model := P[1];
+      if g_Game_IsClient then
+        MC_SEND_PlayerSettings
+      else if gGameOn and (gPlayer2 <> nil) then
+      begin
+        gPlayer2.FActualModelName := gPlayer2Settings.Model;
+        gPlayer2.SetModel(gPlayer2Settings.Model);
+        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
+      end;
+    end;
   end
   else if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
   begin
@@ -5972,7 +5958,7 @@ begin
     if cmd = 'd_window' then
     begin
       g_Console_Add(Format('gScreenWidth = %d, gScreenHeight = %d', [gScreenWidth, gScreenHeight]));
-      g_Console_Add(Format('gWinSizeX = %d, gWinSizeY = %d', [gWinSizeX, gWinSizeY]));
+      g_Console_Add(Format('gScreenWidth = %d, gScreenHeight = %d', [gScreenWidth, gScreenHeight]));
     end
     else if cmd = 'd_sounds' then
     begin
@@ -8181,6 +8167,7 @@ begin
   conRegVar('dbg_ignore_level_bounds', @g_dbg_ignore_bounds, 'ignore level bounds', '',  false);
 
   conRegVar('r_scale', @g_dbg_scale, 0.01, 100.0, 'render scale', '',  false);
+  conRegVar('r_resolution_scale', @r_pixel_scale, 0.01, 100.0, 'upscale factor', '', false);
 
   conRegVar('light_enabled', @gwin_k8_enable_light_experiments, 'enable/disable dynamic lighting', 'lighting');
   conRegVar('light_player_halo', @g_playerLight, 'enable/disable player halo', 'player light halo');