How to Add Universal Slow Motion and Fast-Forward Hotkeys in Cheat Engine

Slow motion is one of those cheats that sounds silly until you actually try it.

In a shooter, it can make aiming dramatically easier. In an action game, it can help with dodging, parrying, or reacting to attacks that were clearly designed by someone who dislikes your blood pressure. It is also useful for screenshots, studying animations, or just making every gunfight feel like a movie scene.

Cheat Engine already includes Speedhack, which lets you slow down or speed up a game. But instead of opening the Speedhack window and manually changing values every time, you can make it much more convenient with a small Lua script.

The good news is that there are two practical ways to use it:

  • Hold mode — hold a key for temporary slow motion, release it to return to normal
  • Toggle mode — press a key once to enable slow motion, press it again to disable it

Both are useful, and realistically they serve different purposes.

  • Hold mode is better for moment-to-moment gameplay, such as aiming, dodging, or reacting to an attack.
  • Toggle mode is better when you want to keep the game slowed down for a longer stretch, such as a difficult boss fight, careful exploration, or taking screenshots.

And while we are here, we can also add a separate fast-forward hotkey.

In case you missed it: How to Use Cheat Engine for the First Time: A Beginner’s Guide

Hold Mode: Hold a Key for Slow Motion

This is the more “active” version. You hold a key, the game slows down. You release it, and the game goes back to normal.

Open your cheat table and press:

Ctrl + Alt + L

This opens the Cheat Table Lua Script window.

Then add:

local slowKey = VK_MENU
local slowSpeed = 0.25
local normalSpeed = 1.0

slowMoTimer = createTimer(nil)
slowMoTimer.Interval = 30

slowMoTimer.OnTimer = function()
    if isKeyPressed(slowKey) then
        speedhack_setSpeed(slowSpeed)
    else
        speedhack_setSpeed(normalSpeed)
    end
end

With this script:

  • Hold Alt → game runs at 25% speed
  • Release Alt → game returns to normal speed

That is the entire idea.

No memory scan. No pointer. No hunting for the game’s internal speed variable. Just temporary bullet time powered by Lua.

Toggle Mode: Press Once to Turn It On

Sometimes temporary slow motion is not enough.

Maybe you want to keep the game slowed down during a long boss fight. Maybe you want to explore carefully. Maybe you are taking screenshots and do not want to hold a key the entire time like you are trying to stop a runaway lawnmower.

That is where toggle mode is better.

Use this version:

local toggleKey = VK_F1
local slowSpeed = 0.25
local normalSpeed = 1.0

local slowEnabled = false

createHotkey(function()
    slowEnabled = not slowEnabled

    if slowEnabled then
        speedhack_setSpeed(slowSpeed)
    else
        speedhack_setSpeed(normalSpeed)
    end
end, toggleKey)

With this script:

  • Press F1 once → slow motion turns on
  • Press F1 again → slow motion turns off

This is much better when you want the effect to stay active for more than a second or two.

Adding Fast-Forward Too

Since Speedhack can also speed a game up, you can pair slow motion with a separate fast-forward hotkey.

This is useful for:

  • Grinding
  • Long walking sections
  • Repetitive crafting
  • Unskippable animations
  • NPCs who speak like every line is the final monologue of a 14-hour stage play

Here is a simple toggle-style fast-forward version to pair with slow motion:

local slowKey = VK_F1
local fastKey = VK_F2

local slowSpeed = 0.25
local fastSpeed = 3.0
local normalSpeed = 1.0

local speedMode = "normal"

createHotkey(function()
    if speedMode == "slow" then
        speedMode = "normal"
        speedhack_setSpeed(normalSpeed)
    else
        speedMode = "slow"
        speedhack_setSpeed(slowSpeed)
    end
end, slowKey)

createHotkey(function()
    if speedMode == "fast" then
        speedMode = "normal"
        speedhack_setSpeed(normalSpeed)
    else
        speedMode = "fast"
        speedhack_setSpeed(fastSpeed)
    end
end, fastKey)

This gives you:

  • Press F1 → toggle slow motion
  • Press F2 → toggle fast-forward
  • Press the same key again → return to normal speed

The speedMode variable keeps everything tidy so slow motion and fast-forward do not fight each other like two interns editing the same spreadsheet.

If You Want Hold Mode for Slow and Fast

If you prefer the “hold a key” style for both slow motion and fast-forward, use this version:

local slowKey = VK_MENU
local fastKey = VK_F2

local slowSpeed = 0.25
local fastSpeed = 3.0
local normalSpeed = 1.0

speedTimer = createTimer(nil)
speedTimer.Interval = 30

speedTimer.OnTimer = function()
    if isKeyPressed(slowKey) then
        speedhack_setSpeed(slowSpeed)
    elseif isKeyPressed(fastKey) then
        speedhack_setSpeed(fastSpeed)
    else
        speedhack_setSpeed(normalSpeed)
    end
end

This gives you:

  • Hold Alt → slow motion
  • Hold F2 → fast-forward
  • Release both → normal speed

This version is great when you want temporary control in both directions.

Changing the Hotkeys

You do not have to use the default keys.

Examples:

local slowKey = VK_CONTROL

uses Ctrl.

local toggleKey = VK_F3

uses F3.

You can change the hotkeys to whatever feels comfortable, but use common sense.

Choosing Shift for slow motion may sound clever until you remember Shift is also sprint in a truly unreasonable number of games.

Likewise, choosing Space is a wonderful way to discover that your character now jumps every time you try to manipulate time itself.

Changing the Speed Values

You can also change the multipliers very easily.

For example:

local slowSpeed = 0.5
local fastSpeed = 2.0
local normalSpeed = 1.0

means:

  • 1.0 = normal speed
  • 0.5 = half speed
  • 0.25 = quarter speed
  • 2.0 = double speed
  • 3.0 = triple speed

For slow motion, I would usually stay between:

  • 0.5
  • 0.25
  • 0.1

For fast-forward, something like:

  • 2.0
  • 3.0
  • 5.0

is usually enough.

Do not immediately set the game to 50.0 unless your goal is less “quality of life” and more “discover what happens when time becomes illegal.”

Definitely related: How to Automatically Attach Cheat Engine to a Game with Lua

A Small Limitation: Speedhack Is Not Perfect in Every Game

Cheat Engine’s Speedhack is useful, but it does not behave perfectly in every game.

Some games may:

  • Ignore it partially
  • Break animations
  • Desynchronise audio
  • Produce weird physics
  • React unpredictably during cutscenes
  • Behave badly at very high or very low speeds

So if one multiplier feels unstable, try another.

Sometimes 0.5 works beautifully while 0.1 turns the game’s physics engine into interpretive dance.

Also, this kind of experimentation is best kept to offline or single-player games. Do not treat Speedhack like a personality trait in online or anti-cheat-protected games.

The Reusable Scripts Worth Keeping

If you only want one hold-mode script, keep this:

local slowKey = VK_MENU
local slowSpeed = 0.25
local normalSpeed = 1.0

slowMoTimer = createTimer(nil)
slowMoTimer.Interval = 30

slowMoTimer.OnTimer = function()
    if isKeyPressed(slowKey) then
        speedhack_setSpeed(slowSpeed)
    else
        speedhack_setSpeed(normalSpeed)
    end
end

If you only want one toggle-mode script, keep this:

local toggleKey = VK_F1
local slowSpeed = 0.25
local normalSpeed = 1.0

local slowEnabled = false

createHotkey(function()
    slowEnabled = not slowEnabled

    if slowEnabled then
        speedhack_setSpeed(slowSpeed)
    else
        speedhack_setSpeed(normalSpeed)
    end
end, toggleKey)

And if you want toggle slow motion plus toggle fast-forward, keep this:

local slowKey = VK_F1
local fastKey = VK_F2

local slowSpeed = 0.25
local fastSpeed = 3.0
local normalSpeed = 1.0

local speedMode = "normal"

createHotkey(function()
    if speedMode == "slow" then
        speedMode = "normal"
        speedhack_setSpeed(normalSpeed)
    else
        speedMode = "slow"
        speedhack_setSpeed(slowSpeed)
    end
end, slowKey)

createHotkey(function()
    if speedMode == "fast" then
        speedMode = "normal"
        speedhack_setSpeed(normalSpeed)
    else
        speedMode = "fast"
        speedhack_setSpeed(fastSpeed)
    end
end, fastKey)

Final Thoughts

Slow motion and fast-forward are some of the most reusable quality-of-life scripts you can add to a Cheat Engine table. And the useful thing is that there is no single “correct” version.

Sometimes you want hold mode, because you only need a short burst of slow motion for one difficult moment.

Sometimes you want toggle mode, because you want the effect to stay active while you focus on the game rather than your keyboard.

Both are practical. Both have real use cases. And both are much nicer than manually opening Speedhack every single time you want to bend time a little.

The best part is that these scripts are not game-specific. You do not need to find a value in memory. You do not need a pointer. You do not need an AOB pattern.

You just attach Cheat Engine, load the Lua script, and suddenly time itself becomes another setting you can tweak. Not bad for a few lines of code.

Yabes Elia

Yabes Elia

An empath, a jolly writer, a patient reader & listener, a data observer, and a stoic mentor