// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // Copyright(C) 2006 Simon Howard // // 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 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // #include "textscreen.h" #include "doomtype.h" #include "m_config.h" #include "m_controls.h" #include "execute.h" #include "txt_keyinput.h" #include "mode.h" #include "joystick.h" #include "keyboard.h" static int vanilla_keyboard_mapping = 1; static int always_run = 0; static int *allkeys[] = { &key_left, &key_right, &key_up, &key_down, &key_strafeleft, &key_straferight, &key_strafe, &key_jump, &key_fire, &key_use, &key_speed, &key_flyup, &key_flydown, &key_flycenter, &key_lookup, &key_lookdown, &key_lookcenter, &key_invleft, &key_invright, &key_useartifact }; static void UpdateJoybSpeed(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(var)) { if (always_run) { /* if you want to pick one for chocolate doom to use, pick 29, since that is the most universal one that also works with heretic, hexen and strife =P NB. This choice also works with original, ultimate and final exes. */ joybspeed = 29; } else { joybspeed = 0; } } // Callback invoked when a key control is set static void KeySetCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(variable)) { TXT_CAST_ARG(int, variable); unsigned int i; for (i=0; i= 20; window = TXT_NewWindow("Keyboard configuration"); TXT_AddWidgets(window, TXT_NewSeparator("Movement"), movement_table = TXT_NewTable(4), TXT_NewSeparator("Action"), action_table = TXT_NewTable(4), NULL); // Look up/down, inventory and flying controls are only in Heretic/Hexen // and are kept in a separate window to conserve space. if (gamemission == heretic || gamemission == hexen) { TXT_AddWidget(window, TXT_NewButton2("More controls...", ConfigExtraKeys, NULL)); } TXT_AddWidgets(window, TXT_NewSeparator("Misc."), run_control = TXT_NewCheckBox("Always run", &always_run), TXT_NewInvertedCheckBox("Use native keyboard mapping", &vanilla_keyboard_mapping), NULL); TXT_SetColumnWidths(movement_table, 15, 4, 15, 4); TXT_SignalConnect(run_control, "changed", UpdateJoybSpeed, NULL); AddKeyControl(movement_table, "Move Forward", &key_up); AddKeyControl(movement_table, " Strafe Left", &key_strafeleft); AddKeyControl(movement_table, "Move Backward", &key_down); AddKeyControl(movement_table, " Strafe Right", &key_straferight); AddKeyControl(movement_table, "Turn Left", &key_left); AddKeyControl(movement_table, " Speed On", &key_speed); AddKeyControl(movement_table, "Turn Right", &key_right); AddKeyControl(movement_table, " Strafe On", &key_strafe); if (gamemission == hexen) { AddKeyControl(movement_table, "Jump", &key_jump); } TXT_SetColumnWidths(action_table, 15, 4, 15, 4); AddKeyControl(action_table, "Fire/Attack", &key_fire); AddKeyControl(action_table, " Use", &key_use); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction()); } void BindKeyboardVariables(void) { M_BindVariable("vanilla_keyboard_mapping", &vanilla_keyboard_mapping); }