(breaking this discussion out of an old thread elsewhere)
I’ve been working on some menu code today, which has been distunctly “un-fun” compared to the preceeding game engine work. i began to think about how i would prefer to be doing things and figured it is worth posting my thoughts here:
Can I hook into system menu?
yes, but just Options
I’ll pass a structure defining the menu items i want
optional widgets (for multi select items, similar to the volume slider)
My desired experience would be:
open system menu
menu descends a level
game menu items are rendered
changes do a callback and save immediately
a “back” option at the top/btm of the list to get back to previous menu
or menu button would close things instantly to get back to game
I’m of the mind that I’d be quite happy if my menu items lived alongside the system menu options. Of course the current DIY gridview option would continue to exist.
Some example options I currently have:
(easy, NORMAL, difficult)
I don’t mind if only one is visible at a time
(none, low, MEDIUM, high, max)
would like to use a slider or graphical selector of some sort
Editor: Reset Player
could be radio buttons
Editor: Small Step
(2, 5, 10)
custom values to select from
Editor: Large Step
(5, 10, 20)
custom values to select from
could be a checkbox
select to change game state/screen
I have a bunch more but they fall into the same categories.
You’ve pretty much covered everything I thought to use it for with the same workflow. Sub-menus would be nice, as well as possibly specifying a fixed-size icon (and left/right align for text/icon display). +1 from me!
This is a really great suggestion and I fully support this.
Having so few buttons on the Playdate is really one of my pet peeves with the system so far. It’s really disheartening when even the original GameBoy had more buttons than you do
(of course I would be happiest if I could just use the Menu button for my game, and e.g. a long press would open the system menu, but this suggestion here is the next best thing)
For me, someone that mostly just wants more buttons, one thing that’s not mentioned yet is, that I want my “Options” menu item to be the default selected item when opening the system menu. I know this changes the behaviour of having the volume slider be the default selection depending on whether the options callback is defined, but I see no reason for volume slider having to always be the default.
What I’m thinking of is the use case of a game with an inventory (e.g. mega man) where item switching is frequent. If you are already using two primary buttons (e.g. shooting and jumping), a secondary button is needed to open the item menu. With the current Options callback we can at least “emulate” a button press, by pressing five other buttons (Menu -> Down x3 -> A), having our options being the default would bring this down to two buttons (Menu -> A) (+the menu animation) which would be a significant improvement.
Of course another way one can solve this, is by having the crank’s dock state be used as a button. Then a player would undock the crank to open the item menu, select the desired item (by crank or dpad, doesn’t really matter) and continue the game by docking the crank again. I can see this being used for a lot of games, but will sometimes still feel clunky if all you really wanted was another button.
If these custom menu items are implemented, another thing I would want is that selecting a menu item could also directly close the whole menu (in addition to the suggestions of pressing the menu button, or simply selecting a back option), then my Options submenu can be a list of items, and choosing one would automatically switch to it and close the menu (preventing another button press).
Make custom menu item “Options” the default selected item (to reduce button presses required to get to it)
Allow for sub-menu items to directly close the whole menu when selecting them (again, to reduce button presses)
So this is where my mind was going for a menu system, but actually in reverse: you’d start the game by undocking the crank, and play with it undocked. Then docking would be the “pause” menu, along with any options there. I feel like this would come off as pretty natural if your game used (or optionally could use) the crank.