3.8 KiB
Nightcap roadmap
What Nightcap is working toward, in priority order. Items move to
Shipped when they land on main. Open an issue to propose a
change to this list.
1. Settings UI
Nightcap is configured by editing ~/.config/mocktail/config.yaml. Most
people never open it, so they never find the FPS unlock or the vsync switch.
Goal: a small GTK4 settings window, reachable from the app menu and from a
--settings flag, that reads and writes the same config.yaml.
- Graphics tab: backend, frame rate limit, vsync, small texture upscale.
- Input tab: the
input.raw_mousetoggle and controller options. - Advanced tab: FFlag overrides with a plain text editor for
fflags.json. - Discord tab: every field in the
discord_rpcblock, so a friend can see what you are playing and you can switch it all off in one click. - Changes apply on next launch. A restart button restarts Nightcap.
Done when every option in config/mocktail.example.yaml that a player would
touch can be set without a text editor.
2. Controller button glyphs
Upstream added Xbox and PlayStation gamepad support through SDL. Controllers already hot-plug and release their held inputs when unplugged. One rough edge is left.
- Correct button glyphs for the connected pad.
SDL_GetGamepadTypeis only read for Xbox and PlayStation pads, so a Switch Pro, a GameCube pad, or any generic pad SDL reports asSDL_GAMEPAD_TYPE_STANDARDreaches Roblox as type 0 and draws generic glyphs.SDL_GetRealGamepadType, and the vendor and product IDs, are available and unused.
Done when a plugged-in pad shows its own buttons.
Shipped
- Lower input latency: frames are presented as soon as they are ready.
- Controllers hot-plug without a restart, and a pad that is unplugged mid-game releases its held buttons and sticks instead of leaving them stuck.
- Mouse look keeps responding after a long turn, instead of going dead until the pointer travels back from past the screen edge.
- Optional raw mouse input:
input.raw_mouseinconfig.yamlsends look deltas in host units, so fractional display scaling no longer changes first-person sensitivity. - Small textures upscaled 4x by default, with PNG overrides in
~/.config/mocktail/textures. - ETC2 textures decoded on desktop GPUs without stutter.
- No more error 319 kicks after joining a server.
- Roblox sees the real host RAM and screen size.
- Desktop launcher that works on Wayland and finds the installed binary.
- Discord Rich Presence on by default, with the experience name, creator, elapsed time, the experience icon with a Roblox badge, and a join button when the server is public. See the FAQ to switch it off.
- Custom Discord presence: title, details, state, and large and small icons
from
config.yaml, with{place_name},{place_icon}, and{creator_name}placeholders. --profilewrites a Chrome-format trace of the Vulkan adapter's work, including shader and pipeline creation, readable inui.perfetto.dev. BENCHMARKING.md fixes the experiences to measure andscripts/summarize_profile_trace.pybuilds the before and after table.- Texture uploads no longer stall the frame they land on: ETC2 decode and resampling run on a persistent worker pool.
- Less stutter while joining an experience and while textures load in. See the changelog for the numbers.
- The host main thread rests between engine polls instead of spinning, and GameMode's core pinning is released, so Roblox's workers spread across every core. See PERFORMANCE.md.
- Own app ID
io.github.CoderDayton.nightcap, so Nightcap installs next to upstream. - AppImage and signed Flatpak releases on every
v*tag, with the Flatpak repo on GitHub Pages.
Not planned
- Replacing the
mocktailbinary and config names. Keeping them makes upstream merges clean.