// //////////////////////////////////////////////////////////////////////////// bool startKeyMapEditor(bool first) { addBackdrop(); addSideText(FRONTEND_SIDETEXT, KM_SX, KM_Y, _("KEY MAPPING")); if (first) { loadKeyMap(); // get the current mappings. } WIDGET *parent = widgGetFromID(psWScreen, FRONTEND_BACKDROP); IntFormAnimated *kmForm = new IntFormAnimated(parent, false); kmForm->id = KM_FORM; kmForm->setGeometry(KM_X, KM_Y, KM_W, KM_H); addMultiBut(psWScreen, KM_FORM, KM_RETURN, // return button. 8, 5, iV_GetImageWidth(FrontImages, IMAGE_RETURN), iV_GetImageHeight(FrontImages, IMAGE_RETURN), _("Return To Previous Screen"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); addMultiBut(psWScreen, KM_FORM, KM_DEFAULT, 11, 45, iV_GetImageWidth(FrontImages, IMAGE_KEYMAP_DEFAULT), iV_GetImageWidth(FrontImages, IMAGE_KEYMAP_DEFAULT), _("Select Default"), IMAGE_KEYMAP_DEFAULT, IMAGE_KEYMAP_DEFAULT_HI, IMAGE_KEYMAP_DEFAULT_HI); // default. // add tab form.. IntListTabWidget *kmList = new IntListTabWidget(kmForm); kmList->setChildSize(KM_ENTRYW, KM_ENTRYH); kmList->setChildSpacing(3, 3); kmList->setGeometry(52, 10, KM_ENTRYW, KM_H - 10 - 25); //Put the buttons on it std::vector<KEY_MAPPING *> mappings; for (KEY_MAPPING *m = keyMappings; m != nullptr; m = m->psNext) { if (m->status != KEYMAP__DEBUG && m->status != KEYMAP___HIDE) // if it's not a debug mapping.. { mappings.push_back(m); } } std::sort(mappings.begin(), mappings.end(), keyMappingSort); /* Add our first mapping to the form */ /* Now add the others... */ for (std::vector<KEY_MAPPING *>::const_iterator i = mappings.begin(); i != mappings.end(); ++i) { W_BUTTON *button = new W_BUTTON(kmList); button->id = KM_START + (i - mappings.begin()); button->pUserData = *i; button->displayFunction = displayKeyMap; kmList->addWidgetToLayout(button); } /* Stop when the right number or when aphabetically last - not sure...! */ /* Go home... */ return true; }
/* Here is where we assign functions to keys and to combinations of keys. these will be read in from a .cfg file customisable by the player from an in-game menu */ void keyInitMappings(bool bForceDefaults) { keyMappings.clear(); for (unsigned n = 0; n < MAX_PLAYERS; ++n) { processDebugMappings(n, false); } for (unsigned i = 0; i < NUM_QWERTY_KEYS; i++) { qwertyKeyMappings[i].psMapping = nullptr; } // load the mappings. if (!bForceDefaults && loadKeyMap() == true) { return; } // mappings failed to load, so set the defaults. // ********************************* ALL THE MAPPINGS ARE NOW IN ORDER, PLEASE **** // ********************************* DO NOT REORDER THEM!!!!!! ******************** /* ALL OF THIS NEEDS TO COME IN OFF A USER CUSTOMISABLE TEXT FILE */ // ********************************** // ********************************** // FUNCTION KEY MAPPINGS F1 to F12 keyAddMapping(KEYMAP_ALWAYS_PROCESS, KEY_IGNORE, KEY_F1, KEYMAP_PRESSED, kf_ChooseManufacture, N_("Manufacture")); keyAddMapping(KEYMAP_ALWAYS_PROCESS, KEY_IGNORE, KEY_F2, KEYMAP_PRESSED, kf_ChooseResearch, N_("Research")); keyAddMapping(KEYMAP_ALWAYS_PROCESS, KEY_IGNORE, KEY_F3, KEYMAP_PRESSED, kf_ChooseBuild, N_("Build")); keyAddMapping(KEYMAP_ALWAYS_PROCESS, KEY_IGNORE, KEY_F4, KEYMAP_PRESSED, kf_ChooseDesign, N_("Design")); keyAddMapping(KEYMAP_ALWAYS_PROCESS, KEY_IGNORE, KEY_F5, KEYMAP_PRESSED, kf_ChooseIntelligence, N_("Intelligence Display")); keyAddMapping(KEYMAP_ALWAYS_PROCESS, KEY_IGNORE, KEY_F6, KEYMAP_PRESSED, kf_ChooseCommand, N_("Commanders")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_F7, KEYMAP_PRESSED, kf_ToggleRadar, N_("Toggle Radar")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_F8, KEYMAP_PRESSED, kf_ToggleConsole, N_("Toggle Console Display")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_F9, KEYMAP_PRESSED, kf_ToggleEnergyBars, N_("Toggle Damage Bars On/Off")); keyAddMapping(KEYMAP_ALWAYS, KEY_IGNORE, KEY_F10, KEYMAP_PRESSED, kf_ScreenDump, N_("Take Screen Shot")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_F11, KEYMAP_PRESSED, kf_ToggleFormationSpeedLimiting, N_("Toggle Formation Speed Limiting")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_F12, KEYMAP_PRESSED, kf_MoveToLastMessagePos, N_("View Location of Previous Message")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_F12, KEYMAP_PRESSED, kf_ToggleSensorDisplay, N_("Toggle Sensor display")); //Which key should we use? --Re enabled see below! -Q 5-10-05 // ********************************** // ********************************** // ASSIGN GROUPS keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_0, KEYMAP_PRESSED, kf_AssignGrouping_0, N_("Assign Group 0")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_1, KEYMAP_PRESSED, kf_AssignGrouping_1, N_("Assign Group 1")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_2, KEYMAP_PRESSED, kf_AssignGrouping_2, N_("Assign Group 2")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_3, KEYMAP_PRESSED, kf_AssignGrouping_3, N_("Assign Group 3")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_4, KEYMAP_PRESSED, kf_AssignGrouping_4, N_("Assign Group 4")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_5, KEYMAP_PRESSED, kf_AssignGrouping_5, N_("Assign Group 5")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_6, KEYMAP_PRESSED, kf_AssignGrouping_6, N_("Assign Group 6")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_7, KEYMAP_PRESSED, kf_AssignGrouping_7, N_("Assign Group 7")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_8, KEYMAP_PRESSED, kf_AssignGrouping_8, N_("Assign Group 8")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_9, KEYMAP_PRESSED, kf_AssignGrouping_9, N_("Assign Group 9")); // ********************************** // ********************************** // SELECT GROUPS - Will jump to the group as well as select if group is ALREADY selected keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_0, KEYMAP_PRESSED, kf_SelectGrouping_0, N_("Select Group 0")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_1, KEYMAP_PRESSED, kf_SelectGrouping_1, N_("Select Group 1")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_2, KEYMAP_PRESSED, kf_SelectGrouping_2, N_("Select Group 2")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_3, KEYMAP_PRESSED, kf_SelectGrouping_3, N_("Select Group 3")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_4, KEYMAP_PRESSED, kf_SelectGrouping_4, N_("Select Group 4")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_5, KEYMAP_PRESSED, kf_SelectGrouping_5, N_("Select Group 5")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_6, KEYMAP_PRESSED, kf_SelectGrouping_6, N_("Select Group 6")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_7, KEYMAP_PRESSED, kf_SelectGrouping_7, N_("Select Group 7")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_8, KEYMAP_PRESSED, kf_SelectGrouping_8, N_("Select Group 8")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_9, KEYMAP_PRESSED, kf_SelectGrouping_9, N_("Select Group 9")); // ********************************** // ********************************** // SELECT COMMANDER - Will jump to the group as well as select if group is ALREADY selected keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_0, KEYMAP_PRESSED, kf_SelectCommander_0, N_("Select Commander 0")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_1, KEYMAP_PRESSED, kf_SelectCommander_1, N_("Select Commander 1")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_2, KEYMAP_PRESSED, kf_SelectCommander_2, N_("Select Commander 2")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_3, KEYMAP_PRESSED, kf_SelectCommander_3, N_("Select Commander 3")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_4, KEYMAP_PRESSED, kf_SelectCommander_4, N_("Select Commander 4")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_5, KEYMAP_PRESSED, kf_SelectCommander_5, N_("Select Commander 5")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_6, KEYMAP_PRESSED, kf_SelectCommander_6, N_("Select Commander 6")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_7, KEYMAP_PRESSED, kf_SelectCommander_7, N_("Select Commander 7")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_8, KEYMAP_PRESSED, kf_SelectCommander_8, N_("Select Commander 8")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_9, KEYMAP_PRESSED, kf_SelectCommander_9, N_("Select Commander 9")); // ********************************** // ********************************** // MULTIPLAYER keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KPENTER, KEYMAP_PRESSED, kf_addMultiMenu, N_("Multiplayer Options / Alliance dialog")); // // GAME CONTROLS - Moving around, zooming in, rotating etc keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_BACKSPACE, KEYMAP_PRESSED, kf_SeekNorth, N_("Snap View to North")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_SPACE, KEYMAP_PRESSED, kf_ToggleCamera, N_("Toggle Tracking Camera")); keyAddMapping(KEYMAP_ALWAYS, KEY_IGNORE, KEY_ESC, KEYMAP_PRESSED, kf_addInGameOptions, N_("Display In-Game Options")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_MINUS, KEYMAP_PRESSED, kf_RadarZoomOut, N_("Zoom Radar Out")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_EQUALS, KEYMAP_PRESSED, kf_RadarZoomIn, N_("Zoom Radar In")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_MINUS, KEYMAP_DOWN, kf_ZoomOut, N_("Zoom In")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_PLUS, KEYMAP_DOWN, kf_ZoomIn, N_("Zoom Out")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_2, KEYMAP_DOWN, kf_PitchForward, N_("Pitch Forward")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_4, KEYMAP_DOWN, kf_RotateLeft, N_("Rotate Left")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_5, KEYMAP_DOWN, kf_ResetPitch, N_("Reset Pitch")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_6, KEYMAP_DOWN, kf_RotateRight, N_("Rotate Right")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_8, KEYMAP_DOWN, kf_PitchBack, N_("Pitch Back")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_0, KEYMAP_PRESSED, kf_RightOrderMenu, N_("Orders Menu")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_MINUS, KEYMAP_PRESSED, kf_SlowDown, N_("Decrease Game Speed")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_EQUALS, KEYMAP_PRESSED, kf_SpeedUp, N_("Increase Game Speed")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_BACKSPACE, KEYMAP_PRESSED, kf_NormalSpeed, N_("Reset Game Speed")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_UPARROW, KEYMAP_PRESSED, kf_FaceNorth, N_("View North")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_DOWNARROW, KEYMAP_PRESSED, kf_FaceSouth, N_("View South")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_LEFTARROW, KEYMAP_PRESSED, kf_FaceEast, N_("View East")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_RIGHTARROW, KEYMAP_PRESSED, kf_FaceWest, N_("View West")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_KP_STAR, KEYMAP_PRESSED, kf_JumpToResourceExtractor, N_("View next Oil Derrick")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_JumpToRepairUnits, N_("View next Repair Unit")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_JumpToConstructorUnits, N_("View next Truck")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_JumpToSensorUnits, N_("View next Sensor Unit")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_JumpToCommandUnits, N_("View next Commander")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_TAB, KEYMAP_PRESSED, kf_ToggleOverlays, N_("Toggle Overlays")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_BACKQUOTE, KEYMAP_PRESSED, kf_ToggleConsoleDrop, N_("Toggle Console History ")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_BACKQUOTE, KEYMAP_PRESSED, kf_ToggleTeamChat, N_("Toggle Team Chat History")); // ********************************** // IN GAME MAPPINGS - Single key presses - ALL __DEBUG keymappings will be removed for master keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_B, KEYMAP_PRESSED, kf_CentreOnBase, N_("Center View on HQ")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_C, KEYMAP_PRESSED, kf_SetDroidAttackCease, N_("Hold Fire")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_D, KEYMAP_PRESSED, kf_JumpToUnassignedUnits, N_("View Unassigned Units")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_E, KEYMAP_PRESSED, kf_SetDroidAttackReturn, N_("Return Fire")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_F, KEYMAP_PRESSED, kf_SetDroidAttackAtWill, N_("Fire at Will")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_H, KEYMAP_PRESSED, kf_SetDroidReturnToBase, N_("Return to HQ")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_H, KEYMAP_PRESSED, kf_SetDroidOrderHold, N_("Hold Position")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_Q, KEYMAP_PRESSED, kf_SetDroidMovePatrol, N_("Patrol")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_R, KEYMAP_PRESSED, kf_SetDroidGoForRepair, N_("Return For Repair")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_S, KEYMAP_PRESSED, kf_SetDroidOrderStop, N_("Stop Droid")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_T, KEYMAP_PRESSED, kf_SetDroidGoToTransport, N_("Go to Transport")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_RETURN, KEYMAP_PRESSED, kf_SendGlobalMessage, N_("Send Global Text Message")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_RETURN, KEYMAP_PRESSED, kf_SendTeamMessage, N_("Send Team Text Message")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_H, KEYMAP_PRESSED, kf_AddHelpBlip, N_("Drop a beacon")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_S, KEYMAP_PRESSED, kf_ToggleShadows, N_("Toggles shadows")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LALT, KEY_T, KEYMAP_PRESSED, kf_toggleTrapCursor, N_("Trap cursor")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_TAB, KEYMAP_PRESSED, kf_ToggleRadarTerrain, N_("Toggle radar terrain")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_TAB, KEYMAP_PRESSED, kf_ToggleRadarAllyEnemy, N_("Toggle ally-enemy radar view")); // Some extra non QWERTY mappings but functioning in same way keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_COMMA, KEYMAP_PRESSED, kf_SetDroidRetreatMedium, N_("Retreat at Medium Damage")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_FULLSTOP, KEYMAP_PRESSED, kf_SetDroidRetreatHeavy, N_("Retreat at Heavy Damage")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, KEY_FORWARDSLASH, KEYMAP_PRESSED, kf_SetDroidRetreatNever, N_("Do or Die!")); // ********************************** // ********************************** // In game mappings - COMBO (CTRL + LETTER) presses. keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_A, KEYMAP_PRESSED, kf_SelectAllCombatUnits, N_("Select all Combat Units")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_C, KEYMAP_PRESSED, kf_SelectAllCyborgs, N_("Select all Cyborgs")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_D, KEYMAP_PRESSED, kf_SelectAllDamaged, N_("Select all Heavily Damaged Units")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_F, KEYMAP_PRESSED, kf_SelectAllHalfTracked, N_("Select all Half-tracks")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_H, KEYMAP_PRESSED, kf_SelectAllHovers, N_("Select all Hovers")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_R, KEYMAP_PRESSED, kf_SetDroidRecycle, N_("Return for Recycling")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_S, KEYMAP_PRESSED, kf_SelectAllOnScreenUnits, N_("Select all Units on Screen")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_T, KEYMAP_PRESSED, kf_SelectAllTracked, N_("Select all Tracks")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_U, KEYMAP_PRESSED, kf_SelectAllUnits, N_("Select EVERY unit")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_V, KEYMAP_PRESSED, kf_SelectAllVTOLs, N_("Select all VTOLs")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_V, KEYMAP_PRESSED, kf_SelectAllArmedVTOLs, N_("Select all fully-armed VTOLs")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_W, KEYMAP_PRESSED, kf_SelectAllWheeled, N_("Select all Wheels")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_Y, KEYMAP_PRESSED, kf_FrameRate, N_("Show frame rate")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LCTRL, KEY_Z, KEYMAP_PRESSED, kf_SelectAllSameType, N_("Select all Similar Units")); // ********************************** // ********************************** // In game mappings - COMBO (SHIFT + LETTER) presses. keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_C, KEYMAP_PRESSED, kf_SelectAllCombatCyborgs, N_("Select all Combat Cyborgs")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_E, KEYMAP_PRESSED, kf_SelectAllEngineers, N_("Select all Engineers")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_G, KEYMAP_PRESSED, kf_SelectAllLandCombatUnits, N_("Select all Land Combat Units")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_M, KEYMAP_PRESSED, kf_SelectAllMechanics, N_("Select all Mechanics")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_P, KEYMAP_PRESSED, kf_SelectAllTransporters, N_("Select all Transporters")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_R, KEYMAP_PRESSED, kf_SelectAllRepairTanks, N_("Select all Repair Tanks")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_S, KEYMAP_PRESSED, kf_SelectAllSensorUnits, N_("Select all Sensor Units")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_LSHIFT, KEY_T, KEYMAP_PRESSED, kf_SelectAllTrucks, N_("Select all Trucks")); // ********************************** // ********************************** // SELECT PLAYERS - DEBUG ONLY keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_SelectNextFactory, N_("Select next Factory")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_SelectNextResearch, N_("Select next Research Facility")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_SelectNextPowerStation, N_("Select next Power Generator")); keyAddMapping(KEYMAP_ASSIGNABLE, KEY_IGNORE, (KEY_CODE)KEY_MAXSCAN, KEYMAP_PRESSED, kf_SelectNextCyborgFactory, N_("Select next Cyborg Factory")); // Debug options keyAddMapping(KEYMAP___HIDE, KEY_LSHIFT, KEY_BACKSPACE, KEYMAP_PRESSED, kf_ToggleDebugMappings, N_("Toggle Debug Mappings")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_M, KEYMAP_PRESSED, kf_ToggleShowPath, N_("Toggle display of droid path")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_E, KEYMAP_PRESSED, kf_ToggleShowGateways, N_("Toggle display of gateways")); keyAddMapping(KEYMAP__DEBUG, KEY_IGNORE, KEY_M, KEYMAP_PRESSED, kf_ShowMappings, N_("Show all keyboard mappings - use pause!")); keyAddMapping(KEYMAP__DEBUG, KEY_IGNORE, KEY_V, KEYMAP_PRESSED, kf_ToggleVisibility, N_("Toggle visibility")); keyAddMapping(KEYMAP__DEBUG, KEY_IGNORE, KEY_W, KEYMAP_DOWN, kf_RaiseTile, N_("Raise tile height")); keyAddMapping(KEYMAP__DEBUG, KEY_IGNORE, KEY_A, KEYMAP_DOWN, kf_LowerTile, N_("Lower tile height")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_B, KEYMAP_PRESSED, kf_EndMissionOffWorld, N_("End Mission")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_J, KEYMAP_PRESSED, kf_ToggleFog, N_("Toggles All fog")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_Q, KEYMAP_PRESSED, kf_ToggleWeather, N_("Trigger some weather")); keyAddMapping(KEYMAP__DEBUG, KEY_IGNORE, KEY_K, KEYMAP_PRESSED, kf_TriFlip, N_("Flip terrain triangle")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_K, KEYMAP_PRESSED, kf_PerformanceSample, N_("Make a performance measurement sample")); //These ones are necessary for debugging keyAddMapping(KEYMAP__DEBUG, KEY_LALT, KEY_A, KEYMAP_PRESSED, kf_AllAvailable, N_("Make all items available")); keyAddMapping(KEYMAP__DEBUG, KEY_LALT, KEY_K, KEYMAP_PRESSED, kf_KillSelected, N_("Kill Selected Unit(s)")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_G, KEYMAP_PRESSED, kf_ToggleGodMode, N_("Toggle god Mode Status")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_O, KEYMAP_PRESSED, kf_ChooseOptions, N_("Display Options Screen")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_X, KEYMAP_PRESSED, kf_FinishResearch, N_("Complete current research")); keyAddMapping(KEYMAP__DEBUG, KEY_LSHIFT, KEY_W, KEYMAP_PRESSED, kf_RevealMapAtPos, N_("Reveal map at mouse position")); keyAddMapping(KEYMAP__DEBUG, KEY_LCTRL, KEY_L, KEYMAP_PRESSED, kf_TraceObject, N_("Trace a game object")); saveKeyMap(); // save out the default key mappings. }
// //////////////////////////////////////////////////////////////////////////// bool startKeyMapEditor(bool first) { KEY_MAPPING *psMapping; UDWORD i,mapcount =0; UDWORD bubbleCount; bool bAtEnd,bGotOne; KEY_MAPPING *psPresent = NULL, *psNext; char test[255]; addBackdrop(); addSideText(FRONTEND_SIDETEXT, KM_SX, KM_Y, _("KEY MAPPING")); if (first) { loadKeyMap(); // get the current mappings. } W_FORMINIT sFormInit; sFormInit.formID = FRONTEND_BACKDROP; sFormInit.id = KM_FORM; sFormInit.style = WFORM_PLAIN; sFormInit.x = KM_X; sFormInit.y = KM_Y; sFormInit.width = KM_W; sFormInit.height = KM_H; sFormInit.pDisplay = intDisplayPlainForm; widgAddForm(psWScreen, &sFormInit); addMultiBut(psWScreen,KM_FORM,KM_RETURN, // return button. 8,5, iV_GetImageWidth(FrontImages,IMAGE_RETURN), iV_GetImageHeight(FrontImages,IMAGE_RETURN), _("Return To Previous Screen"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); addMultiBut(psWScreen,KM_FORM,KM_DEFAULT, 11,45, 56,38, _("Select Default"), IMAGE_KEYMAP_DEFAULT, IMAGE_KEYMAP_DEFAULT_HI, IMAGE_KEYMAP_DEFAULT_HI); // default. /* Better be none that come after this...! */ sstrcpy(test, "zzzzzzzzzzzzzzzzzzzzz"); psMapping = NULL; //count mappings required. for(psMapping = keyMappings; psMapping; psMapping = psMapping->psNext) { if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { mapcount++; if(strcmp(psMapping->pName,test) < 0) { /* Best one found so far */ sstrcpy(test, psMapping->pName); psPresent = psMapping; } } } // add tab form.. sFormInit = W_FORMINIT(); sFormInit.formID = KM_FORM; sFormInit.id = KM_FORM_TABS; sFormInit.style = WFORM_TABBED; sFormInit.x = 50; sFormInit.y = 10; sFormInit.width = KM_W- 100; sFormInit.height = KM_H- 4; sFormInit.numMajor = numForms(mapcount, BUTTONSPERKEYMAPPAGE); sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH+3; sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT/2); sFormInit.tabMajorThickness = OBJ_TABHEIGHT; sFormInit.pUserData = &StandardTab; sFormInit.pTabDisplay = intDisplayTab; // TABFIXME: Special case for tabs, since this one has whole screen to itself. No need to modify(?) for (i=0; i< sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } widgAddForm(psWScreen, &sFormInit); //Put the buttons on it W_BUTINIT sButInit; sButInit.formID = KM_FORM_TABS; sButInit.width = KM_ENTRYW; sButInit.height = KM_ENTRYH; sButInit.pDisplay = displayKeyMap; sButInit.x = 2; sButInit.y = 16; sButInit.id = KM_START; /* Add our first mapping to the form */ sButInit.pUserData= psPresent; widgAddButton(psWScreen, &sButInit); sButInit.id++; sButInit.y += KM_ENTRYH +3; /* Now add the others... */ bubbleCount = 0; bAtEnd = false; /* Stop when the right number or when aphabetically last - not sure...! */ while(bubbleCount<mapcount-1 && !bAtEnd) { /* Same test as before for upper limit */ sstrcpy(test, "zzzzzzzzzzzzzzzzzzzzz"); for(psMapping = keyMappings,psNext = NULL,bGotOne = false; psMapping; psMapping = psMapping->psNext) { /* Only certain mappings get displayed */ if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { /* If it's alphabetically good but better then next one */ if(strcmp(psMapping->pName,test) < 0 && strcmp(psMapping->pName,psPresent->pName) > 0) { /* Keep a record of it */ sstrcpy(test, psMapping->pName); psNext = psMapping; bGotOne = true; } } } /* We found one matching criteria */ if(bGotOne) { psPresent = psNext; bubbleCount++; sButInit.pUserData= psNext; widgAddButton(psWScreen, &sButInit); // move on.. sButInit.id++; /* Might be no more room on the page */ if ( (sButInit.y + KM_ENTRYH+5 ) > (3+ (BUTTONSPERKEYMAPPAGE*(KM_ENTRYH+3)))) { sButInit.y = 16; sButInit.majorID += 1; } else { sButInit.y += KM_ENTRYH +3; } } else { /* The previous one we found was alphabetically last - time to stop */ bAtEnd = true; } } /* Go home... */ return true; }
// //////////////////////////////////////////////////////////////////////////// BOOL startKeyMapEditor(BOOL first) { W_BUTINIT sButInit; W_FORMINIT sFormInit; KEY_MAPPING *psMapping; UDWORD i,mapcount =0; UDWORD bubbleCount; BOOL bAtEnd,bGotOne; KEY_MAPPING *psPresent,*psNext; char test[255]; addBackdrop(); addSideText (FRONTEND_SIDETEXT ,KM_X-2,KM_Y,strresGetString(psStringRes, STR_KM_KEYMAP_SIDE)); if(first) { loadKeyMap(); // get the current mappings. } memset(&sFormInit, 0, sizeof(W_FORMINIT)); // draw blue form... sFormInit.formID = FRONTEND_BACKDROP; sFormInit.id = KM_FORM; sFormInit.style = WFORM_PLAIN; sFormInit.x = KM_X; sFormInit.y = KM_Y; sFormInit.width = KM_W; sFormInit.height = KM_H; sFormInit.pDisplay = intDisplayPlainForm; widgAddForm(psWScreen, &sFormInit); addMultiBut(psWScreen,KM_FORM,KM_RETURN, // return button. 8,5, iV_GetImageWidth(FrontImages,IMAGE_RETURN), iV_GetImageHeight(FrontImages,IMAGE_RETURN), STR_MUL_CANCEL,IMAGE_RETURN,IMAGE_RETURN_HI,TRUE); addMultiBut(psWScreen,KM_FORM,KM_DEFAULT, 11,45, 56,38, STR_MUL_DEFAULT, IMAGE_KEYMAP_DEFAULT,IMAGE_KEYMAP_DEFAULT,TRUE); // default. /* Better be none that come after this...! */ strcpy(test,"zzzzzzzzzzzzzzzzzzzzz"); psMapping = NULL; //count mappings required. for(psMapping = keyMappings; psMapping; psMapping = psMapping->psNext) { if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { mapcount++; if(strcmp(psMapping->pName,test) < 0) { /* Best one found so far */ strcpy(test,psMapping->pName); psPresent = psMapping; } } } // add tab form.. memset(&sFormInit, 0, sizeof(W_FORMINIT)); sFormInit.formID = KM_FORM; sFormInit.id = KM_FORM_TABS; sFormInit.style = WFORM_TABBED; sFormInit.x = 50; sFormInit.y = 10; sFormInit.width = KM_W- 100; sFormInit.height = KM_H- 4; sFormInit.numMajor = numForms(mapcount, BUTTONSPERKEYMAPPAGE); sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH+3; sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT/2); sFormInit.tabMajorThickness = OBJ_TABHEIGHT; sFormInit.pFormDisplay = intDisplayObjectForm; sFormInit.pUserData = (void*)&StandardTab; sFormInit.pTabDisplay = intDisplayTab; for (i=0; i< sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } widgAddForm(psWScreen, &sFormInit); //Put the buttons on it memset(&sButInit, 0, sizeof(W_BUTINIT)); sButInit.formID = KM_FORM_TABS; sButInit.style = WFORM_PLAIN; sButInit.width = KM_ENTRYW; sButInit.height = KM_ENTRYH; sButInit.pDisplay = displayKeyMap; sButInit.x = 2; sButInit.y = 16; sButInit.id = KM_START; /* Add our first mapping to the form */ sButInit.pUserData= (VOID*)psPresent; widgAddButton(psWScreen, &sButInit); sButInit.id++; /* Now add the others... */ bubbleCount = 0; bAtEnd = FALSE; /* Stop when the right number or when aphabetically last - not sure...! */ while(bubbleCount<mapcount-1 AND !bAtEnd) { /* Same test as before for upper limit */ strcpy(test,"zzzzzzzzzzzzzzzzzzzzz"); for(psMapping = keyMappings,psNext = NULL,bGotOne = FALSE; psMapping; psMapping = psMapping->psNext) { /* Only certain mappings get displayed */ if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { /* If it's alphabetically good but better then next one */ if(strcmp(psMapping->pName,test) < 0 AND strcmp(psMapping->pName,psPresent->pName) > 0) { /* Keep a record of it */ strcpy(test,psMapping->pName); psNext = psMapping; bGotOne = TRUE; } } } /* We found one matching criteria */ if(bGotOne) { psPresent = psNext; bubbleCount++; sButInit.pUserData= (VOID*)psNext; widgAddButton(psWScreen, &sButInit); // move on.. sButInit.id++; /* Might be no more room on the page */ if ( (sButInit.y + KM_ENTRYH+5 ) > (3+ (BUTTONSPERKEYMAPPAGE*(KM_ENTRYH+3)))) { sButInit.y = 16; sButInit.majorID += 1; } else { sButInit.y += KM_ENTRYH +3; } } else { /* The previous one we found was alphabetically last - time to stop */ bAtEnd = TRUE; } } /* Go home... */ return TRUE; }