clementgallet / libTAS

GNU/Linux software to (hopefully) give TAS tools to games
GNU General Public License v3.0
496 stars 57 forks source link

Midnight club 2 demo thinks its resource files don't exist #242

Closed InfamousKnight closed 9 months ago

InfamousKnight commented 5 years ago

Before I begin, I want to say I made more progress with this game than cat planet in terms of functionality. This one doesn't show a crash log. Make sure to set a virtual screen in winetricks. Otherwise it will go fullscreen. And we don't want that.

`[sean@sean-pc ~]$ libTAS Interim commit bf6b209 built on 2019-06-21 qt5ct: using qt5ct plugin qt5ct: D-Bus global menu: no qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 7616, resource id: 8401109, major code: 40 (TranslateCoords), minor code: 0 ERROR: ld.so: object '/usr/bin/libtas32.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored. ERROR: ld.so: object '/usr/bin/libtas32.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored. Attempt 1: Couldn't connect to socket. Attempt 2: Couldn't connect to socket. [libTAS f:0] Thread 0 (main) Skipping libtas init Attempt 3: Connected. 0009:err:module:load_builtin_dll failed to load .so lib for builtin L"l3codeca.acm": libmpg123.so.0: cannot open shared object file: No such file or directory Installed bink gfxLoadImage support. mcConfig:AutoDetectSku - product code 'SLUS-20209' 0009:fixme:win:EnumDisplayDevicesW ((null),0,0x34f578,0x00000000), stub! 0009:fixme:d3d:wined3d_guess_card No card selector available for card vendor 0000 (using GL_RENDERER "llvmpipe (LLVM 8.0, 256 bits)"). 0009:err:d3d:wined3d_adapter_find_polyoffset_scale PolygonOffset scale factor detection failed, using fallback value 2^23. [libTAS f:6] Thread 2124 OpenGL vendor: VMware, Inc. [libTAS f:6] Thread 2124 OpenGL renderer: llvmpipe (LLVM 8.0, 256 bits)

City=no_city TOD=midnight Weather=clear RaceName=(none) RaceType=roam TeamMode=melee WeaponMode=none Traffic=4 Peds=4 Cops=yes Layout=single Props on, Traffic on, AI on, Peds on, CPVs on, Resources off Player #1: vp_civica Palette: 0 Team: undecided Controller: 0 Local Controller: 0 View: 0

Warning: LogOneFile(psx2icon/iconview.psi) failed! ARGS: mc2_demo.exe -path=. -archive=assets_d.dat 'assets_d.dat' is optimized archive. assets_d.dat: 12888 files in central directory (206848 bytes + 157696 string heap = 364544 total). Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking:: hookman (Blog) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Stephane) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Primo) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Julie) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Ian) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Farid) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Parfait) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Shing) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Ricky) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Zen) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Haley) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Nikko) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Kenichi) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Makoto) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (WorldChampTokyo) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (WorldChampParis) to unlock does not exist, ignoring rule. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: Progress manager is disabled from now on. [libTAS f:6] Thread 2076 (main) ERROR: Unsupported stream direction 1 [libTAS f:6] Thread 2076 (main) ERROR: Unsupported stream direction 1 terminate called after throwing an instance of 'libtas::ThreadExitException' wine: Assertion failed at address 0xf7ffcdf9 (thread 002e), starting debugger... 002e:err:seh:start_debugger Couldn't start debugger ("winedbg --auto 8 200") (87) Read the Wine Developers Guide on how to set up winedbg or another debugger 002e:err:seh:raise_exception Exception frame is not in stack limits => unable to dispatch exception. terminate called recursively terminate called recursively Got unknown message!!! ` So from the looks of it, it seems like some file handles have not been hooked?

clementgallet commented 5 years ago

Try disabling Recycle threads.

InfamousKnight commented 5 years ago

Ok, now a black screen appears. Attempt #1 connects now. Like before, it goes up 6 frames. That long list of "hookmen" is probably because its a demo and they stripped those files out. Ill send out the log later if you need it. So excited to getting this to work! Im grateful that this much progress has been made.

Anyways, I did set driver to opengl and Im now sure if thats the problem or how to revert it in winetricks.

On Mon, Jun 24, 2019, 7:57 AM Clément Gallet notifications@github.com wrote:

Try disabling Recycle threads.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/clementgallet/libTAS/issues/242?email_source=notifications&email_token=AAT4W4NCEHQJ4AECBA3A2HDP4CZCPA5CNFSM4H2ZSL22YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYMVY2I#issuecomment-504978537, or mute the thread https://github.com/notifications/unsubscribe-auth/AAT4W4MN2IR2UF4KXGYCRUTP4CZCPANCNFSM4H2ZSL2Q .

InfamousKnight commented 5 years ago

Running it a second time with disable recycle threads, and it connects on Attempt #2 Heres the log:

[sean@sean-pc ~]$ libTAS Interim commit bf6b209 built on 2019-06-21 qt5ct: using qt5ct plugin qt5ct: D-Bus global menu: no qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 7176, resource id: 8395112, major code: 40 (TranslateCoords), minor code: 0 ERROR: ld.so: object '/usr/bin/libtas32.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored. ERROR: ld.so: object '/usr/bin/libtas32.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored. Attempt 1: Couldn't connect to socket. [libTAS f:0] Thread 0 (main) Skipping libtas init Attempt 2: Connected. 0009:err:module:load_builtin_dll failed to load .so lib for builtin L"l3codeca.acm": libmpg123.so.0: cannot open shared object file: No such file or directory Installed bink gfxLoadImage support. mcConfig:AutoDetectSku - product code 'SLUS-20209' 0009:fixme:win:EnumDisplayDevicesW ((null),0,0x34f578,0x00000000), stub! 0009:fixme:d3d:wined3d_guess_card No card selector available for card vendor 0000 (using GL_RENDERER "llvmpipe (LLVM 8.0, 256 bits)"). 0009:err:d3d:wined3d_adapter_find_polyoffset_scale PolygonOffset scale factor detection failed, using fallback value 2^23. [libTAS f:6] Thread 1428 OpenGL vendor: VMware, Inc. [libTAS f:6] Thread 1428 OpenGL renderer: llvmpipe (LLVM 8.0, 256 bits)

City=no_city TOD=midnight Weather=clear RaceName=(none) RaceType=roam TeamMode=melee WeaponMode=none Traffic=4 Peds=4 Cops=yes Layout=single Props on, Traffic on, AI on, Peds on, CPVs on, Resources off Player #1: vp_civica Palette: 0 Team: undecided Controller: 0 Local Controller: 0 View: 0

Warning: LogOneFile(psx2icon/iconview.psi) failed! ARGS: mc2_demo.exe -path=. -archive=assets_d.dat 'assets_d.dat' is optimized archive. assets_d.dat: 12888 files in central directory (206848 bytes + 157696 string heap = 364544 total). Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking:: hookman (Blog) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Stephane) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Primo) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Julie) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Ian) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Farid) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Parfait) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Shing) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Ricky) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Zen) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Haley) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Nikko) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Kenichi) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (Makoto) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (WorldChampTokyo) to unlock does not exist, ignoring rule. Warning: mcUnlocking:: hookman (WorldChampParis) to unlock does not exist, ignoring rule. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: mcUnlocking::BuildCondition: hookman zen does not exist, using bogus default value instead. Warning: Progress manager is disabled from now on. [libTAS f:6] Thread 1371 (main) ERROR: Unsupported stream direction 1 [libTAS f:6] Thread 1371 (main) ERROR: Unsupported stream direction 1 0009:err:dmloader:IDirectMusicLoaderImpl_SetObject : could not attach stream to file L"C:\windows\system32\drivers\gm.dls", make sure it exists 0009:err:winediag:MIDIMAP_drvOpen No software synthesizer midi port found, Midi sound output probably won't work. 0009:fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath (0x44b6398)->(1, 128, 0, 0x44b6564): semi-stub 0009:fixme:dmime:IDirectMusicAudioPathImpl_Activate (0x44b73e8, 0): stub 0009:fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath (0x44b6398)->(1, 64, 1, 0x8536bc): semi-stub 0009:fixme:dmime:IDirectMusicAudioPathImpl_Activate (0x44b7940, 1): stub 0009:fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath (0x44b6398)->(1, 64, 1, 0x853adc): semi-stub 0009:fixme:dmime:IDirectMusicAudioPathImpl_Activate (0x44b7eb8, 1): stub 0009:fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath (0x44b6398)->(1, 64, 1, 0x853efc): semi-stub 0009:fixme:dmime:IDirectMusicAudioPathImpl_Activate (0x44b8450, 1): stub 0009:fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath (0x44b6398)->(1, 64, 1, 0x85431c): semi-stub 0009:fixme:dmime:IDirectMusicAudioPathImpl_Activate (0x44b89b0, 1): stub Agesnd: Driver Stopped Error: milesSystem::SetZipFile - Cannot mount 'streams_pc.dat' as zipfile Starting Network... I am at 127.12.34.56:9741 *****Changing State: from Invalid to Invalid mcGame:Execute - kDebugLevel 0

Start loading movie Font list is empty Available memory: 47.459 M 'streams_d.dat' is optimized archive. streams_d.dat: 615 files in central directory (10240 bytes + 20480 string heap = 30720 total). Prefix compression reduces name heap to 6006 bytes Compressing name heap down to 4553 mcMoviePlayer:Play - playing 'rockstar.pss' binkPlayer::Play - 1 audio tracks in file

Now it seems like some sound issue?

On Mon, Jun 24, 2019, 8:17 AM Sean Morden infamousbytes@gmail.com wrote:

Ok, now a black screen appears. Attempt #1 connects now. Like before, it goes up 6 frames. That long list of "hookmen" is probably because its a demo and they stripped those files out. Ill send out the log later if you need it. So excited to getting this to work! Im grateful that this much progress has been made.

Anyways, I did set driver to opengl and Im now sure if thats the problem or how to revert it in winetricks.

On Mon, Jun 24, 2019, 7:57 AM Clément Gallet notifications@github.com wrote:

Try disabling Recycle threads.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/clementgallet/libTAS/issues/242?email_source=notifications&email_token=AAT4W4NCEHQJ4AECBA3A2HDP4CZCPA5CNFSM4H2ZSL22YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYMVY2I#issuecomment-504978537, or mute the thread https://github.com/notifications/unsubscribe-auth/AAT4W4MN2IR2UF4KXGYCRUTP4CZCPANCNFSM4H2ZSL2Q .

clementgallet commented 5 years ago

It looks like it is uncompressing some archive. You may need to disable Prevent writing to disk.

You are pasting a log, but you didn't say what is going on. Is the game crashing, or softlocking? Can you frame advance normally?

Also, wine is itself outputting a lot of messages. In the future, you should run the game natively with wine, and print here what differs between native wine and libTAS.

InfamousKnight commented 5 years ago

Its softlocking. I cant frame advance. It only goes up 6 frames. Running it natively works.

And how would I output a backtrace with wine?

InfamousKnight commented 5 years ago

Btw, I have tried disabling prevent writing to disk, and it still softlocked 6 frames in.

Also, if I run wine [exe path] to midnight club 2 demo, it would crash there outside of libtas. Double clicking the icon opens it just fine...

InfamousKnight commented 5 years ago

Alright, it still advances 6 frames, then softlocks. Ends with Playing some audio file, which never seems to happen. I made sure alsa was enabled in winetricks as well as virtual desktop disabled. Like I said, if I run wine through the terminal, it will give an error. Double clicking the icon works fine though.

Any ideas?

clementgallet commented 5 years ago

I tested it, and could get past the 6 frames using Runtime > Debug > Uncontrolled time. It looks like the event loop and the rendering code are in separate threads, so there's a problem of time handling.

InfamousKnight commented 5 years ago

I tested it with the above settings too, and it works! I would imagine it would desync if I made a movie with it though. It runs pretty good too on my machine. Much easier to control with libtas where native its very sensitive.

InfamousKnight commented 5 years ago

To get further past 6 frames without debug, Runtime-timetracking-clockgettime and sdl-getticks will make it go up 3 more frames and then softlock by changing the main thread. That's as far as I got.

clementgallet commented 5 years ago

It runs by setting Runtime > Debug > Keep main first thread and Runtime > Time tracking > clock_gettime(). There are still problems with mouse inputs, and savestates crash

InfamousKnight commented 5 years ago

Thanks, works well on my end. Should we close the issue now?

InfamousKnight commented 4 years ago

Looking at this again, and the demo doesn't even run outside of libtas

InfamousKnight commented 3 years ago

Bump libtas version 0444e5fd and running this again with the settings above, the OSD is completely missing, and inputs are not being registered at all. Including hotkeys like frame advance. Enabling Uncontrolled time has the game run fine as before.

Using wine 5.0 on Ubuntu 20.04

clementgallet commented 9 months ago

Wine is at unsupported state, due to how difficult it is to debug, as well as to maintain through updates.