diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index de729fae42e2b139d809d3e451dccd8c7afee1b2..7b8324325dffae8ff5a131987a28a9326f555b87 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
MAPDEF,
g_basic, g_player, e_graphics, g_res_downloader,
g_sound, g_gui, utils, md5, mempool, xprofiler,
- g_touch;
+ g_touch, g_weapons;
type
TGameSettings = record
procedure g_Game_ClearLoading();
procedure g_Game_SetDebugMode();
procedure DrawLoadingStat();
+procedure DrawMenuBackground(tex: AnsiString);
{ procedure SetWinPause(Enable: Boolean); }
STD_PLAYER_MODEL = 'Doomer';
+{$IFDEF HEADLESS}
+ DEFAULT_PLAYERS = 0;
+{$ELSE}
+ DEFAULT_PLAYERS = 1;
+{$ENDIF}
+
var
gStdFont: DWORD;
gGameSettings: TGameSettings;
goodsnd: array[0..3] of TPlayableSound;
killsnd: array[0..3] of TPlayableSound;
hahasnd: array[0..2] of TPlayableSound;
+ sound_get_flag: array[0..1] of TPlayableSound;
+ sound_lost_flag: array[0..1] of TPlayableSound;
+ sound_ret_flag: array[0..1] of TPlayableSound;
+ sound_cap_flag: array[0..1] of TPlayableSound;
gBodyKillEvent: Integer = -1;
gDefInterTime: ShortInt = -1;
gInterEndTime: LongWord = 0;
gTotalMonsters: Integer = 0;
gPauseMain: Boolean = false;
gPauseHolmes: Boolean = false;
- gShowTime: Boolean = True;
+ gShowTime: Boolean = False;
gShowFPS: Boolean = False;
gShowGoals: Boolean = True;
gShowStat: Boolean = True;
gDelayedEvents: Array of TDelayedEvent;
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
{$ENDIF}
e_texture, g_textures, g_main, g_window, g_menu,
e_input, e_log, g_console, g_items, g_map, g_panel,
- g_playermodel, g_gfx, g_options, g_weapons, Math,
+ g_playermodel, g_gfx, g_options, Math,
g_triggers, g_monsters, e_sound, CONFIG,
g_language, g_net,
ENet, e_msg, g_netmsg, g_netmaster,
FPSCounter, UPSCounter: Word;
FPSTime, UPSTime: LongWord;
DataLoaded: Boolean = False;
- LastScreenShot: Int64;
IsDrawStat: Boolean = False;
CustomStat: TEndCustomGameStat;
SingleStat: TEndSingleGameStat;
MessageLineLength: Integer = 80;
MapList: SSArray = nil;
MapIndex: Integer = -1;
+ InterReadyTime: Integer = -1;
MegaWAD: record
info: TMegaWADInfo;
endpic: String;
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
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;
end;
g_Game_ExecuteEvent('onmapend');
+ if not g_Game_IsClient then g_Player_ResetReady;
+ gInterReadyCount := 0;
// Çàòóõàþùèé ýêðàí:
EndingGameCounter := 255;
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);
gPauseMain := false;
gPauseHolmes := false;
gTime := 0;
- LastScreenShot := 0;
{e_MouseInfo.Accel := 1.0;}
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);
goto retry;
end;
-function isKeyPressed (key1: Word; key2: Word): Boolean;
-begin
- if (key1 <> 0) and e_KeyPressed(key1) then begin result := true; exit; end;
- if (key2 <> 0) and e_KeyPressed(key2) then begin result := true; exit; end;
- result := false;
-end;
-
-function isOneKeyPressed (key1: Word): Boolean;
-begin
- if (key1 <> 0) and e_KeyPressed(key1) then begin result := true; exit; end;
- result := false;
-end;
-
-procedure processPlayerControls (plr: TPlayer; var ctrl: TPlayerControl; var MoveButton: Byte; p2hack: Boolean=false);
-var
- time: Word;
- strafeDir: Byte;
- i: Integer;
- rwk: Boolean;
+procedure ProcessPlayerControls (plr: TPlayer; p: Integer; var MoveButton: Byte);
+ var
+ time: Word;
+ strafeDir: Byte;
+ i: Integer;
begin
if (plr = nil) then exit;
- if (p2hack) then time := 1000 else time := 1;
+ if (p = 2) then time := 1000 else time := 1;
strafeDir := MoveButton shr 4;
MoveButton := MoveButton and $0F;
- with ctrl do
+
+ if gPlayerAction[p, ACTION_MOVELEFT] and (not gPlayerAction[p, ACTION_MOVERIGHT]) then
+ MoveButton := 1 // Íàæàòà òîëüêî "Âëåâî"
+ else if (not gPlayerAction[p, ACTION_MOVELEFT]) and gPlayerAction[p, ACTION_MOVERIGHT] then
+ MoveButton := 2 // Íàæàòà òîëüêî "Âïðàâî"
+ else if (not gPlayerAction[p, ACTION_MOVELEFT]) and (not gPlayerAction[p, ACTION_MOVERIGHT]) then
+ MoveButton := 0; // Íå íàæàòû íè "Âëåâî", íè "Âïðàâî"
+
+ // Ñåé÷àñ èëè ðàíüøå áûëè íàæàòû "Âëåâî"/"Âïðàâî" => ïåðåäàåì èãðîêó:
+ if MoveButton = 1 then
+ plr.PressKey(KEY_LEFT, time)
+ else if MoveButton = 2 then
+ plr.PressKey(KEY_RIGHT, time);
+
+ // if we have "strafe" key, turn off old strafe mechanics
+ if gPlayerAction[p, ACTION_STRAFE] then
+ begin
+ // new strafe mechanics
+ if (strafeDir = 0) then
+ strafeDir := MoveButton; // start strafing
+ // now set direction according to strafe (reversed)
+ if (strafeDir = 2) then
+ plr.SetDirection(TDirection.D_LEFT)
+ else if (strafeDir = 1) then
+ plr.SetDirection(TDirection.D_RIGHT)
+ end
+ else
begin
- if isKeyPressed(KeyLeft, KeyLeft2) and (not isKeyPressed(KeyRight, KeyRight2)) then MoveButton := 1 // Íàæàòà òîëüêî "Âëåâî"
- else if (not isKeyPressed(KeyLeft, KeyLeft2)) and isKeyPressed(KeyRight, KeyRight2) then MoveButton := 2 // Íàæàòà òîëüêî "Âïðàâî"
- else if (not isKeyPressed(KeyLeft, KeyLeft2)) and (not isKeyPressed(KeyRight, KeyRight2)) then MoveButton := 0; // Íå íàæàòû íè "Âëåâî", íè "Âïðàâî"
+ strafeDir := 0; // not strafing anymore
+ // Ðàíüøå áûëà íàæàòà "Âïðàâî", à ñåé÷àñ "Âëåâî" => áåæèì âïðàâî, ñìîòðèì âëåâî:
+ if (MoveButton = 2) and gPlayerAction[p, ACTION_MOVELEFT] then
+ plr.SetDirection(TDirection.D_LEFT)
+ // Ðàíüøå áûëà íàæàòà "Âëåâî", à ñåé÷àñ "Âïðàâî" => áåæèì âëåâî, ñìîòðèì âïðàâî:
+ else if (MoveButton = 1) and gPlayerAction[p, ACTION_MOVERIGHT] then
+ plr.SetDirection(TDirection.D_RIGHT)
+ // ×òî-òî áûëî íàæàòî è íå èçìåíèëîñü => êóäà áåæèì, òóäà è ñìîòðèì:
+ else if MoveButton <> 0 then
+ plr.SetDirection(TDirection(MoveButton-1))
+ end;
- // Ñåé÷àñ èëè ðàíüøå áûëè íàæàòû "Âëåâî"/"Âïðàâî" => ïåðåäàåì èãðîêó:
- if MoveButton = 1 then plr.PressKey(KEY_LEFT, time)
- else if MoveButton = 2 then plr.PressKey(KEY_RIGHT, time);
+ // fix movebutton state
+ MoveButton := MoveButton or (strafeDir shl 4);
- // if we have "strafe" key, turn off old strafe mechanics
- if isKeyPressed(KeyStrafe, KeyStrafe2) then
- begin
- // new strafe mechanics
- if (strafeDir = 0) then strafeDir := MoveButton; // start strafing
- // now set direction according to strafe (reversed)
- if (strafeDir = 2) then plr.SetDirection(TDirection.D_LEFT)
- else if (strafeDir = 1) then plr.SetDirection(TDirection.D_RIGHT);
- end
- else
- begin
- strafeDir := 0; // not strafing anymore
- // Ðàíüøå áûëà íàæàòà "Âïðàâî", à ñåé÷àñ "Âëåâî" => áåæèì âïðàâî, ñìîòðèì âëåâî:
- if (MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then plr.SetDirection(TDirection.D_LEFT)
- // Ðàíüøå áûëà íàæàòà "Âëåâî", à ñåé÷àñ "Âïðàâî" => áåæèì âëåâî, ñìîòðèì âïðàâî:
- else if (MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then plr.SetDirection(TDirection.D_RIGHT)
- // ×òî-òî áûëî íàæàòî è íå èçìåíèëîñü => êóäà áåæèì, òóäà è ñìîòðèì:
- else if MoveButton <> 0 then plr.SetDirection(TDirection(MoveButton-1));
- end;
+ // Îñòàëüíûå êëàâèøè:
+ if gPlayerAction[p, ACTION_JUMP] then plr.PressKey(KEY_JUMP, time);
+ if gPlayerAction[p, ACTION_LOOKUP] then plr.PressKey(KEY_UP, time);
+ if gPlayerAction[p, ACTION_LOOKDOWN] then plr.PressKey(KEY_DOWN, time);
+ if gPlayerAction[p, ACTION_ATTACK] then plr.PressKey(KEY_FIRE);
+ if gPlayerAction[p, ACTION_WEAPNEXT] then plr.PressKey(KEY_NEXTWEAPON);
+ if gPlayerAction[p, ACTION_WEAPPREV] then plr.PressKey(KEY_PREVWEAPON);
+ if gPlayerAction[p, ACTION_ACTIVATE] then plr.PressKey(KEY_OPEN);
- // fix movebutton state
- MoveButton := MoveButton or (strafeDir shl 4);
+ gPlayerAction[p, ACTION_WEAPNEXT] := False; // HACK, remove after readyweaon&pendinweapon implementation
+ gPlayerAction[p, ACTION_WEAPPREV] := False; // HACK, remove after readyweaon&pendinweapon implementation
- // Îñòàëüíûå êëàâèøè:
- if isKeyPressed(KeyJump, KeyJump2) then plr.PressKey(KEY_JUMP, time);
- if isKeyPressed(KeyUp, KeyUp2) then plr.PressKey(KEY_UP, time);
- if isKeyPressed(KeyDown, KeyDown2) then plr.PressKey(KEY_DOWN, time);
- if isKeyPressed(KeyFire, KeyFire2) then plr.PressKey(KEY_FIRE);
- if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) then
- begin
- rwk := plr.isWeaponSwitchKeyReleased(-1);
- if rwk then plr.PressKey(KEY_NEXTWEAPON);
- plr.weaponSwitchKeysStateChange(-1, true);
- end
- else
- begin
- plr.weaponSwitchKeysStateChange(-1, false);
- end;
- if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then
+ for i := WP_FIRST to WP_LAST do
+ begin
+ if gSelectWeapon[p, i] then
begin
- rwk := plr.isWeaponSwitchKeyReleased(-2);
- if rwk then plr.PressKey(KEY_PREVWEAPON);
- plr.weaponSwitchKeysStateChange(-2, true);
+ plr.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best
+ gSelectWeapon[p, i] := False
end
- else
- begin
- plr.weaponSwitchKeysStateChange(-2, false);
- end;
- if isKeyPressed(KeyOpen, KeyOpen2) then plr.PressKey(KEY_OPEN);
-
- for i := 0 to High(KeyWeapon) do
- begin
- if isKeyPressed(KeyWeapon[i], KeyWeapon2[i]) then
- begin
- rwk := plr.isWeaponSwitchKeyReleased(i);
- //writeln('rwk:', rwk);
- plr.weaponSwitchKeysStateChange(i, true);
- if rwk then plr.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best
- end
- else
- begin
- plr.weaponSwitchKeysStateChange(i, false);
- end;
- end;
end;
// HACK: add dynlight here
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;
(
(
e_KeyPressed(IK_RETURN) or e_KeyPressed(IK_KPRETURN) or e_KeyPressed(IK_SPACE) or
- e_KeyPressed(VK_FIRE) or e_KeyPressed(VK_OPEN)
+ 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)
)
- or (g_Game_IsNet and (gInterTime > gInterEndTime))
+ or (g_Game_IsNet and ((gInterTime > gInterEndTime) or (gInterReadyCount >= NetClientCount)))
)
then
begin // Íàæàëè <Enter>/<Ïðîáåë> èëè ïðîøëî äîñòàòî÷íî âðåìåíè:
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
// Çàêîí÷èëñÿ óðîâåíü â Ñâîåé èãðå:
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');
g_Serverlist_Control(slCurrent, slTable);
end;
- if g_Game_IsNet then
- if not gConsoleShow then
- if not gChatShow then
- begin
- if g_ActiveWindow = nil then
- begin
- if e_KeyPressed(gGameControls.GameControls.Chat) or e_KeyPressed(VK_CHAT) then
- g_Console_Chat_Switch(False)
- else if (e_KeyPressed(gGameControls.GameControls.TeamChat) or e_KeyPressed(VK_TEAM)) and
- (gGameSettings.GameMode in [GM_TDM, GM_CTF]) then
- g_Console_Chat_Switch(True);
- end;
- end else
- if not gChatEnter then
- if (not e_KeyPressed(gGameControls.GameControls.Chat))
- and (not e_KeyPressed(gGameControls.GameControls.TeamChat))
- and (not e_KeyPressed(VK_CHAT))
- and (not e_KeyPressed(VK_TEAM)) then
- gChatEnter := True;
-
// Ñòàòèñòèêà ïî Tab:
if gGameOn then
- IsDrawStat := (not gConsoleShow) and (not gChatShow) and
- (gGameSettings.GameType <> GT_SINGLE) and
- (e_KeyPressed(gGameControls.GameControls.Stat) or e_KeyPressed(VK_STATUS));
+ IsDrawStat := (not gConsoleShow) and (not gChatShow) and (gGameSettings.GameType <> GT_SINGLE) and g_Console_Action(ACTION_SCORES);
// Èãðà èäåò:
if gGameOn and not gPause and (gState <> STATE_FOLD) then
if gPlayer2 <> nil then gPlayer2.ReleaseKeys();
if (not gConsoleShow) and (not gChatShow) and (g_ActiveWindow = nil) then
begin
- processPlayerControls(gPlayer1, gGameControls.P1Control, P1MoveButton);
- processPlayerControls(gPlayer2, gGameControls.P2Control, P2MoveButton, true);
+ ProcessPlayerControls(gPlayer1, 0, P1MoveButton);
+ ProcessPlayerControls(gPlayer2, 1, P2MoveButton);
end // if not console
else
begin
begin
if not gSpectKeyPress then
begin
- if isKeyPressed(gGameControls.P1Control.KeyJump, gGameControls.P1Control.KeyJump2)
- and (not gSpectAuto) then
+ if gPlayerAction[0, ACTION_JUMP] and (not gSpectAuto) then
begin
// switch spect mode
case gSpectMode of
if (gSpectMode = SPECT_MAPVIEW)
and (not gSpectAuto) then
begin
- if isKeyPressed(gGameControls.P1Control.KeyLeft, gGameControls.P1Control.KeyLeft2) then
+ if gPlayerAction[0, ACTION_MOVELEFT] then
gSpectX := Max(gSpectX - gSpectStep, 0);
- if isKeyPressed(gGameControls.P1Control.KeyRight, gGameControls.P1Control.KeyRight2) then
+ if gPlayerAction[0, ACTION_MOVERIGHT] then
gSpectX := Min(gSpectX + gSpectStep, gMapInfo.Width - gScreenWidth);
- if isKeyPressed(gGameControls.P1Control.KeyUp, gGameControls.P1Control.KeyUp2) then
+ if gPlayerAction[0, ACTION_LOOKUP] then
gSpectY := Max(gSpectY - gSpectStep, 0);
- if isKeyPressed(gGameControls.P1Control.KeyDown, gGameControls.P1Control.KeyDown2) then
+ if gPlayerAction[0, ACTION_LOOKDOWN] then
gSpectY := Min(gSpectY + gSpectStep, gMapInfo.Height - gScreenHeight);
- if isKeyPressed(gGameControls.P1Control.KeyPrevWeapon, gGameControls.P1Control.KeyPrevWeapon2) then
+ if gPlayerAction[0, ACTION_WEAPPREV] then
begin
// decrease step
if gSpectStep > 4 then gSpectStep := gSpectStep shr 1;
gSpectKeyPress := True;
end;
- if isKeyPressed(gGameControls.P1Control.KeyNextWeapon, gGameControls.P1Control.KeyNextWeapon2) then
+ if gPlayerAction[0, ACTION_WEAPNEXT] then
begin
// increase step
if gSpectStep < 64 then gSpectStep := gSpectStep shl 1;
if (gSpectMode = SPECT_PLAYERS)
and (not gSpectAuto) then
begin
- if isKeyPressed(gGameControls.P1Control.KeyUp, gGameControls.P1Control.KeyUp2) then
+ if gPlayerAction[0, ACTION_LOOKUP] then
begin
// add second view
gSpectViewTwo := True;
gSpectKeyPress := True;
end;
- if isKeyPressed(gGameControls.P1Control.KeyDown, gGameControls.P1Control.KeyDown2) then
+ if gPlayerAction[0, ACTION_LOOKDOWN] then
begin
// remove second view
gSpectViewTwo := False;
gSpectKeyPress := True;
end;
- if isKeyPressed(gGameControls.P1Control.KeyLeft, gGameControls.P1Control.KeyLeft2) then
+ if gPlayerAction[0, ACTION_MOVELEFT] then
begin
// prev player (view 1)
gSpectPID1 := GetActivePlayerID_Prev(gSpectPID1);
gSpectKeyPress := True;
end;
- if isKeyPressed(gGameControls.P1Control.KeyRight, gGameControls.P1Control.KeyRight2) then
+ if gPlayerAction[0, ACTION_MOVERIGHT] then
begin
// next player (view 1)
gSpectPID1 := GetActivePlayerID_Next(gSpectPID1);
gSpectKeyPress := True;
end;
- if isKeyPressed(gGameControls.P1Control.KeyPrevWeapon, gGameControls.P1Control.KeyPrevWeapon2) then
+ if gPlayerAction[0, ACTION_WEAPPREV] then
begin
// prev player (view 2)
gSpectPID2 := GetActivePlayerID_Prev(gSpectPID2);
gSpectKeyPress := True;
end;
- if isKeyPressed(gGameControls.P1Control.KeyNextWeapon, gGameControls.P1Control.KeyNextWeapon2) then
+ if gPlayerAction[0, ACTION_WEAPNEXT] then
begin
// next player (view 2)
gSpectPID2 := GetActivePlayerID_Next(gSpectPID2);
gSpectKeyPress := True;
end;
end;
- if isKeyPressed(gGameControls.P1Control.KeyFire, gGameControls.P1Control.KeyFire2) then
+ if gPlayerAction[0, ACTION_ATTACK] then
begin
if (gSpectMode = SPECT_STATS) and (not gSpectAuto) then
begin
end;
end
else
- if (not isKeyPressed(gGameControls.P1Control.KeyJump, gGameControls.P1Control.KeyJump2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyFire, gGameControls.P1Control.KeyFire2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyLeft, gGameControls.P1Control.KeyLeft2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyRight, gGameControls.P1Control.KeyRight2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyUp, gGameControls.P1Control.KeyUp2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyDown, gGameControls.P1Control.KeyDown2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyPrevWeapon, gGameControls.P1Control.KeyPrevWeapon2)) and
- (not isKeyPressed(gGameControls.P1Control.KeyNextWeapon, gGameControls.P1Control.KeyNextWeapon2)) then
+ if (not gPlayerAction[0, ACTION_JUMP]) and
+ (not gPlayerAction[0, ACTION_ATTACK]) and
+ (not gPlayerAction[0, ACTION_MOVELEFT]) and
+ (not gPlayerAction[0, ACTION_MOVERIGHT]) and
+ (not gPlayerAction[0, ACTION_LOOKUP]) and
+ (not gPlayerAction[0, ACTION_LOOKDOWN]) and
+ (not gPlayerAction[0, ACTION_WEAPPREV]) and
+ (not gPlayerAction[0, ACTION_WEAPNEXT]) then
gSpectKeyPress := False;
if gSpectAuto then
end;
end;
-// Äåëàåì ñêðèíøîò (íå ÷àùå 200 ìèëëèñåêóíä):
- if e_KeyPressed(gGameControls.GameControls.TakeScreenshot) or e_KeyPressed(VK_PRINTSCR) then
- if (GetTimer()-LastScreenShot) > 200000 div 1000 then
- begin
- g_TakeScreenShot();
- LastScreenShot := GetTimer();
- end;
-
// Ãîðÿ÷àÿ êëàâèøà äëÿ âûçîâà ìåíþ âûõîäà èç èãðû (F10):
if e_KeyPressed(IK_F10) and
gGameOn and
g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_D', GameWAD+':TEXTURES\FLAGHUD_B_DROP');
g_Texture_CreateWADEx('TEXTURE_PLAYER_TALKBUBBLE', GameWAD+':TEXTURES\TALKBUBBLE');
g_Texture_CreateWADEx('TEXTURE_PLAYER_INVULPENTA', GameWAD+':TEXTURES\PENTA');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_INDICATOR', GameWAD+':TEXTURES\PLRIND');
hasPBarGfx := true;
if not g_Texture_CreateWADEx('UI_GFX_PBAR_LEFT', GameWAD+':TEXTURES\LLEFT') then hasPBarGfx := false;
g_Frames_CreateWAD(nil, 'FRAMES_PUNCH_BERSERK_DN', GameWAD+':WEAPONS\PUNCHB_DN', 64, 64, 4, False);
g_Sound_CreateWADEx('SOUND_GAME_TELEPORT', GameWAD+':SOUNDS\TELEPORT');
g_Sound_CreateWADEx('SOUND_GAME_NOTELEPORT', GameWAD+':SOUNDS\NOTELEPORT');
+ g_Sound_CreateWADEx('SOUND_GAME_SECRET', GameWAD+':SOUNDS\SECRET');
g_Sound_CreateWADEx('SOUND_GAME_DOOROPEN', GameWAD+':SOUNDS\DOOROPEN');
g_Sound_CreateWADEx('SOUND_GAME_DOORCLOSE', GameWAD+':SOUNDS\DOORCLOSE');
g_Sound_CreateWADEx('SOUND_GAME_BULK1', GameWAD+':SOUNDS\BULK1');
g_Sound_CreateWADEx('SOUND_GAME_BULK2', GameWAD+':SOUNDS\BULK2');
g_Sound_CreateWADEx('SOUND_GAME_BUBBLE1', GameWAD+':SOUNDS\BUBBLE1');
g_Sound_CreateWADEx('SOUND_GAME_BUBBLE2', GameWAD+':SOUNDS\BUBBLE2');
+ g_Sound_CreateWADEx('SOUND_GAME_BURNING', GameWAD+':SOUNDS\BURNING');
g_Sound_CreateWADEx('SOUND_GAME_SWITCH1', GameWAD+':SOUNDS\SWITCH1');
g_Sound_CreateWADEx('SOUND_GAME_SWITCH0', GameWAD+':SOUNDS\SWITCH0');
g_Sound_CreateWADEx('SOUND_GAME_RADIO', GameWAD+':SOUNDS\RADIO');
g_Sound_CreateWADEx('SOUND_ANNOUNCER_MUHAHA1', GameWAD+':SOUNDS\MUHAHA1');
g_Sound_CreateWADEx('SOUND_ANNOUNCER_MUHAHA2', GameWAD+':SOUNDS\MUHAHA2');
g_Sound_CreateWADEx('SOUND_ANNOUNCER_MUHAHA3', GameWAD+':SOUNDS\MUHAHA3');
+ g_Sound_CreateWADEx('SOUND_CTF_GET1', GameWAD+':SOUNDS\GETFLAG1');
+ g_Sound_CreateWADEx('SOUND_CTF_GET2', GameWAD+':SOUNDS\GETFLAG2');
+ g_Sound_CreateWADEx('SOUND_CTF_LOST1', GameWAD+':SOUNDS\LOSTFLG1');
+ g_Sound_CreateWADEx('SOUND_CTF_LOST2', GameWAD+':SOUNDS\LOSTFLG2');
+ g_Sound_CreateWADEx('SOUND_CTF_RETURN1', GameWAD+':SOUNDS\RETFLAG1');
+ g_Sound_CreateWADEx('SOUND_CTF_RETURN2', GameWAD+':SOUNDS\RETFLAG2');
+ g_Sound_CreateWADEx('SOUND_CTF_CAPTURE1', GameWAD+':SOUNDS\CAPFLAG1');
+ g_Sound_CreateWADEx('SOUND_CTF_CAPTURE2', GameWAD+':SOUNDS\CAPFLAG2');
goodsnd[0] := TPlayableSound.Create();
goodsnd[1] := TPlayableSound.Create();
hahasnd[1].SetByName('SOUND_ANNOUNCER_MUHAHA2');
hahasnd[2].SetByName('SOUND_ANNOUNCER_MUHAHA3');
+ sound_get_flag[0] := TPlayableSound.Create();
+ sound_get_flag[1] := TPlayableSound.Create();
+ sound_lost_flag[0] := TPlayableSound.Create();
+ sound_lost_flag[1] := TPlayableSound.Create();
+ sound_ret_flag[0] := TPlayableSound.Create();
+ sound_ret_flag[1] := TPlayableSound.Create();
+ sound_cap_flag[0] := TPlayableSound.Create();
+ sound_cap_flag[1] := TPlayableSound.Create();
+
+ sound_get_flag[0].SetByName('SOUND_CTF_GET1');
+ sound_get_flag[1].SetByName('SOUND_CTF_GET2');
+ sound_lost_flag[0].SetByName('SOUND_CTF_LOST1');
+ sound_lost_flag[1].SetByName('SOUND_CTF_LOST2');
+ sound_ret_flag[0].SetByName('SOUND_CTF_RETURN1');
+ sound_ret_flag[1].SetByName('SOUND_CTF_RETURN2');
+ sound_cap_flag[0].SetByName('SOUND_CTF_CAPTURE1');
+ sound_cap_flag[1].SetByName('SOUND_CTF_CAPTURE2');
+
g_Game_LoadChatSounds(GameWAD+':CHATSND\SNDCFG');
g_Game_SetLoadingText(_lc[I_LOAD_ITEMS_DATA], 0, False);
g_Frames_DeleteByName('FRAMES_PUNCH_BERSERK_DN');
g_Sound_Delete('SOUND_GAME_TELEPORT');
g_Sound_Delete('SOUND_GAME_NOTELEPORT');
+ g_Sound_Delete('SOUND_GAME_SECRET');
g_Sound_Delete('SOUND_GAME_DOOROPEN');
g_Sound_Delete('SOUND_GAME_DOORCLOSE');
g_Sound_Delete('SOUND_GAME_BULK1');
g_Sound_Delete('SOUND_GAME_BULK2');
g_Sound_Delete('SOUND_GAME_BUBBLE1');
g_Sound_Delete('SOUND_GAME_BUBBLE2');
+ g_Sound_Delete('SOUND_GAME_BURNING');
g_Sound_Delete('SOUND_GAME_SWITCH1');
g_Sound_Delete('SOUND_GAME_SWITCH0');
g_Sound_Delete('SOUND_ANNOUNCER_MUHAHA2');
g_Sound_Delete('SOUND_ANNOUNCER_MUHAHA3');
+ sound_get_flag[0].Free();
+ sound_get_flag[1].Free();
+ sound_lost_flag[0].Free();
+ sound_lost_flag[1].Free();
+ sound_ret_flag[0].Free();
+ sound_ret_flag[1].Free();
+ sound_cap_flag[0].Free();
+ sound_cap_flag[1].Free();
+
+ g_Sound_Delete('SOUND_CTF_GET1');
+ g_Sound_Delete('SOUND_CTF_GET2');
+ g_Sound_Delete('SOUND_CTF_LOST1');
+ g_Sound_Delete('SOUND_CTF_LOST2');
+ g_Sound_Delete('SOUND_CTF_RETURN1');
+ g_Sound_Delete('SOUND_CTF_RETURN2');
+ g_Sound_Delete('SOUND_CTF_CAPTURE1');
+ g_Sound_Delete('SOUND_CTF_CAPTURE2');
+
g_Game_FreeChatSounds();
DataLoaded := False;
g_ProcessMessages();
- if e_KeyPressed(IK_TAB) or e_KeyPressed(VK_STATUS) then
+ if g_Console_Action(ACTION_SCORES) then
begin
if not gStatsPressed then
begin
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;
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;
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;
aY2 := aY + aY2 - 1;
case LiftType of
- 0: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 72, 36, 0);
- 1: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 124, 96, 0);
- 2: e_DrawFillQuad(aX, aY, aX2, aY2, 200, 80, 4, 0);
- 3: e_DrawFillQuad(aX, aY, aX2, aY2, 252, 140, 56, 0);
+ LIFTTYPE_UP: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 72, 36, 0);
+ LIFTTYPE_DOWN: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 124, 96, 0);
+ LIFTTYPE_LEFT: e_DrawFillQuad(aX, aY, aX2, aY2, 200, 80, 4, 0);
+ LIFTTYPE_RIGHT: e_DrawFillQuad(aX, aY, aX2, aY2, 252, 140, 56, 0);
end;
end;
end;
renderMapInternal(-c, -d, true);
+ if (gGameSettings.GameMode <> GM_SINGLE) and gPlayerIndicator then
+ p.DrawIndicator();
if p.FSpectator then
e_TextureFontPrintEx(p.GameX + PLAYER_RECT_CX - 4,
p.GameY + PLAYER_RECT_CY - 4,
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;
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();
ProcessLoading(true);
- if e_KeyPressed(IK_ESCAPE) or 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
stat := nil;
cmd := LowerCase(P[0]);
- if cmd = 'r_showfps' then
- begin
- if (Length(P) > 1) and
- ((P[1] = '1') or (P[1] = '0')) then
- gShowFPS := (P[1][1] = '1');
-
- if gShowFPS then
- g_Console_Add(_lc[I_MSG_SHOW_FPS_ON])
- else
- g_Console_Add(_lc[I_MSG_SHOW_FPS_OFF]);
- end
- else if (cmd = 'g_friendlyfire') and not g_Game_IsClient then
+ if (cmd = 'g_friendlyfire') and not g_Game_IsClient then
begin
with gGameSettings do
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
g_Console_Add(Format(cmd + ' is %d', [Byte(g_Debug_Player)]));
end
- else if (cmd = 'd_joy') then
- begin
- for a := 1 to 8 do
- g_Console_Add(e_JoystickStateToString(a));
- end
else if (cmd = 'd_mem') then
begin
PrintHeapStats();
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()
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);
+ P[1] := ExtractRelativePath(MapsDir, pw);
P[2] := g_Game_GetFirstMap(MapsDir + P[1]);
s := P[1] + ':\' + P[2];
end;
end;
end
+ else if cmd = 'screenshot' then
+ begin
+ g_TakeScreenShot()
+ end
+ else if cmd = 'weapon' then
+ begin
+ if Length(p) = 2 then
+ begin
+ a := WP_FIRST + StrToInt(p[1]) - 1;
+ if (a >= WP_FIRST) and (a <= WP_LAST) then
+ gSelectWeapon[0, a] := True
+ end
+ end
+ else if (cmd = 'p1_weapon') or (cmd = 'p2_weapon') then
+ begin
+ if Length(p) = 2 then
+ begin
+ a := WP_FIRST + StrToInt(p[1]) - 1;
+ b := ord(cmd[2]) - ord('1');
+ if (a >= WP_FIRST) and (a <= WP_LAST) then
+ gSelectWeapon[b, a] := True
+ end
+ end
// Êîìàíäû Ñâîåé èãðû:
else if gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT] then
begin
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_h', @r_smallmap_h, 'halign: 0: left; 1: center; 2: right', 'horizontal aligning of small maps');
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.