DS-Homebrew / TWiLightMenu

DSi Menu replacement for DS/DSi/3DS/2DS
https://wiki.ds-homebrew.com/twilightmenu/
GNU General Public License v3.0
3.3k stars 205 forks source link

Cheats/RTS does not work with native flashcart driver (r4ids.cn R4i+ Gold 3DS RTS) #2147

Closed dankcuddlybear closed 1 year ago

dankcuddlybear commented 1 year ago

I am on a DS Lite with an R4i+ Gold 3DS RTS flashcart (r4ids.cn). Twilightmenu++ version is v25.8.0 with DSi theme. I cannot use cheats at all with the native flashcart driver, only NDS-bootstrap. Also, I cannot open the RTS menu while in-game (save/load RAM, exit game, return to game). RTS stands for Real Time Save (basically the same as save states).

STEPS TO REPRODUCE:

RocketRobz commented 1 year ago

Unfortunately, none of the flashcard kernels used by TWLMenu++ don't have an RTS menu. As for cheats, the flashcard kernel's autoboot feature doesn't allow cheats to be used, so that in particular isn't a TWiLight Menu++ issue. It's possible to implement RTS/save-states within nds-bootstrap though.

dankcuddlybear commented 1 year ago

It is 100% possible to get it working (at least on my card). When you launch a DS game, in the case of R4i+ Gold 3DS RTS, Twilightmenu sets lastLoaded to that game's path in fat0:/_wfwd/lastsave.ini, then loads fat0:/Wfwd.dat. Because autorunWithLastRom is set to 1 in fat0:/_wfwd/globalsettings.ini, the flashcart kernel immediately loads that game without showing the menu. By changing autorunWithLastRom to 0, I can enable cheats and RTS menu. Now the RTS menu works just fine in-game. However, for some reason when cheats are globally enabled, even if no cheats are enabled for that game, the kernel gets stuck on a loading screen for a few seconds before both screens turn off.

I managed to get cheats AND RTS working in the end. I downloaded the latest source code for Twilightmenu, changed ALL the file paths in the source code from "fat0:/_wfwd" to "fat0:/rpg" and from "fat0:/Wfwd.dat" to "fat0:/rpg.dat". I then compiled Twilightmenu and copied it to my flashcart's SD card. I then downloaded the STOCK kernel and firmware from r4ids.cn. I renamed the stock kernel from _DS_MENU.dat to rpg.dat. Then I had to manually patch the Twilightmenu _DS_MENU.dat with my DLDI driver but now cheats and RTS are working. The only problem is that if I want to change what cheats are active for a game, I have to manually edit fat0:/rpg/globalsettings.ini and change autorunWithLastRom to 0 so I can load the stock menu.

But this shows that it is 100% possible to enable cheats outside nds-bootstrap (at least on flashcarts that originally support cheats). The problem is that the firmware and kernel included with Twilightmenu are NOT stock and that's probably why it's not working properly.

lifehackerhansol commented 1 year ago

@dankcuddlybear They are stock though. Just hex edited to a different path. This is only done because some people keep the regular kernel and it overlaps, so we just renamed everything to _wfwd. Literally just ran sed -i "s/__rpg/_wfwd/g" __DS_MENU.DAT. Actually, on that thought, what isn't a stock kernel for this flashcart? To my understanding there isn't any.

Otherwise, when you boot into the flashcart kernel, it would just automatically boot into the game, and that's a big no-no.

In fact, the question we need to ask is why doesn't it work?

lifehackerhansol commented 1 year ago

The problem is very likely that globalsettings.ini inside _wfwd likely has an RTS setting that is maybe turned off (or outright missing).

I don't have an RTS compatible flashcart though, so if you could find this INI setting, I can add it.

lifehackerhansol commented 1 year ago

Wait actually, I do have one. Got an R4iDSN.

The INI setting required is rts = 1. And it is indeed missing in the two kernels that support Wood RTS (r4ids.cn 1.64 and R4iDSN).

lifehackerhansol commented 1 year ago

Cheats is a wont-fix, just to clarify. Until someone has a clean way to modify it in the menu and not via external resources.