Overshell
The Overshell is the updated menu system introduced in Rock Band 3, and was also used in Rock Band 4. It allows individual players to change settings, characters, and drop in and out whenever they want without a separate "band quickplay" mode like the previous games. The name "Overshell" comes from the fact it draws over the "shell," or the main game/menus.
The Overshell was designed to replace the older, single player focused "shell" menu system dating all the way back to the earliest days of Guitar Hero. The older "shell" system is much easier to modify and create your own menus, as each menu was their own thing and could simply be copied over, renamed and modified however you want. The Overshell merges everything into one, making the process a bit harder than just copy and modify a whole file.
The Overshell does many things, enables/disables modifiers, changes system settings (tv overscan, volumes), character selection, and dropping in and out at will, even while in a song!
Menus
The menus in the Overshell are defined as a state in ui/overshell/slot_states.dta
, and list (.lst) states are usually defined in ui/overshell/overshell_dir.dta
(but can also be defined in slot_states). For most things, the only one necessary to change is slot_states
, as it mostly overwrites overshell_dir
's instructions.
Many of the menu lists were designed to be unchanging, the line (setup_static_lists)
in overshell_dir
tells this pretty well.
Example Menu Array
This is the extras menu in slot_states.dta
(slightly modified to use the names in locale and using the raw commands that can actually be used, and added some very helpful comments)
NOTE: menus are named like this kState_MenuName
(kState_OptionsExtras ; the start of the menu array
(view options_extras) ; tells the game to show the list file in overshell.milo named "options_extras.lst"
(enter ; this part was taken from overshell_dir.dta to make it easier to take it all in one fell swoop
{options_extras.lst
set_data ; this sets the data for the different selections on the list
("credits"
"Account-linking Code"
#ifdef HX_XBOX
"Audition Mode" ; I actually cut this bit of code in the selection part to make this even simpler, but yes you can use #ifdefs in slot_states
#endif)}) ; sidenote, if you have a list selection that doesn't point to anything, selecting it will crash your game
(SELECT_MSG ; but having extra items in SELECT_MSG wont affect anything aside from waste a bit of space
{switch
{$component selected_sym} ; depending on which thing on the list you selected, the game will do different things!
("credits"
{$this show_state kState_EnterCredits}) ; selecting credits takes you to a "do you want to enter the credits?" overshell menu named "kState_EnterCredits"
("Account-linking Code"
{if_else ; ooh, an if_else!
{&& ; I'm just gonna assume that you have a basic knowledge of what these do
{$user can_save_data}
{$user is_signed_in_online}}
{$this show_state kState_LinkingCode} ; if you're connected, it will take you to an overshell menu that shows you your linking code (which im pretty sure does nothing these days)
#ifdef HX_PS3
{do
{$this show_state kState_LinkingCodeError} ; if you're on a ps3 and aren't connected, it will take you to an overshell menu that tells you there was an error connecting
{platform_mgr run_net_start_utility}} ; and starts a network utility?
#else
{$this show_state kState_LinkingCodeError} ; doesn't do that anywhere else though!
#endif})
})
(on_cancel ; this takes you back to the main options menu, named "kState_GameOptions"
{$this show_state kState_GameOptions}))
Our Own Menus
Using the example array, it's pretty easy to create our own menus, starting with this:
Choosing a .lst
Unfortunately, we cannot just make a new .lst for a new menu, since there is no way to modify Rock Band 3 .milo files at this time. Get used to this, it will be a reoccurring theme throughout this whole thing.
That leaves us with these .lst files that we can copy:
RECCOMENDED .lst FILES:
options_audio.lst
options_extras.lst (only has 3 selections visible at a time)
online_options.lst
options.lst
options_end_game.lst (only 2 selections visible at a time)
subpar .lst files:
game_options.lst (checkmarks)
options_drum.lst (checkmarks and large header)
options_vocal.lst (checkmarks)
options_av_settings.lst (checkmarks)
users.lst (uses view definitions kick_user and mute_user) (checkmarks and small header)
BAD .lst FILES
auto_sign_in_rock_central.lst
cancel_song.lst (same as choose_diff.lst)
chars.lst
choose_char_edit.lst (same as chars.lst)
choose_diff.lst
choose_part.lst (same as choose_diff.lst with multiple view names (choose_part_guitar, bass, etc.)
confirm_action.lst
invite_friends.lst
modifiers.lst
profile_options.lst (no known view definition)
profiles.lst (same deal)
sign_in_to_register.lst
To have menu transition animations, you have to use different .lst files compared to the menu you're transitioning from (eg. going from system settings (options_av_settings.lst) into another menu that also uses options_av_settings.lst won't have a menu transition, while going from options_av_settings.lst to users.lst will transition correctly, even though by default they don't have a link to each other)
Sliders
In the base game, sliders are mainly used to set volumes to certain parts of the songs, sound effects, and microphone sensitivity. The max amount of sliders on one menu is 5, in the ps3's audio settings menu.