Gravy Mod Menu in SimplePlanes 2

Gravy Mod Menu

One in-game menu for every mod's settings, plus extra game settings.

Version
Version 0.1.5
Works with
SimplePlanes 2 0.7.9
Updated
Category
Menu
Online
Local onlyExperimental: still has bugs in multiplayer
Needs
BepInEx 5

What it does

An in-game mod menu for SimplePlanes 2 that looks and works like the game's own UI.

It adds a lavender Gravy Mod Menu button to the flight MENU, below "Submit Bug Report". The button opens a panel that behaves like the Environment Settings window:

  • it isn't modal, so you can keep flying;
  • it can be dragged;
  • it hides with the flight UI.

It's built from the game's own dialog, toggles, sliders, spinners and collapsible sections.

Gravy Mod Menu button (open larger)
Gravy Mod Menu button
Gravy Mod Menu

Tabs

Show tabsHide tabs
  • One tab per supported mod that's installed, e.g. Air Traffic and Flight Map.
  • Extra Settings: more game settings than the Settings screen shows, such as:

    • craft culling, occlusion culling, physics and predictor quality, water reflections;
    • ground traffic, drag scale, length of day;
    • designer nudge/rotate amounts and sky colours, and more.

    Notes:

    • Changes apply and save immediately.
    • Drag Scale is single player only (see Multiplayer below).
    • Settings marked * need a flight reload or a game restart.
    • The first time the tab opens, it saves each setting's current value to BepInEx/config/GravyMenu.OriginalSettings.xml. Restore Original Values puts them back.

    Some of them are experimental, so use them with care.

Extra Settings tab (open larger)
Extra Settings tab

Multiplayer

Show multiplayerHide multiplayer

Experimental online. This mod runs in multiplayer, but it still has bugs there that aren't fixed yet. It works best in single player for now.

  • The menu is local. It sends nothing over the network, and other players don't need it. Each mod's tab follows that mod's own multiplayer rules (see its page); for example, Extreme Weather's event buttons only work for the host.
  • Extra Settings are the game's own settings, so online they behave as they do in the game:
    • Drag Scale is single player only. It changes how fast your own craft flies, and online you fly your own craft, so it would be an advantage in public lobbies and races. In multiplayer (hosting or joining) it's greyed out and held at 1, even if you changed it in single player first. Your value comes back automatically the next time you fly in single player.
    • Length of Day only matters when you host: the host's day length is used by everyone.
    • Ground traffic convoys exist only on your screen; other players don't see them.

Adding a tab to your own mod

Show adding a tab to your own modHide adding a tab to your own mod

No reference to this mod is needed. It finds plugins by reflection.

public class Plugin : BaseUnityPlugin
{
    // Opt in: every config entry becomes a control, grouped by config section.
    public const string GravyMenuTab = "My Mod";

    // Optional: live label/value rows at the top of the tab (refreshed twice a second).
    public static Func<IEnumerable<(string, string)>> GravyMenuStatus => () => new[] { ("Speed", "123 m/s") };

    // Optional: buttons.
    public static IEnumerable<(string, Action)> GravyMenuActions => new (string, Action)[] { ("Do Thing", DoThing) };
}

Each config type gets a matching control:

Config typeControl
booltoggle
int / float with AcceptableValueRangeslider
UnityEngine.InputSystem.Keypress-to-rebind button (Esc cancels, Backspace sets None; warns if the game or another installed mod uses the key)
enum, or AcceptableValueList<string>spinner
anything elsetext box

GravyMenuStatus and GravyMenuActions must be public static with exactly those types; anything else is ignored with a warning in the BepInEx log.

Optional string tags in the ConfigDescription tweak how an entry appears:

TagEffect
gravy:label=Nice Namedisplay name
gravy:unit= kmunit suffix
gravy:step=0.5slider step (whole numbers for int settings)
gravy:percentshow as a percentage
gravy:hiddendon't show the entry
gravy:section=Nameshow it under this section instead of its config section

Several mods can share one tab: give them the same GravyMenuTab name. Their settings, status rows and buttons are shown together, sections with the same name are merged, and gravy:section puts entries from different mods under one heading. The Classic Islands mods do this for their Modded Islands tab.

Requirements

Show requirementsHide requirements
  • SimplePlanes 2 0.7.9
  • BepInEx 5 (5.4.x, x64 Mono build) installed in the game folder. On Linux/Steam Deck with Proton, add WINEDLLOVERRIDES="winhttp=n,b" %command% to the game's launch options.

Back to all mods