DEADSOFTWARE

Game: Weapon autoswitch by travi$
[d2df-sdl.git] / src / game / g_menu.pas
index 95a0da30f122c1634ea69c381f02d372d8097e8e..9e89ad9df259586e4380fecb228e99c8bb081a5e 100644 (file)
@@ -170,6 +170,8 @@ begin
     TempScale := TGUIScroll(menu.GetControl('scScaleFactor')).Value;
     g_dbg_scale := TempScale + 1;
   end;
+  gWeaponAutoswitch := TGUISwitch(menu.GetControl('swWeaponAutoswitch')).ItemIndex = 0;
+
 
   menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsMenu').GetControl('mOptionsControlsMenu'));
 
@@ -196,6 +198,7 @@ begin
     g_Console_BindKey(g_Console_FindBind(1, '+p1_jump', '-p1_jump'), '');
     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(g_Console_FindBind(1, 'p1_dropflag', ''), '');
     g_Console_BindKey(g_Console_FindBind(1, 'p1_weapnext', ''), '');
     g_Console_BindKey(g_Console_FindBind(1, 'p1_weapprev', ''), '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0, '+p1_moveright', '-p1_moveright');
@@ -206,6 +209,7 @@ begin
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0, '+p1_jump', '-p1_jump');
     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');
+    g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key0, 'p1_dropflag', '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0, 'p1_weapnext', '', True);
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0, 'p1_weapprev', '', True);
     // second set
@@ -217,6 +221,7 @@ begin
     g_Console_BindKey(g_Console_FindBind(2, '+p1_jump', '-p1_jump'), '');
     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(g_Console_FindBind(2, 'p1_dropflag', ''), '');
     g_Console_BindKey(g_Console_FindBind(2, 'p1_weapnext', ''), '');
     g_Console_BindKey(g_Console_FindBind(2, 'p1_weapprev', ''), '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1, '+p1_moveright', '-p1_moveright');
@@ -227,6 +232,7 @@ begin
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1, '+p1_jump', '-p1_jump');
     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');
+    g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key1, 'p1_dropflag', '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1, 'p1_weapnext', '', True);
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1, 'p1_weapprev', '', True);
   end;
@@ -254,6 +260,7 @@ begin
     g_Console_BindKey(g_Console_FindBind(1, '+p2_jump', '-p2_jump'), '');
     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(g_Console_FindBind(1, 'p2_dropflag', ''), '');
     g_Console_BindKey(g_Console_FindBind(1, 'p2_weapnext', ''), '');
     g_Console_BindKey(g_Console_FindBind(1, 'p2_weapprev', ''), '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key0, '+p2_moveright', '-p2_moveright');
@@ -264,6 +271,7 @@ begin
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0, '+p2_jump', '-p2_jump');
     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');
+    g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key0, 'p2_dropflag', '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0, 'p2_weapnext', '', True);
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0, 'p2_weapprev', '', True);
     // second set
@@ -275,6 +283,7 @@ begin
     g_Console_BindKey(g_Console_FindBind(2, '+p2_jump', '-p2_jump'), '');
     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(g_Console_FindBind(2, 'p2_dropflag', ''), '');
     g_Console_BindKey(g_Console_FindBind(2, 'p2_weapnext', ''), '');
     g_Console_BindKey(g_Console_FindBind(2, 'p2_weapprev', ''), '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_RIGHT])).Key1, '+p2_moveright', '-p2_moveright');
@@ -285,6 +294,7 @@ begin
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1, '+p2_jump', '-p2_jump');
     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');
+    g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key1, 'p2_dropflag', '');
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1, 'p2_weapnext', '', True);
     g_Console_BindKey(TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1, 'p2_weapprev', '', True);
   end;
@@ -441,6 +451,7 @@ begin
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0 := g_Console_FindBind(1, '+p1_jump', '-p1_jump');
     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');
+    TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key0 := g_Console_FindBind(1, 'p1_dropflag', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0 := g_Console_FindBind(1, 'p1_weapnext', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0 := g_Console_FindBind(1, 'p1_weapprev', '');
     // second set
@@ -452,6 +463,7 @@ begin
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1 := g_Console_FindBind(2, '+p1_jump', '-p1_jump');
     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');
+    TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key1 := g_Console_FindBind(2, 'p1_dropflag', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1 := g_Console_FindBind(2, 'p1_weapnext', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1 := g_Console_FindBind(2, 'p1_weapprev', '');
   end;
@@ -477,6 +489,7 @@ begin
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key0 := g_Console_FindBind(1, '+p2_jump', '-p2_jump');
     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');
+    TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key0 := g_Console_FindBind(1, 'p2_dropflag', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key0 := g_Console_FindBind(1, 'p2_weapnext', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key0 := g_Console_FindBind(1, 'p2_weapprev', '');
     // second set
@@ -488,6 +501,7 @@ begin
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_JUMP])).Key1 := g_Console_FindBind(2, '+p2_jump', '-p2_jump');
     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');
+    TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_DROPFLAG])).Key1 := g_Console_FindBind(2, 'p2_dropflag', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_NEXT_WEAPON])).Key1 := g_Console_FindBind(2, 'p2_weapnext', '');
     TGUIKeyRead2(GetControl(_lc[I_MENU_CONTROL_PREV_WEAPON])).Key1 := g_Console_FindBind(2, 'p2_weapprev', '');
   end;
@@ -583,6 +597,9 @@ begin
   TempScale := Round(g_dbg_scale - 1);
   TGUIScroll(menu.GetControl('scScaleFactor')).Value := TempScale;
 
+  with TGUISwitch(menu.GetControl('swWeaponAutoswitch')) do
+    if gWeaponAutoswitch then ItemIndex := 0 else ItemIndex := 1;
+
   menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu'));
 
   TGUIListBox(menu.GetControl('lsP1Model')).SelectItem(gPlayer1Settings.Model);
@@ -693,6 +710,12 @@ begin
       else gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSPLAYER;
     end;
 
+    case TGUISwitch(GetControl('swFlagDrop')).ItemIndex of
+      0: gsGameFlags := gsGameFlags or GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG;
+      1: gsGameFlags := gsGameFlags or GAME_OPTION_ALLOWDROPFLAG;
+      else gsGameFlags := gsGameFlags and not (GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG);
+    end;
+
     // TODO: get this crap out of here
     gGameSettings.ItemRespawnTime := gsItemRespawnTime;
     gGameSettings.WarmupTime := gsWarmupTime;
@@ -1655,6 +1678,13 @@ begin
         ItemIndex := 0
       else
         ItemIndex := 1;
+    with TGUISwitch(menu.GetControl('swFlagDrop')) do
+      if LongBool(Options and GAME_OPTION_ALLOWDROPFLAG) and LongBool(Options and GAME_OPTION_THROWFLAG) then
+        ItemIndex := 0
+      else if LongBool(Options and GAME_OPTION_ALLOWDROPFLAG) then
+        ItemIndex := 1
+      else
+        ItemIndex := 2;
 
     TGUIEdit(menu.GetControl('edTimeLimit')).Text := IntToStr(TimeLimit);
     TGUIEdit(menu.GetControl('edGoalLimit')).Text := IntToStr(GoalLimit);
@@ -1691,6 +1721,7 @@ begin
         TGUIEdit(menu.GetControl('edMaxLives')).Enabled := True;
         TGUILabel(menu.GetControlsText('edMaxLives')).Color := MENU_ITEMSTEXT_COLOR;
         TGUISwitch(menu.GetControl('swBotsVS')).Enabled := True;
+        TGUISwitch(menu.GetControl('swFlagDrop')).Enabled := True;
       end
     else
       begin
@@ -1717,6 +1748,7 @@ begin
         end;
         TGUILabel(menu.GetControlsText('edMaxLives')).Color := MENU_UNACTIVEITEMS_COLOR;
         TGUISwitch(menu.GetControl('swBotsVS')).Enabled := True;
+        TGUISwitch(menu.GetControl('swFlagDrop')).Enabled := False;
       end;
   end;
 end;
@@ -1838,6 +1870,15 @@ begin
       end;
     end;
 
+    if TGUISwitch(menu.GetControl('swFlagDrop')).Enabled then
+    begin
+      case TGUISwitch(menu.GetControl('swFlagDrop')).ItemIndex of
+        0: Options := Options or GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG;
+        1: Options := Options or GAME_OPTION_ALLOWDROPFLAG;
+        else Options := Options and not (GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG);
+      end;
+    end;
+
     // don't forget to latch this shit
     gsGameFlags := Options;
     gsMaxLives := MaxLives;
@@ -2288,6 +2329,19 @@ begin
       if not LongBool(gsGameFlags and GAME_OPTION_BOTVSPLAYER) then
         ItemIndex := 1;
     end;
+    with AddSwitch(_lc[I_MENU_FLAG_DROP]) do
+    begin
+      Name := 'swFlagDrop';
+      AddItem(_lc[I_MENU_FLAG_THROW]);
+      AddItem(_lc[I_MENU_YES]);
+      AddItem(_lc[I_MENU_NO]);
+      if (gsGameFlags and (GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG)) = (GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG) then
+        ItemIndex := 0
+      else if LongBool(gsGameFlags and GAME_OPTION_ALLOWDROPFLAG) then
+        ItemIndex := 1
+      else
+        ItemIndex := 2;
+    end;
     AddSpace();
     AddButton(@ProcStartNetGame, _lc[I_MENU_START_GAME]);
 
@@ -2523,6 +2577,19 @@ begin
       if not LongBool(gsGameFlags and GAME_OPTION_BOTVSPLAYER) then
         ItemIndex := 1;
     end;
+    with AddSwitch(_lc[I_MENU_FLAG_DROP]) do
+    begin
+      Name := 'swFlagDrop';
+      AddItem(_lc[I_MENU_FLAG_THROW]);
+      AddItem(_lc[I_MENU_YES]);
+      AddItem(_lc[I_MENU_NO]);
+      if (gsGameFlags and (GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG)) = (GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_THROWFLAG) then
+        ItemIndex := 0
+      else if LongBool(gsGameFlags and GAME_OPTION_ALLOWDROPFLAG) then
+        ItemIndex := 1
+      else
+        ItemIndex := 2;
+    end;
     AddSpace();
     AddButton(@ProcStartCustomGame, _lc[I_MENU_START_GAME]);
 
@@ -2928,6 +2995,12 @@ begin
       Max := 10;
       OnChange := ProcChangeGameSettings;
     end;
+    with AddSwitch(_lc[I_MENU_GAME_WEAPON_AUTOSWITCH]) do
+    begin
+      Name := 'swWeaponAutoswitch';
+      AddItem(_lc[I_MENU_YES]);
+      AddItem(_lc[I_MENU_NO]);
+    end;
     ReAlign();
   end;
   Menu.DefControl := 'mOptionsGameMenu';
@@ -2977,6 +3050,7 @@ begin
     AddKeyRead2(_lc[I_MENU_CONTROL_NEXT_WEAPON]).Name := _lc[I_MENU_CONTROL_NEXT_WEAPON];
     AddKeyRead2(_lc[I_MENU_CONTROL_PREV_WEAPON]).Name := _lc[I_MENU_CONTROL_PREV_WEAPON];
     AddKeyRead2(_lc[I_MENU_CONTROL_STRAFE]).Name := _lc[I_MENU_CONTROL_STRAFE];
+    AddKeyRead2(_lc[I_MENU_CONTROL_DROPFLAG]).Name := _lc[I_MENU_CONTROL_DROPFLAG];
   end;
   Menu.DefControl := 'mOptionsControlsP1Menu';
   g_GUI_AddWindow(Menu);
@@ -3006,6 +3080,7 @@ begin
     AddKeyRead2(_lc[I_MENU_CONTROL_NEXT_WEAPON]).Name := _lc[I_MENU_CONTROL_NEXT_WEAPON];
     AddKeyRead2(_lc[I_MENU_CONTROL_PREV_WEAPON]).Name := _lc[I_MENU_CONTROL_PREV_WEAPON];
     AddKeyRead2(_lc[I_MENU_CONTROL_STRAFE]).Name := _lc[I_MENU_CONTROL_STRAFE];
+    AddKeyRead2(_lc[I_MENU_CONTROL_DROPFLAG]).Name := _lc[I_MENU_CONTROL_DROPFLAG];
   end;
   Menu.DefControl := 'mOptionsControlsP2Menu';
   g_GUI_AddWindow(Menu);
@@ -3399,6 +3474,14 @@ begin
       AddItem(_lc[I_MENU_BOTS_VS_ALL]);
       ItemIndex := 2;
     end;
+    with AddSwitch(_lc[I_MENU_FLAG_DROP]) do
+    begin
+      Name := 'swFlagDrop';
+      AddItem(_lc[I_MENU_FLAG_THROW]);
+      AddItem(_lc[I_MENU_YES]);
+      AddItem(_lc[I_MENU_NO]);
+      ItemIndex := 2;
+    end;
 
     ReAlign();
   end;