ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
24.49k stars 1.07k forks source link

Shin Megami Tensei III Nocturne HD Remaster (1413480) #4843

Open junglerobba opened 3 years ago

junglerobba commented 3 years ago

Compatibility Report

System Information

I confirm:

steam-1413480.log

Symptoms

Game runs fine (Videos are just the test image, but they are skippable just fine), except that entering save rooms often causes the game to remain on a black screen, after which the process has to be killed. This unfortunately makes this game almost unplayable.

One thing to note is, the game seems to be locked to 30 FPS on Windows, but enabling Vsync on Proton makes it run at 60. The issue happens regardless of framerate though.

Also cloud saves do not seem to be working, though I'm not sure if this is a configuration issue with the game or actually caused by running the game via Proton. EDIT: Cloud saves are uploaded when running the game on Windows, so that's indeed a Proton issue.

Reproduction

Play the game up until the first save room (room with the cylinder, about 10-15 minutes in), keep reentering the room until the game remains on a black screen (generally happened to me on the 2nd try)

qchto commented 3 years ago

Confirmed bug in my playthrough, made me lost at least 1h of gameplay, here's is my last log steam-1413480.log. PD: It's possible I exited the game "normally" using an invisible Big Picture overlay, but I can't recreate it for now (I tried to replicate it in different machines but was kicked by Denuvo from trying, so I can't hopefully just for 24h).

Edit: Got to play in my original installation machine, and Shibuya is (almost) unplayable with this bug if you don't suspend and restart the game before visitng another store. This is a game-breaking bug. My only recommendation for gamers, after restarting a game and loading (either from a suspended state or a save) rush for a save point or another suspend (and nothing else until you reached a regular save room).

junglerobba commented 3 years ago

I don't know how helpful this is in figuring this out, but running the game on Windows with dxvk leads to the same behavior of the game getting stuck on a black screen when entering save rooms/shops.

Melon-Bread commented 3 years ago

I can also confirm this bug. Saved the game in the first terminal room. Exited and then went right back in to black screen with just the music playing. The cursor can be moved so not a "hard lock" or anything but you can not progress forward.

qchto commented 3 years ago

So, I have bneen trying to debug this myself, but found the task too much for my limited knowledge. What I did achieve was to get a gargantuan log (steam-1413480_FULL.zip that is 763.7MB unzipped) using WINEDEBUG=fixme-all,warn+cursor,+relay as a launch parameter (I honestly don't know what I'd get, but trying simply WINEDEBUG=+all never got me into the game and WINEDEBUG=+relay crashed the game before getting to load a save).

Still, I was following the log right before reproducing the bug with `tail -f` and noticed these lines repeating over and over (probably thousands of times before I was able to stop it while in a black screen - before forcefully closing the game):

``` ... 01b0:Ret ntdll.NtDelayExecution() retval=00000000 ret=7b06de4c 01b0:Ret KERNEL32.Sleep() retval=00000000 ret=180f5a70a 01b0:Call KERNEL32.QueryPerformanceCounter(675afd18) ret=180f5a6b4 01b0:Ret KERNEL32.QueryPerformanceCounter() retval=00000001 ret=180f5a6b4 01b0:Call KERNEL32.QueryPerformanceFrequency(675afd20) ret=180f5a6c3 01b0:Ret KERNEL32.QueryPerformanceFrequency() retval=00000001 ret=180f5a6c3 01b0:Call KERNEL32.QueryPerformanceCounter(675afd08) ret=180f5a6b4 01b0:Ret KERNEL32.QueryPerformanceCounter() retval=00000001 ret=180f5a6b4 01b0:Call KERNEL32.QueryPerformanceFrequency(675afd10) ret=180f5a6c3 01b0:Ret KERNEL32.QueryPerformanceFrequency() retval=00000001 ret=180f5a6c3 01b0:Call KERNEL32.Sleep(0000000a) ret=180f5a70a 01b0:Call ntdll.NtDelayExecution(00000000,675afcb8) ret=7b06de4c 00b4:Ret ntdll.NtWaitForMultipleObjects() retval=00000000 ret=7b06d88a 00b4:Call ntdll.NtWaitForMultipleObjects(00000001,0021e5c0,00000001,00000000,0021e5b8) ret=7b06d88a 00b4:Ret ntdll.NtWaitForMultipleObjects() retval=00000102 ret=7b06d88a 00b4:Call ntdll.NtQueryKey(00000064,00000002,0021e4c0,00000100,0021e4bc) ret=7b058707 00b4:Ret ntdll.NtQueryKey() retval=00000000 ret=7b058707 00b4:Call ntdll.RtlNtStatusToDosError(00000000) ret=7b0588e7 00b4:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=7b0588e7 00b4:Call winex11.drv.GetCursorPos(0021e788) ret=23d85e0d8 00b4:Ret winex11.drv.GetCursorPos() retval=00000001 ret=23d85e0d8 00b4:Call ntdll.NtQueryKey(00000068,00000002,0021e340,00000100,0021e33c) ret=7b058707 00b4:Ret ntdll.NtQueryKey() retval=00000000 ret=7b058707 00b4:Call ntdll.RtlNtStatusToDosError(00000000) ret=7b0588e7 00b4:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=7b0588e7 00b4:Call ntdll.NtQueryKey(00000068,00000002,0021e170,00000100,0021e16c) ret=7b058707 00b4:Ret ntdll.NtQueryKey() retval=00000000 ret=7b058707 00b4:Call ntdll.RtlNtStatusToDosError(00000000) ret=7b0588e7 00b4:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=7b0588e7 00b4:Call ntdll.NtQueryKey(00000068,00000002,0021e320,00000100,0021e31c) ret=7b058707 00b4:Ret ntdll.NtQueryKey() retval=00000000 ret=7b058707 00b4:Call ntdll.RtlNtStatusToDosError(00000000) ret=7b0588e7 00b4:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=7b0588e7 00b4:Ret winex11.drv.MsgWaitForMultipleObjectsEx() retval=00000000 ret=23d8c21ce 00b4:Call winex11.drv.MsgWaitForMultipleObjectsEx(00000001,0021ed88,ffffffff,000004ff,00000000) ret=23d8c21ce 00b4:Call ntdll.NtWaitForMultipleObjects(00000001,0021e5c0,00000001,00000000,0021e5b8) ret=7b06d88a 00b4:Ret ntdll.NtWaitForMultipleObjects() retval=00000102 ret=7b06d88a 00b4:Call ntdll.NtWaitForMultipleObjects(00000001,0021e7c0,00000001,00000000,00000000) ret=7b06d88a 01a4:Ret ntdll.NtWaitForMultipleObjects() retval=00000000 ret=7b06d88a 01a4:Ret KERNEL32.WaitForSingleObject() retval=00000000 ret=180fce46a 01a4:Call KERNEL32.SetEvent(000003e4) ret=180fb0ac0 01a4:Call ntdll.NtSetEvent(000003e4,00000000) ret=7b06e895 01a4:Ret ntdll.NtSetEvent() retval=00000000 ret=7b06e895 01a4:Ret KERNEL32.SetEvent() retval=00000001 ret=180fb0ac0 01a8:Ret ntdll.NtWaitForMultipleObjects() retval=00000000 ret=7b06d88a 01a4:Call KERNEL32.WaitForSingleObject(000003d0,000001f4) ret=180fce46a 01a8:Ret KERNEL32.WaitForSingleObject() retval=00000000 ret=180fb09f5 01a4:Call ntdll.NtWaitForMultipleObjects(00000001,6727f9e0,00000001,00000000,6727f9d8) ret=7b06d88a 01a8:Call KERNEL32.QueryPerformanceCounter(6738fcc8) ret=180f5a6b4 01a8:Ret KERNEL32.QueryPerformanceCounter() retval=00000001 ret=180f5a6b4 01a8:Call KERNEL32.QueryPerformanceFrequency(6738fcd0) ret=180f5a6c3 01a8:Ret KERNEL32.QueryPerformanceFrequency() retval=00000001 ret=180f5a6c3 01a8:Call winmm.timeGetTime() ret=180f5a68f 01a8:Call KERNEL32.QueryPerformanceCounter(6738fad0) ret=3b8f12e3f 01a8:Ret KERNEL32.QueryPerformanceCounter() retval=00000001 ret=3b8f12e3f 01a8:Call KERNEL32.QueryPerformanceFrequency(6738fad8) ret=3b8f12e4a 01a8:Ret KERNEL32.QueryPerformanceFrequency() retval=00000001 ret=3b8f12e4a 01a8:Ret winmm.timeGetTime() retval=0144963e ret=180f5a68f 01a8:Call KERNEL32.QueryPerformanceCounter(6738fcb8) ret=180f5a6b4 01a8:Ret KERNEL32.QueryPerformanceCounter() retval=00000001 ret=180f5a6b4 01a8:Call KERNEL32.QueryPerformanceFrequency(6738fcc0) ret=180f5a6c3 01a8:Ret KERNEL32.QueryPerformanceFrequency() retval=00000001 ret=180f5a6c3 01a8:Call KERNEL32.ResetEvent(000003e4) ret=180fb09e0 01a8:Call ntdll.NtResetEvent(000003e4,00000000) ret=7b06e915 01a8:Ret ntdll.NtResetEvent() retval=00000000 ret=7b06e915 01a8:Ret KERNEL32.ResetEvent() retval=00000001 ret=180fb09e0 01a8:Call KERNEL32.WaitForSingleObject(000003e4,ffffffff) ret=180fb09f5 01a8:Call ntdll.NtWaitForMultipleObjects(00000001,6738fa10,00000001,00000000,00000000) ret=7b06d88a 0248:Ret ntdll.NtDelayExecution() retval=00000000 ret=7b06de4c 0248:Ret KERNEL32.Sleep() retval=00000000 ret=180f5a70a 0248:Call KERNEL32.Sleep(0000000a) ret=180f5a70a 0248:Call ntdll.NtDelayExecution(00000000,6630fcb8) ret=7b06de4c 01ac:Ret ntdll.NtDelayExecution() retval=00000000 ret=7f8dd035f5e7 01ac:Call ntdll.NtDelayExecution(00000000,6749fcc0) ret=7f8dd035f5e7 01b0:Ret ntdll.NtDelayExecution() retval=00000000 ret=7b06de4c ... ```

Hopefully this can help devs here checking out what the problem may be, or even guiding me on how to revise it myself would be greatly appreciated, because It's frustrating that a bug this "simple" is locking a game that would (for all effects and purposes) be a platinum otherwise.

Edit: I must mention I recurred to doing this because the original PROTON_LOG=1 %command% simply didn't log a single line between the error triggering and the game exiting.

junglerobba commented 3 years ago

So while the game is not playable yet, at least I found out how to make the cloud saves work. For some reason Steam is looking for saves in pfx/drive_c/users/steamuser/Application Data/Sega/smt3hd/<userid>, but the game is reading saves in pfx/drive_c/users/steamuser/AppData/Roaming/Sega/SMT3HD/<userid>, so the workaround is just to symlink one of those to the other. SteamDB is showing the cloud configuration as

    0/path: Sega/smt3hd/{Steam3AccountID}
    0/pattern: *.sav
    0/root: WinAppDataRoaming

which is where the game puts the saves, so Steam might be looking in the wrong location here?

@kisak-valve Along with Death Stranding this is the second game I'm aware of where the cloud saves downloaded by Steam are put in a different location from where the game tries to read them, while they're working fine on Windows. Is it worth creating a separate issue for this or where could this be reported?

dylanmtaylor commented 3 years ago

entering save rooms often causes the game to remain on a black screen

Also having this issue. I noticed a pattern (somewhat). It seems that from the game starting the first time you enter a save room will almost always work. After that, on the second attempt, it will usually black screen.

GPU: NVIDIA Quadro T1000 Mobile Driver: Nvidia 465.31 Kernel: 5.12.10-arch1-1 Proton experimental.

Also having issues with cloud saves.

dylanmtaylor commented 3 years ago

Replying to https://github.com/ValveSoftware/Proton/issues/4843#issuecomment-851276607

Nice catch. I can confirm this fixes it:

➜  steamuser ln -s /home/dylan/.local/share/Steam/steamapps/compatdata/1413480/pfx/drive_c/users/steamuser/AppData/Roaming/Sega/SMT3HD/29615804/ /home/dylan/.local/share/Steam/steamapps/compatdata/1413480/pfx/drive_c/users/steamuser/Application\ Data/Sega/smt3hd/29615804
dylanmtaylor commented 3 years ago

So this doesn't seem to just be triggered by save doors but they are one of the ones that do trigger it. It's any special door with a character or whatever in it where there is a menu with different actions. Shops, healers, etc.

ghost commented 3 years ago

Can someone please try with this in launch options to see if it fixes the save/shop room crash?

PROTON_USE_WINED3D=1 %command%

junglerobba commented 3 years ago

With PROTON_USE_WINED3D=1 %command% the black screen issue does not seem to happen, however the steam overlay appears to be broken with that (which isn't that much of a problem). So judging from the fact that the same issue happens on Windows when using dxvk, I would guess this is a dxvk issue?

dylanmtaylor commented 3 years ago

This is reproducible in the first save room of the game. Exit and enter again.

LittleStinky123 commented 3 years ago

With proton 6.3-7 videos aren't displayed correctly while proton 6.20-ge-1 fixes that issue. However, controllers don't seem to work with the game installed on an ntfs or ext4 dirve. I tried with an SN30Pro controller in XInput and DInput mode where no inputs were registered at all. With a DS4 only the touchpad gets used for the mouse cursor, other inputs don't work. I tried SteamInput that strangely defaults to the desktop configuration so the dpad opens the virtual keyboard and the right stick controls the mouse cursor for example, but no controller input is used, only mouse&keyboard is emulated. Interestingly the same thing happens if I use remote play with the host being a linux machine, with windows machines this issue doesn't occur.

Disabled SteamInput and default input settings didn't register any input at all. The SN30Pro works in almost any game with the proton versions listed above as xbox 360 controller so it has to be a proton or game specific issue.

ghost commented 3 years ago

@LittleStinky123 PS5 controller works fine for me and the game is installed on an ext4 drive, not sure how the fs would be relevant though.

Oddly enough Atlus actually has an official Steam configuration and button prompts for PS5 controllers though.

LittleStinky123 commented 3 years ago

@z0z0z I just made the single change to enable steam overlay and now XInput works with my SN30Pro as well. In some instances controller input seems to be incorrectly tied to this option.

kaincenteno commented 5 months ago

running on proton experimental.

The intro video will sometimes show SMPTE color bars image with the bottom right with scramble black and bar dots.

The first terminal teleport instead of playing the video i had that showing up. I'll keep on playing hopefully I dont see it again, but I see it all the time at the intro screen.