[Asking] Vanilla Pause Menu with title AND subtitle

you need to call the frontend_header scaleform function
"SET_HEADER_TITLE" with params title, subtitle, shiftUpHeader

also this

    while true do
          BeginScaleformMovieMethodOnFrontendHeader('SET_HEADING_DETAILS')
          ScaleformMovieMethodAddParamTextureNameString('first line')
          ScaleformMovieMethodAddParamTextureNameString('second line')
          ScaleformMovieMethodAddParamTextureNameString('third line')
          ScaleformMovieMethodAddParamBool(false)
          EndScaleformMovieMethod()
        Citizen.Wait(0)
    end

you don’t need to call it every frame.. you can simply call this everytime the game is paused checking the native
local bool = IsPauseMenuActive()

or for a more aggressive check: GetPauseMenuState() != 0

so you won’t need to call the scaleform function “on tick” but only once when the pause menu is opened or once every 1000ms if you want to make it looped.

CreateThread(function()
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'FE_THDR_GTAO', 'TITLE')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_MAP', 'MAP')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_GAM', 'GAME')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_PANE_LEAVE', 'DISCONNECT')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_PANE_QUIT', 'QUIT')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_INF', 'INFO')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_STA', 'STATS')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_SET', 'SETTINGS')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_GAL', 'GALERY')
   Citizen.InvokeNative(GetHashKey("ADD_TEXT_ENTRY"),'PM_SCR_RPL', 'ROCKSTAR EDITOR')
   local timer = 500
    while true do
        Wait(timer)
        if IsPauseMenuActive() then
            BeginScaleformMovieMethodOnFrontendHeader('SET_HEADING_DETAILS')
            ScaleformMovieMethodAddParamTextureNameString('first line')
            ScaleformMovieMethodAddParamTextureNameString('second line')
            ScaleformMovieMethodAddParamTextureNameString('third line')
            ScaleformMovieMethodAddParamBool(false)
            EndScaleformMovieMethod()
            -- set the waiting timer to 1000 in pause menu
            if timer == 500 then timer = 1000 end
        end
        -- reset the timer to half second for outside pause menu for a bit more reactivity in checking.
        if timer == 1000 then timer = 500 end
    end
end)

if you want to make your own pause menus customizable and fully controllable :slight_smile: Check ScaleformUI it allows you to make your own Pause Menus and Lobbies.