Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bounty - Add cheat support to Beetle PCE Fast core in RetroArch #93

Closed
Gazdaman opened this issue May 12, 2018 · 16 comments
Closed

Bounty - Add cheat support to Beetle PCE Fast core in RetroArch #93

Gazdaman opened this issue May 12, 2018 · 16 comments

Comments

@Gazdaman
Copy link

Gazdaman commented May 12, 2018

Description:
I have created a bounty for adding cheat support to Beetle PCE Fast core as below:
Add functional cheat support into Beetle PCE Fast core.
Cheats must be usable on Android and RPi3 platforms.

Bounty Link below:
https://www.bountysource.com/issues/58270012-bounty-add-cheat-support-to-beetle-pce-fast-core-in-retroarch

Related Post (possible duplicate):
#86

@joshsmithtogo
Copy link

Just upped the bounty on this one.

@eadmaster
Copy link

i second the request, some RAW codes are here.

@barbudreadmon
Copy link

barbudreadmon commented Jun 7, 2019

Nowaday, cheat support "only" needs main ram pointer to be returned by the retro_get_memory_data libretro api call, it should be fairly easy to implement for anyone familiar with this core's codebase (i'm not, sorry), and will have the side-effect to add support for RetroAchievements (unlike the old method).
FWIW, FBNeo has this stuff implemented for PCE subsystem (PCE emulation in FBNeo requires romsets though)

@eadmaster
Copy link

I can confirm native cheats are now working with this core!

@BooBerry
Copy link

BooBerry commented Oct 26, 2019

I can confirm native cheats are now working with this core!

Really? Can you give an example of a .cht file for any game that works?

EDIT: I just tested this with codes for Bonk's Adventure located here and none of the codes work with either the Beetle PCE or Beetle PCE Fast cores in RA 1.8.0 (also updated the cores before testing). Tried a couple things like using the codes as F82XXX and 1F0XXX and no go. Some guidance on how you got it working would be most appreciated.

@eadmaster
Copy link

eadmaster commented Oct 28, 2019

here it is the procedure i am using:

  1. take the 3 least significant digits from the code address (e.g. F82DB4 -> DB4)
  2. convert them to decimal base (e.g. DB4 -> 3508)
  3. paste the converted address as the cheat0_address
  4. convert the value to decimal base (e.g. 0F -> 15)
  5. paste the converted value as the cheat0_value
  6. change the cheat0_desc text

resulting cht file:

cheat0_address = "3508"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Infinite Energy"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "15"
cheats = "1"

@BooBerry
Copy link

Okay, that worked, thanks a lot! I've ported a lot of PC Engine cheats over using your mini tutorial.

But, I ran into a problem. While it works for PC Engine CD games too like Castlevania: Rondo of Blood I've found two codes that don't seem to work...

F83460:1 which is used for invincibility and F812B8:1 which is a 1-hit kill for bosses. I've noticed both are different than 'normal' PC Engine cheats that start with F82. I don't suppose there's an easy way to get both of these working, is there?

@eadmaster
Copy link

eadmaster commented Nov 2, 2019

To have Unlimited Health in Castlevania: Rondo of Blood there is this code that works fine: F82098:92 (Disable at end of stage for score).

P.S.: You can share the cht you've made here.

@BooBerry
Copy link

BooBerry commented Nov 4, 2019

That works for infinite health, but the invincibility and 1-hit kill codes (which are not listed on gamehacking.org's page for the game but were posted in their forums) are at RAM addresses outside of the "normal" F82 address that I typically see for PC Engine RAM cheats.

See if you can get F83460:1 which is invincibility and F812B8:1 which is 1-hit kill for bosses working.

Otherwise, here's what I got so far for Akumajou Dracula X - Chi no Rondo (Japan) AKA Castlevania: Rondo of Blood:

cheat0_address = "152"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Infinite Health (Turn Off At End Of Stage)"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "92"
cheat1_address = "148"
cheat1_address_bit_position = "0"
cheat1_big_endian = "false"
cheat1_cheat_type = "1"
cheat1_code = ""
cheat1_desc = "Infinite Hearts (Turn Off At End Of Stage)"
cheat1_enable = "false"
cheat1_handler = "1"
cheat1_memory_search_size = "3"
cheat1_rumble_port = "0"
cheat1_rumble_primary_duration = "0"
cheat1_rumble_primary_strength = "0"
cheat1_rumble_secondary_duration = "0"
cheat1_rumble_secondary_strength = "0"
cheat1_rumble_type = "0"
cheat1_rumble_value = "0"
cheat1_value = "153"
cheat2_address = "147"
cheat2_address_bit_position = "0"
cheat2_big_endian = "false"
cheat2_cheat_type = "1"
cheat2_code = ""
cheat2_desc = "Always Have Axe"
cheat2_enable = "false"
cheat2_handler = "1"
cheat2_memory_search_size = "3"
cheat2_rumble_port = "0"
cheat2_rumble_primary_duration = "0"
cheat2_rumble_primary_strength = "0"
cheat2_rumble_secondary_duration = "0"
cheat2_rumble_secondary_strength = "0"
cheat2_rumble_type = "0"
cheat2_rumble_value = "0"
cheat2_value = "2"
cheat3_address = "147"
cheat3_address_bit_position = "0"
cheat3_big_endian = "false"
cheat3_cheat_type = "1"
cheat3_code = ""
cheat3_desc = "Always Have Cross"
cheat3_enable = "false"
cheat3_handler = "1"
cheat3_memory_search_size = "3"
cheat3_rumble_port = "0"
cheat3_rumble_primary_duration = "0"
cheat3_rumble_primary_strength = "0"
cheat3_rumble_secondary_duration = "0"
cheat3_rumble_secondary_strength = "0"
cheat3_rumble_type = "0"
cheat3_rumble_value = "0"
cheat3_value = "3"
cheat4_address = "147"
cheat4_address_bit_position = "0"
cheat4_big_endian = "false"
cheat4_cheat_type = "1"
cheat4_code = ""
cheat4_desc = "Always Have Holy Water"
cheat4_enable = "false"
cheat4_handler = "1"
cheat4_memory_search_size = "3"
cheat4_rumble_port = "0"
cheat4_rumble_primary_duration = "0"
cheat4_rumble_primary_strength = "0"
cheat4_rumble_secondary_duration = "0"
cheat4_rumble_secondary_strength = "0"
cheat4_rumble_type = "0"
cheat4_rumble_value = "0"
cheat4_value = "4"
cheat5_address = "147"
cheat5_address_bit_position = "0"
cheat5_big_endian = "false"
cheat5_cheat_type = "1"
cheat5_code = ""
cheat5_desc = "Always Have Knife"
cheat5_enable = "false"
cheat5_handler = "1"
cheat5_memory_search_size = "3"
cheat5_rumble_port = "0"
cheat5_rumble_primary_duration = "0"
cheat5_rumble_primary_strength = "0"
cheat5_rumble_secondary_duration = "0"
cheat5_rumble_secondary_strength = "0"
cheat5_rumble_type = "0"
cheat5_rumble_value = "0"
cheat5_value = "5"
cheat6_address = "147"
cheat6_address_bit_position = "0"
cheat6_big_endian = "false"
cheat6_cheat_type = "1"
cheat6_code = ""
cheat6_desc = "Always Have Slow Time"
cheat6_enable = "false"
cheat6_handler = "1"
cheat6_memory_search_size = "3"
cheat6_rumble_port = "0"
cheat6_rumble_primary_duration = "0"
cheat6_rumble_primary_strength = "0"
cheat6_rumble_secondary_duration = "0"
cheat6_rumble_secondary_strength = "0"
cheat6_rumble_type = "0"
cheat6_rumble_value = "0"
cheat6_value = "6"
cheats = "7"

Works for both characters in the game (Richter and Maria) and works with the English translation of the game too.

P.S. Is there any documentation on how RA's native cheats work? Mainly I'm curious about cheat_address_bit_position and how that works.

@BooBerry
Copy link

BooBerry commented Nov 4, 2019

Also here's some more cheats for normal PC Engine games...

Bonk's Adventure (USA):

cheat0_address = "3075"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Invincibility"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "15"
cheat1_address = "3508"
cheat1_address_bit_position = "0"
cheat1_big_endian = "false"
cheat1_cheat_type = "1"
cheat1_code = ""
cheat1_desc = "Infinite Health"
cheat1_enable = "false"
cheat1_handler = "1"
cheat1_memory_search_size = "3"
cheat1_rumble_port = "0"
cheat1_rumble_primary_duration = "0"
cheat1_rumble_primary_strength = "0"
cheat1_rumble_secondary_duration = "0"
cheat1_rumble_secondary_strength = "0"
cheat1_rumble_type = "0"
cheat1_rumble_value = "0"
cheat1_value = "1"
cheat2_address = "3505"
cheat2_address_bit_position = "0"
cheat2_big_endian = "false"
cheat2_cheat_type = "1"
cheat2_code = ""
cheat2_desc = "Infinite Lives"
cheat2_enable = "false"
cheat2_handler = "1"
cheat2_memory_search_size = "3"
cheat2_rumble_port = "0"
cheat2_rumble_primary_duration = "0"
cheat2_rumble_primary_strength = "0"
cheat2_rumble_secondary_duration = "0"
cheat2_rumble_secondary_strength = "0"
cheat2_rumble_type = "0"
cheat2_rumble_value = "0"
cheat2_value = "2"
cheat3_address = "3514"
cheat3_address_bit_position = "0"
cheat3_big_endian = "false"
cheat3_cheat_type = "1"
cheat3_code = ""
cheat3_desc = "Big Meat Bonk"
cheat3_enable = "false"
cheat3_handler = "1"
cheat3_memory_search_size = "3"
cheat3_rumble_port = "0"
cheat3_rumble_primary_duration = "0"
cheat3_rumble_primary_strength = "0"
cheat3_rumble_secondary_duration = "0"
cheat3_rumble_secondary_strength = "0"
cheat3_rumble_type = "0"
cheat3_rumble_value = "0"
cheat3_value = "2"
cheats = "4"

Bonk's Revenge (USA):

cheat0_address = "3738"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Invincibility"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "1"
cheat1_address = "3719"
cheat1_address_bit_position = "0"
cheat1_big_endian = "false"
cheat1_cheat_type = "1"
cheat1_code = ""
cheat1_desc = "Infinite Health"
cheat1_enable = "false"
cheat1_handler = "1"
cheat1_memory_search_size = "3"
cheat1_rumble_port = "0"
cheat1_rumble_primary_duration = "0"
cheat1_rumble_primary_strength = "0"
cheat1_rumble_secondary_duration = "0"
cheat1_rumble_secondary_strength = "0"
cheat1_rumble_type = "0"
cheat1_rumble_value = "0"
cheat1_value = "15"
cheat2_address = "2586"
cheat2_address_bit_position = "0"
cheat2_big_endian = "false"
cheat2_cheat_type = "1"
cheat2_code = ""
cheat2_desc = "Infinite Lives"
cheat2_enable = "false"
cheat2_handler = "1"
cheat2_memory_search_size = "3"
cheat2_rumble_port = "0"
cheat2_rumble_primary_duration = "0"
cheat2_rumble_primary_strength = "0"
cheat2_rumble_secondary_duration = "0"
cheat2_rumble_secondary_strength = "0"
cheat2_rumble_type = "0"
cheat2_rumble_value = "0"
cheat2_value = "2"
cheats = "3"

Bonk 3 - Bonk's Big Adventure (USA):

cheat0_address = "2486"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Invincibility"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "1"
cheat1_address = "2959"
cheat1_address_bit_position = "0"
cheat1_big_endian = "false"
cheat1_cheat_type = "1"
cheat1_code = ""
cheat1_desc = "Infinite Health"
cheat1_enable = "false"
cheat1_handler = "1"
cheat1_memory_search_size = "3"
cheat1_rumble_port = "0"
cheat1_rumble_primary_duration = "0"
cheat1_rumble_primary_strength = "0"
cheat1_rumble_secondary_duration = "0"
cheat1_rumble_secondary_strength = "0"
cheat1_rumble_type = "0"
cheat1_rumble_value = "0"
cheat1_value = "15"
cheat2_address = "2957"
cheat2_address_bit_position = "0"
cheat2_big_endian = "false"
cheat2_cheat_type = "1"
cheat2_code = ""
cheat2_desc = "Infinite Lives"
cheat2_enable = "false"
cheat2_handler = "1"
cheat2_memory_search_size = "3"
cheat2_rumble_port = "0"
cheat2_rumble_primary_duration = "0"
cheat2_rumble_primary_strength = "0"
cheat2_rumble_secondary_duration = "0"
cheat2_rumble_secondary_strength = "0"
cheat2_rumble_type = "0"
cheat2_rumble_value = "0"
cheat2_value = "2"
cheats = "3"

Finally, here's cheats for two more PC Engine CD games...

Gate of Thunder (Japan):

cheat0_address = "1665"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Infinite Lives"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "4"
cheat1_address = "1670"
cheat1_address_bit_position = "0"
cheat1_big_endian = "false"
cheat1_cheat_type = "1"
cheat1_code = ""
cheat1_desc = "Have S Green Shot"
cheat1_enable = "false"
cheat1_handler = "1"
cheat1_memory_search_size = "3"
cheat1_rumble_port = "0"
cheat1_rumble_primary_duration = "0"
cheat1_rumble_primary_strength = "0"
cheat1_rumble_secondary_duration = "0"
cheat1_rumble_secondary_strength = "0"
cheat1_rumble_type = "0"
cheat1_rumble_value = "0"
cheat1_value = "1"
cheat2_address = "1671"
cheat2_address_bit_position = "0"
cheat2_big_endian = "false"
cheat2_cheat_type = "1"
cheat2_code = ""
cheat2_desc = "Have E Red Shot"
cheat2_enable = "false"
cheat2_handler = "1"
cheat2_memory_search_size = "3"
cheat2_rumble_port = "0"
cheat2_rumble_primary_duration = "0"
cheat2_rumble_primary_strength = "0"
cheat2_rumble_secondary_duration = "0"
cheat2_rumble_secondary_strength = "0"
cheat2_rumble_type = "0"
cheat2_rumble_value = "0"
cheat2_value = "1"
cheats = "3"

Lords of Thunder (USA):

cheat0_address = "1669"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Max Life"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "20"
cheat1_address = "1671"
cheat1_address_bit_position = "0"
cheat1_big_endian = "false"
cheat1_cheat_type = "1"
cheat1_code = ""
cheat1_desc = "Max Power"
cheat1_enable = "false"
cheat1_handler = "1"
cheat1_memory_search_size = "3"
cheat1_rumble_port = "0"
cheat1_rumble_primary_duration = "0"
cheat1_rumble_primary_strength = "0"
cheat1_rumble_secondary_duration = "0"
cheat1_rumble_secondary_strength = "0"
cheat1_rumble_type = "0"
cheat1_rumble_value = "0"
cheat1_value = "20"
cheat2_address = "1672"
cheat2_address_bit_position = "0"
cheat2_big_endian = "false"
cheat2_cheat_type = "1"
cheat2_code = ""
cheat2_desc = "Max Shield"
cheat2_enable = "false"
cheat2_handler = "1"
cheat2_memory_search_size = "3"
cheat2_rumble_port = "0"
cheat2_rumble_primary_duration = "0"
cheat2_rumble_primary_strength = "0"
cheat2_rumble_secondary_duration = "0"
cheat2_rumble_secondary_strength = "0"
cheat2_rumble_type = "0"
cheat2_rumble_value = "0"
cheat2_value = "3"
cheat3_address = "1673"
cheat3_address_bit_position = "0"
cheat3_big_endian = "false"
cheat3_cheat_type = "1"
cheat3_code = ""
cheat3_desc = "Max Bombs"
cheat3_enable = "false"
cheat3_handler = "1"
cheat3_memory_search_size = "3"
cheat3_rumble_port = "0"
cheat3_rumble_primary_duration = "0"
cheat3_rumble_primary_strength = "0"
cheat3_rumble_secondary_duration = "0"
cheat3_rumble_secondary_strength = "0"
cheat3_rumble_type = "0"
cheat3_rumble_value = "0"
cheat3_value = "3"
cheat4_address = "181"
cheat4_address_bit_position = "0"
cheat4_big_endian = "false"
cheat4_cheat_type = "1"
cheat4_code = ""
cheat4_desc = "Max Gold (1 of 2)"
cheat4_enable = "false"
cheat4_handler = "1"
cheat4_memory_search_size = "3"
cheat4_rumble_port = "0"
cheat4_rumble_primary_duration = "0"
cheat4_rumble_primary_strength = "0"
cheat4_rumble_secondary_duration = "0"
cheat4_rumble_secondary_strength = "0"
cheat4_rumble_type = "0"
cheat4_rumble_value = "0"
cheat4_value = "597"
cheat5_address = "182"
cheat5_address_bit_position = "0"
cheat5_big_endian = "false"
cheat5_cheat_type = "1"
cheat5_code = ""
cheat5_desc = "Max Gold (2 of 2)"
cheat5_enable = "false"
cheat5_handler = "1"
cheat5_memory_search_size = "3"
cheat5_rumble_port = "0"
cheat5_rumble_primary_duration = "0"
cheat5_rumble_primary_strength = "0"
cheat5_rumble_secondary_duration = "0"
cheat5_rumble_secondary_strength = "0"
cheat5_rumble_type = "0"
cheat5_rumble_value = "0"
cheat5_value = "597"
cheat6_address = "1668"
cheat6_address_bit_position = "0"
cheat6_big_endian = "false"
cheat6_cheat_type = "1"
cheat6_code = ""
cheat6_desc = "Have Elixir"
cheat6_enable = "false"
cheat6_handler = "1"
cheat6_memory_search_size = "3"
cheat6_rumble_port = "0"
cheat6_rumble_primary_duration = "0"
cheat6_rumble_primary_strength = "0"
cheat6_rumble_secondary_duration = "0"
cheat6_rumble_secondary_strength = "0"
cheat6_rumble_type = "0"
cheat6_rumble_value = "0"
cheat6_value = "1"
cheats = "7"

Hopefully that helps some would-be cheaters. ;)

@Semper5
Copy link

Semper5 commented Jun 18, 2020

I have been struggling with this to work for Rondo of Blood (Fully Translated) for the past week or so with no success :/

@BooBerry
I copied and pasted your CHT table above but it just won't work. I just finished reinstalling beetle and it made no difference. Am I missing something?

@BooBerry
Copy link

I just checked the English translation of Rondo of Blood with the Beetle PCE core with cheats and it works fine here.

@Semper5
Copy link

Semper5 commented Jun 20, 2020

I just checked the English translation of Rondo of Blood with the Beetle PCE core with cheats and it works fine here.

I've tried Chi no Rinne, Chi no Rondo (with and without translations) with the proper bios syscard3.pce. I can get it running fine and access the cheats but not a single one of these cheats work for it :(

What else could I be missing? usually im really good with figuring these things out but I'm totally stumped.

@negativeExponent
Copy link
Contributor

negativeExponent commented Sep 24, 2020

That works for infinite health, but the invincibility and 1-hit kill codes (which are not listed on gamehacking.org's page for the game but were posted in their forums) are at RAM addresses outside of the "normal" F82 address that I typically see for PC Engine RAM cheats.

See if you can get F83460:1 which is invincibility and F812B8:1 which is 1-hit kill for bosses working.

F82xxx mean base address of 0+xxx when translated to Retroarch cheat format. This is the main RAM which is 8192 bytes or 32768 bytes in supergrafx. So, a F83xxx means base address 0 + xxx+ 1000...

there is also a format like this:
Y Position Modifier by iddqd Raw 1F0202:??

which just means similar to above but this time, 1Fxxxx means base address of main RAM, so code address is 0 + xxxx

i have not figured out what F81xxx is. probably save ram based on pattern.

cheat0_address = "5216"
cheat0_address_bit_position = "0"
cheat0_big_endian = "false"
cheat0_cheat_type = "1"
cheat0_code = ""
cheat0_desc = "Invincibility"
cheat0_enable = "false"
cheat0_handler = "1"
cheat0_memory_search_size = "3"
cheat0_repeat_add_to_address = "1"
cheat0_repeat_add_to_value = "0"
cheat0_repeat_count = "1"
cheat0_rumble_port = "0"
cheat0_rumble_primary_duration = "0"
cheat0_rumble_primary_strength = "0"
cheat0_rumble_secondary_duration = "0"
cheat0_rumble_secondary_strength = "0"
cheat0_rumble_type = "0"
cheat0_rumble_value = "0"
cheat0_value = "1"
cheats = "1"

multiline cheats + native physical address cheat format
multiline

@inactive123
Copy link
Contributor

Moving this over to let @negativeExponent fetch the bounty that was associated to this.

@eadmaster
Copy link

eadmaster commented Mar 18, 2024

update: i've made a python script to automate the conversion process:
https://github.com/eadmaster/dotfiles/blob/main/bin/chtnative2retroarch.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants