/* Allows _new_ mappings to be made at runtime */ static bool checkQwertyKeys() { KEY_CODE qKey; UDWORD tableEntry; bool aquired = false; /* Are we trying to make a new map marker? */ if (keyDown(KEY_LALT)) { /* Did we press a key */ qKey = getQwertyKey(); if (qKey) { tableEntry = asciiKeyCodeToTable(qKey); /* We're assigning something to the key */ debug(LOG_NEVER, "Assigning keymapping to tableEntry: %i", tableEntry); if (qwertyKeyMappings[tableEntry].psMapping) { /* Get rid of the old mapping on this key if there was one */ keyRemoveMappingPt(qwertyKeyMappings[tableEntry].psMapping); } /* Now add the new one for this location */ qwertyKeyMappings[tableEntry].psMapping = keyAddMapping(KEYMAP_ALWAYS, KEY_LSHIFT, qKey, KEYMAP_PRESSED, kf_JumpToMapMarker, "Jump to new map marker"); aquired = true; /* Store away the position and view angle */ qwertyKeyMappings[tableEntry].xPos = player.p.x; qwertyKeyMappings[tableEntry].yPos = player.p.z; qwertyKeyMappings[tableEntry].spin = player.r.y; } } return aquired; }
// ---------------------------------------------------------------------------------- bool keyReAssignMappingName(char *pName, KEY_CODE newMetaCode, KEY_CODE newSubCode) { KEY_MAPPING *psMapping; psMapping = getKeyMapFromName(pName); if (psMapping) { if (psMapping->status == KEYMAP_ASSIGNABLE) { (void)keyAddMapping(psMapping->status, newMetaCode, newSubCode, psMapping->action, psMapping->function, psMapping->pName); keyRemoveMappingPt(psMapping); return (true); } } return (false); }
/* 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. }
// //////////////////////////////////////////////////////////////////////////// // load keymaps from registry. bool loadKeyMap(void) { KEY_STATUS status; KEY_CODE metaCode; KEY_CODE subCode; KEY_ACTION action; char name[128]; SDWORD count; UDWORD funcmap; char ver[8]; PHYSFS_file *pfile; PHYSFS_sint64 filesize; PHYSFS_sint64 countsize = 0; PHYSFS_sint64 length_read; // throw away any keymaps!! keyClearMappings(); if (!PHYSFS_exists(KeyMapPath)) { debug(LOG_WZ, "%s not found", KeyMapPath); return false; } pfile = PHYSFS_openRead(KeyMapPath); if (!pfile) { // NOTE: Changed to LOG_FATAL, since we want to inform user via pop-up (windows only) debug(LOG_FATAL, "loadKeyMap: [directory: %s] %s could not be opened: %s", PHYSFS_getRealDir(KeyMapPath), KeyMapPath, PHYSFS_getLastError()); assert(false); return false; } filesize = PHYSFS_fileLength(pfile); #define READ(var, size) \ length_read = PHYSFS_read(pfile, var, 1, size); \ countsize += length_read; \ if (length_read != size) { \ debug(LOG_FATAL, "loadKeyMap: Reading %s short: %s", \ KeyMapPath, PHYSFS_getLastError()); \ assert(false); \ (void) PHYSFS_close(pfile); \ return false; \ } READ(&count, sizeof(count)); READ(&ver, 8); // get version number. if (strncmp(ver, keymapVersion, 8) != 0) { /* If wrong version, create a new one instead. */ PHYSFS_close(pfile); return false; } for(; count > 0; count--) { READ(&name, 128); // name READ(&status, sizeof(KEY_STATUS)); // status READ(&metaCode, sizeof(KEY_CODE)); // metakey READ(&subCode, sizeof(KEY_CODE)); // subkey READ(&action, sizeof(KEY_ACTION)); // action READ(&funcmap, sizeof(funcmap)); // function // add mapping keyAddMapping( status, metaCode, subCode, action, keyMapSaveTable[funcmap],(char*)&name); } if (!PHYSFS_close(pfile)) { debug(LOG_ERROR, "Error closing %s: %s", KeyMapPath, PHYSFS_getLastError()); assert(false); return false; } if (countsize != filesize) { debug(LOG_FATAL, "File size different from bytes read!"); assert(false); } return true; }
// //////////////////////////////////////////////////////////////////////////// // load keymaps from registry. BOOL loadKeyMap(void) { KEY_STATUS status; KEY_CODE metaCode; KEY_CODE subCode; KEY_ACTION action; STRING name[128]; FILE *pFileHandle; SDWORD count; UDWORD funcmap; char ver[8]; // throw away any keymaps!! keyClearMappings(); pFileHandle = fopen("keymap.map", "rb"); // check file exists if (pFileHandle == NULL) { return FALSE; // failed } if (fread(&count, sizeof(UDWORD), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // get version number. // if not from current version, create a new one.. if(fread(&ver,8,1,pFileHandle) !=1) { fclose(pFileHandle); return FALSE; } if(strncmp(&ver,buildTime,8) != 0) // check { fclose(pFileHandle); return FALSE; } for(; count>0;count--) { // name if (fread(&name, 128, 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // status if (fread(&status, sizeof(KEY_STATUS), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // metakey if (fread(&metaCode, sizeof(KEY_CODE), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // subkey if (fread(&subCode, sizeof(KEY_CODE), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // action if (fread(&action, sizeof(KEY_ACTION), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // function if (fread(&funcmap, sizeof(UDWORD), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // add mapping keyAddMapping( status, metaCode, subCode, action, keyMapSaveTable[funcmap],(char*)&name); } if (fclose(pFileHandle) != 0) { DBERROR(("Close failed for load key map.")); return FALSE; } return TRUE; }