etternagame / etterna

Advanced cross-platform rhythm game focused on keyboard play
https://etternaonline.com/
MIT License
474 stars 133 forks source link

[Feature Request]: Add further keybind customization support (for 60% or TKL keyboards mostly, but helps in general) #1245

Open caughtintheweb opened 1 year ago

caughtintheweb commented 1 year ago

Is there an existing issue for the feature?

Describe the Feature

Many hotkeys that would frequently be used on a daily basis are binded to very specific things, like PrtScr for screenshotting most prevalently. It is possible to change these binds via custom LUAs, but I believe that having something this important for customization should be available ingame, maybe via debug menu or player settings. I am unfamiliar with the code of the game (and the language, lol), so I have no clue if this is extremely difficult to implement or not. If it isn't, then it seems like a good idea to add.

How Does The Feature Add To The Game?

Customization is the name of the game on Etterna, and having a substantial number of hotkeys be hardwired to specific keybinds just seems odd to me. Plus, a lot of them can be difficult to remember for specific purposes, requiring you to go and check what the bind is. Being able to change the bind to something you want makes it extremely easy to remember. Not to mention, there are a couple binds that are completely impossible to hit on a tenkeyless (TKL) or 60% keyboard. These sizes of keyboards aren't exactly uncommon!

Additional Context

No response

bluebandit21 commented 1 year ago

Note -- many of the things that I believe are being referred to have the following kind of hard-coded structure in the source code:

    bool bDoScreenshot =
#ifdef __APPLE__
      // Notebooks don't have F13. Use cmd-F12 as well.
      input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_PRTSC) ||
      input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F13) ||
      (input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F12) &&
       (INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LMETA),
                                    &input.InputList) ||
        INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RMETA),
                                    &input.InputList)));
#else
      /* The default Windows message handler will capture the desktop window
       * upon pressing PrntScrn, or will capture the foreground with focus upon
       * pressing Alt+PrntScrn. Windows will do this whether or not we save a
       * screenshot ourself by dumping the frame buffer. */
      // "if pressing PrintScreen and not pressing Alt"
      input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_PRTSC) &&
      !INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT),
                                   &input.InputList) &&
      !INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT),
                                   &input.InputList);
#endif

(src/Etterna/Globals/StepMania.cpp)