BizHawk
BizHawk copied to clipboard
Imported cheatcodes which "modify" read-only domains are silently blocked
Its seem that any game genie, raw or pro action replay code that change something in the rom (Health, move damage , background selection, music change, etc.) are ignored by Bizhawk, but some Action Replay code such as changing character animation on the fly or simply glitch the RAM works.
I did the test with Mortal Kombat II on Bizhawk 2.2.2 (the last one that allow cheat converter for SNES). Even if I go with raw address in the latest version, changing value in the ROM doesn't seems to work.
Cheats can only affect domains that aren't marked as read-only. The ROM is read only so it can't be modified.
Oh i see, thanks for the clarification. So it mean that it is only possible for those kind of Game Genie code to work on real hardware, since the game genie ROM is run before applying it to the rom itself?
If you use the 1.X branch cheats should work fine as the domains aren't marked as read-only.
Thanks, ill look into those.
it can be modified in bizhawk but only if you use "options-cheats" menu and select the ROM memory domain first.
the problem is, the GG codes does not apply to ROM domain, but system bus which is useless. the whole cheat system in bizhawk is broken somehow.
there also the problem, that ROM domain cheats couldn't be discarder when you "disable" the cheat option lol. they are permanent
even more, when you use "compare" option for cheat entry, you can't change the entry one more time, because it is already change for the first time with the right compare value, but then value is changed and compare does not work anymore for the same address unless you reset the emulator lol
the cheat system doesn't even broken. it is just badly designed for now.
I mean, in bizhawk, the GG converter-import does not aware about memory domains and apply to system bus... which does not work in case of ROM memory in general... so you must use other ways to apply the cheats t hen -> manual decode the GG code, find an actual ROM offset, and enter it in the cheats window for the ROM domain..
The Game Genies codes I am trying to apply are in the 800000 ranges
For example, to have infinite time, the game genie code is 6DC7-1DAA
With a Game Genie converter, it give 83A133 80
I can only apply it to the System BUS, it is not in the range of the other options
this is the rom domain. won't work via GG codes conversion for sure.
cheats does not work with system bus at all in bizhawk as I told before, this is just because the domains aren't meant to be used there at all. the whole cheat system need to be rewritten (as well as debugger)
so just use the cheats window and set the address/domain manually... (this is applicable for any other system, though, but for snes it seems it broken even badly because I just not sure how to enter the correct snes 24 bit address there lol (any clues?)
Im not quite sure to understand what you mean. I did put the cheat manually in their address form, but in the snes case there is no ROM option. Cheats in the 700000 range does work thought. I did some other testing with Mortal Kombat 1 and the following game genie code : D861-14DD (address : 808168 0B). Ive manually put it in the cheat windows
This one is suppose to bring you to the fight against Shang Tsung as if you have already defeated Goro
It still doesn't work, but it does work in ZSNES
Have to admit that I have very low knowledge of how cheats work, I was used as how ZSNES was working with the cheats when I used to record on it, but that emulator is too oudated now.
I also tried to use the 1.x branch (particulary 1.18.1) and it doesn't seems to work either
BizHawk's cheat tools have not aged well unfortunately. I'm not really sure what can be done about it for non-native cores. Even for native cores proper implementation takes considerable work. I think only NESHawk does it totally correctly (ie you can turn cheats back off as desired.)
The problem is how Game Genie cheats work. They affect or effect the ROM itself. Not the ROM file your using on your PC, but the Memory loaded ROM data for the game. To do this, they edit the ROM Bus. But BizHawk doesn't allow this anymore. I don't recall the exact reason why though.
If there's something I need to edit/change for the RAM address(es) that has to be done and I can use a different Bus to recreate the same effect as editing the ROM Bus, please @hegyak to let me know ASAP. I will get the code and work on the Code Importer again to make it work.
Why are you talking to yourself <_<
I think he was telling people to use his @ tag if semeone know what he need to edits
settting to priority poop enhancement because cheats are hopelessly pooped and should be considered nonexistent, such that adding them again would be an enhancement
Reading through this issue, it seems to be that we're looking specifically at ROM codes and specifically at the BSNES core. Is that correct?
1c2794370706419ef53709f63f8961988efb4ffd should fix this for SNES in BSNES core. Open a new issue if there's problems elsewhere.
Maybe there should be a better cheat menu in bizhawk.
codes that want to change ROM are not fully working on all BSNES cores.
example Secret of Evermore with "walk through walls" code: 0x8FAE7070 (original value is 03 for deactivating)
Bizhawk 2.9.1 (x64) May 3, 2023
using domain CARTROM with 0x0FAE7070
M = memory shows as edited in hex editor but cheat does not work W = cheat works - = no domain for rom memory available
core | effect |
---|---|
Faust | - |
Snex9x | - |
BSNES | W |
BSNES115+ | M |
SubBSNES115+ | M |
using domain System Bus with 0x8FAE7070
does not work on any core.
it makes no sense that cheats consider read only memory unsless it would cause crashes.
the reason that a cheats gui exists is to make it easier. otherwise one would use apps like cheat engine, which is more work. all the codes on the internet from GameGenie, ActionReplay, etc should work as easy as possible without needing to know snes hardware internals to add them.
the simple way to implement this could be to just manage cheats internally with the necessary domain if the memory range is within a read only memory address space
the domains would be useful if memory was dynamic for the same rom. but for SNES this is not the case. cheats stay the same for the same rom so all those domains are completely useless, even worse they are additional hoops to jump through for no reason (at least for users).