Skip to content

Conversation

@Catizard
Copy link
Collaborator

image

Motivation

Beatoraja exposes its configurable options in its launcher, which is known to be hard to use & no explanation. And most of the tabs are disabled after launching the game. To allow user change options in-game, beatoraja created many specific events for skin makers to use. Most of the popular skins have features like a panel that arranges some options. However, what options are presented is now fully controlled by the skin makers: what if the option that you want isn't presented in the skin you're using, what if we add more and more options in ED, what if the skin I want to use doesn't have this feature at all?

Previously, we have an idea of bringing the lift, hidden, lanecover settings in-game. I assembled them in mod menu's Misc Setting Menu, which is simply adding them all and blindly stacking them together. This proposal could be viewed as the extension of that.

This proposal can also unlock some other ideas like:

  • Pressing tab key to open a "song info" panel that allows you do some things for current selected song, rendering the leaderboard and manage favorited random permutations.
  • Making all shortcuts in beatoraja are configurable

What can be done in this system

  • Almost all configurable options
  • Osu-style key configuration
  • Giving user a button to fire an issue that attached with system parameters, configurations.

Implementation details

Currently, it overrides the F1 key to open the menu.

The code could be roughly split into 2 pieces:

  • Widgets: render things by using Imgui and they can expose each others
  • Windows: display the configurable options

For reviewer and further dev:

  • ImGuiKeyHelper: getting the last pressed key and translating it into libgdx's keycode. Libgdx's input processor is frozen when SettingsMenu is at front.
  • F1 key is handled manually in poll function, to allow user close the setting menu by pressing F1 again.
  • Font size cannot be configured dynamically at runtime, there's a specific 24 pixel sized font called font24.

@BKVad1m
Copy link

BKVad1m commented Jan 19, 2026

Replace F1 -> F7 for show and hide FPS because twitter (X) was useless

@Catizard
Copy link
Collaborator Author

Replace F1 -> F7 for show and hide FPS because twitter (X) was useless

F7 is too hard to press

@BKVad1m
Copy link

BKVad1m commented Jan 19, 2026

Replace F1 -> F7 for show and hide FPS because twitter (X) was useless

F7 is too hard to press

but F1 for in-game settings stays

@seraxis
Copy link
Owner

seraxis commented Jan 19, 2026

If I am understanding this correctly this current PR proposes to add a toggle for FPS inside the new in-game settings menu, as opposed to rebinding it to yet another key (such as F7), is that correct?

@Catizard
Copy link
Collaborator Author

If I am understanding this correctly this current PR proposes to add a toggle for FPS inside the new in-game settings menu, as opposed to rebinding it to yet another key (such as F7), is that correct?

Yes, it changes the behavior of F1

Catizard and others added 18 commits January 20, 2026 12:38
- The guard around the cache directory creation in BMSLoudnessAnalyzer
is removed to make sure changing `normalize chart volume` option in-game
work.
- `Label` now adapts builder pattern instead of overload constructors.
To make things more clear IconLabel is removed too.
- `Tile` no longer gives two icon slots, instead, icons are forced to be
placed at left, and right side is for optional description. Vertically
stacked `Tile`s are now aligned correctly at left side by inserting
spaces. Please note that **icons don't have same width**, so
`iconLabelBuilder` is forcing all labels it produces have same width
`15F`.
- All the audio options in launcher are now moved inside settings menu
- Removed the field `width` in Label because it simply won't work.
- Tile's icon is now inside of a column which has constant width(16f) to
ensure vertically stacked Tile widgets have aligned looking.
- Song manager menu is now removed from F5 menu. All its capability is
now served inside F1 setting menu
- The `sort by last played date` feature should be implemented as an
option in `sort strategies`, but it's hard to tweak things works right
when an unexisted value is persisted into user's config file.
- Continuation of the last one, the checkbox of `last played sort` is
not persisted too. Users need to re-check it manually after restarting
game.
@Catizard
Copy link
Collaborator Author

Update: the basic functionality has been implemented. I'm open to feedback and contributions regarding terminology, prompts, layout, and other miscellaneous content.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants