Digimon Survive (871980)
Compatibility Report
- Name of the game with compatibility issues: Digimon Survive
- Steam AppID of the game:871980
System Information
- GPU: AMD AMD Custom GPU 0405 (vangogh, Steam Deck)
- Driver/LLVM version: LLVM 13.3.3, DRM 3.45, Mesa 22.0.2 (git-71648faf15)
- Kernel version: 5.13.0-valve21-1-neptune-02209-g2a5bdc1102a0
- OS Version: SteamOS Holo 3.3 (Build 20220726.100)
- Steam System Info: https://gist.github.com/sulix/3c470237410e60200a3ea3bc0fa5fb99
- Proton version: Proton Experimental (Build ID 9209017)
I confirm:
-
[x] that I haven't found an existing compatibility report for this game.
-
[x] that I have checked whether there are updates for my system available.
-
I have uploaded the log here: steam-871980.log
Symptoms
Video playback does not work, shows the "test pattern" video. Game then hangs indefinitely after the first "line of dialogue" in the subtitles.
Reproduction
Play the game up until the "Prologue", an animated video will play. Under Proton, this does not work.
See also this video (from someone else) describing this and other issues with the game.
The logs go some way to explaining this (though it's certainly the usual codecs issue):
[AVProVideo] Opening C:/users/steamuser/AppData/LocalLow/©BANDAI NAMCO Entertainment Inc_/DIGIMON SURVIVE\Movie/survive_op.mp4
(Filename: C:\buildslave\unity\build\Runtime/Export/Debug/Debug.bindings.h Line: 39)
11900.361:0138:013c:trace:seh:RtlGrowFunctionTable 000000016A12B510, 70
11900.361:0138:013c:trace:seh:RtlGrowFunctionTable 000000016A12B510, 71
11900.361:0138:013c:trace:seh:RtlGrowFunctionTable 000000016A12B510, 72
11900.366:0138:013c:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\qcap.dll" at 000000024A370000: builtin
11900.383:0138:013c:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\winealsa.drv" at 00007F74CEBB0000: builtin
11900.384:0138:013c:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\msacm32.drv" at 000000034EB40000: builtin
11900.385:0138:013c:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\midimap.dll" at 00000003346F0000: builtin
winegstreamer error: decodebin0: Your GStreamer installation is missing a plug-in.
winegstreamer error: decodebin0: ../src-gst_base/gst/playback/gstdecodebin2.c(4719): gst_decode_bin_expose (): /GstBin:bin0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: MPEG-4 AAC (audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1190, rate=(int)48000, channels=(int)2)
Couldn't set avdec_h264-0 to PAUSEDCouldn't set avdec_valve_h264-0 to PAUSED
…
3
[AVProVideo] Using player type DirectShow
(Filename: C:\buildslave\unity\build\Runtime/Export/Debug/Debug.bindings.h Line: 39)
…
Unsupported D3D format 0x58
(Filename: Line: 262)
…
91
IOException: Sharing violation on path C:/users/steamuser/AppData/LocalLow/©BANDAI NAMCO Entertainment Inc_/DIGIMON SURVIVE/Movie/survive_op.mp4
at System.IO.File.Delete (System.String path) [0x00073] in <eae584ce26bc40229c1b1aa476bfa589>:0
at uiMovie+<UpdateCoroutine>d__23.MoveNext () [0x00645] in <365f06269b244e168128f721d7804516>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) [0x00026] in <c394b859740447d7b53708bfc9738b1c>:0
(Filename: <eae584ce26bc40229c1b1aa476bfa589> Line: 0)
Interestingly: I cannot reproduce the issue on my openSUSE Tumbleweed desktop with the same Game / Proton version. That system does have gstreamer codecs installed, nVidia's VDPAU API, and openSUSE tends play around with the Steam runtime, so may be forcing other gstreamer versions accidentally.
Note that, as also noted in this video, the game will hang when any video playback ends (the "while screen" issue mentioned, though the screen is just showing the last frame of the video). This happens both when the video plays successfully (as on my openSUSE machine) and when the placeholder plays (as on the Steam Deck). It also occurs if the video is skipped in-game (or otherwise ends early).
This can be worked around by alt+tabbing out of the game while the video is playing and deleting the video file while it is playing. This file will be in: steamapps/compatdata/871980/pfx/drive_c/users/steamuser/AppData/LocalLow/©BANDAI NAMCO Entertainment Inc_/DIGIMON SURVIVE/Movie/
For the prologue, it's called survive_op.mp4.
[Edit: Apparently this issue occurs on Windows as well with some codecs installed — there's also the suggesting of temoving the DigimonSurvive_Data/Plugins/x86_64/AVProVideo.dll file as another fix. I haven't tried it, but it probably would work, and is easier than having to delete a temporary file at just the right moment, but probably will break video playback even further. (Deleting the video file will actually allow playback to continue, as the game already has the file open, and Linux will only get rid of the data once it's closed.)]
Replying to https://github.com/ValveSoftware/Proton/issues/6041#issuecomment-1199474786
I tried just renaming the video file and it also worked.
The transcoded videos for (at least the first couple of) cutscenes have landed in the shader cache, so the videos now play properly on the Steam deck.
It still crashes at the end of them, though…
I have a patch to fix the hang after cutscenes. It's based on Proton's experimental-wine-7.0-20220727 wine tag, but should apply cleanly to pretty much any recent wine version.
From 39e1dbb48b89ca685eba764177a3b375b263a3dd Mon Sep 17 00:00:00 2001
From: David Gow <[email protected]>
Date: Sun, 31 Jul 2022 09:58:09 +0800
Subject: [PATCH] quartz: Open files with FILE_SHARE_DELETE in FileSource
Some games (such as Digimon Survive) create temporary video files and
will hang if deleting them fails. Open the files with FILE_SHARE_DELETE,
which will allow this deletion to go ahead even if the FileSource hasn't
yet been closed.
Note that many windows codec packs do themselves open files without
FILE_SHARE_DELETE, so a similar hang can be observed in some windows
configurations.
I haven't checked that this is the file share mode used on windows
(alas, I don't have a windows machine available), so I haven't removed
the FIXME comment. Equally, I also updated the CreateFileW() call
in get_media_type(), but that _may_ be unnecessary.
Signed-off-by: David Gow <[email protected]>
---
dlls/quartz/filesource.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index 6ffae606df4..0579f564af7 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -214,7 +214,7 @@ BOOL get_media_type(const WCHAR *filename, GUID *majortype, GUID *subtype, GUID
}
}
- if ((file = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+ if ((file = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
WARN("Failed to open file %s, error %lu.\n", debugstr_w(filename), GetLastError());
@@ -464,7 +464,7 @@ static HRESULT WINAPI FileSource_Load(IFileSourceFilter * iface, LPCOLESTR pszFi
/* open file */
/* FIXME: check the sharing values that native uses */
- hFile = CreateFileW(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
+ hFile = CreateFileW(pszFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
--
2.37.1
Replying to #6041 (comment)
I tried building the current Proton 7 Experimental as well as Proton GE 7-26 after applying your patch and it indeed does fix the hang after the cutscene in both proton versions. Good find! Hope the pull request goes through quickly and / or the game developers fix the game so that it doesn't have to rely on it anymore.
The above patch has been accepted into upstream wine, so it'll filter into Proton eventually.
In the meantime, apparently the latest patch to Digimon Survive also fixes this issue. I haven't tested it myself, but if you're seeing hangs after cutscenes, do make sure you're on the latest version of Digimon Survive.