diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index b3c00635e29cf462295f45fcda3138c89d2f9414..41099da27c9b46b9d15508da7328bf67a10d23db 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 g_Game_ClearLoading();
procedure g_Game_SetDebugMode();
procedure DrawLoadingStat();
+procedure DrawMenuBackground(tex: AnsiString; ID: DWord);
{ procedure SetWinPause(Enable: Boolean); }
{ procedure SetWinPause(Enable: Boolean); }
gTotalMonsters: Integer = 0;
gPauseMain: Boolean = false;
gPauseHolmes: Boolean = false;
gTotalMonsters: Integer = 0;
gPauseMain: Boolean = false;
gPauseHolmes: Boolean = false;
- gShowTime: Boolean = True;
+ gShowTime: Boolean = False;
gShowFPS: Boolean = False;
gShowGoals: Boolean = True;
gShowStat: Boolean = True;
gShowFPS: Boolean = False;
gShowGoals: Boolean = True;
gShowStat: Boolean = True;
gUseChatSounds: Boolean = True;
gChatSounds: Array of TChatSound;
gSelectWeapon: Array [0..1, WP_FIRST..WP_LAST] of Boolean; // [player, weapon]
gUseChatSounds: Boolean = True;
gChatSounds: Array of TChatSound;
gSelectWeapon: Array [0..1, WP_FIRST..WP_LAST] of Boolean; // [player, weapon]
+ gInterReadyCount: Integer = 0;
g_dbg_ignore_bounds: Boolean = false;
r_smallmap_h: Integer = 0; // 0: left; 1: center; 2: right
g_dbg_ignore_bounds: Boolean = false;
r_smallmap_h: Integer = 0; // 0: left; 1: center; 2: right
MessageLineLength: Integer = 80;
MapList: SSArray = nil;
MapIndex: Integer = -1;
MessageLineLength: Integer = 80;
MapList: SSArray = nil;
MapIndex: Integer = -1;
+ InterReadyTime: Integer = -1;
MegaWAD: record
info: TMegaWADInfo;
endpic: String;
MegaWAD: record
info: TMegaWADInfo;
endpic: String;
SetLength(CustomStat.PlayerStat, Length(CustomStat.PlayerStat)+1);
with CustomStat.PlayerStat[High(CustomStat.PlayerStat)] do
begin
SetLength(CustomStat.PlayerStat, Length(CustomStat.PlayerStat)+1);
with CustomStat.PlayerStat[High(CustomStat.PlayerStat)] do
begin
+ Num := a;
Name := gPlayers[a].Name;
Frags := gPlayers[a].Frags;
Deaths := gPlayers[a].Death;
Name := gPlayers[a].Name;
Frags := gPlayers[a].Frags;
Deaths := gPlayers[a].Death;
end;
g_Game_ExecuteEvent('onmapend');
end;
g_Game_ExecuteEvent('onmapend');
+ if not g_Game_IsClient then g_Player_ResetReady;
+ gInterReadyCount := 0;
// Çàòóõàþùèé ýêðàí:
EndingGameCounter := 255;
// Çàòóõàþùèé ýêðàí:
EndingGameCounter := 255;
sfsGCDisable(); // temporary disable removing of temporary volumes
try
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');
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);
LoadStdFont('STDTXT', 'STDFONT', gStdFont);
LoadFont('MENUTXT', 'MENUFONT', gMenuFont);
g_Game_SetLoadingText(_lc[I_LOAD_MUSIC], 0, False);
g_Sound_CreateWADEx('MUSIC_INTERMUS', GameWAD+':MUSIC\INTERMUS', True);
g_Sound_CreateWADEx('MUSIC_MENU', GameWAD+':MUSIC\MENU', True);
g_Game_SetLoadingText(_lc[I_LOAD_MUSIC], 0, False);
g_Sound_CreateWADEx('MUSIC_INTERMUS', GameWAD+':MUSIC\INTERMUS', True);
g_Sound_CreateWADEx('MUSIC_MENU', GameWAD+':MUSIC\MENU', True);
- g_Sound_CreateWADEx('MUSIC_ROUNDMUS', GameWAD+':MUSIC\ROUNDMUS', True);
+ g_Sound_CreateWADEx('MUSIC_ROUNDMUS', GameWAD+':MUSIC\ROUNDMUS', True, True);
g_Sound_CreateWADEx('MUSIC_STDENDMUS', GameWAD+':MUSIC\ENDMUS', True);
g_Game_SetLoadingText(_lc[I_LOAD_MENUS], 0, False);
g_Sound_CreateWADEx('MUSIC_STDENDMUS', GameWAD+':MUSIC\ENDMUS', True);
g_Game_SetLoadingText(_lc[I_LOAD_MENUS], 0, False);
if gwin_has_stencil and g_playerLight then g_AddDynLight(plr.GameX+32, plr.GameY+40, 128, 1, 1, 0, 0.6);
end;
if gwin_has_stencil and g_playerLight then g_AddDynLight(plr.GameX+32, plr.GameY+40, 128, 1, 1, 0, 0.6);
end;
+// HACK: don't have a "key was pressed" function
+procedure InterReady();
+begin
+ if InterReadyTime > gTime then Exit;
+ InterReadyTime := gTime + 3000;
+ MC_SEND_CheatRequest(NET_CHEAT_READY);
+end;
+
procedure g_Game_Update();
var
Msg: g_gui.TMessage;
procedure g_Game_Update();
var
Msg: g_gui.TMessage;
and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
and (g_ActiveWindow = nil)
)
and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
and (g_ActiveWindow = nil)
)
- or (g_Game_IsNet and (gInterTime > gInterEndTime))
+ or (g_Game_IsNet and ((gInterTime > gInterEndTime) or (gInterReadyCount >= NetClientCount)))
)
then
begin // Íàæàëè <Enter>/<Ïðîáåë> èëè ïðîøëî äîñòàòî÷íî âðåìåíè:
)
then
begin // Íàæàëè <Enter>/<Ïðîáåë> èëè ïðîøëî äîñòàòî÷íî âðåìåíè:
end;
Exit;
end;
Exit;
+ end
+ else if g_Game_IsClient and
+ (
+ (
+ e_KeyPressed(IK_RETURN) or e_KeyPressed(IK_KPRETURN) or e_KeyPressed(IK_SPACE) or
+ e_KeyPressed(VK_FIRE) or e_KeyPressed(VK_OPEN) or
+ e_KeyPressed(JOY0_ATTACK) or e_KeyPressed(JOY1_ATTACK) or
+ e_KeyPressed(JOY2_ATTACK) or e_KeyPressed(JOY3_ATTACK)
+ )
+ and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
+ and (g_ActiveWindow = nil)
+ )
+ then
+ begin
+ // ready / unready
+ InterReady();
end;
if gState = STATE_INTERTEXT then
end;
if gState = STATE_INTERTEXT then
// Çàêîí÷èëñÿ óðîâåíü â Ñâîåé èãðå:
if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
begin
// Çàêîí÷èëñÿ óðîâåíü â Ñâîåé èãðå:
if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
begin
+ InterReadyTime := -1;
if gLastMap and (gGameSettings.GameMode = GM_COOP) then
begin
g_Game_ExecuteEvent('onwadend');
if gLastMap and (gGameSettings.GameMode = GM_COOP) then
begin
g_Game_ExecuteEvent('onwadend');
gg := g;
bb := b;
end;
gg := g;
bb := b;
end;
- e_TextureFontPrintEx(x+8, _y, Name, gStdFont, rr, gg, bb, 1);
- e_TextureFontPrintEx(x+w1+8, _y, IntToStr(Frags), gStdFont, rr, gg, bb, 1);
- e_TextureFontPrintEx(x+w1+w2+8, _y, IntToStr(Deaths), gStdFont, rr, gg, bb, 1);
+ if (gPlayers[Num] <> nil) and (gPlayers[Num].FReady) then
+ e_TextureFontPrintEx(x+16, _y, Name + ' *', gStdFont, rr, gg, bb, 1)
+ else
+ e_TextureFontPrintEx(x+16, _y, Name, gStdFont, rr, gg, bb, 1);
+ e_TextureFontPrintEx(x+w1+16, _y, IntToStr(Frags), gStdFont, rr, gg, bb, 1);
+ e_TextureFontPrintEx(x+w1+w2+16, _y, IntToStr(Deaths), gStdFont, rr, gg, bb, 1);
_y := _y+24;
end;
_y := _y+24;
end;
else
r := 255;
else
r := 255;
- e_TextureFontPrintEx(x+8+16+8, _y+4, Name, gStdFont, r, r, r, 1, True);
+ if (gPlayers[Num] <> nil) and (gPlayers[Num].FReady) then
+ e_TextureFontPrintEx(x+8+16+8, _y+4, Name + ' *', gStdFont, r, r, r, 1, True)
+ else
+ e_TextureFontPrintEx(x+8+16+8, _y+4, Name, gStdFont, r, r, r, 1, True);
e_TextureFontPrintEx(x+w1+8+16+8, _y+4, IntToStr(Frags), gStdFont, r, r, r, 1, True);
e_TextureFontPrintEx(x+w1+w2+8+16+8, _y+4, IntToStr(Deaths), gStdFont, r, r, r, 1, True);
_y := _y+24;
e_TextureFontPrintEx(x+w1+8+16+8, _y+4, IntToStr(Frags), gStdFont, r, r, r, 1, True);
e_TextureFontPrintEx(x+w1+w2+8+16+8, _y+4, IntToStr(Deaths), gStdFont, r, r, r, 1, True);
_y := _y+24;
end;
end;
end;
end;
+procedure DrawMenuBackground(tex: AnsiString; ID: DWord);
+var
+ w, h: Word;
+
+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;
procedure DrawMinimap(p: TPlayer; RenderRect: e_graphics.TRect);
var
a, aX, aY, aX2, aY2, Scale, ScaleSz: Integer;
begin
if (gState = STATE_MENU) then
begin
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', ID);
// F3 at menu will show game loading dialog
if e_KeyPressed(IK_F3) then g_Menu_Show_LoadMenu(true);
if (g_ActiveWindow <> nil) then
// 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';
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, ID);
DrawCustomStat();
DrawCustomStat();
begin
back := 'INTER';
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, ID);
DrawSingleStat();
DrawSingleStat();
if gState = STATE_SLIST 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', ID);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
g_Serverlist_Draw(slCurrent, slTable);
end;
end;
g_Serverlist_Draw(slCurrent, slTable);
end;
end;
e_TextureFontPrint(0, 16, Format('UPS: %d', [UPS]), gStdFont);
end;
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();
drawTime(gScreenWidth-72, gScreenHeight-16);
if gGameOn then drawProfilers();
ProcessLoading(true);
ProcessLoading(true);
- if e_KeyPressed(IK_SPACE) or e_KeyPressed(VK_ESCAPE) then
+ if e_KeyPressed(IK_SPACE) or e_KeyPressed(IK_ESCAPE) or e_KeyPressed(VK_ESCAPE) or
+ e_KeyPressed(JOY0_JUMP) or e_KeyPressed(JOY1_JUMP) or e_KeyPressed(JOY2_JUMP) or e_KeyPressed(JOY3_JUMP) then
begin
State := 0;
break;
begin
State := 0;
break;
end
else if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
begin
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
begin
if (Length(P) > 1) and
((P[1] = '1') or (P[1] = '0')) then
else if (cmd = 'addbot') or
(cmd = 'bot_add') then
begin
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);
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
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))
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));
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()
end
else if cmd = 'bot_removeall' then
g_Bot_RemoveAll()
end else
begin
// Òàêîé êàðòû íåò, èùåì WAD ôàéë
end else
begin
// Òàêîé êàðòû íåò, èùåì WAD ôàéë
- P[1] := addWadExtension(P[1]);
- g_Console_Add(Format(_lc[I_MSG_NO_MAP_FALLBACK], [s, P[1]]));
- if FileExists(MapsDir + P[1]) then
+ pw := findDiskWad(MapsDir + P[1]);
+ g_Console_Add(Format(_lc[I_MSG_NO_MAP_FALLBACK], [s, 'WAD ' + P[1]]));
+ if FileExists(pw) then
begin
// Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà
SetLength(P, 3);
begin
// Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà
SetLength(P, 3);
+ P[1] := ExtractRelativePath(MapsDir, pw);
P[2] := g_Game_GetFirstMap(MapsDir + P[1]);
s := P[1] + ':\' + P[2];
P[2] := g_Game_GetFirstMap(MapsDir + P[1]);
s := P[1] + ':\' + P[2];
begin
g_TakeScreenShot()
end
begin
g_TakeScreenShot()
end
- else if cmd = 'togglechat' then
- begin
- g_Console_Chat_Switch(False);
- gSkipFirstChar := not g_Console_Interactive()
- end
- else if cmd = 'toggleteamchat' then
- begin
- if gGameSettings.GameMode in [GM_TDM, GM_CTF] then
- begin
- g_Console_Chat_Switch(True);
- gSkipFirstChar := not g_Console_Interactive()
- end
- end
else if cmd = 'weapon' then
begin
if Length(p) = 2 then
else if cmd = 'weapon' then
begin
if Length(p) = 2 then
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_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.
end.