Skip to content

The cspector Format

Tiago Valente edited this page Oct 10, 2026 · 1 revision

A .cspector file holds your cheats for one version of one game. It is JSON, saved minified to keep it small; a formatted copy loads just the same.

{
  "format": "cheatspecter",
  "formatVersion": 1,
  "game": { "name": "Example Game", "titleId": "PPSA01234", "version": "01.002.000" },
  "cheats": [
    {
      "name": "Infinite ammo",
      "type": "patch",
      "at": { "kind": "module", "offset": "0x2040" },
      "on": "909090",
      "off": "FF4B28"
    }
  ]
}

On the PS5 the file is /data/cheatspecter/cheats/<title id>-<version>.cspector, for example PPSA01234-01.002.000.cspector.

Locations (at)

Kind Example Notes
signature {"kind":"signature","pattern":"45 8B 65 48 ?? 8D","offset":8} A byte pattern in the game's code plus a distance past it. ?? matches anything. Survives restarts and most updates.
module {"kind":"module","offset":"0x3E5AB37"} An offset into the game's executable. Add "module":"libSomething.prx" for an offset into that module.
pointer {"kind":"pointer","base":"0x2F4A10","offsets":["0x8","0x340"]} A pointer path starting in the executable (or, with module, in that module).
address {"kind":"address","address":"0x880012340"} A raw address, valid only until the game restarts.

Cheat types

type Fields What it is
patch at, on, off, optional more Bytes to write, and the originals. more is a list of further {at, on, off} places under the same switch.
value at, valueType, value, optional freeze, choices Sets a value, or holds it there.
inject at, code, placement, and the code-cheat fields below A code cheat.
shared symbol, code, optional variables Code that hooks nothing: functions and variables for code cheats to use.
call fn, args Calls a function in the game.
script code A JavaScript program.

Value types are u8, u16, u32, u64, i8, i16, i32, i64, float and double.

Optional fields on any cheat

Field Meaning
note A line of description shown under the name.
group Lists the cheat under a collapsible heading.
hotkey For example "Ctrl+Shift+1". Works while the page is open and in front.
keep true asks the PS5 to apply the cheat whenever the game runs, with no page open. Only patches and held values that are not at a raw address, and only in a file saved to the PS5.
symbol The cheat's name in code. A patch, value or call with a symbol can be used in code as an address.
reviewed Set by the app on code-running cheats you made or approved. Imported ones without it are held for review.

On a value: "choices": [{"label": "Easy", "value": "0"}] shows a list to pick from.

On a patch (and each entry of more):

  • "fallback": {"kind": "module", ...} is the fixed position used when the pattern in at no longer matches.
  • "around": {"bytes": "...", "mask": "...", "at": 24} is the original code around the patch, used to find the place again after a game update. at is where the patched bytes start. In mask, x marks the start of an instruction, ? a byte that depends on where the game was loaded, and . the rest.

Code cheats (inject)

Besides at and code:

Field Meaning
placement "code" for new cheats. The older "before", "after" and "replace" still load and behave as they did.
variables [{"name":"speed","type":"float","value":"2.5"}]. Read in code as dword ptr [speed]. Types are the value types above plus bytes (hex). A variable may have choices.
more [{"at":…,"code":"…","placement":"code"}]: further lines hooked by the same switch. They share the variables and labels.
off, fallback The game's bytes the jump replaces and the fixed position, to notice a game update.
rule What the rule builder was told, so the editor reopens there.

The code syntax is described in Code Cheats and Scripts.

Compatibility

formatVersion is 1. Fields added since are all optional: older files simply lack them, and a version of CheatSpecter that does not know a field keeps it as it is.

Clone this wiki locally