X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_menu.pas;h=3d731a2d1391b04e9886eb14d7b271bdb7f7b11f;hb=4f2245f370850d68a58f1cd18b2fd326042950d8;hp=85334b3bf14b8331ed5c2bc114266c667a0db93f;hpb=11162ad485996f3e9ae4ef3b36788fcf9ed57af4;p=d2df-sdl.git diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 85334b3..3d731a2 100644 --- a/src/game/g_menu.pas +++ b/src/game/g_menu.pas @@ -1,9 +1,8 @@ -(* Copyright (C) DooM 2D:Forever Developers +(* Copyright (C) Doom 2D: Forever Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * the Free Software Foundation, version 3 of the License ONLY. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -21,12 +20,10 @@ interface procedure g_Menu_Init(); procedure g_Menu_Free(); procedure g_Menu_Reset(); -procedure LoadStdFont(cfgres, texture: string; var FontID: DWORD); -procedure LoadFont(txtres, fntres: string; var FontID: DWORD); procedure g_Menu_AskLanguage(); procedure g_Menu_Show_SaveMenu(); -procedure g_Menu_Show_LoadMenu(); +procedure g_Menu_Show_LoadMenu(standalone: Boolean=false); procedure g_Menu_Show_GameSetGame(); procedure g_Menu_Show_OptionsVideo(); procedure g_Menu_Show_OptionsSound(); @@ -34,20 +31,39 @@ procedure g_Menu_Show_EndGameMenu(); procedure g_Menu_Show_QuitGameMenu(); var - gMenuFont: DWORD; - gMenuSmallFont: DWORD; PromptIP: string; PromptPort: Word; + TempScale: Integer = -1; + TempResScale: Integer = -1; implementation uses - g_gui, g_textures, e_graphics, g_main, g_window, g_game, g_map, - g_basic, g_console, g_sound, g_gfx, g_player, g_options, g_weapons, + {$IFDEF ENABLE_GFX} + g_gfx, + {$ENDIF} + {$IFDEF ENABLE_GIBS} + g_gibs, + {$ENDIF} + {$IFDEF ENABLE_SHELLS} + g_shells, + {$ENDIF} + {$IFDEF ENABLE_CORPSES} + g_corpses, + {$ENDIF} + {$IFDEF ENABLE_RENDER} + r_render, + {$ENDIF} + {$IFDEF ENABLE_SYSTEM} + g_system, + {$ENDIF} + g_gui, g_game, g_map, + g_base, g_basic, g_console, g_sound, g_player, g_options, g_weapons, e_log, SysUtils, CONFIG, g_playermodel, DateUtils, - MAPDEF, wadreader, Math, g_saveload, - e_texture, GL, GLExt, g_language, - g_net, g_netmsg, g_netmaster, g_items, e_input; + MAPDEF, Math, g_saveload, + g_language, e_res, + g_net, g_netmsg, g_netmaster, g_items, e_input, + utils, wadreader; type TYNCallback = procedure (yes:Boolean); @@ -73,7 +89,7 @@ begin TYNCallback(ctl.UserData)(false); end; -function CreateYNMenu (WinName, Text: String; MaxLen: Word; FontID: DWORD; ActionProc: TYNCallback): TGUIWindow; +function CreateYNMenu (WinName, Text: String; MaxLen: Word; ActionProc: TYNCallback): TGUIWindow; var menu: TGUIMenu; begin @@ -83,7 +99,7 @@ begin begin //OnKeyDownEx := @YNKeyDownProc; //UserData := @ActionProc; - menu := TGUIMenu(Result.AddChild(TGUIMenu.Create(gMenuSmallFont, gMenuSmallFont, ''))); + menu := TGUIMenu(Result.AddChild(TGUIMenu.Create(False, False, ''))); with menu do begin Name := '__temp_yes_no_menu:'+WinName; @@ -112,9 +128,12 @@ begin gBPP := 16 else gBPP := 32; + gVSync := TGUISwitch(menu.GetControl('swVSync')).ItemIndex = 0; + gTextureFilter := TGUISwitch(menu.GetControl('swTextureFilter')).ItemIndex = 0; - glLegacyNPOT := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0); + glNPOTOverride := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0); + gLerpActors := TGUISwitch(menu.GetControl('swInterp')).ItemIndex = 0; menu := TGUIMenu(g_GUI_GetWindow('OptionsSoundMenu').GetControl('mOptionsSoundMenu')); @@ -127,21 +146,32 @@ begin gMuteWhenInactive := TGUISwitch(menu.GetControl('swInactiveSounds')).ItemIndex = 1; gAnnouncer := TGUISwitch(menu.GetControl('swAnnouncer')).ItemIndex; gSoundEffectsDF := TGUISwitch(menu.GetControl('swSoundEffects')).ItemIndex = 1; + gUseChatSounds := TGUISwitch(menu.GetControl('swChatSpeech')).ItemIndex = 0; menu := TGUIMenu(g_GUI_GetWindow('OptionsGameMenu').GetControl('mOptionsGameMenu')); - g_GFX_SetMax(TGUIScroll(menu.GetControl('scParticlesCount')).Value*1000); - g_Shells_SetMax(TGUIScroll(menu.GetControl('scShellsMax')).Value*30); - g_Gibs_SetMax(TGUIScroll(menu.GetControl('scGibsMax')).Value*25); - g_Corpses_SetMax(TGUIScroll(menu.GetControl('scCorpsesMax')).Value*5); - - case TGUISwitch(menu.GetControl('swGibsCount')).ItemIndex of - 0: gGibsCount := 0; - 1: gGibsCount := 8; - 2: gGibsCount := 16; - 3: gGibsCount := 32; - else gGibsCount := 48; - end; + {$IFDEF ENABLE_GFX} + g_GFX_SetMax(TGUIScroll(menu.GetControl('scParticlesCount')).Value*1000); + {$ENDIF} + {$IFDEF ENABLE_SHELLS} + g_Shells_SetMax(TGUIScroll(menu.GetControl('scShellsMax')).Value*30); + {$ENDIF} + {$IFDEF ENABLE_GIBS} + g_Gibs_SetMax(TGUIScroll(menu.GetControl('scGibsMax')).Value*25); + {$ENDIF} + {$IFDEF ENABLE_CORPSES} + g_Corpses_SetMax(TGUIScroll(menu.GetControl('scCorpsesMax')).Value*5); + {$ENDIF} + + {$IFDEF ENABLE_GIBS} + case TGUISwitch(menu.GetControl('swGibsCount')).ItemIndex of + 0: gGibsCount := 0; + 1: gGibsCount := 8; + 2: gGibsCount := 16; + 3: gGibsCount := 32; + else gGibsCount := 48; + end; + {$ENDIF} gBloodCount := TGUISwitch(menu.GetControl('swBloodCount')).ItemIndex; gFlash := TGUISwitch(menu.GetControl('swScreenFlash')).ItemIndex; @@ -152,97 +182,162 @@ begin gShowMessages := TGUISwitch(menu.GetControl('swMessages')).ItemIndex = 0; gRevertPlayers := TGUISwitch(menu.GetControl('swRevertPlayers')).ItemIndex = 0; gChatBubble := TGUISwitch(menu.GetControl('swChatBubble')).ItemIndex; + gPlayerIndicator := TGUISwitch(menu.GetControl('swPlayerIndicator')).ItemIndex; + gPlayerIndicatorStyle := TGUISwitch(menu.GetControl('swPlayerIndicatorStyle')).ItemIndex; + if TGUIScroll(menu.GetControl('scScaleFactor')).Value <> TempScale then + begin + TempScale := TGUIScroll(menu.GetControl('scScaleFactor')).Value; + g_dbg_scale := TempScale + 1; + end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsMenu').GetControl('mOptionsControlsMenu')); - with menu, gGameControls.GameControls do + with menu do begin - TakeScreenshot := TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_SCREENSHOT])).Key; - Stat := TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_STAT])).Key; - Chat := TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_CHAT])).Key; - TeamChat := TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_TEAMCHAT])).Key; + g_Console_BindKey(g_Console_FindBind(1, 'screenshot'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_scores', '-p1_scores'), ''); + g_Console_BindKey(g_Console_FindBind(1, 'togglechat'), ''); + g_Console_BindKey(g_Console_FindBind(1, 'toggleteamchat'), ''); + g_Console_BindKey(TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_SCREENSHOT])).Key, 'screenshot'); + g_Console_BindKey(TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_STAT])).Key, '+p1_scores', '-p1_scores'); + g_Console_BindKey(TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_CHAT])).Key, 'togglechat'); + g_Console_BindKey(TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_TEAMCHAT])).Key, 'toggleteamchat'); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP1Menu').GetControl('mOptionsControlsP1Menu')); - with menu, gGameControls.P1Control do - begin - KeyRight := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0; - KeyLeft := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0; - KeyUp := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0; - KeyDown := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0; - KeyFire := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0; - KeyJump := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0; - KeyNextWeapon := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0; - KeyPrevWeapon := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0; - KeyOpen := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0; - KeyStrafe := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0; + with menu do + begin + g_Console_BindKey(g_Console_FindBind(1, '+p1_moveright', '-p1_moveright'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_moveleft', '-p1_moveleft'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_lookup', '-p1_lookup'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_lookdown', '-p1_lookdown'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_attack', '-p1_attack'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_jump', '-p1_jump'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_weapnext', '-p1_weapnext'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_weapprev', '-p1_weapprev'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_activate', '-p1_activate'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p1_strafe', '-p1_strafe'), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0, '+p1_moveright', '-p1_moveright'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0, '+p1_moveleft', '-p1_moveleft'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0, '+p1_lookup', '-p1_lookup'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0, '+p1_lookdown', '-p1_lookdown'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0, '+p1_attack', '-p1_attack'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0, '+p1_jump', '-p1_jump'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0, '+p1_weapnext', '-p1_weapnext'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0, '+p1_weapprev', '-p1_weapprev'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0, '+p1_activate', '-p1_activate'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0, '+p1_strafe', '-p1_strafe'); // second set - KeyRight2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1; - KeyLeft2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1; - KeyUp2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1; - KeyDown2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1; - KeyFire2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1; - KeyJump2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1; - KeyNextWeapon2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1; - KeyPrevWeapon2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1; - KeyOpen2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1; - KeyStrafe2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1; + g_Console_BindKey(g_Console_FindBind(2, '+p1_moveright', '-p1_moveright'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_moveleft', '-p1_moveleft'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_lookup', '-p1_lookup'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_lookdown', '-p1_lookdown'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_attack', '-p1_attack'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_jump', '-p1_jump'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_weapnext', '-p1_weapnext'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_weapprev', '-p1_weapprev'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_activate', '-p1_activate'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p1_strafe', '-p1_strafe'), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1, '+p1_moveright', '-p1_moveright'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1, '+p1_moveleft', '-p1_moveleft'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1, '+p1_lookup', '-p1_lookup'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1, '+p1_lookdown', '-p1_lookdown'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1, '+p1_attack', '-p1_attack'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1, '+p1_jump', '-p1_jump'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1, '+p1_weapnext', '-p1_weapnext'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1, '+p1_weapprev', '-p1_weapprev'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1, '+p1_activate', '-p1_activate'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1, '+p1_strafe', '-p1_strafe'); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP1MenuWeapons').GetControl('mOptionsControlsP1MenuWeapons')); - with menu, gGameControls.P1Control do + with menu do begin for i := WP_FIRST to WP_LAST do begin - KeyWeapon[i] := TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0; - KeyWeapon2[i] := TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1; + g_Console_BindKey(g_Console_FindBind(1, 'p1_weapon ' + IntToStr(i + 1)), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0, 'p1_weapon ' + IntToStr(i + 1)); + g_Console_BindKey(g_Console_FindBind(2, 'p1_weapon ' + IntToStr(i + 1)), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1, 'p1_weapon ' + IntToStr(i + 1)); end; end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP2Menu').GetControl('mOptionsControlsP2Menu')); - with menu, gGameControls.P2Control do - begin - KeyRight := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0; - KeyLeft := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0; - KeyUp := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0; - KeyDown := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0; - KeyFire := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0; - KeyJump := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0; - KeyNextWeapon := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0; - KeyPrevWeapon := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0; - KeyOpen := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0; - KeyStrafe := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0; + with menu do + begin + g_Console_BindKey(g_Console_FindBind(1, '+p2_moveright', '-p2_moveright'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_moveleft', '-p2_moveleft'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_lookup', '-p2_lookup'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_lookdown', '-p2_lookdown'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_attack', '-p2_attack'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_jump', '-p2_jump'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_weapnext', '-p2_weapnext'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_weapprev', '-p2_weapprev'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_activate', '-p2_activate'), ''); + g_Console_BindKey(g_Console_FindBind(1, '+p2_strafe', '-p2_strafe'), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0, '+p2_moveright', '-p2_moveright'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0, '+p2_moveleft', '-p2_moveleft'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0, '+p2_lookup', '-p2_lookup'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0, '+p2_lookdown', '-p2_lookdown'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0, '+p2_attack', '-p2_attack'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0, '+p2_jump', '-p2_jump'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0, '+p2_weapnext', '-p2_weapnext'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0, '+p2_weapprev', '-p2_weapprev'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0, '+p2_activate', '-p2_activate'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0, '+p2_strafe', '-p2_strafe'); // second set - KeyRight2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1; - KeyLeft2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1; - KeyUp2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1; - KeyDown2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1; - KeyFire2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1; - KeyJump2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1; - KeyNextWeapon2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1; - KeyPrevWeapon2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1; - KeyOpen2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1; - KeyStrafe2 := TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1; + g_Console_BindKey(g_Console_FindBind(2, '+p2_moveright', '-p2_moveright'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_moveleft', '-p2_moveleft'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_lookup', '-p2_lookup'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_lookdown', '-p2_lookdown'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_attack', '-p2_attack'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_jump', '-p2_jump'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_weapnext', '-p2_weapnext'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_weapprev', '-p2_weapprev'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_activate', '-p2_activate'), ''); + g_Console_BindKey(g_Console_FindBind(2, '+p2_strafe', '-p2_strafe'), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1, '+p2_moveright', '-p2_moveright'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1, '+p2_moveleft', '-p2_moveleft'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1, '+p2_lookup', '-p2_lookup'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1, '+p2_lookdown', '-p2_lookdown'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1, '+p2_attack', '-p2_attack'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1, '+p2_jump', '-p2_jump'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1, '+p2_weapnext', '-p2_weapnext'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1, '+p2_weapprev', '-p2_weapprev'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1, '+p2_activate', '-p2_activate'); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1, '+p2_strafe', '-p2_strafe'); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP2MenuWeapons').GetControl('mOptionsControlsP2MenuWeapons')); - with menu, gGameControls.P2Control do + with menu do begin for i := WP_FIRST to WP_LAST do begin - KeyWeapon[i] := TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0; - KeyWeapon2[i] := TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1; + g_Console_BindKey(g_Console_FindBind(1, 'p2_weapon ' + IntToStr(i + 1)), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0, 'p2_weapon ' + IntToStr(i + 1)); + g_Console_BindKey(g_Console_FindBind(2, 'p2_weapon ' + IntToStr(i + 1)), ''); + g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1, 'p2_weapon ' + IntToStr(i + 1)); end; end; - if e_JoysticksAvailable > 0 then + if e_HasJoysticks then begin menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsJoystickMenu').GetControl('mOptionsControlsJoystickMenu')); with menu do begin - for i := 0 to e_JoysticksAvailable-1 do - e_JoystickDeadzones[i] := TGUIScroll(menu.GetControl('scDeadzone' + IntToStr(i))).Value*(32767 div 20); - end; + for i := 0 to e_MaxJoys - 1 do + if e_JoystickAvailable[i] then + e_JoystickDeadzones[i] := TGUIScroll(menu.GetControl('scDeadzone' + IntToStr(i))).Value*(32767 div 20) + end + end; + + if g_touch_enabled then + begin + menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsTouchMenu').GetControl('mOptionsControlsTouchMenu')); + g_touch_alt := TGUISwitch(menu.GetControl('swTouchAlt')).ItemIndex = 1; + g_touch_size := TGUIScroll(menu.GetControl('scTouchSize')).Value / 10 + 0.5; + g_touch_fire := TGUISwitch(menu.GetControl('swTouchFire')).ItemIndex = 1; + g_touch_offset := TGUIScroll(menu.GetControl('scTouchOffset')).Value * 5; end; menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu')); @@ -253,7 +348,7 @@ begin with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mvP1Model')) do begin - gPlayer1Settings.Model := Model.Name; + gPlayer1Settings.Model := Model.GetName(); gPlayer1Settings.Color := Model.Color; end; @@ -264,12 +359,12 @@ begin TEAM_RED, TEAM_BLUE); with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP2Menu').GetControl('mvP2Model')) do begin - gPlayer2Settings.Model := Model.Name; + gPlayer2Settings.Model := Model.GetName(); gPlayer2Settings.Color := Model.Color; end; - if gPlayer1Settings.Name = '' then gPlayer1Settings.Name := 'Player1'; - if gPlayer2Settings.Name = '' then gPlayer2Settings.Name := 'Player2'; + if gPlayer1Settings.Name = '' then gPlayer1Settings.Name := GenPlayerName(1); + if gPlayer2Settings.Name = '' then gPlayer2Settings.Name := GenPlayerName(2); if g_Game_IsServer then begin @@ -300,7 +395,7 @@ begin if g_Game_IsClient then MC_SEND_PlayerSettings; - g_Options_Write(GameDir+'/'+CONFIG_FILENAME); + g_Console_WriteGameConfig; end; procedure ReadOptions(); @@ -323,7 +418,10 @@ begin if gVSync then ItemIndex := 0 else ItemIndex := 1; with TGUISwitch(menu.GetControl('swLegacyNPOT')) do - if not glLegacyNPOT then ItemIndex := 0 else ItemIndex := 1; + if not glNPOTOverride then ItemIndex := 0 else ItemIndex := 1; + + with TGUISwitch(menu.GetControl('swInterp')) do + if gLerpActors then ItemIndex := 0 else ItemIndex := 1; menu := TGUIMenu(g_GUI_GetWindow('OptionsSoundMenu').GetControl('mOptionsSoundMenu')); @@ -345,103 +443,129 @@ begin else ItemIndex := 0; + with TGUISwitch(menu.GetControl('swChatSpeech')) do + if gUseChatSounds then + ItemIndex := 0 + else + ItemIndex := 1; + menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP1Menu').GetControl('mOptionsControlsP1Menu')); - with menu, gGameControls.P1Control do - begin - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0 := KeyRight; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0 := KeyLeft; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0 := KeyUp; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0 := KeyDown; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0 := KeyFire; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0 := KeyJump; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0 := KeyNextWeapon; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0 := KeyPrevWeapon; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0 := KeyOpen; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0 := KeyStrafe; + with menu do + begin + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0 := g_Console_FindBind(1, '+p1_moveright', '-p1_moveright'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0 := g_Console_FindBind(1, '+p1_moveleft', '-p1_moveleft'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0 := g_Console_FindBind(1, '+p1_lookup', '-p1_lookup'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0 := g_Console_FindBind(1, '+p1_lookdown', '-p1_lookdown'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0 := g_Console_FindBind(1, '+p1_attack', '-p1_attack'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0 := g_Console_FindBind(1, '+p1_jump', '-p1_jump'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0 := g_Console_FindBind(1, '+p1_weapnext', '-p1_weapnext'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0 := g_Console_FindBind(1, '+p1_weapprev', '-p1_weapprev'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0 := g_Console_FindBind(1, '+p1_activate', '-p1_activate'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0 := g_Console_FindBind(1, '+p1_strafe', '-p1_strafe'); // second set - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1 := KeyRight2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1 := KeyLeft2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1 := KeyUp2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1 := KeyDown2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1 := KeyFire2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1 := KeyJump2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1 := KeyNextWeapon2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1 := KeyPrevWeapon2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1 := KeyOpen2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1 := KeyStrafe2; + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1 := g_Console_FindBind(2, '+p1_moveright', '-p1_moveright'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1 := g_Console_FindBind(2, '+p1_moveleft', '-p1_moveleft'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1 := g_Console_FindBind(2, '+p1_lookup', '-p1_lookup'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1 := g_Console_FindBind(2, '+p1_lookdown', '-p1_lookdown'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1 := g_Console_FindBind(2, '+p1_attack', '-p1_attack'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1 := g_Console_FindBind(2, '+p1_jump', '-p1_jump'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1 := g_Console_FindBind(2, '+p1_weapnext', '-p1_weapnext'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1 := g_Console_FindBind(2, '+p1_weapprev', '-p1_weapprev'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1 := g_Console_FindBind(2, '+p1_activate', '-p1_activate'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1 := g_Console_FindBind(2, '+p1_strafe', '-p1_strafe'); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP1MenuWeapons').GetControl('mOptionsControlsP1MenuWeapons')); - with menu, gGameControls.P1Control do + with menu do begin for i := WP_FIRST to WP_LAST do begin - TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0 := KeyWeapon[i]; - TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1 := KeyWeapon2[i]; + TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0 := g_Console_FindBind(1, 'p1_weapon ' + IntToStr(i + 1)); + TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1 := g_Console_FindBind(2, 'p1_weapon ' + IntToStr(i + 1)); end; end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP2Menu').GetControl('mOptionsControlsP2Menu')); - with menu, gGameControls.P2Control do - begin - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0 := KeyRight; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0 := KeyLeft; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0 := KeyUp; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0 := KeyDown; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0 := KeyFire; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0 := KeyJump; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0 := KeyNextWeapon; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0 := KeyPrevWeapon; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0 := KeyOpen; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0 := KeyStrafe; + with menu do + begin + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0 := g_Console_FindBind(1, '+p2_moveright', '-p2_moveright'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key0 := g_Console_FindBind(1, '+p2_moveleft', '-p2_moveleft'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key0 := g_Console_FindBind(1, '+p2_lookup', '-p2_lookup'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key0 := g_Console_FindBind(1, '+p2_lookdown', '-p2_lookdown'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key0 := g_Console_FindBind(1, '+p2_attack', '-p2_attack'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0 := g_Console_FindBind(1, '+p2_jump', '-p2_jump'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0 := g_Console_FindBind(1, '+p2_weapnext', '-p2_weapnext'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0 := g_Console_FindBind(1, '+p2_weapprev', '-p2_weapprev'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key0 := g_Console_FindBind(1, '+p2_activate', '-p2_activate'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key0 := g_Console_FindBind(1, '+p2_strafe', '-p2_strafe'); // second set - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1 := KeyRight2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1 := KeyLeft2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1 := KeyUp2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1 := KeyDown2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1 := KeyFire2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1 := KeyJump2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1 := KeyNextWeapon2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1 := KeyPrevWeapon2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1 := KeyOpen2; - TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1 := KeyStrafe2; + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1 := g_Console_FindBind(2, '+p2_moveright', '-p2_moveright'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_LEFT])).Key1 := g_Console_FindBind(2, '+p2_moveleft', '-p2_moveleft'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_UP])).Key1 := g_Console_FindBind(2, '+p2_lookup', '-p2_lookup'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DOWN])).Key1 := g_Console_FindBind(2, '+p2_lookdown', '-p2_lookdown'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_FIRE])).Key1 := g_Console_FindBind(2, '+p2_attack', '-p2_attack'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1 := g_Console_FindBind(2, '+p2_jump', '-p2_jump'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1 := g_Console_FindBind(2, '+p2_weapnext', '-p2_weapnext'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1 := g_Console_FindBind(2, '+p2_weapprev', '-p2_weapprev'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_USE])).Key1 := g_Console_FindBind(2, '+p2_activate', '-p2_activate'); + TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_STRAFE])).Key1 := g_Console_FindBind(2, '+p2_strafe', '-p2_strafe'); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP2MenuWeapons').GetControl('mOptionsControlsP2MenuWeapons')); - with menu, gGameControls.P2Control do + with menu do begin for i := WP_FIRST to WP_LAST do begin - TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0 := KeyWeapon[i]; - TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1 := KeyWeapon2[i]; + TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key0 := g_Console_FindBind(1, 'p2_weapon ' + IntToStr(i + 1)); + TGUIKeyRead2(GetControl(_lc[TStrings_Locale(Cardinal(I_GAME_WEAPON0) + i)])).Key1 := g_Console_FindBind(2, 'p2_weapon ' + IntToStr(i + 1)); end; end; - if e_JoysticksAvailable > 0 then + if e_HasJoysticks then begin menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsJoystickMenu').GetControl('mOptionsControlsJoystickMenu')); with menu do begin - for i := 0 to e_JoysticksAvailable-1 do - TGUIScroll(menu.GetControl('scDeadzone' + IntToStr(i))).Value := e_JoystickDeadzones[i] div (32767 div 20); - end; + for i := 0 to e_MaxJoys - 1 do + if e_JoystickAvailable[i] then + TGUIScroll(menu.GetControl('scDeadzone' + IntToStr(i))).Value := e_JoystickDeadzones[i] div (32767 div 20) + end + end; + + if g_touch_enabled then + begin + menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsTouchMenu').GetControl('mOptionsControlsTouchMenu')); + with TGUISwitch(menu.GetControl('swTouchAlt')) do + if g_touch_alt then ItemIndex := 1 else ItemIndex := 0; + TGUIScroll(menu.GetControl('scTouchSize')).Value := Round((g_touch_size - 0.5) * 10); + with TGUISwitch(menu.GetControl('swTouchFire')) do + if g_touch_fire then ItemIndex := 1 else ItemIndex := 0; + TGUIScroll(menu.GetControl('scTouchOffset')).Value := Round(g_touch_offset / 5); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsMenu').GetControl('mOptionsControlsMenu')); - with menu, gGameControls.GameControls do + with menu do begin - TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_SCREENSHOT])).Key := TakeScreenshot; - TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_STAT])).Key := Stat; - TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_CHAT])).Key := Chat; - TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_TEAMCHAT])).Key := TeamChat; + TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_SCREENSHOT])).Key := g_Console_FindBind(1, 'screenshot'); + TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_STAT])).Key := g_Console_FindBind(1, '+p1_scores', '-p1_scores'); + TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_CHAT])).Key := g_Console_FindBind(1, 'togglechat'); + TGUIKeyRead(GetControl(_lc[I_MENU_CONTROL_TEAMCHAT])).Key := g_Console_FindBind(1, 'toggleteamchat'); end; menu := TGUIMenu(g_GUI_GetWindow('OptionsGameMenu').GetControl('mOptionsGameMenu')); - TGUIScroll(menu.GetControl('scParticlesCount')).Value := g_GFX_GetMax() div 1000; - TGUIScroll(menu.GetControl('scShellsMax')).Value := g_Shells_GetMax() div 30; - TGUIScroll(menu.GetControl('scGibsMax')).Value := g_Gibs_GetMax() div 25; - TGUIScroll(menu.GetControl('scCorpsesMax')).Value := g_Corpses_GetMax() div 5; + {$IFDEF ENABLE_GFX} + TGUIScroll(menu.GetControl('scParticlesCount')).Value := g_GFX_GetMax() div 1000; + {$ENDIF} + {$IFDEF ENABLE_SHELLS} + TGUIScroll(menu.GetControl('scShellsMax')).Value := g_Shells_GetMax() div 30; + {$ENDIF} + {$IFDEF ENABLE_GIBS} + TGUIScroll(menu.GetControl('scGibsMax')).Value := g_Gibs_GetMax() div 25; + {$ENDIF} + {$IFDEF ENABLE_CORPSES} + TGUIScroll(menu.GetControl('scCorpsesMax')).Value := g_Corpses_GetMax() div 5; + {$ENDIF} TGUISwitch(menu.GetControl('swBloodCount')).ItemIndex := gBloodCount; with TGUISwitch(menu.GetControl('swScreenFlash')) do @@ -456,14 +580,18 @@ begin with TGUISwitch(menu.GetControl('swGibsType')) do if gAdvGibs then ItemIndex := 1 else ItemIndex := 0; - with TGUISwitch(menu.GetControl('swGibsCount')) do - case gGibsCount of - 0: ItemIndex := 0; - 8: ItemIndex := 1; - 16: ItemIndex := 2; - 32: ItemIndex := 3; - else ItemIndex := 4; + {$IFDEF ENABLE_GIBS} + with TGUISwitch(menu.GetControl('swGibsCount')) do + begin + case gGibsCount of + 0: ItemIndex := 0; + 8: ItemIndex := 1; + 16: ItemIndex := 2; + 32: ItemIndex := 3; + else ItemIndex := 4; + end; end; + {$ENDIF} with TGUISwitch(menu.GetControl('swBackGround')) do if gDrawBackGround then ItemIndex := 0 else ItemIndex := 1; @@ -477,6 +605,15 @@ begin with TGUISwitch(menu.GetControl('swChatBubble')) do ItemIndex := gChatBubble; + with TGUISwitch(menu.GetControl('swPlayerIndicator')) do + ItemIndex := gPlayerIndicator; + + with TGUISwitch(menu.GetControl('swPlayerIndicatorStyle')) do + ItemIndex := gPlayerIndicatorStyle; + + TempScale := Round(g_dbg_scale - 1); + TGUIScroll(menu.GetControl('scScaleFactor')).Value := TempScale; + menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu')); TGUIListBox(menu.GetControl('lsP1Model')).SelectItem(gPlayer1Settings.Model); @@ -540,118 +677,83 @@ begin } end; -procedure ProcStartCustomGame(); +function LatchGameOptions(const MenuName: string): Byte; var - Map: String; - GameMode: Byte; - Options: LongWord; + Map: string; begin - with TGUIMenu(g_ActiveWindow.GetControl('mCustomGameMenu')) do + Result := GM_NONE; + + with TGUIMenu(g_ActiveWindow.GetControl(MenuName)) do begin Map := TGUILabel(GetControl('lbMap')).Text; if Map = '' then Exit; - if Pos(':\', Map) = 0 then + if not isWadPath(Map) then Exit; - GameMode := TGUISwitch(GetControl('swGameMode')).ItemIndex+1; - gcGameMode := TGUISwitch(GetControl('swGameMode')).GetText; - gcTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); - gcGoalLimit := StrToIntDef(TGUIEdit(GetControl('edGoalLimit')).Text, 0); - gcMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); - - gcTeamDamage := TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0; - gcAllowExit := TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0; - gcWeaponStay := TGUISwitch(GetControl('swWeaponStay')).ItemIndex = 0; - gcMonsters := TGUISwitch(GetControl('swMonsters')).ItemIndex = 0; - Options := 0; - if gcTeamDamage then - Options := Options or GAME_OPTION_TEAMDAMAGE; - if gcAllowExit then - Options := Options or GAME_OPTION_ALLOWEXIT; - if gcWeaponStay then - Options := Options or GAME_OPTION_WEAPONSTAY; - if gcMonsters then - Options := Options or GAME_OPTION_MONSTERS; - gcPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex; + Result := TGUISwitch(GetControl('swGameMode')).ItemIndex+1; + gsGameMode := TGUISwitch(GetControl('swGameMode')).GetText; + gsTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); + gsGoalLimit := StrToIntDef(TGUIEdit(GetControl('edGoalLimit')).Text, 0); + gsMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); + gsItemRespawnTime := StrToIntDef(TGUIEdit(GetControl('edItemRespawnTime')).Text, 0); + gsPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex; + gsMap := Map; + + gsGameFlags := 0; + if TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_TEAMDAMAGE; + if TGUISwitch(GetControl('swDeathmatchKeys')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_DMKEYS; + if TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_ALLOWEXIT; + if TGUISwitch(GetControl('swWeaponStay')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_WEAPONSTAY; + if TGUISwitch(GetControl('swMonsters')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_MONSTERS; + + case TGUISwitch(GetControl('swTeamHit')).ItemIndex of + 1: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITTRACE; + 2: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITPROJECTILE; + 0: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE; + end; case TGUISwitch(GetControl('swBotsVS')).ItemIndex of - 1: begin - Options := Options or GAME_OPTION_BOTVSMONSTER; - gcBotsVS := 'Monsters'; - end; - 2: begin - Options := Options or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER; - gcBotsVS := 'Everybody'; - end; - else begin - Options := Options or GAME_OPTION_BOTVSPLAYER; - gcBotsVS := 'Players'; - end; + 1: gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSMONSTER; + 2: gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER; + else gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSPLAYER; end; - gcMap := Map; + // TODO: get this crap out of here + gGameSettings.ItemRespawnTime := gsItemRespawnTime; + gGameSettings.WarmupTime := gsWarmupTime; + gGameSettings.SpawnInvul := gsSpawnInvul; end; +end; - g_Options_Write_Gameplay_Custom(GameDir+'/'+CONFIG_FILENAME); +procedure ProcStartCustomGame(); +var + GameMode: Byte; +begin + GameMode := LatchGameOptions('mCustomGameMenu'); + if GameMode = GM_NONE then Exit; - g_Game_StartCustom(Map, GameMode, gcTimeLimit, gcGoalLimit, - gcMaxLives, Options, gcPlayers); + g_Console_WriteGameConfig; + g_Game_StartCustom(gsMap, GameMode, gsTimeLimit, gsGoalLimit, + gsMaxLives, gsGameFlags, gsPlayers); end; procedure ProcStartNetGame(); var - Map: String; GameMode: Byte; - Options: LongWord; begin + GameMode := LatchGameOptions('mNetServerMenu'); + if GameMode = GM_NONE then Exit; + with TGUIMenu(g_ActiveWindow.GetControl('mNetServerMenu')) do begin - Map := TGUILabel(GetControl('lbMap')).Text; - if Map = '' then - Exit; - if Pos(':\', Map) = 0 then - Exit; - - GameMode := TGUISwitch(GetControl('swGameMode')).ItemIndex+1; - gnGameMode := TGUISwitch(GetControl('swGameMode')).GetText; - gnTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); - gnGoalLimit := StrToIntDef(TGUIEdit(GetControl('edGoalLimit')).Text, 0); - gnMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); NetPort := StrToIntDef(TGUIEdit(GetControl('edPort')).Text, 0); - - gnTeamDamage := TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0; - gnAllowExit := TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0; - gnWeaponStay := TGUISwitch(GetControl('swWeaponStay')).ItemIndex = 0; - gnMonsters := TGUISwitch(GetControl('swMonsters')).ItemIndex = 0; - Options := 0; - if gnTeamDamage then - Options := Options or GAME_OPTION_TEAMDAMAGE; - if gnAllowExit then - Options := Options or GAME_OPTION_ALLOWEXIT; - if gnWeaponStay then - Options := Options or GAME_OPTION_WEAPONSTAY; - if gnMonsters then - Options := Options or GAME_OPTION_MONSTERS; - gnPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex; - - case TGUISwitch(GetControl('swBotsVS')).ItemIndex of - 1: begin - Options := Options or GAME_OPTION_BOTVSMONSTER; - gnBotsVS := 'Monsters'; - end; - 2: begin - Options := Options or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER; - gnBotsVS := 'Everybody'; - end; - else begin - Options := Options or GAME_OPTION_BOTVSPLAYER; - gnBotsVS := 'Players'; - end; - end; - - gnMap := Map; NetServerName := TGUIEdit(GetControl('edSrvName')).Text; NetMaxClients := Max(1, StrToIntDef(TGUIEdit(GetControl('edMaxPlayers')).Text, 1)); NetMaxClients := Min(NET_MAXCLIENTS, NetMaxClients); @@ -659,11 +761,9 @@ begin NetUseMaster := TGUISwitch(GetControl('swUseMaster')).ItemIndex = 0; end; - g_Options_Write_Net_Server(GameDir+'/'+CONFIG_FILENAME); - g_Options_Write_Gameplay_Net(GameDir+'/'+CONFIG_FILENAME); - - g_Game_StartServer(Map, GameMode, gnTimeLimit, gnGoalLimit, gnMaxLives, - Options, gnPlayers, 0, NetPort); + g_Console_WriteGameConfig; + g_Game_StartServer(gsMap, GameMode, gsTimeLimit, gsGoalLimit, gsMaxLives, + gsGameFlags, gsPlayers, 0, NetPort); end; procedure ProcConnectNetGame(); @@ -677,7 +777,7 @@ begin PW := TGUIEdit(GetControl('edPW')).Text; end; - g_Options_Write_Net_Client(GameDir+'/'+CONFIG_FILENAME); + g_Console_WriteGameConfig; g_Game_StartClient(NetClientIP, NetClientPort, PW); end; @@ -692,7 +792,7 @@ begin PW := TGUIEdit(GetControl('edPW')).Text; end; - g_Options_Write_Net_Client(GameDir+'/'+CONFIG_FILENAME); + g_Console_WriteGameConfig; g_Game_StartClient(NetClientIP, NetClientPort, PW); end; @@ -709,15 +809,19 @@ begin NetInitDone := True; end; - g_Net_Slist_Set(NetSlistIP, NetSlistPort); + g_Net_Slist_Set(NetMasterList); gState := STATE_SLIST; g_ActiveWindow := nil; slWaitStr := _lc[I_NET_SLIST_WAIT]; - g_Game_Draw; - ReDrawWindow; + {$IFDEF ENABLE_RENDER} + r_Render_Draw; + {$ENDIF} + {$IFDEF ENABLE_SYSTEM} + sys_Repaint; + {$ENDIF} slReturnPressed := True; if g_Net_Slist_Fetch(slCurrent) then @@ -727,6 +831,7 @@ begin end else slWaitStr := _lc[I_NET_SLIST_ERROR]; + g_Serverlist_GenerateTable(slCurrent, slTable); end; procedure ProcStartCampaign(); @@ -737,9 +842,10 @@ var begin with TGUIMenu(g_ActiveWindow.GetControl('mCampaignMenu')) do begin - WAD := ExtractRelativePath(MapsDir, TGUIFileListBox(GetControl('lsWAD')).SelectedItem()); + WAD := TGUIFileListBox(GetControl('lsWAD')).SelectedItem(); TwoPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex = 1; end; + WAD := e_FindWadRel(MegawadDirs, WAD); if TwoPlayers then n := 2 @@ -789,7 +895,7 @@ end; procedure ProcSelectWAD(Sender: TGUIControl); var wad: String; - list: SArray; + list: SSArray; begin with TGUIMenu(g_GUI_GetWindow('SelectMapMenu').GetControl('mSelectMapMenu')) do begin @@ -887,118 +993,9 @@ begin ProcChangeColor(nil); end; -procedure LoadStdFont(cfgres, texture: string; var FontID: DWORD); -var - cwdt, chgt: Byte; - spc: ShortInt; - ID: DWORD; - wad: TWADFile; - cfgdata: Pointer; - cfglen: Integer; - config: TConfig; -begin - cfglen := 0; - - wad := TWADFile.Create; - if wad.ReadFile(GameWAD) then - wad.GetResource('FONTS/'+cfgres, cfgdata, cfglen); - wad.Free(); - - if cfglen <> 0 then - begin - g_Texture_CreateWADEx('FONT_STD', GameWAD+':FONTS\'+texture); - - config := TConfig.CreateMem(cfgdata, cfglen); - cwdt := Min(Max(config.ReadInt('FontMap', 'CharWidth', 0), 0), 255); - chgt := Min(Max(config.ReadInt('FontMap', 'CharHeight', 0), 0), 255); - spc := Min(Max(config.ReadInt('FontMap', 'Kerning', 0), -128), 127); - - if g_Texture_Get('FONT_STD', ID) then - e_TextureFontBuild(ID, FontID, cwdt, chgt, spc); - - config.Free(); - end; - - if cfglen <> 0 then FreeMem(cfgdata); -end; - -procedure LoadFont(txtres, fntres: string; var FontID: DWORD); -var - cwdt, chgt: Byte; - spc: ShortInt; - CharID: DWORD; - wad: TWADFile; - cfgdata, fntdata: Pointer; - cfglen, fntlen: Integer; - config: TConfig; - chrwidth: Integer; - a: Byte; -begin - cfglen := 0; - fntlen := 0; - - wad := TWADFile.Create; - if wad.ReadFile(GameWAD) then - begin - wad.GetResource('FONTS/'+txtres, cfgdata, cfglen); - wad.GetResource('FONTS/'+fntres, fntdata, fntlen); - end; - wad.Free(); - - if cfglen <> 0 then - begin - config := TConfig.CreateMem(cfgdata, cfglen); - cwdt := Min(Max(config.ReadInt('FontMap', 'CharWidth', 0), 0), 255); - chgt := Min(Max(config.ReadInt('FontMap', 'CharHeight', 0), 0), 255); - - spc := Min(Max(config.ReadInt('FontMap', 'Kerning', 0), -128), 127); - FontID := e_CharFont_Create(spc); - - for a := 0 to 255 do - begin - chrwidth := config.ReadInt(IntToStr(a), 'Width', 0); - if chrwidth = 0 then Continue; - - if e_CreateTextureMemEx(fntdata, fntlen, CharID, cwdt*(a mod 16), chgt*(a div 16), - cwdt, chgt) then - e_CharFont_AddChar(FontID, CharID, Chr(a), chrwidth); - end; - - config.Free(); - end; - - if cfglen <> 0 then FreeMem(cfgdata); - if fntlen <> 0 then FreeMem(fntdata); -end; - procedure MenuLoadData(); begin - e_WriteLog('Loading menu data...', MSG_NOTIFY); - - g_Texture_CreateWADEx('MAINMENU_MARKER1', GameWAD+':TEXTURES\MARKER1'); - g_Texture_CreateWADEx('MAINMENU_MARKER2', GameWAD+':TEXTURES\MARKER2'); - g_Texture_CreateWADEx('SCROLL_LEFT', GameWAD+':TEXTURES\SLEFT'); - g_Texture_CreateWADEx('SCROLL_RIGHT', GameWAD+':TEXTURES\SRIGHT'); - g_Texture_CreateWADEx('SCROLL_MIDDLE', GameWAD+':TEXTURES\SMIDDLE'); - g_Texture_CreateWADEx('SCROLL_MARKER', GameWAD+':TEXTURES\SMARKER'); - g_Texture_CreateWADEx('EDIT_LEFT', GameWAD+':TEXTURES\ELEFT'); - g_Texture_CreateWADEx('EDIT_RIGHT', GameWAD+':TEXTURES\ERIGHT'); - g_Texture_CreateWADEx('EDIT_MIDDLE', GameWAD+':TEXTURES\EMIDDLE'); - g_Texture_CreateWADEx('BOX1', GameWAD+':TEXTURES\BOX1'); - g_Texture_CreateWADEx('BOX2', GameWAD+':TEXTURES\BOX2'); - g_Texture_CreateWADEx('BOX3', GameWAD+':TEXTURES\BOX3'); - g_Texture_CreateWADEx('BOX4', GameWAD+':TEXTURES\BOX4'); - g_Texture_CreateWADEx('BOX5', GameWAD+':TEXTURES\BOX5'); - g_Texture_CreateWADEx('BOX6', GameWAD+':TEXTURES\BOX6'); - g_Texture_CreateWADEx('BOX7', GameWAD+':TEXTURES\BOX7'); - g_Texture_CreateWADEx('BOX8', GameWAD+':TEXTURES\BOX8'); - g_Texture_CreateWADEx('BOX9', GameWAD+':TEXTURES\BOX9'); - g_Texture_CreateWADEx('BSCROLL_UP_A', GameWAD+':TEXTURES\SCROLLUPA'); - g_Texture_CreateWADEx('BSCROLL_UP_U', GameWAD+':TEXTURES\SCROLLUPU'); - g_Texture_CreateWADEx('BSCROLL_DOWN_A', GameWAD+':TEXTURES\SCROLLDOWNA'); - g_Texture_CreateWADEx('BSCROLL_DOWN_U', GameWAD+':TEXTURES\SCROLLDOWNU'); - g_Texture_CreateWADEx('BSCROLL_MIDDLE', GameWAD+':TEXTURES\SCROLLMIDDLE'); - g_Texture_CreateWADEx('NOPIC', GameWAD+':TEXTURES\NOPIC'); + e_WriteLog('Loading menu data...', TMsgType.Notify); g_Sound_CreateWADEx('MENU_SELECT', GameWAD+':SOUNDS\MENUSELECT'); g_Sound_CreateWADEx('MENU_OPEN', GameWAD+':SOUNDS\MENUOPEN'); @@ -1011,34 +1008,6 @@ end; procedure MenuFreeData(); begin - e_CharFont_Remove(gMenuFont); - e_CharFont_Remove(gMenuSmallFont); - - g_Texture_Delete('MAINMENU_MARKER1'); - g_Texture_Delete('MAINMENU_MARKER2'); - g_Texture_Delete('SCROLL_LEFT'); - g_Texture_Delete('SCROLL_RIGHT'); - g_Texture_Delete('SCROLL_MIDDLE'); - g_Texture_Delete('SCROLL_MARKER'); - g_Texture_Delete('EDIT_LEFT'); - g_Texture_Delete('EDIT_RIGHT'); - g_Texture_Delete('EDIT_MIDDLE'); - g_Texture_Delete('BOX1'); - g_Texture_Delete('BOX2'); - g_Texture_Delete('BOX3'); - g_Texture_Delete('BOX4'); - g_Texture_Delete('BOX5'); - g_Texture_Delete('BOX6'); - g_Texture_Delete('BOX7'); - g_Texture_Delete('BOX8'); - g_Texture_Delete('BOX9'); - g_Texture_Delete('BSCROLL_UP_A'); - g_Texture_Delete('BSCROLL_UP_U'); - g_Texture_Delete('BSCROLL_DOWN_A'); - g_Texture_Delete('BSCROLL_DOWN_U'); - g_Texture_Delete('BSCROLL_MIDDLE'); - g_Texture_Delete('NOPIC'); - g_Sound_Delete('MENU_SELECT'); g_Sound_Delete('MENU_OPEN'); g_Sound_Delete('MENU_CLOSE'); @@ -1099,19 +1068,28 @@ end; procedure ProcLoadMenu(); var a: Integer; + valid: Boolean; begin for a := 1 to 8 do - TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Text := - g_GetSaveName(a); + begin + TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Text := g_GetSaveName(a, valid); + TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := not valid; + //TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a)).Enabled := valid; + end; end; procedure ProcSaveMenu(); var a: Integer; + valid: Boolean; + name: AnsiString; begin for a := 1 to 8 do - TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Text := - g_GetSaveName(a); + begin + name := g_GetSaveName(a, valid); + TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Text := name; + TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := (name <> '') and (not valid); + end; end; procedure ProcSaveGame(Sender: TGUIControl); @@ -1135,19 +1113,38 @@ begin if g_Game_IsNet then Exit; a := StrToInt(Copy(Sender.Name, Length(Sender.Name), 1)); if g_LoadGame(a) then + begin g_Game_PauseAllSounds(False) + end else // Íå çàãðóçèëîñü - âîçâðàò â ìåíþ + begin + g_Console_Add(_lc[I_MSG_BAD_SAVE_VERSION], true); g_GUI_GetWindow('LoadMenu').SetActive(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')); + //g_ActiveWindow := nil; + end; +end; + +procedure ProcSinglePlayer (n: Integer); + var wad, map: AnsiString; +begin + assert(n >= 1); + wad := g_ExtractWadName(gDefaultMegawadStart); + map := g_ExtractFilePathName(gDefaultMegawadStart); + if e_FindResource(AllMapDirs, wad) then + begin + wad := ExpandFileName(wad); + g_Game_StartSingle(wad + ':\' + map, n > 1, n) + end end; -procedure ProcSingle1Player(); +procedure ProcSingle1Player; begin - g_Game_StartSingle(gDefaultMegawadStart, False, 1); + ProcSinglePlayer(1) end; -procedure ProcSingle2Players(); +procedure ProcSingle2Players; begin - g_Game_StartSingle(gDefaultMegawadStart, True, 2); + ProcSinglePlayer(2) end; procedure ProcSelectMapMenu(); @@ -1201,13 +1198,15 @@ var begin with TGUIMenu(g_ActiveWindow.GetControl('mSelectMapMenu')) do begin - wad := ExtractRelativePath(MapsDir, TGUIFileListBox(GetControl('lsMapWAD')).SelectedItem()); + wad := TGUIFileListBox(GetControl('lsMapWAD')).SelectedItem(); map := TGUIListBox(GetControl('lsMapRes')).SelectedItem(); end; if (wad = '') or (map = '') then Exit; + wad := e_FindWadRel(MapDirs, WAD); + res := wad+':\'+map; TGUILabel(TGUIMenu(g_GUI_GetWindow('CustomGameMenu').GetControl('mCustomGameMenu')).GetControl('lbMap')).Text := res; @@ -1226,10 +1225,32 @@ begin ); end; +procedure ProcChangeGameSettings(Sender: TGUIControl); +var + menu: TGUIMenu; +begin + menu := TGUIMenu(g_GUI_GetWindow('OptionsGameMenu').GetControl('mOptionsGameMenu')); + if TGUIScroll(menu.GetControl('scScaleFactor')).Value <> TempScale then + begin + TempScale := TGUIScroll(menu.GetControl('scScaleFactor')).Value; + g_dbg_scale := TempScale + 1; + end; +end; + +procedure ProcChangeTouchSettings(Sender: TGUIControl); +var + menu: TGUIMenu; +begin + menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsTouchMenu').GetControl('mOptionsControlsTouchMenu')); + g_touch_alt := TGUISwitch(menu.GetControl('swTouchAlt')).ItemIndex = 1; + g_touch_size := TGUIScroll(menu.GetControl('scTouchSize')).Value / 10 + 0.5; + g_touch_offset := TGUIScroll(menu.GetControl('scTouchOffset')).Value * 5; +end; + procedure ProcOptionsPlayersMIMenu(); var s, a: string; - b: TModelInfo; + i: Integer; begin if g_ActiveWindow.Name = 'OptionsPlayersP1Menu' then s := 'P1' else s := 'P2'; @@ -1237,15 +1258,14 @@ begin if a = '' then Exit; - b := g_PlayerModel_GetInfo(a); - + i := g_PlayerModel_GetIndex(a); with TGUIMenu(g_GUI_GetWindow('OptionsPlayersMIMenu').GetControl('mOptionsPlayersMIMenu')) do begin - TGUILabel(GetControl('lbName')).Text := b.Name; - TGUILabel(GetControl('lbAuthor')).Text := b.Author; - TGUIMemo(GetControl('meComment')).SetText(b.Description); + TGUILabel(GetControl('lbName')).Text := PlayerModelsArray[i].Name; + TGUILabel(GetControl('lbAuthor')).Text := PlayerModelsArray[i].Author; + TGUIMemo(GetControl('meComment')).SetText(PlayerModelsArray[i].Description); - if b.HaveWeapon then + if PlayerModelsArray[i].HaveWeapon then TGUILabel(GetControl('lbWeapon')).Text := _lc[I_MENU_YES] else TGUILabel(GetControl('lbWeapon')).Text := _lc[I_MENU_NO]; @@ -1266,8 +1286,7 @@ begin with TGUIModelView(g_ActiveWindow.GetControl('mv'+s+'Model')) do begin NextAnim(); - Model.GetCurrentAnimation.Loop := True; - Model.GetCurrentAnimationMask.Loop := True; + Model.AnimState.Loop := True; end; end; @@ -1290,7 +1309,9 @@ var begin if g_ActiveWindow.Name = 'OptionsPlayersP1Menu' then s := 'P1' else s := 'P2'; with TGUIModelView(g_ActiveWindow.GetControl('mv'+s+'Model')).Model do - if Direction = D_LEFT then Direction := D_RIGHT else Direction := D_LEFT; + begin + if Direction = TDirection.D_LEFT then Direction := TDirection.D_RIGHT else Direction := TDirection.D_LEFT; + end; end; procedure ProcDefaultMenuKeyDown (yes: Boolean); @@ -1327,8 +1348,8 @@ var begin Enabled := True; if (gGameSettings.GameType = GT_SINGLE) and - ((gPlayer1 = nil) or (not gPlayer1.Live)) and - ((gPlayer2 = nil) or (not gPlayer2.Live)) then + ((gPlayer1 = nil) or (not gPlayer1.alive)) and + ((gPlayer2 = nil) or (not gPlayer2.alive)) then Enabled := False; // Îäèí èç èãðîêîâ ïîãèá â ñèíãëå if not gGameOn then Enabled := False; // Çàïðåòèòü ñîõðàíåíèå â èíòåðìèññèè (íå ðåàëèçîâàíî) @@ -1479,32 +1500,24 @@ begin if yes then gExit := EXIT_SIMPLE else g_GUI_HideWindow; end; -procedure ProcSetRussianLanguage(); +procedure ProcSetRussianLanguage; begin if gLanguage <> LANGUAGE_RUSSIAN then begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); - - // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; -procedure ProcSetEnglishLanguage(); +procedure ProcSetEnglishLanguage; begin if gLanguage <> LANGUAGE_ENGLISH then begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); - - // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; @@ -1522,6 +1535,20 @@ begin ItemIndex := 0 else ItemIndex := 1; + with TGUISwitch(menu.GetControl('swTeamHit')) do + if (Options and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE)) = (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE) then + ItemIndex := 0 + else if LongBool(Options and GAME_OPTION_TEAMHITTRACE) then + ItemIndex := 1 + else if LongBool(Options and GAME_OPTION_TEAMHITPROJECTILE) then + ItemIndex := 2 + else + ItemIndex := 3; + with TGUISwitch(menu.GetControl('swDeathmatchKeys')) do + if LongBool(Options and GAME_OPTION_DMKEYS) then + ItemIndex := 0 + else + ItemIndex := 1; TGUIEdit(menu.GetControl('edTimeLimit')).Text := IntToStr(TimeLimit); TGUIEdit(menu.GetControl('edGoalLimit')).Text := IntToStr(GoalLimit); @@ -1540,6 +1567,17 @@ begin if GameType in [GT_CUSTOM, GT_SERVER] then begin TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True; + TGUISwitch(menu.GetControl('swTeamHit')).Enabled := True; + if (GameMode in [GM_DM, GM_TDM, GM_CTF]) then + begin + TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := True; + TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_ITEMSTEXT_COLOR; + end + else + begin + TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := False; + TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_UNACTIVEITEMS_COLOR; + end; TGUIEdit(menu.GetControl('edTimeLimit')).Enabled := True; TGUILabel(menu.GetControlsText('edTimeLimit')).Color := MENU_ITEMSTEXT_COLOR; TGUIEdit(menu.GetControl('edGoalLimit')).Enabled := True; @@ -1551,6 +1589,9 @@ begin else begin TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True; + TGUISwitch(menu.GetControl('swTeamHit')).Enabled := True; + TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := False; + TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_UNACTIVEITEMS_COLOR; with TGUIEdit(menu.GetControl('edTimeLimit')) do begin Enabled := False; @@ -1594,6 +1635,24 @@ begin Options := Options and (not GAME_OPTION_TEAMDAMAGE); end; + if TGUISwitch(menu.GetControl('swTeamHit')).Enabled then + begin + Options := Options and not (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE); + case TGUISwitch(menu.GetControl('swTeamHit')).ItemIndex of + 1: Options := Options or GAME_OPTION_TEAMHITTRACE; + 2: Options := Options or GAME_OPTION_TEAMHITPROJECTILE; + 0: Options := Options or GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE; + end; + end; + + if TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled then + begin + if TGUISwitch(menu.GetControl('swDeathmatchKeys')).ItemIndex = 0 then + Options := Options or GAME_OPTION_DMKEYS + else + Options := Options and (not GAME_OPTION_DMKEYS); + end; + if TGUIEdit(menu.GetControl('edTimeLimit')).Enabled then begin n := StrToIntDef(TGUIEdit(menu.GetControl('edTimeLimit')).Text, TimeLimit); @@ -1672,6 +1731,12 @@ begin end; end; end; + + // don't forget to latch this shit + gsGameFlags := Options; + gsMaxLives := MaxLives; + gsGoalLimit := GoalLimit; + gsTimeLimit := TimeLimit; end; if g_Game_IsNet then MH_SEND_GameSettings; @@ -1680,27 +1745,31 @@ end; procedure ProcVideoOptionsRes(); var menu: TGUIMenu; - list: SArray; - SR: DWORD; + list: SSArray; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu')); TGUILabel(menu.GetControl('lbCurrentRes')).Text := - IntToStr(gScreenWidth) + - ' x ' + IntToStr(gScreenHeight) + + IntToStr(gWinSizeX) + + ' x ' + IntToStr(gWinSizeY) + ', ' + IntToStr(gBPP) + ' bpp'; with TGUIListBox(menu.GetControl('lsResolution')) do begin - list := GetDisplayModes(gBPP, SR); - + {$IFDEF ENABLE_SYSTEM} + list := sys_GetDisplayModes(gBPP); + {$ELSE} + list := nil; + {$ENDIF} if list <> nil then - begin - Items := list; - ItemIndex := SR; - end + begin + Items := list; + ItemIndex := Length(list) + end else - Clear(); + begin + Clear + end end; with TGUISwitch(menu.GetControl('swFullScreen')) do @@ -1708,6 +1777,10 @@ begin ItemIndex := 0 else ItemIndex := 1; + + TempResScale := Round(r_pixel_scale - 1); + with TGUISwitch(menu.GetControl('swResFactor')) do + ItemIndex := Min(TempResScale, gRC_Width div 640 - 1); end; procedure ProcApplyVideoOptions(); @@ -1715,18 +1788,35 @@ var menu: TGUIMenu; Fullscreen: Boolean; SWidth, SHeight: Integer; + ScaleChanged: Boolean; str: String; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu')); str := TGUIListBox(menu.GetControl('lsResolution')).SelectedItem; - SScanf(str, '%dx%d', [@SWidth, @SHeight]); + if str <> '' then + SScanf(str, '%dx%d', [@SWidth, @SHeight]) + else + begin + SWidth := gWinSizeX; + SHeight := gWinSizeY; + TempResScale := Min(TempResScale, SWidth div 640 - 1); + end; Fullscreen := TGUISwitch(menu.GetControl('swFullScreen')).ItemIndex = 0; - if (SWidth <> gScreenWidth) or - (SHeight <> gScreenHeight) or - (Fullscreen <> gFullscreen) then + ScaleChanged := False; + if TGUISwitch(menu.GetControl('swResFactor')).ItemIndex <> TempResScale then + begin + TempResScale := Min(TGUISwitch(menu.GetControl('swResFactor')).ItemIndex, SWidth div 640 - 1); + r_pixel_scale := TempResScale + 1; + ScaleChanged := True; + end; + + if (SWidth <> gWinSizeX) or + (SHeight <> gWinSizeY) or + (Fullscreen <> gFullscreen) or + ScaleChanged then begin gResolutionChange := True; gRC_Width := SWidth; @@ -1739,22 +1829,18 @@ begin ProcApplyOptions(); end; -procedure ProcSetFirstRussianLanguage(); +procedure ProcSetFirstRussianLanguage; begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); end; -procedure ProcSetFirstEnglishLanguage(); +procedure ProcSetFirstEnglishLanguage; begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); end; procedure ProcRecallAddress(); @@ -1772,7 +1858,7 @@ var begin Menu := TGUIWindow.Create('FirstLanguageMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, ' '))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, ' '))) do // space to prevent show logo begin Name := 'mmFirstLanguageMenu'; AddButton(@ProcSetFirstRussianLanguage, 'Ðóññêèé', ''); @@ -1800,7 +1886,7 @@ begin a := _lc[I_MENU_PLAYER_1] else a := _lc[I_MENU_PLAYER_2]; - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, a))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, a))) do begin Name := 'mOptionsPlayers'+s+'Menu'; with AddEdit(_lc[I_MENU_PLAYER_NAME]) do @@ -1862,10 +1948,10 @@ var Menu: TGUIWindow; //SR: TSearchRec; a, cx, _y, i: Integer; - //list: SArray; + //list: SSArray; begin Menu := TGUIWindow.Create('MainMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, '' (*_lc[I_MENU_MAIN_MENU]*) ))) do begin Name := 'mmMainMenu'; AddButton(nil, _lc[I_MENU_NEW_GAME], 'NewGameMenu'); @@ -1875,7 +1961,7 @@ begin AddButton(@ProcAuthorsMenu, _lc[I_MENU_AUTHORS], 'AuthorsMenu'); AddButton(nil, _lc[I_MENU_EXIT], 'ExitMenu'); end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(Format(_lc[I_VERSION], [GAME_VERSION]), gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(Format(_lc[I_VERSION], [GAME_VERSION]), False))) do begin Color := _RGB(255, 255, 255); X := gScreenWidth-GetWidth-8; @@ -1886,7 +1972,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('NewGameMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_NEW_GAME]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_NEW_GAME]))) do begin Name := 'mmNewGameMenu'; AddButton(@ProcSingle1Player, _lc[I_MENU_1_PLAYER]); @@ -1898,7 +1984,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('NetGameMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MULTIPLAYER]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_MULTIPLAYER]))) do begin Name := 'mmNetGameMenu'; AddButton(@ProcRecallAddress, _lc[I_MENU_START_CLIENT], 'NetClientMenu'); @@ -1908,7 +1994,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('NetServerMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_START_SERVER]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_START_SERVER]))) do begin Name := 'mNetServerMenu'; with AddEdit(_lc[I_NET_SERVER_NAME]) do @@ -1958,7 +2044,7 @@ begin begin Name := 'lbMap'; FixedLength := 16; - Text := gnMap; + Text := gsMap; OnClick := @ProcSelectMapMenu; end; with AddSwitch(_lc[I_MENU_GAME_TYPE]) do @@ -1968,7 +2054,7 @@ begin AddItem(_lc[I_MENU_GAME_TYPE_TDM]); AddItem(_lc[I_MENU_GAME_TYPE_CTF]); AddItem(_lc[I_MENU_GAME_TYPE_COOP]); - case g_Game_TextToMode(gnGameMode) of + case g_Game_TextToMode(gsGameMode) of GM_NONE, GM_DM: ItemIndex := 0; GM_TDM: ItemIndex := 1; @@ -1976,7 +2062,7 @@ begin GM_SINGLE, GM_COOP: ItemIndex := 3; end; - OnChange := ProcSwitchMonstersNet; + OnChange := ProcSwitchMonstersCustom; end; with AddEdit(_lc[I_MENU_TIME_LIMIT]) do begin @@ -1984,8 +2070,8 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gnTimeLimit > 0 then - Text := IntToStr(gnTimeLimit); + if gsTimeLimit > 0 then + Text := IntToStr(gsTimeLimit); end; with AddEdit(_lc[I_MENU_GOAL_LIMIT]) do begin @@ -1993,32 +2079,67 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gnGoalLimit > 0 then - Text := IntToStr(gnGoalLimit); + if gsGoalLimit > 0 then + Text := IntToStr(gsGoalLimit); end; with AddEdit(_lc[I_MENU_MAX_LIVES]) do begin Name := 'edMaxLives'; OnlyDigits := True; Width := 4; - MaxLength := 3; - if gnMaxLives > 0 then - Text := IntToStr(gnMaxLives); + MaxLength := 5; + if gsMaxLives > 0 then + Text := IntToStr(gsMaxLives); + end; + with AddEdit(_lc[I_MENU_ITEM_RESPAWN_TIME]) do + begin + Name := 'edItemRespawnTime'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsItemRespawnTime > 0 then + Text := IntToStr(gsItemRespawnTime); end; - with AddSwitch(_lc[I_MENU_SERVER_PLAYERS]) do + with AddSwitch(_lc[I_MENU_PLAYERS]) do begin Name := 'swPlayers'; AddItem(_lc[I_MENU_COUNT_NONE]); AddItem(_lc[I_MENU_PLAYERS_ONE]); AddItem(_lc[I_MENU_PLAYERS_TWO]); - ItemIndex := gnPlayers; + ItemIndex := gsPlayers; end; with AddSwitch(_lc[I_MENU_TEAM_DAMAGE]) do begin Name := 'swTeamDamage'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnTeamDamage then + if LongBool(gsGameFlags and GAME_OPTION_TEAMDAMAGE) then + ItemIndex := 0 + else + ItemIndex := 1; + end; + with AddSwitch(_lc[I_MENU_TEAM_HIT]) do + begin + Name := 'swTeamHit'; + AddItem(_lc[I_MENU_TEAM_HIT_BOTH]); + AddItem(_lc[I_MENU_TEAM_HIT_TRACE]); + AddItem(_lc[I_MENU_TEAM_HIT_PROJECTILE]); + AddItem(_lc[I_MENU_TEAM_HIT_NOTHING]); + if (gsGameFlags and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE)) = (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE) then + ItemIndex := 0 + else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITTRACE) then + ItemIndex := 1 + else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITPROJECTILE) then + ItemIndex := 2 + else + ItemIndex := 3; + end; + with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do + begin + Name := 'swDeathmatchKeys'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if LongBool(gsGameFlags and GAME_OPTION_DMKEYS) then ItemIndex := 0 else ItemIndex := 1; @@ -2028,7 +2149,7 @@ begin Name := 'swEnableExits'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnAllowExit then + if LongBool(gsGameFlags and GAME_OPTION_ALLOWEXIT) then ItemIndex := 0 else ItemIndex := 1; @@ -2038,7 +2159,7 @@ begin Name := 'swWeaponStay'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnWeaponStay then + if LongBool(gsGameFlags and GAME_OPTION_WEAPONSTAY) then ItemIndex := 0 else ItemIndex := 1; @@ -2048,7 +2169,7 @@ begin Name := 'swMonsters'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnMonsters then + if LongBool(gsGameFlags and GAME_OPTION_MONSTERS) then ItemIndex := 0 else ItemIndex := 1; @@ -2060,9 +2181,9 @@ begin AddItem(_lc[I_MENU_BOTS_VS_MONSTERS]); AddItem(_lc[I_MENU_BOTS_VS_ALL]); ItemIndex := 2; - if gnBotsVS = 'Players' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSMONSTER) then ItemIndex := 0; - if gnBotsVS = 'Monsters' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSPLAYER) then ItemIndex := 1; end; AddSpace(); @@ -2074,7 +2195,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('NetClientMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_START_CLIENT]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_START_CLIENT]))) do begin Name := 'mNetClientMenu'; @@ -2116,7 +2237,7 @@ begin Menu := TGUIWindow.Create('LoadMenu'); Menu.OnShow := ProcLoadMenu; - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_LOAD_GAME]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_LOAD_GAME]))) do begin Name := 'mmLoadMenu'; @@ -2134,7 +2255,7 @@ begin Menu := TGUIWindow.Create('SaveMenu'); Menu.OnShow := ProcSaveMenu; - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_SAVE_GAME]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_SAVE_GAME]))) do begin Name := 'mmSaveMenu'; @@ -2151,14 +2272,14 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('CustomGameMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_CUSTOM_GAME]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_CUSTOM_GAME]))) do begin Name := 'mCustomGameMenu'; with AddLabel(_lc[I_MENU_MAP]) do begin Name := 'lbMap'; FixedLength := 16; - Text := gcMap; + Text := gsMap; OnClick := @ProcSelectMapMenu; end; with AddSwitch(_lc[I_MENU_GAME_TYPE]) do @@ -2168,7 +2289,7 @@ begin AddItem(_lc[I_MENU_GAME_TYPE_TDM]); AddItem(_lc[I_MENU_GAME_TYPE_CTF]); AddItem(_lc[I_MENU_GAME_TYPE_COOP]); - case g_Game_TextToMode(gcGameMode) of + case g_Game_TextToMode(gsGameMode) of GM_NONE, GM_DM: ItemIndex := 0; GM_TDM: ItemIndex := 1; @@ -2184,8 +2305,8 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gcTimeLimit > 0 then - Text := IntToStr(gcTimeLimit); + if gsTimeLimit > 0 then + Text := IntToStr(gsTimeLimit); end; with AddEdit(_lc[I_MENU_GOAL_LIMIT]) do begin @@ -2193,8 +2314,8 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gcGoalLimit > 0 then - Text := IntToStr(gcGoalLimit); + if gsGoalLimit > 0 then + Text := IntToStr(gsGoalLimit); end; with AddEdit(_lc[I_MENU_MAX_LIVES]) do begin @@ -2202,8 +2323,17 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gcMaxLives > 0 then - Text := IntToStr(gcMaxLives); + if gsMaxLives > 0 then + Text := IntToStr(gsMaxLives); + end; + with AddEdit(_lc[I_MENU_ITEM_RESPAWN_TIME]) do + begin + Name := 'edItemRespawnTime'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsItemRespawnTime > 0 then + Text := IntToStr(gsItemRespawnTime); end; with AddSwitch(_lc[I_MENU_PLAYERS]) do begin @@ -2211,14 +2341,40 @@ begin AddItem(_lc[I_MENU_COUNT_NONE]); AddItem(_lc[I_MENU_PLAYERS_ONE]); AddItem(_lc[I_MENU_PLAYERS_TWO]); - ItemIndex := gcPlayers; + ItemIndex := gsPlayers; end; with AddSwitch(_lc[I_MENU_TEAM_DAMAGE]) do begin Name := 'swTeamDamage'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcTeamDamage then + if LongBool(gsGameFlags and GAME_OPTION_TEAMDAMAGE) then + ItemIndex := 0 + else + ItemIndex := 1; + end; + with AddSwitch(_lc[I_MENU_TEAM_HIT]) do + begin + Name := 'swTeamHit'; + AddItem(_lc[I_MENU_TEAM_HIT_BOTH]); + AddItem(_lc[I_MENU_TEAM_HIT_TRACE]); + AddItem(_lc[I_MENU_TEAM_HIT_PROJECTILE]); + AddItem(_lc[I_MENU_TEAM_HIT_NOTHING]); + if (gsGameFlags and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE)) = (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE) then + ItemIndex := 0 + else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITTRACE) then + ItemIndex := 1 + else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITPROJECTILE) then + ItemIndex := 2 + else + ItemIndex := 3; + end; + with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do + begin + Name := 'swDeathmatchKeys'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if LongBool(gsGameFlags and GAME_OPTION_DMKEYS) then ItemIndex := 0 else ItemIndex := 1; @@ -2228,7 +2384,7 @@ begin Name := 'swEnableExits'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcAllowExit then + if LongBool(gsGameFlags and GAME_OPTION_ALLOWEXIT) then ItemIndex := 0 else ItemIndex := 1; @@ -2238,7 +2394,7 @@ begin Name := 'swWeaponStay'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcWeaponStay then + if LongBool(gsGameFlags and GAME_OPTION_WEAPONSTAY) then ItemIndex := 0 else ItemIndex := 1; @@ -2248,7 +2404,7 @@ begin Name := 'swMonsters'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcMonsters then + if LongBool(gsGameFlags and GAME_OPTION_MONSTERS) then ItemIndex := 0 else ItemIndex := 1; @@ -2260,9 +2416,9 @@ begin AddItem(_lc[I_MENU_BOTS_VS_MONSTERS]); AddItem(_lc[I_MENU_BOTS_VS_ALL]); ItemIndex := 2; - if gcBotsVS = 'Players' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSMONSTER) then ItemIndex := 0; - if gcBotsVS = 'Monsters' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSPLAYER) then ItemIndex := 1; end; AddSpace(); @@ -2274,7 +2430,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('CampaignMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_CAMPAIGN]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_CAMPAIGN]))) do begin Name := 'mCampaignMenu'; @@ -2292,8 +2448,8 @@ begin Sort := True; Dirs := True; - FileMask := '*.wad|*.pk3|*.zip'; - SetBase(MapsDir+'megawads/'); + FileMask := '*.wad|*.pk3|*.zip|*.dfz'; + SetBase(MegawadDirs); end; with AddLabel(_lc[I_MENU_MAP_NAME]) do @@ -2337,7 +2493,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('SelectMapMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_SELECT_MAP]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_SELECT_MAP]))) do begin Name := 'mSelectMapMenu'; with AddFileList(_lc[I_MENU_MAP_WAD], 12, 4) do @@ -2347,8 +2503,8 @@ begin Sort := True; Dirs := True; - FileMask := '*.wad|*.pk3|*.zip'; - SetBase(MapsDir); + FileMask := '*.wad|*.pk3|*.zip|*.dfz'; + SetBase(MapDirs); end; with AddList(_lc[I_MENU_MAP_RESOURCE], 12, 4) do begin @@ -2388,7 +2544,7 @@ begin X := GetControl('lsMapWAD').X+TGUIListBox(GetControl('lsMapWAD')).GetWidth()+2; Y := GetControl('lsMapWAD').Y; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create('', gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create('', False))) do begin Name := 'lbMapScale'; FixedLength := 8; @@ -2405,7 +2561,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_OPTIONS]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_OPTIONS]))) do begin Name := 'mmOptionsMenu'; AddButton(nil, _lc[I_MENU_VIDEO_OPTIONS], 'OptionsVideoMenu'); @@ -2422,12 +2578,11 @@ begin Menu.DefControl := 'mmOptionsMenu'; g_GUI_AddWindow(Menu); - Menu := CreateYNMenu('SavedOptionsMenu', _lc[I_MENU_LOAD_SAVED_PROMT], Round(gScreenWidth*0.6), - gMenuSmallFont, @ProcSavedMenuKeyDown); + Menu := CreateYNMenu('SavedOptionsMenu', _lc[I_MENU_LOAD_SAVED_PROMT], Round(gScreenWidth*0.6), @ProcSavedMenuKeyDown); g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsVideoMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_VIDEO_OPTIONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_VIDEO_OPTIONS]))) do begin Name := 'mOptionsVideoMenu'; AddButton(@ProcVideoOptionsRes, _lc[I_MENU_VIDEO_RESOLUTION], 'OptionsVideoResMenu'); @@ -2449,6 +2604,12 @@ begin AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); end; + with AddSwitch(_lc[I_MENU_VIDEO_INTERPOLATION]) do + begin + Name := 'swInterp'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + end; with AddSwitch(_lc[I_MENU_VIDEO_LEGACY_COMPATIBLE]) do begin Name := 'swLegacyNPOT'; @@ -2463,7 +2624,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsVideoResMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_RESOLUTION_SELECT]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_RESOLUTION_SELECT]))) do begin Name := 'mOptionsVideoResMenu'; with AddLabel(_lc[I_MENU_RESOLUTION_CURRENT]) do @@ -2483,6 +2644,13 @@ begin AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); end; + with AddSwitch(_lc[I_MENU_GAME_SCALE_FACTOR]) do + begin + Name := 'swResFactor'; + AddItem('1x'); + for i := 2 to gRC_Width div 640 do + AddItem(IntToStr(i) + 'x'); + end; AddSpace(); AddButton(@ProcApplyVideoOptions, _lc[I_MENU_RESOLUTION_APPLY]); UpdateIndex(); @@ -2491,7 +2659,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsSoundMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_SOUND_OPTIONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_SOUND_OPTIONS]))) do begin Name := 'mOptionsSoundMenu'; with AddScroll(_lc[I_MENU_SOUND_MUSIC_LEVEL]) do @@ -2526,6 +2694,13 @@ begin AddItem(_lc[I_MENU_COMPAT_DOOM2]); AddItem(_lc[I_MENU_COMPAT_DF]); end; + // Ïåðåêëþ÷àòåëü çâóêîâ ÷àòà + with AddSwitch (_lc[I_MENU_SOUND_CHAT]) do + begin; + Name := 'swChatSpeech'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + end; with AddSwitch(_lc[I_MENU_SOUND_INACTIVE_SOUNDS]) do begin Name := 'swInactiveSounds'; @@ -2538,7 +2713,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsGameMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_GAME_OPTIONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_GAME_OPTIONS]))) do begin Name := 'mOptionsGameMenu'; with AddScroll(_lc[I_MENU_GAME_PARTICLES_COUNT]) do @@ -2631,13 +2806,32 @@ begin AddItem(_lc[I_MENU_GAME_CHAT_TYPE_COLOR]); AddItem(_lc[I_MENU_GAME_CHAT_TYPE_TEXTURE]); end; + with AddSwitch(_lc[I_MENU_GAME_PLAYER_INDICATOR]) do + begin + Name := 'swPlayerIndicator'; + AddItem(_lc[I_MENU_GAME_INDICATOR_NONE]); + AddItem(_lc[I_MENU_GAME_INDICATOR_OWN]); + AddItem(_lc[I_MENU_GAME_INDICATOR_ALL]); + end; + with AddSwitch(_lc[I_MENU_GAME_INDICATOR_STYLE]) do + begin + Name := 'swPlayerIndicatorStyle'; + AddItem(_lc[I_MENU_GAME_INDICATOR_ARROW]); + AddItem(_lc[I_MENU_GAME_INDICATOR_NAME]); + end; + with AddScroll(_lc[I_MENU_GAME_SCALE_FACTOR]) do + begin + Name := 'scScaleFactor'; + Max := 10; + OnChange := ProcChangeGameSettings; + end; ReAlign(); end; Menu.DefControl := 'mOptionsGameMenu'; g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsControlsMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_CONTROLS_OPTIONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_CONTROLS_OPTIONS]))) do begin Name := 'mOptionsControlsMenu'; AddLine(_lc[I_MENU_CONTROL_GLOBAL]); @@ -2652,15 +2846,22 @@ begin AddButton(nil, _lc[I_MENU_PLAYER_2_KBD], 'OptionsControlsP2Menu'); {AddButton(nil, _lc[I_MENU_PLAYER_2_ALT], 'OptionsControlsP2MenuAlt');} AddButton(nil, _lc[I_MENU_PLAYER_2_WEAPONS], 'OptionsControlsP2MenuWeapons'); - AddSpace(); - if e_JoysticksAvailable <> 0 then + if e_HasJoysticks then + begin + AddSpace(); AddButton(nil, _lc[I_MENU_CONTROL_JOYSTICKS], 'OptionsControlsJoystickMenu'); + end; + if g_touch_enabled then + begin + AddSpace(); + AddButton(nil, _lc[I_MENU_CONTROL_TOUCH], 'OptionsControlsTouchMenu'); + end; end; Menu.DefControl := 'mOptionsControlsMenu'; g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsControlsP1Menu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_PLAYER_1_KBD]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_PLAYER_1_KBD]))) do begin Name := 'mOptionsControlsP1Menu'; AddKeyRead2(_lc[I_MENU_CONTROL_LEFT]).Name := _lc[I_MENU_CONTROL_LEFT]; @@ -2678,7 +2879,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsControlsP1MenuWeapons'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_PLAYER_1_WEAPONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_PLAYER_1_WEAPONS]))) do begin Name := 'mOptionsControlsP1MenuWeapons'; for i := WP_FIRST to WP_LAST do @@ -2689,7 +2890,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsControlsP2Menu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_PLAYER_2_KBD]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_PLAYER_2_KBD]))) do begin Name := 'mOptionsControlsP2Menu'; AddKeyRead2(_lc[I_MENU_CONTROL_LEFT]).Name := _lc[I_MENU_CONTROL_LEFT]; @@ -2707,7 +2908,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsControlsP2MenuWeapons'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_PLAYER_2_WEAPONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_PLAYER_2_WEAPONS]))) do begin Name := 'mOptionsControlsP2MenuWeapons'; for i := WP_FIRST to WP_LAST do @@ -2718,21 +2919,54 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsControlsJoystickMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_CONTROL_JOYSTICKS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_CONTROL_JOYSTICKS]))) do begin Name := 'mOptionsControlsJoystickMenu'; - for i := 0 to e_JoysticksAvailable-1 do + for i := 0 to e_MaxJoys - 1 do with AddScroll(Format(_lc[I_MENU_CONTROL_DEADZONE], [i + 1])) do begin Name := 'scDeadzone' + IntToStr(i); - Max := 20; - end; + Max := 20 + end end; Menu.DefControl := 'mOptionsControlsJoystickMenu'; g_GUI_AddWindow(Menu); + Menu := TGUIWindow.Create('OptionsControlsTouchMenu'); + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_CONTROL_TOUCH]))) do + begin + Name := 'mOptionsControlsTouchMenu'; + with AddSwitch(_lc[I_MENU_CONTROL_TOUCH_ALT]) do + begin + Name := 'swTouchAlt'; + AddItem(_lc[I_MENU_NO]); + AddItem(_lc[I_MENU_YES]); + OnChange := ProcChangeTouchSettings; + end; + with AddScroll(_lc[I_MENU_CONTROL_TOUCH_SIZE]) do + begin + Name := 'scTouchSize'; + Max := 20; + OnChange := ProcChangeTouchSettings; + end; + with AddSwitch(_lc[I_MENU_CONTROL_TOUCH_FIRE]) do + begin + Name := 'swTouchFire'; + AddItem(_lc[I_MENU_NO]); + AddItem(_lc[I_MENU_YES]); + end; + with AddScroll(_lc[I_MENU_CONTROL_TOUCH_OFFSET]) do + begin + Name := 'scTouchOffset'; + Max := 20; + OnChange := ProcChangeTouchSettings; + end; + end; + Menu.DefControl := 'mOptionsControlsTouchMenu'; + g_GUI_AddWindow(Menu); + Menu := TGUIWindow.Create('OptionsPlayersMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_PLAYER_OPTIONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_PLAYER_OPTIONS]))) do begin Name := 'mOptionsPlayersMenu'; AddButton(nil, _lc[I_MENU_PLAYER_1], 'OptionsPlayersP1Menu'); @@ -2745,7 +2979,7 @@ begin CreatePlayerOptionsMenu('P2'); Menu := TGUIWindow.Create('OptionsPlayersMIMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_MODEL_INFO]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_MODEL_INFO]))) do begin Name := 'mOptionsPlayersMIMenu'; with AddLabel(_lc[I_MENU_MODEL_NAME]) do @@ -2775,7 +3009,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('OptionsLanguageMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_LANGUAGE_OPTIONS]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_LANGUAGE_OPTIONS]))) do begin Name := 'mOptionsLanguageMenu'; AddButton(@ProcSetRussianLanguage, _lc[I_MENU_LANGUAGE_RUSSIAN]); @@ -2785,8 +3019,7 @@ begin Menu.DefControl := 'mOptionsLanguageMenu'; g_GUI_AddWindow(Menu); - Menu := CreateYNMenu('DefaultOptionsMenu', _lc[I_MENU_SET_DEFAULT_PROMT], Round(gScreenWidth*0.6), - gMenuSmallFont, @ProcDefaultMenuKeyDown); + Menu := CreateYNMenu('DefaultOptionsMenu', _lc[I_MENU_SET_DEFAULT_PROMT], Round(gScreenWidth*0.6), @ProcDefaultMenuKeyDown); g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('AuthorsMenu'); @@ -2795,14 +3028,14 @@ begin // Çàãîëîâîê: _y := 16; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CAP_1], gMenuFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CAP_1], False))) do begin Color := _RGB(255, 0, 0); X := (gScreenWidth div 2)-(GetWidth() div 2); Y := _y; _y := _y+GetHeight(); end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(Format(_lc[I_CREDITS_CAP_2], [GAME_VERSION, NET_PROTOCOL_VER]), gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(Format(_lc[I_CREDITS_CAP_2], [GAME_VERSION, NET_PROTOCOL_VER]), False))) do begin Color := _RGB(255, 0, 0); X := (gScreenWidth div 2)-(GetWidth() div 2); @@ -2811,63 +3044,63 @@ begin end; // ×òî äåëàë: Êòî äåëàë cx := gScreenWidth div 2 - 320 + 64; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_1], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_1], False))) do begin Color := _RGB(255, 0, 0); X := cx; Y := _y; _y := _y+22; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_1_1], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_1_1], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := _y+36; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_2], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_2], False))) do begin Color := _RGB(255, 0, 0); X := cx; Y := _y; _y := _y+22; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_2_1], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_2_1], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := _y+22; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_2_2], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_2_2], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := _y+36; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_3], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_3], False))) do begin Color := _RGB(255, 0, 0); X := cx; Y := _y; _y := _y+22; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_3_1], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_3_1], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := _y+36; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_4], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_4], False))) do begin Color := _RGB(255, 0, 0); X := cx; Y := _y; _y := _y+22; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_4_1], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_A_4_1], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; @@ -2875,35 +3108,35 @@ begin _y := gScreenHeight - 128; end; // Çàêëþ÷åíèå: - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CAP_3], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CAP_3], False))) do begin Color := _RGB(255, 0, 0); X := cx; Y := _y; _y := _y+16; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_1], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_1], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := _y+GetHeight(); end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_2], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_2], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := _y+GetHeight(); end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_3], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_3], False))) do begin Color := _RGB(255, 255, 255); X := cx+32; Y := _y; _y := gScreenHeight - 32; end; - with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_4], gMenuSmallFont))) do + with TGUILabel(Menu.AddChild(TGUILabel.Create(_lc[I_CREDITS_CLO_4], False))) do begin Color := _RGB(255, 0, 0); X := gScreenWidth div 2 - GetWidth() div 2; @@ -2911,12 +3144,11 @@ begin end; g_GUI_AddWindow(Menu); - Menu := CreateYNMenu('ExitMenu', _lc[I_MENU_EXIT_PROMT], Round(gScreenWidth*0.6), - gMenuSmallFont, @ProcExitMenuKeyDown); + Menu := CreateYNMenu('ExitMenu', _lc[I_MENU_EXIT_PROMT], Round(gScreenWidth*0.6), @ProcExitMenuKeyDown); g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('GameSingleMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_MAIN_MENU]))) do begin Name := 'mmGameSingleMenu'; AddButton(nil, _lc[I_MENU_LOAD_GAME], 'LoadMenu'); @@ -2932,16 +3164,14 @@ begin Menu.OnShow := ProcGMShow; g_GUI_AddWindow(Menu); - Menu := CreateYNMenu('EndGameMenu', _lc[I_MENU_END_GAME_PROMT], Round(gScreenWidth*0.6), - gMenuSmallFont, @ProcEndMenuKeyDown); + Menu := CreateYNMenu('EndGameMenu', _lc[I_MENU_END_GAME_PROMT], Round(gScreenWidth*0.6), @ProcEndMenuKeyDown); g_GUI_AddWindow(Menu); - Menu := CreateYNMenu('RestartGameMenu', _lc[I_MENU_RESTART_GAME_PROMT], Round(gScreenWidth*0.6), - gMenuSmallFont, @ProcRestartMenuKeyDown); + Menu := CreateYNMenu('RestartGameMenu', _lc[I_MENU_RESTART_GAME_PROMT], Round(gScreenWidth*0.6), @ProcRestartMenuKeyDown); g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('GameCustomMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_MAIN_MENU]))) do begin Name := 'mmGameCustomMenu'; AddButton(nil, _lc[I_MENU_CHANGE_PLAYERS], 'TeamMenu'); @@ -2959,7 +3189,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('GameServerMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_MAIN_MENU]))) do begin Name := 'mmGameServerMenu'; AddButton(nil, _lc[I_MENU_CHANGE_PLAYERS], 'TeamMenu'); @@ -2975,7 +3205,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('GameClientMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_MAIN_MENU]))) do begin Name := 'mmGameClientMenu'; AddButton(nil, _lc[I_MENU_CHANGE_PLAYERS], 'TeamMenu'); @@ -2989,7 +3219,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('ClientPasswordMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuSmallFont, gMenuSmallFont, _lc[I_MENU_ENTERPASSWORD]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(False, False, _lc[I_MENU_ENTERPASSWORD]))) do begin Name := 'mClientPasswordMenu'; with AddEdit(_lc[I_NET_SERVER_PASSWORD]) do @@ -3007,7 +3237,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('GameSetGameMenu'); - with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_SET_GAME]))) do + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(True, False, _lc[I_MENU_SET_GAME]))) do begin Name := 'mGameSetGameMenu'; with AddSwitch(_lc[I_MENU_TEAM_DAMAGE]) do @@ -3017,6 +3247,22 @@ begin AddItem(_lc[I_MENU_NO]); ItemIndex := 1; end; + with AddSwitch(_lc[I_MENU_TEAM_HIT]) do + begin + Name := 'swTeamHit'; + AddItem(_lc[I_MENU_TEAM_HIT_BOTH]); + AddItem(_lc[I_MENU_TEAM_HIT_TRACE]); + AddItem(_lc[I_MENU_TEAM_HIT_PROJECTILE]); + AddItem(_lc[I_MENU_TEAM_HIT_NOTHING]); + ItemIndex := 0 + end; + with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do + begin + Name := 'swDeathmatchKeys'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + ItemIndex := 1; + end; with AddEdit(_lc[I_MENU_TIME_LIMIT]) do begin Name := 'edTimeLimit'; @@ -3054,7 +3300,7 @@ begin g_GUI_AddWindow(Menu); Menu := TGUIWindow.Create('TeamMenu'); - with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_CHANGE_PLAYERS]))) do + with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(True, _lc[I_MENU_CHANGE_PLAYERS]))) do begin Name := 'mmTeamMenu'; AddButton(@ProcJoinRed, _lc[I_MENU_JOIN_RED], '').Name := 'tmJoinRed'; @@ -3088,19 +3334,18 @@ begin g_Sound_PlayEx('MENU_OPEN'); end; -procedure g_Menu_Show_LoadMenu(); +procedure g_Menu_Show_LoadMenu (standalone: Boolean=false); begin + if (g_ActiveWindow <> nil) and (g_ActiveWindow.name = 'LoadMenu') then exit; // nothing to do if gGameSettings.GameType = GT_SINGLE then - g_GUI_ShowWindow('GameSingleMenu') + begin + if not standalone then g_GUI_ShowWindow('GameSingleMenu') + end else begin - if g_Game_IsClient then - Exit - else - if g_Game_IsNet then - Exit - else - g_GUI_ShowWindow('GameCustomMenu'); + if g_Game_IsClient then exit; + if g_Game_IsNet then exit; + if not standalone then g_GUI_ShowWindow('GameCustomMenu'); end; g_GUI_ShowWindow('LoadMenu'); g_Sound_PlayEx('MENU_OPEN'); @@ -3180,16 +3425,11 @@ end; procedure g_Menu_Init(); begin MenuLoadData(); - g_GUI_Init(); CreateAllMenus(); end; procedure g_Menu_Free(); begin - g_GUI_Destroy(); - - e_WriteLog('Releasing menu data...', MSG_NOTIFY); - MenuFreeData(); end; @@ -3202,7 +3442,7 @@ begin if ex then begin - e_WriteLog('Recreating menu...', MSG_NOTIFY); + e_WriteLog('Recreating menu...', TMsgType.Notify); CreateAllMenus();