Skip to content

Sequencer and Memory Freezing

REghZy edited this page Aug 25, 2025 · 12 revisions

Accessible in the Tools menu. The task sequencer allows you to run small operations as a larger task. For example, constantly writing the same value/values to an address/addresses to effectively freeze it

image

General note for the Value fields, you can add "f" or "d" on the end to try parse as float or double respectively, e.g. 25.4F. Having a decimal point in the value will try to parse as double if the type is not currently float or double.

Freezing memory

It's as simple as adding a Set Memory operation at a specific memory address. Change the data type with the drop down, enter a value, connect to the console and click the start button. Note, the ByteArray data type does not support wildcards (yet).

Sequences Panel

This contains a list of sequences. The Run Count specifies how many times to run the sequence when you click the Start button. The default is once. Typing "inf" or any negative number in it will make it run forever.

Busy Priority?

This is a special option for taking priority over the engine's connection, preventing anything else from using it. By default, tasks will share the engine's connection for simplicity.

But by doing this, it stops things like the scanner and the memory viewer's auto refresh from working until the sequence stops. By enabling this without a dedicated connection, you can make the sequence run faster and in real time, whereas otherwise it might have to wait half a second to obtain it from something else.

Note

Busy Priority is useless when using a dedicated connection (see below for more info)

Operation list panel

This shows all of the operations the sequence will run. You can add more via the buttons at the top-right.

The Operation Editors panel shows one or more panels that let you edit the selected operation (since some things wouldn't fit in the actual operation row, such as random triggering)

image

Status bar

This is for the selected sequence. The left side is where you manage the dedicated connection for the sequence. By using a dedicated connection, the sequence can freely read/write without congesting the engine's connection, so you can still scan, edit values, etc. Ideally you'd want to use this for long running sequences that write very often, such as memory freezing

Note

All sequences not using dedicated connections will be stopped when you disconnect or change the engine's connection (CTRL+O)

The right side just shows the current status of the sequence and the operation currently running.

Moving things around

You can click and drag the grip icon on any sequence, operation or condition. Currently only 1 item can be dragged at a time, but dragging multiple items may be supported in the future.

Conditions

Conditions allow sequences and operations to run only if all conditions are met. Below the tab item will show either the name of the selected sequence or operation whose conditions are being presented.

For example, you want to freeze/change/randomize a value(s) but only if another value (or as many values as you wish) are within a certain range or equal a certain value (e.g. check boolean is true, or player location is within a certain area)

image

[Black Ops 1] Set the primary ammo to 999 when the player's X position is between 500 and 1000. Only tested on split screen.

So far, only Memory Compare is implemented. Click the button to add a new compare condition. Then configure the address to read, select a value type and enter the value, then finally click one of the compare type buttons.

The console value is compared to the value you entered, so it follows the direction of the operator in the button. So if you select <, the condition is met if the value on the console is less than the value you specified.

The little circle on the left is the Condition Met indicator. When all indicators are lit, the operations can run. Note, it updates at each iteration of the sequence's Run Count, so if the run count is 1, it only updates once and when met stays lit until the sequence stops.

You can change the output mode of conditions (the "met" state), e.g. invert the output, or only output when the underlying condition changes to met or changes to not met (e.g. pulse the output when an address becomes a specific value).

Jumping/Labels

You can force the sequence to jump to a Label operation, in any direction, using a Jump To operation. Ideally, you'd have conditions added to a jump operation so that, when the conditions are met, you jump over some other operations, and when the condition is not met, you run those operations that would have been skipped otherwise.

Note

Jump operations will jump if no conditions are present (or they're all met, obviously)

image

This random example will constantly set 8303AA08 to 25. If it remains 25 after 250 milliseconds, it sets 826000CC to 5 and 826000D0 to 10.

Clone this wiki locally