Skip to content
tomvita edited this page Nov 26, 2023 · 29 revisions

Welcome to the Breeze-Beta wiki!

Installing / Updating

  1. This app support in app updating. Use "Download" "Check for app update" and if there is an update available then "Install app update" will be enabled, use it to update the app. If you just want to reinstall the app use "Redownload" to enable the "Install app update" button.
  2. You can manually install/update by downloading Breeze.zip and place the contents from this zip file on the root of your sd card, go ahead to overwrite existing file if present.

Launching the app

  1. This is a designed to run as an applet. It is not an overlay. Can only be launched via the home screen.
  2. For faster access in addition to launching via the hbmenu a forwarder hooked to profile is available. To enable profile to launch Breeze enable it with "Setting" "Profile shortcut =" buttons. Once enabled press "Home" "up" "A" to launch Breeze from your game. To return to game press "Home" "Home".
  3. For reason not yet clear to me this does not work for some older version of atmosphere "Switch to HBM on Breeze directory" button can be use to enable profile to launch hbmenu made to focus on the breeze directory (so it is the only app for quicker launch). Once enabled press "Home" "up" "A" "A" to launch Breeze from game. To return to game press "Home" "Home".

Navigating the UI

  1. This app has two type of panels. Data panel and button panel. Buttons on button panel is use to activate actions and data panel present data and allow users to pick which data to be act on by the buttons. When there is two panel shown, data panel is on the left and button panel is on the right.
  2. When data panel is shown either lstick or dpad is used for choosing items on this panel. (Configurable in setting). Up and down move the cursor one step and left and right move the cursor 10 steps.
  3. The unused lstick or dpad is used to navigate the button panel. Use this control to choose the buttons and press A to activate it.
  4. Short cut keys may be assigned to the buttons. Pressing these also will activate the buttons.
  5. This app support full touch control. Use touch and scroll to select data and touch the button to activate the associated actions.

Getting / loading cheats

Cheat Url

  1. Breeze will look through a list of url to find cheats if there are no cheats already loaded in a fixed order.
  2. When cheat is found or the list is exhausted the process stops.
  3. If you goto download and ask it to fetch cheat each press of the button will go down the list of urls successively until one is found or the list is exhausted. It will continue from the last url with each press of the button. This way you can fetch a different cheat file if more than one exist.

Cheat database

  1. Breeze will make use of a database of cheats and automatically load it for you when you launch Breeze if there isn't any cheat that is already loaded. You can also ask it to fetch cheat from the database which will overwrite the existing one with the one from the cheat database.
  2. To get the database you can use the in app download feature. Activate these buttons "Download" "Check for cheat database update" "Install Cheat database update".
  3. Alternatively you can get it from https://github.com/tomvita/NXCheatCode/releases/latest. Put "titles.zip" in "sdmc:/switch/breeze/cheats".

Manual placement of cheat files

  1. "sdmc:/atmosphere/contents/(titleid)/cheats/(buildid).txt". This is where cheatVM will automatically load from and the file will be use by every other apps. Will be already loaded for you when the game launch but you can use "Load Cheats from atm" to reload it (if you have put or made changes to the file after you launch the game).
  2. "sdmc:/switch/breeze/cheats/(titleid)/(buildid).txt" or "sdmc:/switch/breeze/cheats/<title name>/(buildid).txt" depending on "setting" "Use titleid =?". Use "Load Cheats from file" button to load it.
  3. If the above two option is too hard, any file name you like as long as you can remember it and place it in "sdmc:/switch/breeze/cheats/(any filename)". Use "More" "any cheats from breeze/cheats" and pick the file. See notes below about BID. No check on BID match will be made on this option.

Picking individual cheats from file (Advance option, make sure you understand what is BID, you are responsible to check that BID match)

  1. You may already have a cheat file that you are using when you saw there are some nice new cheats available that you want to add to this file.
  2. You don't need to manually edit your favorite cheat file to get the new cheats. You can pick cheats and add it to existing cheat file with Breeze.
  3. Use "More" "Choose individual cheats from breeze/cheats" pick the file, pick the cheats, use "Back" to pick another file or "Return to cheat menu" to return and remember to save your change.

Combining cheats from different files

  1. If there is a file you want all the cheats then Load this file using one of the method described above.
  2. Use "Picking individual cheats from file" described above to pick the cheats you want to add.
  3. Proceed to "Customizing cheats for everyone" steps below. Remember to save your work.

A note about code compatibility

  1. It is only possible for cheat code author to do their best to ensure compatibility to the exact same copy of the game that they develop the cheat code on.
  2. To know if the game is the same copy there is what is call build id (BID). BID is a hash of the game code. Only when this match then we know the code is exactly the same.
  3. Only when BID is matching would cheatVM load the code for you when the game starts.
  4. Sometime game has a different BID for different region due to some localization being done. These localization may or may not affect the compatibility of the cheat code. There is a fairly good chance that same game version with different BID has compatibility.
  5. In rare occasions some cheat code even have compatibility when the change between versions are minor.
  6. To check the BID of the game installation you have when the game is running launch Breeze and use "Game information" button.

Loading cheat code for a BID different from the copy installed on your Switch

  1. Firstly know that it is risky to use cheat code in the first place. Cheat code hack the game's memory space and can have unintended consequences.
  2. If you use code written for a different BID the risk is increased exponentially.
  3. I highly recommend that you make a backup of your save and immediately press "HOME" and "X" to quit the game should some of the code don't work.
  4. If you can't find cheat codes that is written for the BID of the game installation you have and you are desperate enough to want to try your luck you can load any cheat file. See point 3 of ## Manual placement of cheat files.

Customizing cheats for everyone

  1. Basic customization of cheats can be made without any knowledge of making cheats. You only need to read the follow instructions.

Saving the change you made

  1. There are two buttons for this.
  2. "Write Cheat to atm" will make the change to the file that atmosphere's cheatVM load cheats from. This option will change the cheat that you get from all other cheat management app.
  3. "Write Cheat to file" will write the code to cheat directory only used by Breeze. This cheat will not be loaded until you launch Breeze and request for it by activating the "Load Cheats from file" button.

Change cheat name

  1. Don't like the name the author gave and prefer something else? You can easily change it to what ever you like.
  2. Activate "Edit Cheat" button.
  3. The first line is the cheat name.
  4. Activate "Edit" button.
  5. If you are happy with the edit activate the "Save" button.

Change cheat value

  1. Most cheat change a value in the game. For example Gold, HP, EXP etc etc.
  2. Sometimes you just want a little help at some stage of the game and don't want to remove the challenge and fun of earning them yourself and the cheat is simply giving too much.
  3. Sometimes the cheat is giving too little in quantity of what you want and you want much more.
  4. To edit the value activate "Edit Cheat" button.
  5. The value is change by code type 0, 3, 6. There is a button that you bring you to these code or you can navigate to the correct entry.
  6. The next thing is to guess the datatype. There is three buttons for you to use: "Edit u32" "Edit f32" "Edit f64".
  7. Normally you can tell if you select the wrong button if the number does not look right.
  8. Change the value and test the cheat. Repeat if you don't get what you want.

Changing / Adding conditional key / key combo

  1. Some cheats has conditional key / key combo. The cheat only activates when you press the conditional key / key combo.
  2. Breeze will display the key / key combo in front of cheat name.
  3. Some times you may find that you didn't like the key / key combo that was chosen by the author.
  4. Some times you don't want to have conditional key / key combo and prefer the cheat to be active all the time.
  5. Some times you want to have conditional key when the author didn't include one.
  6. Activate "Remove conditional key" button to achieve the stated purpose.
  7. Activate "Add conditional key" to add or modify the conditional key / key combo.
  8. (The number of keys you can use in a key combo is defined in settings menu. Use "Combo keys =" button to cycle from 1 to 6.)
  9. Press the keys you want to use in the key combo one at a time. The keys you press until the count down reach 0 will be in the combo. You can press the same key more than once.

Changing a moon jump into a hover

  1. There are many use for a hover in addition to a moon jump.
  2. Activate "Paste/Duplicate Cheat" button. (If you have previously activated "Cut Cheat" button you need to activate "Clear clipboard" button first)
  3. Edit the cheat name.
  4. Edit the value to a smaller one (most moon jumps are f32).
  5. Change the key combo.
  6. Check if the new value make the player rise or fall. Adjust the value until the character hovers.
  7. Save the cheats.

CheatVM operation

CheatVM runs at a fixed frequency. Each time doing the follow:

Clears the cheat registers

The 15 registers that are used by cheat code are set to zero

Assemble opcodes to be executed

Take the master code

Take the opcode with the master code label and add them one by one in order of appearance

Check if the next section is to be added

Go to the next label and if this label is mark to be on add the opcodes between this label and the next label one by one in order of appearance

Repeat the last step until there is no more labels.

Execute the opcodes assembled

Syntax of cheat code file

{} or [] are use to create label.

{} marks start of master code, opcode that follows this until [] or end of file will always be included for execution.

[] marks start of optional code, code that follows this until the next [] or end of file can be activated (included for execution) or not activated (not included for execution)

Only group of 8 hex digits separated by optional whitespace characters are allowed outside of {} or []

How cheat code works

The desired game behavior is modified by changing memory content at locations that game fetch data from

These memory addresses used by the game may not be the same in all stages of the game. Quite often they change on major transition(when you see the loading screen, your player died, you restart a stage etc).

Memory hack works by using cheatVM to hack memory periodically

The data used by the game will be updated by the game code. The cheat can work only if the content is being modified by the cheatVM between game code read and write. i.e. game write, cheatVM write, game read(what cheatVM wrote). The period between write by cheatVM needs to be shorter than the time between game write and game read to be 100% successful.

ASM hack works by hacking game code to write desired content to memory

CheatVM is used to modify game code. The modified game code is the one changing the game memory. Since game code is only loaded once, all ASM hack only need to be turn on once and it is permanent until the game is reloaded. A off code is needed to turn off an ASM hack. The hack runs as often as the code that is hooked to run it. For example if the code hooked is written to update the life bar, when the life bar refresh the memory hacking take place.

Some data hack only need to be successful some of the time and some need to be so all the time

For example money, one time get 1M and you are rich for the rest of the game. For example HP, miss once and you can die. Some hack that needs to be 100% successful can only be ASM hack due to short time between game write and read.

Pointer chain

A pointer is an address placed in memory. A pointer points to an address that together with an offset gives you either another pointer or the memory that you want to hack. A pointer chain is a list of offsets. It's like a treasure hunt, one clue leads to the next clue and the next clue ... until the last clue leads to the treasure. Cheat code can make use of pointer chain that originate from main base address. The chain's validity is always time dependent. A good one is the one that is valid when you want the memory hacked.

The When and How

Cheat codes works at certain time and when certain action is taken. For example some code works when you are in battle, some code works when you are hit, some code works when you buy, some code when you sell, some code seems to work all the time because you are not able to notice when it didn't. When pointer chain is not valid or when code that was hooked don't run the cheat code won't work.

Customizing cheats for adventurous users

Format of cheatVM instruction

  1. An opcode is 8 hex digit. An instruction consists of one to four opcodes. The first opcode specify the action of the instruction and the following opcodes provide address or data for the action.
  2. Please refer https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/cheats.md for more details.

What is a master code

A master code is a code with the label that is inside {} instead of [] Any cheat file can only have one. This will be always on. This will be executed first. What you do with it is entirely up to you. Put code that you want always executed and always executed first there.

Common use for master code

Set up ASM code cave

Some author likes to setup code cave in a master code. The code setup here may or may not be use by more than one cheat. Ideally this can be just done once per game session but current format don't support it.

Set up register content that may be use by more than one cheat code

Many pointer cheats may have pointer chain that start with a common section, this is one way to reduce cheat code size.

Enable ASM cheat to be turn off

When a ASM cheat is turn off, cheatVM stop writing the ASM code to memory. This don't change what is already written. So there is the need to write the original code back to memory.

Disassembler and Assembler

  1. Use "Cheats" "Edit Cheat" "Toggle Disassembly" to look at the code with a disassembler I wrote to make the cheat code more readable.
  2. Use "Assemble" button to explore code change with the interactive assembler I wrote to make code change/composition easier. First line on left panel shows the code type. When the cursor is on this line "Increment" and "Decrement" button change the code type.
  3. The lines below shows the fields that correspond to the code type selected and some fields also changes with the options selected by other field. Move the cursor to the line and use "Increment" and "Decrement" button to change the field.
Clone this wiki locally