libretro / RetroArch

Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3.
http://www.libretro.com
GNU General Public License v3.0
10.33k stars 1.84k forks source link

Ocarina of Time in "The Legend of Zelda: Collector's Edition": Ocarina songs not triggering with right analog stick using the SDL2 controller driver #16857

Open marcecj opened 3 months ago

marcecj commented 3 months ago

First and foremost consider this:

Description

First off: this bug report comes following a Discord discussion, see https://discord.com/channels/184109094070779904/469974542299955210/1270182791270629458 and https://discord.com/channels/184109094070779904/469974542299955210/1270385745173155950.

Also, this bug seems to have appeared in the past, I found two 4 and 8 year old Reddit posts: https://www.reddit.com/r/DolphinEmulator/comments/fl6uin/problems_playing_ocarina_in_ocarina_of_time/ https://www.reddit.com/r/DolphinEmulator/comments/5mlpc3/ocarina_of_time_master_quest_running_perfect_on/

I started with the SDL2 input and controller driver (udev didn't work for me in the past with RetroArch installed via Flatpak). I use a Logitech F710 wireless controller, which was originally set to DirectInput mode ("D"). I'm playing the game using the Dolphin core (dolphin-emu, Git version 89a4df7). As detailed in the Discord discussion referenced above, I tried a newer version of the core, which didn't help.

Now on to the bug:

In Ocarina of Time in "The Legend of Zelda: Collector's Edition", after a certain point it stopped being possible to trigger the Ocarina outside of designated areas/prompts when using the right analog stick (the default configuration). The exact point might be variable: the second Reddit post suggests it's after you become Adult Link, but in my play-through I noticed it after meeting Saria in front of the Forest temple as young Link (where I distinctly remember successfully talking to her by playing her song), but before becoming adult Link. I found it odd, but chalked it up to me misremembering the game. It only really came to a head when I got to Dampé's race and got stuck because I couldn't get the Song of Time to trigger in front of the blocks after getting the hook-shot.

I eventually realized that I could still trigger songs using the "alt" C button mappings (X, Y, and RB on my controller), which suffices to play the Song of Time. Since I couldn't trigger the bug using standalone Dolphin (tested by copying the save file over), I had the idea that the bug might be related to input handling, so I experimented with that a bit. One result of that experimentation is that I could work around the issue by also mapping the C buttons to the D-pad. After saving that as a remap file, I could consistently trigger songs with the Ocarina again using the right analog stick. However, oddly enough, using the D-pad directly didn't work reliably: only D-left as C-left actually did anything.

I then double-checked with the RetroArch documentation, and noticed that it says that the udev input and controller drivers are the recommended ones under Linux. I had already changed the input driver to udev, which hadn't changed any visible behaviour, but then I decided to put more effort into also switching to the udev controller driver, which entailed switching my controller to XInput mode ("X") -- which might not have been necessary, but Logitech recommends only using "D" when necessary, and the controls were messed up from changing the controller driver either way, so I went ahead with that -- and updating the RetroPad mappings. After doing that and removing the above-mentioned remap file for the game, I was still able to trigger songs with the Ocarina using the right analog stick.

Sorry, but I don't have a log file at the moment, but I'll try to add one in the coming days (I just hate the thought of having to go through the controller configuration again). I can, however, easily provide my save file for the purpose of reproducing the bug (which occurs both when loading the in-game save and a save state).

Expected behavior

Playing the Ocarina using the default controller mapping consistently triggers.

Actual behavior

After an unknown amount of play time, songs don't trigger when playing the Ocarina freely, i.e., outside of designated areas/prompts, when using the right analog stick.

Steps to reproduce the bug

  1. Play Ocarina of Time from "The Legend of Zelda: Collector's Edition" about up to the point where you become adult Link.
  2. Try playing the Ocarina freely, e.g., the Song of Time, using the right analog stick.

Bisect Results

Not attempted.

Version/Commit

Environment information

gouchi commented 3 months ago

udev didn't work for me in the past with RetroArch installed via Flatpak

Yes it is normal, please check this issue.

marcecj commented 3 months ago

udev didn't work for me in the past with RetroArch installed via Flatpak

Yes it is normal, please check this issue.

This is only tangentially related to the issue I described, but I'll say this much: clearly something changed, since as I remember in the past my controller wouldn't even get detected. I'm gonna guess that the /run/udev:ro filesystem override the Flatpak ships with is a part of why it works now.