Customizable UI
Customizable menu & button image icon
4 types of switches:
Backend Offset Patcher Switch is based on KittyMemory
Compile-time string encryption
Open Source Menu
You can download the template here: Latest Release.
iOS
MacOS:
Changing the menu images Inside the Tweak.xm, you'll setup the menu under the function "setupMenu". Here you'll see two options under the menu: menuIcon & menuButton, those require a base64 image string. In order to get a base64 string from the image, upload the image here: https://www.browserling.com/tools/image-to-base64
Images 50x50 are recommended, you can get a sample of my images by copying the standard(in tweak.xm) base64 string & use this website to show the picture: https://base64.guru/converter/decode/image
Setting a framework as executable You can set this in the function setupMenu() inside Tweak.xm
[menu setFrameworkName:"FrameworkName"];
Encryption
A quick note before showing all the switch examples; You can and should encrypt offsets, hexes, c-strings and NSStrings. Below you can find the proper syntax per string-type.
Offsets:
ENCRYPTOFFSET("0x10047FD90")
Hexes:
ENCRYPTHEX("0x00F0271E0008201EC0035FD6")
C-strings:
ENCRYPT("I am a c-string")
NSStrings:
NSSENCRYPT("Copperplate-Bold")
Patching a offset without switch:
patchOffset(ENCRYPTOFFSET("0x1002DB3C8"), ENCRYPTHEX("0xC0035FD6"));
patchOffset(ENCRYPTOFFSET("0x10020D2D4"), ENCRYPTHEX("0x00008052C0035FD6"));
// You can write as many bytes as you want to an offset
patchOffset(ENCRYPTOFFSET("0x10020D3A8"), ENCRYPTHEX("0x00F0271E0008201EC0035FD6"));
// or
patchOffset(ENCRYPTOFFSET("0x10020D3A8"), ENCRYPTHEX("00F0271E0008201EC0035FD6"));
// spaces are fine too
patchOffset(ENCRYPTOFFSET("0x10020D3A8"), ENCRYPTHEX("00 F0 27 1E 00 08 20 1E C0 03 5F D6"));
Offset Patcher Switch:
[switches addOffsetSwitch:NSSENCRYPT("One Hit Kill")
description:NSSENCRYPT("Enemy will die instantly")
offsets: {
ENCRYPTOFFSET("0x1001BB2C0"),
ENCRYPTOFFSET("0x1002CB3B0"),
ENCRYPTOFFSET("0x1002CB3B8")
}
bytes: {
ENCRYPTHEX("0x00E0BF12C0035FD6"),
ENCRYPTHEX("0xC0035FD6"),
ENCRYPTHEX("0x00F0271E0008201EC0035FD6")
}
];
Empty Switch:
[switches addSwitch:NSSENCRYPT("Masskill")
description:NSSENCRYPT("Teleport all enemies to you without them knowing")
];
Textfield Switch:
[switches addTextfieldSwitch:NSSENCRYPT("Custom Gold")
description:NSSENCRYPT("Here you can enter your own gold amount")
inputBorderColor:UIColorFromHex(0xBD0000)
];
Slider Switch:
[switches addSliderSwitch:NSSENCRYPT("Custom Move Speed")
description:NSSENCRYPT("Set your custom move speed")
minimumValue:0
maximumValue:10
sliderColor:UIColorFromHex(0xBD0000)
];
Checking if a switch is on:
bool isOn = [switches isSwitchOn:NSSENCRYPT("Switch Name Goes Here")];
if(isOn) {
//Do stuff
}
//Or check directly:
if([switches isSwitchOn:NSSENCRYPT("Switch Name Goes Here")]) {
// Do stuff
}
Getting textfield or slider value:
int userValue = [[switches getValueFromSwitch:NSSENCRYPT("Switch Name Goes Here")] intValue];
float userValue2 = [[switches getValueFromSwitch:NSSENCRYPT("Switch Name Goes Here")] floatValue];