diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 4282e66642f47be224e827ff0cefef9c2f894a3e..df45196b1e0b168175efb8de36681b85041e1888 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
procedure g_Game_ClearLoading();
procedure g_Game_SetDebugMode();
procedure DrawLoadingStat();
+procedure DrawMenuBackground(tex: AnsiString);
{ procedure SetWinPause(Enable: Boolean); }
ANNOUNCE_ALL = 3;
CONFIG_FILENAME = 'Doom2DF.cfg';
- LOG_FILENAME = 'Doom2DF.log';
TEST_MAP_NAME = '$$$_TEST_$$$';
STD_PLAYER_MODEL = 'Doomer';
+{$IFDEF HEADLESS}
+ DEFAULT_PLAYERS = 0;
+{$ELSE}
+ DEFAULT_PLAYERS = 1;
+{$ENDIF}
+
var
gStdFont: DWORD;
gGameSettings: TGameSettings;
gTotalMonsters: Integer = 0;
gPauseMain: Boolean = false;
gPauseHolmes: Boolean = false;
- gShowTime: Boolean = True;
+ gShowTime: Boolean = False;
gShowFPS: Boolean = False;
gShowGoals: Boolean = True;
gShowStat: Boolean = True;
begin
s := g_ExtractWadName(MegaWAD.endpic);
if s = '' then s := MapsDir+WAD else s := GameDir+'/wads/';
+ TEXTUREFILTER := GL_LINEAR;
g_Texture_CreateWADEx('TEXTURE_endpic', s+MegaWAD.endpic);
+ TEXTUREFILTER := GL_NEAREST;
end;
MegaWAD.endmus := cfg.ReadStr('megawad', 'endmus', 'Standart.wad:D2DMUS\ÊÎÍÅÖ');
if MegaWAD.endmus <> '' then
sfsGCDisable(); // temporary disable removing of temporary volumes
try
+ TEXTUREFILTER := GL_LINEAR;
g_Texture_CreateWADEx('MENU_BACKGROUND', GameWAD+':TEXTURES\TITLE');
g_Texture_CreateWADEx('INTER', GameWAD+':TEXTURES\INTER');
g_Texture_CreateWADEx('ENDGAME_EN', GameWAD+':TEXTURES\ENDGAME_EN');
g_Texture_CreateWADEx('ENDGAME_RU', GameWAD+':TEXTURES\ENDGAME_RU');
+ TEXTUREFILTER := GL_NEAREST;
LoadStdFont('STDTXT', 'STDFONT', gStdFont);
LoadFont('MENUTXT', 'MENUFONT', gMenuFont);
g_Sound_CreateWADEx('MUSIC_ROUNDMUS', GameWAD+':MUSIC\ROUNDMUS', True, True);
g_Sound_CreateWADEx('MUSIC_STDENDMUS', GameWAD+':MUSIC\ENDMUS', True);
+{$IFNDEF HEADLESS}
g_Game_SetLoadingText(_lc[I_LOAD_MENUS], 0, False);
g_Menu_Init();
+{$ENDIF}
gMusic := TMusic.Create();
gMusic.SetByName('MUSIC_MENU');
//e_WriteLog('Read language file', MSG_NOTIFY);
//g_Language_Load(DataDir + gLanguage + '.txt');
g_Language_Set(gLanguage);
+{$IFNDEF HEADLESS}
g_Menu_Reset();
+{$ENDIF}
gLanguageChange := False;
end;
end;
end;
end;
+procedure DrawMenuBackground(tex: AnsiString);
+var
+ w, h: Word;
+ ID: DWord;
+
+begin
+ if g_Texture_Get(tex, ID) then
+ begin
+ e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+ e_GetTextureSize(ID, @w, @h);
+ if w = h then
+ w := round(w * 1.333 * (gScreenHeight / h))
+ else
+ w := trunc(w * (gScreenHeight / h));
+ e_DrawSize(ID, (gScreenWidth - w) div 2, 0, 0, False, False, w, gScreenHeight);
+ end
+ else e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+end;
+
procedure DrawMinimap(p: TPlayer; RenderRect: e_graphics.TRect);
var
a, aX, aY, aX2, aY2, Scale, ScaleSz: Integer;
if plView1 <> nil then
begin
gHearPoint1.Active := True;
- gHearPoint1.Coords.X := plView1.GameX;
- gHearPoint1.Coords.Y := plView1.GameY;
+ gHearPoint1.Coords.X := plView1.GameX + PLAYER_RECT.Width;
+ gHearPoint1.Coords.Y := plView1.GameY + PLAYER_RECT.Height DIV 2;
end else
gHearPoint1.Active := False;
if plView2 <> nil then
begin
gHearPoint2.Active := True;
- gHearPoint2.Coords.X := plView2.GameX;
- gHearPoint2.Coords.Y := plView2.GameY;
+ gHearPoint2.Coords.X := plView2.GameX + PLAYER_RECT.Width;
+ gHearPoint2.Coords.Y := plView2.GameY + PLAYER_RECT.Height DIV 2;
end else
gHearPoint2.Active := False;
begin
if (gState = STATE_MENU) then
begin
- if (g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '') then
- begin
- if g_Texture_Get('MENU_BACKGROUND', ID) then e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
- else e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
- end;
+ if (g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '') then DrawMenuBackground('MENU_BACKGROUND');
// F3 at menu will show game loading dialog
if e_KeyPressed(IK_F3) then g_Menu_Show_LoadMenu(true);
if (g_ActiveWindow <> nil) then
else
back := 'INTER';
- if g_Texture_Get(back, ID) then
- e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
- else
- e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+ DrawMenuBackground(back);
DrawCustomStat();
begin
back := 'INTER';
- if g_Texture_Get(back, ID) then
- e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
- else
- e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+ DrawMenuBackground(back);
DrawSingleStat();
if gState = STATE_ENDPIC then
begin
ID := DWORD(-1);
- if not g_Texture_Get('TEXTURE_endpic', ID) then
- g_Texture_Get(_lc[I_TEXTURE_ENDPIC], ID);
-
- if ID <> DWORD(-1) then
- e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
- else
- e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+ if g_Texture_Get('TEXTURE_endpic', ID) then DrawMenuBackground('TEXTURE_endpic')
+ else DrawMenuBackground(_lc[I_TEXTURE_ENDPIC]);
if g_ActiveWindow <> nil then
begin
if gState = STATE_SLIST then
begin
- if g_Texture_Get('MENU_BACKGROUND', ID) then
- begin
- e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight);
- //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
- e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
- end;
+// if g_Texture_Get('MENU_BACKGROUND', ID) then
+// begin
+// e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight);
+// //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+// end;
+ DrawMenuBackground('MENU_BACKGROUND');
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
g_Serverlist_Draw(slCurrent, slTable);
end;
end;
g_ActiveWindow.Draw();
end;
+{$IFNDEF HEADLESS}
g_Console_Draw();
+{$ENDIF}
if g_debug_Sounds and gGameOn then
begin
e_TextureFontPrint(0, 16, Format('UPS: %d', [UPS]), gStdFont);
end;
- if gGameOn and gShowTime and (gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT]) then
+ if gGameOn and gShowTime then
drawTime(gScreenWidth-72, gScreenHeight-16);
if gGameOn then drawProfilers();
g_PlayerModel_FreeData();
g_Texture_DeleteAll();
g_Frames_DeleteAll();
+{$IFNDEF HEADLESS}
//g_Menu_Free(); //k8: this segfaults after resolution change; who cares?
+{$ENDIF}
if NetInitDone then g_Net_Free;
if not InMsg.Init(Ptr, NetEvent.packet^.dataLength, True) then
continue;
+ InMsg.ReadLongWord(); // skip size
MID := InMsg.ReadByte();
if (MID = NET_MSG_INFO) and (State = 0) then
end
else if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
begin
- if cmd = 'r_showtime' then
- begin
- if (Length(P) > 1) and
- ((P[1] = '1') or (P[1] = '0')) then
- gShowTime := (P[1][1] = '1');
-
- if gShowTime then
- g_Console_Add(_lc[I_MSG_TIME_ON])
- else
- g_Console_Add(_lc[I_MSG_TIME_OFF]);
- end
- else if cmd = 'r_showscore' then
+ if cmd = 'r_showscore' then
begin
if (Length(P) > 1) and
((P[1] = '1') or (P[1] = '0')) then
else if (cmd = 'addbot') or
(cmd = 'bot_add') then
begin
- if Length(P) > 1 then
+ if Length(P) > 2 then
+ g_Bot_Add(TEAM_NONE, StrToIntDef(P[1], 2), StrToIntDef(P[2], 100))
+ else if Length(P) > 1 then
g_Bot_Add(TEAM_NONE, StrToIntDef(P[1], 2))
else
g_Bot_Add(TEAM_NONE, 2);
else if cmd = 'bot_addlist' then
begin
if Length(P) > 1 then
+ begin
if Length(P) = 2 then
g_Bot_AddList(TEAM_NONE, P[1], StrToIntDef(P[1], -1))
+ else if Length(P) = 3 then
+ g_Bot_AddList(TEAM_NONE, P[1], StrToIntDef(P[1], -1), StrToIntDef(P[2], 100))
else
g_Bot_AddList(IfThen(P[2] = 'red', TEAM_RED, TEAM_BLUE), P[1], StrToIntDef(P[1], -1));
+ end;
end
else if cmd = 'bot_removeall' then
g_Bot_RemoveAll()
e_StopChannels();
end;
-procedure g_Game_UpdateTriggerSounds();
-var
- i: Integer;
+procedure g_Game_UpdateTriggerSounds;
+ var i: Integer;
begin
if gTriggers <> nil then
for i := 0 to High(gTriggers) do
with gTriggers[i] do
- if (TriggerType = TRIGGER_SOUND) and
- (Sound <> nil) and
- (tgcLocal) and
- Sound.IsPlaying() then
- begin
- if ((gPlayer1 <> nil) and g_CollidePoint(gPlayer1.GameX, gPlayer1.GameY, X, Y, Width, Height)) or
- ((gPlayer2 <> nil) and g_CollidePoint(gPlayer2.GameX, gPlayer2.GameY, X, Y, Width, Height)) then
- begin
- Sound.SetPan(0.5 - tgcPan/255.0);
- Sound.SetVolume(tgcVolume/255.0);
- end
- else
- Sound.SetCoords(X+(Width div 2), Y+(Height div 2), tgcVolume/255.0);
- end;
+ if (TriggerType = TRIGGER_SOUND) and (Sound <> nil) and tgcLocal and Sound.IsPlaying() then
+ Sound.SetCoordsRect(X, Y, Width, Height, tgcVolume / 255.0)
end;
function g_Game_IsWatchedPlayer(UID: Word): Boolean;
// Number of players:
s := Find_Param_Value(pars, '-pl');
if (s = '') then
- n := 1
+ n := DEFAULT_PLAYERS
else
- n := StrToIntDef(s, 1);
+ n := StrToIntDef(s, DEFAULT_PLAYERS);
// Start:
s := Find_Param_Value(pars, '-port');
conRegVar('r_smallmap_align_v', @r_smallmap_v, 'valign: 0: top; 1: center; 2: bottom', 'vertial aligning of small maps');
conRegVar('r_showfps', @gShowFPS, 'draw fps counter', 'draw fps counter');
+ conRegVar('r_showtime', @gShowTime, 'show game time', 'show game time');
end.