This updater unlocks your ability of updating most of the ASM cheats for Nintendo Switch.
Now supports (same logic with cheats makers updating their codes like AOB):
- Update game cheats to other locales (if they don't rewrite the game code, then yes)
- Search the whole main file for code features
- Update normal ASM codes
- Update code cave codes
- Skip page/pageoff codes
- Recognize branch codes and modify their pointer
- Auto fill cheat bids when saving .txt file
TODO:
- Save modified .NSO file base on cheats
- Updating codes in .rodata or somewhere else (aka. high probability breaking the new game π°)
If you need a Chinese version introduction, please refer here. δΈζηθ―·εθζ€εΈγ
- Windows 10 (:heavy_check_mark:), Windows 7 (:x:), Mac/Linux (β)
- No python environment required
Visit out releases page or download the latest version.
There are lots of excellent works for you to dump the main file, like hactool and NSC_Builder. Please choose anyone you familiar with to dump two main files:
- Old Main File: dump from the game which old cheat runs on
- New main File: dump from the game which you want to update the old cheat to
Build ID of the old main file will be shown after loading. Please make sure it is the same with the old cheat.
Logs window has everything you need when updating cheat codes.
- Generate: Generate one code or title
- Skip: Skip one code or title, especially for pointer cheats.
- Undo: Undo the last operation.
- Restart: Restart the whole process.
- Wing Length: Decide how many asm code lines are extracted as code features before and after the target address. Supported input type like array [left_side, right_side] and integer "single_input" are listed below:
Type | Left Side | Right Side | Support Single Input |
---|---|---|---|
Normal ASM code | feature lines before ASM address | feature lines after ASM address | βοΈ |
Branch to code cave | feature lines before bl address | feature lines after bl address | βοΈ |
Branch with target address | wing length for bl address | wing length for bl target address | β |
- Regenerate: Useful when logs window show "address not found". Please change wing length and regenerate until single hit, or maybe double.
- Debug: Generate a debug folder with procedure files to show you what happend during the whole progress.
- Python 3.9
- Packages in requirements.txt
- upx (if bundling to one file need)
- Spec file for pyinstaller (refer here for more info)
- Choose any python version lower than 3.9 will unleash the support of Windows 7, but not tested. Please use at your own risk.
- There is a main.spec template in project root directory, please change demanded parameters before use.
- Don't forget to add environment variables.
cd your_source_code_root_dir
py -3.9 -m pip install -r requirements.txt
py -3.9 __main__.py
pyinstaller -F -w your_spec_name.spec --upx-dir your_upx_dir
-
Why my new codes doesn't work?
A: On most cases, they are pointer cheat codes that can be recognized from the logs window. Please update these cheats with EdiZon SE or SE tools.
-
Why my new codes break the game?
A: Game developer will make a huge change for some specific version of games, like adding new function or improving code efficiency. In these cases, the ASM cheat codes need to be refind.
-
Why this application repeating same title over and over again?
A: It happened when the application failed to get main file bytes. Here are some major reasons: zero gap in bytes file fail to work in capstone (fixed), nsnsotool command failed (fixed), application folder structure destroyed. Please re-download this application or create an issue.
Feel free to dive in! Open an issue or submit PRs.
Interactive ASM Cheats Updater is based on
a.) Keystone Engine and Capstone Engine: Without their brilliant work, Interactive ASM Cheats Updater will never be born.
b.) nsnsotool: This tiny program helps a lot on transforming nso files, made by 0CBH0.
Also thanks to:
Eiffel2018, donghui2199, ζͺηB and Geminize for their testing.
All cheat makers that sparing no effort in writing and updating cheat codes, you ARE the true heros!
All the helpers for bringing this project to life!
This project is licensed under GNU General Public License v3.0.
Refer the LICENSE file for more details.