Emulator Issues #11165
Controller hotplug issue in SoulCalibur II
Game ID? (right click the game in the game list, properties, info tab)
MD5 Hash? (right click the game in the game list, properties, info tab, MD5 Hash: Compute)
What's the problem? Describe what went wrong.
When the controller is disconnected and then reconnected is like if I continuously pressed «Up» (on the D-Pad or Control Stick). It doesn't matter if the controller was already connected before starting the game, or if the controller is connected afterwards. In both cases, if I disconnect the controller and then reconnect it (without quitting the game), the issue occurs. I can reproduce this issue with both a DualShock 4 CUH-ZCT1E (connected through USB or bluetooth, using the "hid_sony" driver in the Linux kernel) and an Xbox 360 USB controller (using the "xpad" driver in the Linux kernel).
Note: the issue always occurs when I reconnect the controller with the game started (so it is 100% reproducible, at least here). Also, the issue doesn't prevent me from using the controller (e.g.: I can use the «A» button on the controller to enter a menu o make the character attack).
Note²: I can reproduce this issue only on SoulCalibur II (USA), with other GameCube games (and Wii games as well), such as Mario Kart Double Dash and Sonic Riders, the issue doesn't occur.
What steps will reproduce the problem?
- Connect the first controller (now or after you started the game).
- Start the game "SoulCalibur II (USA)" with Dolphin (dolphin-emu, dolphin-emu-wx or dolphin-emu-nogui, it doesn't matter).
- Press the Start button to reach the MODE SELECT screen.
- Disconnect the first controller.
- Reconnect the first controller and you should see the modes are automatically selected, just like if you were continuously pressing «Up» on the D-Pad or Control Stick.
Is the issue present in the latest development version? For future reference, please also write down the version number of the latest development version.
Yes, version (as shown by dolphin-emu-nogui --version): "Dolphin [HEAD] 5.0-7735-dirty" (commit 3d44dc39814197e43bf1b8c2524684252251ee7b).
Is the issue present in the latest stable version?
I tried to reproduce the issue with the latest stable version (5.0), but apparently it doesn't have hotplug support yet (when I reconnect the gamepad it doesn't work at all, in any game).
What are your PC specifications? (CPU, GPU, Operating System, more)
Portage 2.3.24 (python 3.5.5-final-0, default/linux/amd64/17.0, gcc-6.4.0, glibc-2.25-r11, 4.16.11-gentoo x86_64)¶
System uname: Linux-4.16.11-gentoo-x86_64-Intel-R-Core-TM-2_Quad_CPU_Q9300@_2.50GHz-with-gentoo-2.4.1
KiB Mem: 8181792 total, 7582404 free
KiB Swap: 0 total, 0 free
Timestamp of repository gentoo: Fri, 25 May 2018 00:45:01 +0000
sh dash 0.5.9.1-r3
ld GNU ld (Gentoo 2.29.1 p3) 2.29.1
dev-lang/python: 2.7.14-r1::gentoo, 3.5.5::gentoo, 3.6.5::gentoo
sys-kernel/linux-headers: 4.13::gentoo (virtual/os-headers)
CFLAGS="-march=native -funsigned-char -O2 -pipe"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-march=native -funsigned-char -O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync webrsync-gpg xattr"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
USE="X alsa amd64 berkdb bluetooth bzip2 cec cli crypt cxx dri fortran gdbm iconv lto modules multilib ncurses nptl openmp pcre readline seccomp ssl tcpd unicode vdpau xattr xvmc zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon plan sheets stage words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 sse4_1 ssse3" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="libinput" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-6 php7-0" POSTGRES_TARGETS="postgres9_5" PYTHON_SINGLE_TARGET="python3_5" PYTHON_TARGETS="python2_7 python3_5" RUBY_TARGETS="ruby23" USERLAND="GNU" VIDEO_CARDS="nvidia" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset: CC, CPPFLAGS, CTARGET, CXX, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LINGUAS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Is there anything else that can help developers narrow down the issue? (e.g. logs, screenshots,
configuration files, savefiles, savestates)
#2 Updated by Scall almost 3 years ago
There are no differences in the controller configuration screen before and after the glitch (the red dot of the control stick is always at the center and doesn't move, unless I move the stick on my controller; also, the D-Pad assignments are not highlighted, unless I press it). You can take a look at these videos I recorded:
#3 Updated by Scall almost 3 years ago
I cleared the controller assignments just to do one more test, but I've seen that reconnecting the controller is enough to trigger the glitch, even if it doesn't have assignments any more:
#5 Updated by Scall almost 3 years ago
I noticed there's a loop of "PAD 0 set to mode 3" as soon as I disconnect my controller in SoulCalibur II. The lines from 348 to 489 in the attached "dolphin.log_soulcalibur_ii" are shown when the controller is disconnected. Reconnecting it immediately stops the loop (and, as you already know, triggers the glitch as well). This means the longer I wait before reconnecting it, the more consecutive "PAD 0 set to mode 3" there will be in the log.
I'm attaching a "dolphin.log_mario_kart_double_dash" as well, so you can compare the logs and see there's no such a loop in other games after I disconnect the controller.
Note: I get this "PAD 0 set to mode 3" loop with both my DualShock 4 and Xbox 360 USB controller.
#6 Updated by leoetlino almost 3 years ago
Just had an idea: can you try checking 'Always Connected'? This will make the game detect the controller as always connected (duh) even when the actual controller is unplugged. If the bug doesn't happen with that option enabled, then that means InputCommon is not to blame.
#9 Updated by Scall almost 3 years ago
leoetlino: yeah, when 'Always Connected' is enabled for the controller the glitch doesn't occur. Also, there's no "PAD 0 set to mode 3" loop, as you can see in the attached log.
#12 Updated by Billiard26 about 2 years ago
- Assignee deleted (
FYI. This is caused by our means of emulating a "Null" device when a "GCController" is chosen but the user's gamepad is not present.
We send the appropriate responses of CSIDevice_Null in this situation but we never call SetNoResponse like ChangeDeviceCallback does.
Adding this call does fix the issue but calling it directly isn't really a clean solution.
I don't know why only SoulCalibur II is affected.