diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 3dc360c810087c893adfb3956bc69372b43ddd74..8453f05fd1d87ca28799b7f40c2f4e4f1dfef560 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
GAME_OPTION_BOTVSPLAYER = 32;
GAME_OPTION_BOTVSMONSTER = 64;
GAME_OPTION_DMKEYS = 128;
- GAME_OPTION_RESPAWNITEMS = 256;
STATE_NONE = 0;
STATE_MENU = 1;
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;
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';
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;
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);
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
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
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
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');