http://bugs.winehq.org/show_bug.cgi?id=35218
Bug ID: 35218 Summary: Leviathan: Warships hangs after selecting single player mode Product: Wine Version: 1.7.9 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: gyebro69@gmail.com Classification: Unclassified
Created attachment 46967 --> http://bugs.winehq.org/attachment.cgi?id=46967 terminal output
The game uses the Unity engine and comes bundled with it's own Mono framework. The problem arises when I select single-player (offline) mode, multiplayer mode works fine. When I click on <Play offline> in the menu the game comes to a halt for a moment, but it is not completely dead yet, I can click on the <Create game> button, but launching the mission is not possible as the <Create> button doesn't work. Finally the game hangs when I click on the <Archive> option in the single player menu..neither mouse nor keyboard works afterwards, the game is just sitting there.
Wine's terminal output doesn't reveal too much I guess, so I'm going to attach the game's own log file as well.
Fedora 19 x86 Wine 1.7.9, Mono 4.5.2 installed
http://bugs.winehq.org/show_bug.cgi?id=35218
--- Comment #1 from GyB gyebro69@gmail.com --- Created attachment 46968 --> http://bugs.winehq.org/attachment.cgi?id=46968 output_log.txt
This log was generated by the game.
An exception occurs when I click on offline mode in the main menu:
... ArgumentException: The Path does not have a valid format at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) [0x00000] in <filename unknown>:0 at System.IO.Directory.GetFiles (System.String path, System.String searchPattern) [0x00000] in <filename unknown>:0 at System.IO.Directory.GetFiles (System.String path) [0x00000] in <filename unknown>:0 at OfflineGameDB.GetGameList () [0x00000] in <filename unknown>:0 at OfflineMenu.FillGameList () [0x00000] in <filename unknown>:0 at OfflineMenu..ctor (UnityEngine.GameObject guiCamera, .UserManClient userMan, .OfflineGameDB gameDB, StartStatus startStatus, .MusicManager musicMan) [0x00000] in <filename unknown>:0 at OfflineState.SetupMenu (StartStatus status) [0x00000] in <filename unknown>:0 at OfflineState..ctor (UnityEngine.GameObject guiCamera, .MusicManager musMan, .GDPBackend gdpBackend) [0x00000] in <filename unknown>:0 at main.OnSinglePlayer () [0x00000] in <filename unknown>:0 at ConnectMenu.OnOfflinePressed (IUIObject obj) [0x00000] in <filename unknown>:0 at UIButton.OnInput (.POINTER_INFO& ptr) [0x00000] in <filename unknown>:0 at UIActionBtn.OnInput (.POINTER_INFO& ptr) [0x00000] in <filename unknown>:0 at AutoSpriteControlBase.OnInput (POINTER_INFO ptr) [0x00000] in <filename unknown>:0 at UIManager.DispatchHelper (.POINTER_INFO& curPtr, Int32 camIndex) [0x00000] in <filename unknown>:0 at UIManager.DispatchInput () [0x00000] in <filename unknown>:0 at UIManager.Update () [0x00000] in <filename unknown>:0
(Filename: Line: -1) ...
http://bugs.winehq.org/show_bug.cgi?id=35218
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download URL| |http://store.steampowered.c | |om/app/202270/ CC| |focht@gmx.net Component|-unknown |shell32 Summary|Leviathan: Warships hangs |Leviathan: Warships (Steam) |after selecting single |hangs after selecting |player mode |single player mode (needs | |support for shell32 | |FOLDERID_LocalAppDataLow)
--- Comment #2 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
--- snip --- ArgumentException: The Path does not have a valid format at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) [0x00000] in <filename unknown>:0 at System.IO.Directory.GetFiles (System.String path, System.String searchPattern) [0x00000] in <filename unknown>:0 at System.IO.Directory.GetFiles (System.String path) [0x00000] in <filename unknown>:0 at OfflineGameDB.GetGameList () [0x00000] in <filename unknown>:0 at OfflineMenu.FillGameList () [0x00000] in <filename unknown>:0 ... --- snip ---
Using the managed backtrace I found the code in the managed assembly 'Assembly-CSharp.dll':
--- snip --- // OfflineGameDB public List<GamePost> GetGameList() { List<GamePost> list = new List<GamePost>(); string[] files = Directory.GetFiles(Application.persistentDataPath); string[] array = files; for (int i = 0; i < array.Length; i++) { string text = array[i]; if (Path.GetExtension(text) == ".gam") { GamePost item = this.LoadGamePost(text); list.Add(item); } } return list; } --- snip ---
The problem is unity3d engine 'Application.persistantDataPath' property which is used here for load/save game data base path.
Info: http://docs.unity3d.com/Documentation/ScriptReference/Application-persistent...
The property value is initialized at the start of managed engine and used later in various places:
--- snip --- $ wine ./steam.exe -applaunch 202270 ... 0031:Call KERNEL32.LoadLibraryA(00b3a0f4 "shell32.dll") ret=005ea613 0031:Ret KERNEL32.LoadLibraryA() retval=7e890000 ret=005ea613 0031:Call KERNEL32.GetProcAddress(7e890000,00b3a0dc "SHGetKnownFolderPath") ret=005ea625 0031:Ret KERNEL32.GetProcAddress() retval=7e893df4 ret=005ea625 0031:Call shell32.SHGetKnownFolderPath(00b3a000,00000000,00000000,0033daa4) ret=005ea636 ... 0031:Call shlwapi.PathAddBackslashW(0033d318 L"%USERPROFILE%") ret=7e8df424 0031:Ret shlwapi.PathAddBackslashW() retval=0033d334 ret=7e8df424 0031:Call advapi32.RegCreateKeyExW(80000002,7e92bf00 L"Software\Microsoft\Windows NT\CurrentVersion\ProfileList",00000000,00000000,00000000,000f003f,00000000,0033ce90,0033cc48) ret=7e8dfd35 0031:Ret advapi32.RegCreateKeyExW() retval=00000000 ret=7e8dfd35 0031:Call KERNEL32.GetSystemDirectoryW(0033cc84,00000104) ret=7e8e00b3 0031:Ret KERNEL32.GetSystemDirectoryW() retval=00000013 ret=7e8e00b3 0031:Call advapi32.RegQueryValueExW(00000308,7e92bf80 L"ProfilesDirectory",00000000,0033cc2c,0033ce94,0033cc28) ret=7e8dfe0b 0031:Ret advapi32.RegQueryValueExW() retval=00000000 ret=7e8dfe0b 0031:Call advapi32.GetUserNameW(0033cc84,0033ce8c) ret=7e8e02a1 0031:Ret advapi32.GetUserNameW() retval=00000001 ret=7e8e02a1 0031:Call shlwapi.PathAppendW(0033d520 L"C:\users",0033cc84 L"focht") ret=7e8e02b9 0031:Ret shlwapi.PathAppendW() retval=00000001 ret=7e8e02b9 0031:Call shlwapi.PathAppendW(0033d520 L"C:\users\focht",0033d0b6 L"\AppData\LocalLow") ret=7e8e02e4 0031:Ret shlwapi.PathAppendW() retval=00000001 ret=7e8e02e4 0031:Call advapi32.RegCloseKey(00000308) ret=7e8e0490 0031:Ret advapi32.RegCloseKey() retval=00000000 ret=7e8e0490 0031:Call shlwapi.PathFileExistsW(0033d520 L"C:\users\focht\AppData\LocalLow") ret=7e8e0d9d 0031:Call KERNEL32.SetErrorMode(00000001) ret=7e82ee3f 0031:Ret KERNEL32.SetErrorMode() retval=00008001 ret=7e82ee3f 0031:Call KERNEL32.GetFileAttributesW(0033d520 L"C:\users\focht\AppData\LocalLow") ret=7e82ee4f 0031:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7e82ee4f 0031:Call KERNEL32.SetErrorMode(00008001) ret=7e82ee60 0031:Ret KERNEL32.SetErrorMode() retval=00000001 ret=7e82ee60 0031:Ret shlwapi.PathFileExistsW() retval=00000000 ret=7e8e0d9d 0031:Ret shell32.SHGetKnownFolderPath() retval=80070002 ret=005ea636 0031:Call KERNEL32.FreeLibrary(7e890000) ret=005ea63f 0031:Ret KERNEL32.FreeLibrary() retval=00000001 ret=005ea63f ... <lots of unrelated traces> ... 0031:Call KERNEL32.GetFileAttributesW(0cc46714 L"/user.dat") ret=10029fb7 0031:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=10029fb7 0031:Call KERNEL32.GetLastError() ret=10029fc2 0031:Ret KERNEL32.GetLastError() retval=00000002 ret=10029fc2 ... 0031:trace:seh:raise_exception code=c0000005 flags=0 addr=0x54b5ba1 ip=054b5ba1 tid=0031 0031:trace:seh:raise_exception info[0]=00000000 0031:trace:seh:raise_exception info[1]=0000000c 0031:trace:seh:raise_exception eax=00000000 ebx=0ca127e0 ecx=0cc61d70 edx=0be10494 esi=0570ecc0 edi=0ca127e0 0031:trace:seh:raise_exception ebp=0033dbf8 esp=0033dbe0 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00010206 0031:trace:seh:call_stack_handlers calling handler at 0x971ac0 code=c0000005 flags=0 --- snip ---
-> FOLDERID_LocalAppDataLow
MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457%28v=vs.85%2...
Default Path: '%USERPROFILE%\AppData\LocalLow'
If you create that folder the game runs fine.
... and it's a dupe of bug 22896 (I'll refine that summary because many games suffer from this bug, google appdb).
$ wine --version wine-1.7.9-158-g33fa552
Regards
http://bugs.winehq.org/show_bug.cgi?id=35218
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |DUPLICATE
--- Comment #3 from Anastasius Focht focht@gmx.net --- ... and resolving dupe of bug 22896
*** This bug has been marked as a duplicate of bug 22896 ***
http://bugs.winehq.org/show_bug.cgi?id=35218
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #4 from Bruno Jesus 00cpxxx@gmail.com --- Closing.