X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_menu.pas;h=80989a887ad4a2d8d46a91a3afc4e992fd4c0559;hb=4bbb1dced3434adcd1fdd0168c9de9ce64e42ce4;hp=8d385ad8448441b69806254c84f8e222d3e720bc;hpb=3b7ef59c450d979b7011cdeaadd6d8e59c34f197;p=d2df-sdl.git diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 8d385ad..80989a8 100644 --- a/src/game/g_menu.pas +++ b/src/game/g_menu.pas @@ -177,11 +177,11 @@ begin with menu do begin 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, '+scores', '-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_STAT])).Key, '+scores', '-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; @@ -331,34 +331,29 @@ begin end; menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu')); - gPlayer1Settings.Name := b_Text_Unformat(TGUIEdit(menu.GetControl('edP1Name')).Text); gPlayer1Settings.Team := IfThen(TGUISwitch(menu.GetControl('swP1Team')).ItemIndex = 0, TEAM_RED, TEAM_BLUE); - with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mvP1Model')) do begin gPlayer1Settings.Model := Model.Name; gPlayer1Settings.Color := Model.Color; end; - menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu')); - - gPlayer1Settings.Name := b_Text_Unformat(TGUIEdit(menu.GetControl('edP1Name')).Text); - gPlayer1Settings.Team := IfThen(TGUISwitch(menu.GetControl('swP1Team')).ItemIndex = 0, + menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP2Menu').GetControl('mOptionsPlayersP2Menu')); + gPlayer2Settings.Name := b_Text_Unformat(TGUIEdit(menu.GetControl('edP2Name')).Text); + gPlayer2Settings.Team := IfThen(TGUISwitch(menu.GetControl('swP2Team')).ItemIndex = 0, TEAM_RED, TEAM_BLUE); - - with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mvP1Model')) do + with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP2Menu').GetControl('mvP2Model')) do begin - gPlayer1Settings.Model := Model.Name; - gPlayer1Settings.Color := Model.Color; + gPlayer2Settings.Model := Model.Name; + gPlayer2Settings.Color := Model.Color; end; menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1WeaponMenu').GetControl('mOptionsPlayersP1WeaponMenu')); gPlayer1Settings.WeaponSwitch := TGUISwitch(menu.GetControl('swWeaponAutoswitch')).ItemIndex; gPlayer1Settings.SwitchToEmpty := TGUISwitch(menu.GetControl('swWeaponAllowEmpty')).ItemIndex; gPlayer1Settings.SkipFist := TGUISwitch(menu.GetControl('swWeaponAllowFist')).ItemIndex; - menu := TGUIMenu(g_GUI_GetWindow('OptionsPreferencesP1WeaponMenu').GetControl('mOptionsPreferencesP1WeaponMenu')); with menu do begin @@ -381,17 +376,6 @@ begin end; end; - menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP2Menu').GetControl('mOptionsPlayersP2Menu')); - - gPlayer2Settings.Name := b_Text_Unformat(TGUIEdit(menu.GetControl('edP2Name')).Text); - gPlayer2Settings.Team := IfThen(TGUISwitch(menu.GetControl('swP2Team')).ItemIndex = 0, - TEAM_RED, TEAM_BLUE); - with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP2Menu').GetControl('mvP2Model')) do - begin - gPlayer2Settings.Model := Model.Name; - gPlayer2Settings.Color := Model.Color; - end; - if gPlayer1Settings.Name = '' then gPlayer1Settings.Name := GenPlayerName(1); if gPlayer2Settings.Name = '' then gPlayer2Settings.Name := GenPlayerName(2); @@ -417,7 +401,7 @@ begin begin gPlayer2.SetModel(gPlayer2Settings.Model); gPlayer2.Name := gPlayer2Settings.Name; - if (gGameSettings.GameMode <> GM_TDM) and (gGameSettings.GameMode <> GM_CTF) then + if not (gGameSettings.GameMode in [GM_TDM, GM_CTF]) then gPlayer2.SetColor(gPlayer2Settings.Color) else if gPlayer2.Team <> gPlayer2Settings.Team then @@ -426,6 +410,7 @@ begin gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; gPlayer2.SkipFist := gPlayer2Settings.SkipFist; + //if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID); end; end; @@ -591,7 +576,7 @@ begin with menu do begin 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_STAT])).Key := g_Console_FindBind(1, '+scores', '-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; @@ -750,13 +735,14 @@ begin gsTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); gsScoreLimit := StrToIntDef(TGUIEdit(GetControl('edScoreLimit')).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('swTeamAbsorbDamage')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_TEAMABSORBDAMAGE; if TGUISwitch(GetControl('swDeathmatchKeys')).ItemIndex = 0 then gsGameFlags := gsGameFlags or GAME_OPTION_DMKEYS; if TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0 then @@ -785,10 +771,37 @@ begin end; // TODO: get this crap out of here - gGameSettings.ItemRespawnTime := gsItemRespawnTime; gGameSettings.WarmupTime := gsWarmupTime; gGameSettings.SpawnInvul := gsSpawnInvul; end; + + // HACK: We keep the variables for the items in a different menu + with TGUIMenu(g_GUI_GetWindow('ItemsRespawnMenu').GetControl('mItemsRespawnMenu')) do + begin + gsItemRespawnTime := StrToIntDef(TGUIEdit(GetControl('edItemRespawnTime')).Text, 0); + gsItemRespawnRandom := StrToIntDef(TGUIEdit(GetControl('edItemRespawnRandom')).Text, 0); + gsRulezRespawnTime := StrToIntDef(TGUIEdit(GetControl('edRulezRespawnTime')).Text, 0); + gsRulezRespawnRandom := StrToIntDef(TGUIEdit(GetControl('edRulezRespawnRandom')).Text, 0); + + if TGUISwitch(GetControl('swRulezRandom')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_RULEZRANDOM; + + case TGUISwitch(GetControl('swItemsRandom')).ItemIndex of + 1: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMHELPRANDOM; + 2: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMAMMORANDOM; + 3: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMWEAPONRANDOM; + 4: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMHELPRANDOM or GAME_OPTION_ITEMAMMORANDOM; + 5: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMHELPRANDOM or GAME_OPTION_ITEMWEAPONRANDOM; + 6: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMAMMORANDOM or GAME_OPTION_ITEMWEAPONRANDOM; + 0: gsGameFlags := gsGameFlags or GAME_OPTION_ITEMALLRANDOM; + end; + + // TODO: get this crap out of here + gGameSettings.ItemRespawnTime := gsItemRespawnTime; + gGameSettings.ItemRespawnRandom := gsItemRespawnRandom; + gGameSettings.RulezRespawnTime := gsRulezRespawnTime; + gGameSettings.RulezRespawnRandom := gsRulezRespawnRandom; + end; end; procedure ProcStartCustomGame(); @@ -1747,6 +1760,15 @@ begin end; end; +procedure ProcItemsRespawnMenu(); +var + menu: TGUIMenu; +begin + menu := TGUIMenu(g_GUI_GetWindow('ItemsRespawnMenu').GetControl('mItemsRespawnMenu')); + + g_GUI_ShowWindow('ItemsRespawnMenu'); +end; + procedure ReadGameSettings(); var menu: TGUIMenu; @@ -2003,7 +2025,7 @@ begin if list <> nil then begin Items := list; - ItemIndex := Length(list) + ItemIndex := -1; (* nothing selected *) end else begin @@ -2019,7 +2041,7 @@ begin TempResScale := Round(r_pixel_scale - 1); with TGUISwitch(menu.GetControl('swResFactor')) do - ItemIndex := Min(TempResScale, gRC_Width div 640 - 1); + ItemIndex := Max(Min(TempResScale, gRC_Width div 640 - 1), 0); end; procedure ProcApplyVideoOptions(); @@ -2331,15 +2353,13 @@ begin if gsMaxLives > 0 then Text := IntToStr(gsMaxLives); end; - with AddEdit(_lc[I_MENU_ITEM_RESPAWN_TIME]) do + with AddLabel(_lc[I_MENU_SELECT_ITEM_RESPAWN]) do begin - Name := 'edItemRespawnTime'; - OnlyDigits := True; - Width := 4; - MaxLength := 5; - if gsItemRespawnTime > 0 then - Text := IntToStr(gsItemRespawnTime); + Name := 'lbItemsRespawn'; + FixedLength := 16; + OnClick := @ProcItemsRespawnMenu; end; + AddSpace(); with AddSwitch(_lc[I_MENU_PLAYERS]) do begin Name := 'swPlayers'; @@ -2374,6 +2394,16 @@ begin else ItemIndex := 3; end; + with AddSwitch(_lc[I_MENU_ENABLE_TEAM_DAMAGE_ABSOBR]) do + begin + Name := 'swTeamAbsorbDamage'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if LongBool(gsGameFlags and GAME_OPTION_TEAMABSORBDAMAGE) then + ItemIndex := 0 + else + ItemIndex := 1; + end; with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do begin Name := 'swDeathmatchKeys'; @@ -2579,15 +2609,13 @@ begin if gsMaxLives > 0 then Text := IntToStr(gsMaxLives); end; - with AddEdit(_lc[I_MENU_ITEM_RESPAWN_TIME]) do + with AddLabel(_lc[I_MENU_SELECT_ITEM_RESPAWN]) do begin - Name := 'edItemRespawnTime'; - OnlyDigits := True; - Width := 4; - MaxLength := 5; - if gsItemRespawnTime > 0 then - Text := IntToStr(gsItemRespawnTime); + Name := 'lbItemsRespawn'; + FixedLength := 16; + OnClick := @ProcItemsRespawnMenu; end; + AddSpace(); with AddSwitch(_lc[I_MENU_PLAYERS]) do begin Name := 'swPlayers'; @@ -2622,6 +2650,16 @@ begin else ItemIndex := 3; end; + with AddSwitch(_lc[I_MENU_ENABLE_TEAM_DAMAGE_ABSOBR]) do + begin + Name := 'swTeamAbsorbDamage'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if LongBool(gsGameFlags and GAME_OPTION_TEAMABSORBDAMAGE) then + ItemIndex := 0 + else + ItemIndex := 1; + end; with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do begin Name := 'swDeathmatchKeys'; @@ -2797,7 +2835,7 @@ begin FixedLength := 10; Enabled := False; end; - with AddMemo(_lc[I_MENU_MAP_DESCRIPTION], 12, 4) do + with AddMemo(_lc[I_MENU_MAP_DESCRIPTION], 20, 4) do begin Name := 'meMapDescription'; end; @@ -2826,6 +2864,93 @@ begin Menu.DefControl := 'mSelectMapMenu'; g_GUI_AddWindow(Menu); + Menu := TGUIWindow.Create('ItemsRespawnMenu'); + with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_ITEM_RESPAWN]))) do + begin + Name := 'mItemsRespawnMenu'; + + // Switches separate from the time entry fields + with AddSwitch(_lc[I_MENU_ENABLE_RULEZ_RANDOM]) do + begin + Name := 'swRulezRandom'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if LongBool(gsGameFlags and GAME_OPTION_RULEZRANDOM) then + ItemIndex := 0 + else + ItemIndex := 1; + end; + with AddSwitch(_lc[I_MENU_ENABLE_ITEM_RANDOM]) do + begin + Name := 'swItemsRandom'; + AddItem(_lc[I_MENU_ITEM_RANDOM_ALL]); + AddItem(_lc[I_MENU_ITEM_RANDOM_HELP_ONLY]); + AddItem(_lc[I_MENU_ITEM_RANDOM_AMMO_ONLY]); + AddItem(_lc[I_MENU_ITEM_RANDOM_WEAPON_ONLY]); + AddItem(_lc[I_MENU_ITEM_RANDOM_HELP_AMMO]); + AddItem(_lc[I_MENU_ITEM_RANDOM_HELP_WEAPON]); + AddItem(_lc[I_MENU_ITEM_RANDOM_WEAPON_AMMO]); + AddItem(_lc[I_MENU_ITEM_RANDOM_NOTHING]); + if LongBool(gsGameFlags and GAME_OPTION_ITEMALLRANDOM) then + ItemIndex := 0 + else if LongBool(gsGameFlags and GAME_OPTION_ITEMHELPRANDOM) then + ItemIndex := 1 + else if LongBool(gsGameFlags and GAME_OPTION_ITEMAMMORANDOM) then + ItemIndex := 2 + else if LongBool(gsGameFlags and GAME_OPTION_ITEMWEAPONRANDOM) then + ItemIndex := 3 + else if (gsGameFlags and (GAME_OPTION_ITEMHELPRANDOM or GAME_OPTION_ITEMAMMORANDOM)) = (GAME_OPTION_ITEMHELPRANDOM or GAME_OPTION_ITEMAMMORANDOM) then + ItemIndex := 4 + else if (gsGameFlags and (GAME_OPTION_ITEMHELPRANDOM or GAME_OPTION_ITEMWEAPONRANDOM)) = (GAME_OPTION_ITEMHELPRANDOM or GAME_OPTION_ITEMWEAPONRANDOM) then + ItemIndex := 5 + else if (gsGameFlags and (GAME_OPTION_ITEMAMMORANDOM or GAME_OPTION_ITEMWEAPONRANDOM)) = (GAME_OPTION_ITEMAMMORANDOM or GAME_OPTION_ITEMWEAPONRANDOM) then + ItemIndex := 6 + else + ItemIndex := 7; + end; + AddSpace();// Items Respawn block + 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 AddEdit(_lc[I_MENU_ITEM_RESPAWN_RANDOM]) do + begin + Name := 'edItemRespawnRandom'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsItemRespawnTime > 0 then + Text := IntToStr(gsItemRespawnRandom); + end; + // Rulez Respawn block + with AddEdit(_lc[I_MENU_RULEZ_RESPAWN_TIME]) do + begin + Name := 'edRulezRespawnTime'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsRulezRespawnTime > 0 then + Text := IntToStr(gsRulezRespawnTime); + end; + with AddEdit(_lc[I_MENU_RULEZ_RESPAWN_RANDOM]) do + begin + Name := 'edRulezRespawnRandom'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsRulezRespawnRandom > 0 then + Text := IntToStr(gsRulezRespawnRandom); + end; + AddSpace(); + end; + Menu.DefControl := 'mItemsRespawnMenu'; + g_GUI_AddWindow(Menu); + Menu := TGUIWindow.Create('OptionsMenu'); with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, '', _lc[I_MENU_OPTIONS]))) do begin