The built-in cheat search is based on changes of values in memory. This works great if you're able to manipulate your to-be-cheated value, like health or ammo, but some things can't be (easily) manipulated, like (fixed) character abilities.
However, although it might not be possible to change these values, it's often trivial to know when they're accessed (read or written from memory). For example, I know that these values are read when I open a character's ability list.
As far as I know there's currently no built-in way to search for cheats like this.
I found the MemoryWatcher while poking around in the source code, but it's very not-user-friendly and, most important for me personally, doesn't support Windows (although I did find an (abandoned) PR for a Windows port).
I think a GUI based solution for this, similar to the existing cheat search, could be a very useful addition to Dolphin (although obviously not a full replacement for the MemoryWatcher functionality).
Similar to value-based search, this "access-based search" could work with a basic process of elimination to narrow down results.
For example, finding the address(es) for a character's ability list might look something like this:
This is not a perfect way to find cheats of course, but neither is the value-based search.
However, I'm very much a noob when it comes to how emulation (or programs in general) work this close to the metal, so perhaps this method is not actually feasible.
I'd love to contribute this myself, but I haven't done much with C++ beyond "Hello world!" and knowing the basics of pointers (although I have about 10 years of (hobby) experience in other languages). Even if I decided to learn C++ (which I'm very close to doing), I still wouldn't know anything about emulation, and I feel like that could cause issues when contributing to an emulator...
However, although it might not be possible to change these values, it's often trivial to know when they're accessed (read or written from memory). For example, I know that these values are read when I open a character's ability list.
As far as I know there's currently no built-in way to search for cheats like this.
I found the MemoryWatcher while poking around in the source code, but it's very not-user-friendly and, most important for me personally, doesn't support Windows (although I did find an (abandoned) PR for a Windows port).
I think a GUI based solution for this, similar to the existing cheat search, could be a very useful addition to Dolphin (although obviously not a full replacement for the MemoryWatcher functionality).
Similar to value-based search, this "access-based search" could work with a basic process of elimination to narrow down results.
For example, finding the address(es) for a character's ability list might look something like this:
- Start the 'searching' process. All memory addresses accessed from this point on are stored.
- Do something in the game that definitely accesses your intended address, like opening a character's ability list.
- End this 'scan'. All addresses that were not accessed in this time period are definitely not our cheat, so they can be 'eliminated'.
- Start the next 'scan'. All memory accesses to addresses that were not previously eliminated are stored.
- This time do something that definitely does not access your intended address. Walk around, talk to people, open menu's, whatever you like, as long as the intended address(es) (character abilities) are not accessed.
- End this 'scan'. All addresses accessed in this time period are definitely not our cheat, so they can be 'eliminated' as well.
- Start a new 'scan'.
- Open up a different character's ability list. This will (probably) use a lot of the same addresses as the previous one, with the notable difference being that a different character's abilities are accessed.
- End this 'scan'. All addresses that were accessed are eliminated.
- Rinse and repeat. Keep eliminating addresses based on if they should've been accessed or not within a specific time-frame, until only a few addresses remain.
This is not a perfect way to find cheats of course, but neither is the value-based search.
However, I'm very much a noob when it comes to how emulation (or programs in general) work this close to the metal, so perhaps this method is not actually feasible.
I'd love to contribute this myself, but I haven't done much with C++ beyond "Hello world!" and knowing the basics of pointers (although I have about 10 years of (hobby) experience in other languages). Even if I decided to learn C++ (which I'm very close to doing), I still wouldn't know anything about emulation, and I feel like that could cause issues when contributing to an emulator...