Sequencer and Memory Freezing - AngryCarrot789/MemoryEngine360 GitHub Wiki

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

As the image above shows, it's as simple as adding a Set Memory operation at a specific memory address. Change the data type with the drop down to the right of the value field, then enter a new value. The ByteArray data type does not allow wildcards (yet).

Sequences Panel

This contains a list of sequences. The Run Count specified 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 is a special option for taking the busy token before starting the sequence, preventing anything else from using it. 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 someone else.

Busy Priority is pointless when using a dedicated connection (see below for more info), since busy tokens are only needed for synchronizing the engine's connection.

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 Editor Panel shows one or more panels that let you edit the selected operation in the list above that wouldn't necessarily 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 worrying about corrupting the main engine's connection. 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. Only 1 item can be dragged at a time, but this is being worked on to support dragging multiple items

Conditions

Conditions allow a sequence to only run if all conditions are met. 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.