This is a feature suggestion for both players and developers.
As a Roblox player, it’s currently impossible to properly play old Roblox games that expected the FPS cap to be 30 FPS, such as this one, resulting in the walkspeed and firing rate being extremely high.
As a Roblox developer, it’s currently too difficult to properly gauge how your game acts when the FPS is low w/o slowing your game down manually.
While it’s a small thing, I think it would help a lot with preserving old games that are otherwise fully functional 12 years later, and it would also help developers with gauging their game’s responsiveness at low frame rates (for example, fire rate, in-game timers, etc.)
For a smoother experience in games that would otherwise have inconsistent framerates, I would like this to be an option again.
I don’t think your reasoning with old games is something roblox would ever act on though.
I would love to see the 30 FPS cap option return as it was in the beta for the feature. I don’t know why they removed it as it would make the hacky method of getting 30 FPS in games obsolete and built into the client without having to purposely lag the client
Having it global option will break games the moment you forget to switch it to 60 when you join another game (unless you have good memory to uncap it, then be my guest), but i can see this being an option you can set within Workspace, maybe like
workspace.Is30FPSCapEnabled
That way devs don’t need to add a local script to lock the FPS to specific framerate, and it can all be handled directly within the engine, plus being a map-specific override, you don’t have to remind yourself to uncap it when you play another game
I do not understand why it would break games. It is possible to have a device lag under 60 FPS if it isn’t strong enough. If a cap of 30 FPS breaks your game; I’d look into what could be causing it to break and fix it using RunService events with deltatime or using the return values of wait() and task.wait(). Always make sure that you can account for all framerates as Roblox supports framerates other than 60 FPS. One of my old phones can only handle 45 FPS and Roblox accounts for that and limits it at that framerate.
Roblox also mentions accounting for this in their post here
I’d really like to see the 30 fps cap option added. Here’s a temp solution I made which will hopefully work as a temporary solution in the mean time.
local Heartbeat = game:GetService("RunService").Heartbeat
local Thread do
local LastThread
local function FPSHandler(FPS : number)
if LastThread then
local TempLastThread = LastThread
LastThread = Thread
coroutine.close(TempLastThread)
end
LastThread, Thread = Thread, coroutine.create(FPSHandler)
local Stamp = os.clock()
repeat
repeat
until os.clock() - Stamp >= 1/FPS
Stamp = os.clock()
until not Heartbeat:Wait()
end
Thread = coroutine.create(FPSHandler)
end
function SetFpsCap(FPS : number)
assert(type(FPS) == "number", "number expected, got: "..typeof(FPS))
coroutine.resume(Thread, FPS)
end
SetFpsCap(30)
I will admit the recursive threading took me longer than I’m willing to admit
It really works , Without the script it renders into almost the fps limit ,So my monitor is 165 hz and really are an Samsung Odyssey G3 ,They render 165 frames per seconds