ruanformigoni / gameimage

Gameimage - FlatImage Game Packer
Apache License 2.0
267 stars 2 forks source link

Multiple exes within an appimage #18

Closed Blad3forc3 closed 6 months ago

Blad3forc3 commented 1 year ago

What is the best way to run an appimage with multiple exes inside? For instance there is a menu that pops up as the default exe that then has 5 options (5 different exes to run) when selected but when running the launcher within the appimage and selecting one of any 5 these dont run.

ruanformigoni commented 1 year ago

Hi @Blad3forc3, you can select the file that is executed by default with:

./my-cool-game.AppImage --gameimage-cmd='{wine} {appd}/path/to/my/exec'

Next time you click or run through the terminal, It'll execute the selected exe. More info about it here.

Blad3forc3 commented 1 year ago

I have got these 5 files in these locations in the appimage

drive_c/GoG Games/Tales of Monkey Island/Tales of Monkey Island 1/MonkeyIsland101.exe drive_c/GoG Games/Tales of Monkey Island/Tales of Monkey Island 2/MonkeyIsland102.exe drive_c/GoG Games/Tales of Monkey Island/Tales of Monkey Island 3/MonkeyIsland103.exe drive_c/GoG Games/Tales of Monkey Island/Tales of Monkey Island 4/MonkeyIsland104.exe drive_c/GoG Games/Tales of Monkey Island/Tales of Monkey Island 5/MonkeyIsland105.exe

Can i accommodate a popup menu in the apprun script to pop up when running the appimage to automatically run one of the five i choose each time i run the appimage?

On Sun, 26 Feb 2023 at 20:41, Ruan Formigoni @.***> wrote:

Hi @Blad3forc3 https://github.com/Blad3forc3, you can select the file that is executed by default with:

./my-cool-game.AppImage --gameimage-cmd='{wine} {appd}/path/to/my/exec'

Next time you click or run through the terminal, It'll execute the selected exe. More info about it here https://github.com/ruanformigoni/gameimage#launch-command.

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1445461864, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIOZPRVTKEKFI2TYKOOLWZO5XNANCNFSM6AAAAAAVILR2W4 . You are receiving this because you were mentioned.Message ID: @.***>

Blad3forc3 commented 1 year ago

A follow up to this. If a game has a launcher executable and you select an option to run another executable then this just doesnt run.

As an example house of the dead 3 requires you to run a launcher exe in the top directory to actually run the main games executable but as the executable resides in a bin folder the game fails to run. The main game executable will not run directly

Blad3forc3 commented 1 year ago

Any update on this Ruan? I have a few appimages that refuse to run because they require to be run from a launcher which then executes another exe within the game dir but wont run directly

ruanformigoni commented 1 year ago

Yes, I'm working on an optional launcher, which also includes a tray icon for you to know the application is running.

Blad3forc3 commented 1 year ago

Wonderful Ruan!! I look forward to it

On Thu, 6 Apr 2023 at 19:06, Ruan Formigoni @.***> wrote:

Yes, I'm working on an optional launcher, which also includes a tray icon for you to know the application is running.

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1499434811, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIO7RZ2FJYP37BNTCDCTW74AY5ANCNFSM6AAAAAAVILR2W4 . You are receiving this because you were mentioned.Message ID: @.***>

ruanformigoni commented 1 year ago

A preview of how it is going:

screenshot-165

Would this solve your issue?

Blad3forc3 commented 1 year ago

Not sure. The problem is caused by not being able to run certain executables directly. Some have a launcher that needs to be run and then the launcher runs the executable after. At this point in a created appimage it fails for some reason because the launcher runs but when it calls the different exe (the one that won't run directly) to run the actual game the appimage fails

Blad3forc3 commented 1 year ago

I'm having great success building wine appimages but i am still getting quite a few that demand a launcher to run then hook another executable to run another exe within the appimage for the main game. Looking at the above method you posted I would only be able to run the launcher still and unless things have changed whilst running the launcher within the appimage, the appimage would fail when the launcher executable hooks the main exe to initiate the actual game.

As an example try this game within an appimage for wine

https://www.myabandonware.com/game/toca-championship-racing-a4t

The rip version. It will run the menu but fail when the launcher tries to inject the main exe within the appimage

Try to run tourcars.exe and it will error saying you cant run it directly and to run setup.exe which will run but when you start the main program from it within the appimage it will just silently fail to load

ruanformigoni commented 1 year ago

Hi @Blad3forc3, this might be a 'working directory' issue, here's an test build of the launcher release if you want to try it out. I'll look into this issue on the referred game. Thanks for the feedback!

Blad3forc3 commented 1 year ago

Hi Ruan.

I have tried your test build with a clean prefix etc. and the setup runs but when you select play it still fails

Blad3forc3 commented 1 year ago

Any update on this? I have tried the latest game image and a game that requires a launcher to run which then calls an exe to run the actual game (which can't be run directly) still fails on a built appimage

ruanformigoni commented 1 year ago

Hi @Blad3forc3 , not yet. I'm a bit busy this last couple of months, will come back to this whenever possible.

Blad3forc3 commented 1 year ago

Hi Ruan, Is there any update on this? I have tried your latest gameimage and if the game requires you to run a launcher but then automatically hooks the main executable the appimage will fail.

ruanformigoni commented 1 year ago

Hi @Blad3forc3 , I have tried to reproduce this issue a bit. Here's what I got:

Is this the issue that your are facing?

Blad3forc3 commented 1 year ago

Yes, I am getting a different file is missing to yours but it still fails running.

On Sat, 11 Nov 2023 at 12:45, Ruan Formigoni @.***> wrote:

Hi @Blad3forc3 https://github.com/Blad3forc3 , I have tried to reproduce this issue a bit. Here's what I got:

  • I installed toca with win98 compatibility
  • No dxvk and no vkd3d
  • Installed dgvoodoo2 https://www.pcgamingwiki.com/wiki/DgVoodoo_2#Linux_.28Wine.29_configuration
  • Run setup.exe
  • Click in play (the game opened)
  • I packaged the game on an AppImage and set the setup.exe launcher as the default .exe
  • When I run the image it shows the launcher, I press play, it tries to open, but crashes with CPYRIGHT.BMP could not be loaded (it was trying from the original install path, instead of the appimage one).

Is this the issue that your are facing?

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1806807580, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIO3Z6ZHUJUZO6EAJZLTYD5XNDAVCNFSM6AAAAAAVILR2W6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMBWHAYDONJYGA . You are receiving this because you were mentioned.Message ID: @.***>

ruanformigoni commented 1 year ago

I managed to make it work as a portable AppImage with an external prefix

That should do it, however now you have to backup both the appimage and the prefix. It should work with other package methods besides prefix, but my guess is that it does not due to this issue.

Blad3forc3 commented 1 year ago

Ive followed your list and it does indeed get passed the error but now it just crashes after the first codemasters video

On Sat, 11 Nov 2023 at 14:06, Ruan Formigoni @.***> wrote:

I managed to make it work as a portable AppImage with an external prefix

  • Export the package type as prefix

    export GIMG_PKG_TYPE=prefix

  • Start with a fresh prefix (erase build/AppDir/app/wine or the entire build directory)

  • Fetch tools

  • Run configure phase to initialize the wine prefix

  • Select win32

  • Do not install dxvk nor vkd3d

  • Run wine winecfg and select windows98 compatibility mode

  • Type continue to finish the configure phase

  • Copy the install folder to inside build/AppDir/app/wine/drive_c

  • Export the install folder location as an extra rom dir, inside drive_c

    Execute this command in the same folder as the rom and icon folders

    export GIMG_DIR_ROM_EXTRA="\"$(pwd)/build/AppDir/app/wine/drive_c/tourcar\""

  • Install the game from inside the drive_c path, drive_c/tourcar/setup.exe

  • Drop the dgvoodoo2 D3DImm.dll and DDraw.dll on the installed folder, drive_c/Codemast/TourCar/

  • Re-execute the configure phase and run wine winecfg

  • Add the native overrides for d3dimm and ddraw in winecfg

  • Build and use drive_c/Codemast/TourCar/setup.exe and the default .exe

That should do it, however now you have to backup both the appimage and the prefix. It should work with other package methods besides prefix, but my guess is that it does not due to this https://gitlab.com/formigoni/gameimage/-/issues/21 issue.

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1806826244, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIO57YCISGSKDH6CD75DYD6A7PAVCNFSM6AAAAAAVILR2W6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMBWHAZDMMRUGQ . You are receiving this because you were mentioned.Message ID: @.***>

ruanformigoni commented 1 year ago

Does it have info about the error on the terminal, or in a pop-up window?

Blad3forc3 commented 1 year ago

When running it from a terminal this is the complete output i get:

/tmp/staticx-cFMhkL/libc.so.6: version `GLIBC_2.38' not found (required by /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so) Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so GPU Vendor: opengl vendor string: nvidia corporation VK_ICD_FILENAMES: LIBGL_DRIVERS_PATH: /tmp/.mount_wineNWwjQg/usr/lib/i386-linux-gnu/dri:/tmp/.mount_wineNWwjQg/usr/lib/x86_64-linux-gnu/dri:

Written vulkan info to /media/ade/Temp/Staging32Toca/build/.TOCA Touring Cars.config/wine/vulkan.log wine: '/tmp/.mount_wineNWwjQg/usr/bin/wine setup.exe' linux-gate.so.1 (0xf7f18000) libapprun_hooks.so => /tmp/.mount_wineNWwjQg/lib/i386/libapprun_hooks.so (0xf7f05000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7c00000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7ed2000) lib/ld-linux.so.2 (0xf7f1a000) 002c:err:wineboot:process_run_key Error running cmd L"C:\windows\system32\winemenubuilder.exe -a -r" (126)

On Sat, 11 Nov 2023 at 14:47, Ruan Formigoni @.***> wrote:

Does it have info about the error on the terminal, or in a pop-up window?

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1806835385, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIO6AA7SSREKLWC2CWS3YD6FXVAVCNFSM6AAAAAAVILR2W6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMBWHAZTKMZYGU . You are receiving this because you were mentioned.Message ID: @.***>

ruanformigoni commented 1 year ago

That is odd, I've re-created the steps again and it worked. Maybe it's an nvidia or glibc issue. Does it work outside the appimage?

Try to kill all wine stuff with pkill -f ".*\.exe"

Try to do this on the build directory:

export WINE="$(pwd)/build/AppDir/usr/bin/wine"
export WINEPREFIX="$(pwd)/build/.toca.AppImage.config/wine"
cd $WINEPREFIX/drive_c/Codemast/TourCar
"$WINE" setup.exe

Also, try to disable the launcher to check if the issue with glibc goes away GIMG_LAUNCHER_DISABLE=1 ./toca.AppImage

Blad3forc3 commented 1 year ago

The glibc error does go away if i execute GIMG_LAUNCHER_DISABLE=1

I may have not followed your directions correctly at his particular line.

Export the install folder location as an extra rom dir, inside drive_c

Execute this command in the same folder as the rom and icon folders

export GIMG_DIR_ROM_EXTRA="\"$(pwd)/build/AppDir/app/wine/drive_c/tourcar\""

IS this command executed inside the drive_c folder within the wine prefix or in the same folder as the rom and icon folders?

ruanformigoni commented 1 year ago

You should run this command in the same folder with the build, rom, icon folders. Try to leave the rom folder empty, then it'll only show the files inside the extra folder. Also if you have installed the .exe from the rom folder, create the prefix again and start over the steps (with a new prefix).

Remember to erase build/.toca.AppImage.config

Blad3forc3 commented 1 year ago

Not having any luck here. Most of the time it crashes after the first video and sometimes it gets to the title screen just before the menu then crashes

ruanformigoni commented 1 year ago

Could you try this one ?

Blad3forc3 commented 1 year ago

Thanks ruan. Yes this does work here too.

I don't want to ask but i have a cd image mounted of the game and could you do a step by step on how to do it from the start? I'd like to install the game from the cd image because with your appimage it will only let you select a link game not a solo game. Probably something to do with it being a rip? Also if you could i could also try a few other games this way that refuse to start Thanks

ruanformigoni commented 1 year ago

Good to know that it worked! I just tried the dvd. It works, but there is only the linkup option as well. There are other people with this issue in the link, I tried to simulate mounting the cd with cdemu, it did not fix the issue, even when I ran the setup.exe inside the cdemu mount.

ruanformigoni commented 1 year ago

Fixed it!

Screenshot_20231111_153004

I included the path that cdemu mounted the image with:

export GIMG_DIR_ROM_EXTRA="\"/run/media/ruan/TOURING_CAR\""

And ran the installer from there. Now, everytime the game launches, I'll look for the files in the drive it was installed from, in my case it was "I:". So one needs to make sure to mount the image and configure use to use the correct letter for it. That could be done in a script, I believe you've tried something like this before in #3

Blad3forc3 commented 1 year ago

Great Ruan!

You might have to write a step by step again though as I've lost track of what to do where :)

On Sat, 11 Nov 2023, 18:38 Ruan Formigoni, @.***> wrote:

Fixed it!

[image: Screenshot_20231111_153004] https://user-images.githubusercontent.com/18180693/282259600-ad762557-c673-4699-91db-fcc2a69e5220.png

I included the path that cdemu mounted the image with:

export GIMG_DIR_ROM_EXTRA="\"/run/media/ruan/TOURING_CAR\""

And ran the installer from there. Now, everytime the game launches, I'll look for the files in the drive it was installed from, in my case it was "I:". So one needs to make sure to mount the image and configure use to use the correct letter for it. That could be done in a script, I believe you've tried something like this before in #3 https://github.com/ruanformigoni/gameimage/issues/3

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1806887513, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIO72TE44N4QZ3TIZW43YD7AYTAVCNFSM6AAAAAAVILR2W6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMBWHA4DONJRGM . You are receiving this because you were mentioned.Message ID: @.***>

ruanformigoni commented 1 year ago

I'll try to streamline this process, so you would mark a checkbox that you'd like to mount an image every time wine appimage is started (and select the path to where it is). I'll also try automate the installation of dgvoodoo2, so you can just install it as with dxvk and vkd3d. Ideally this should suffice to simplify this process.

Some other notes here:

Blad3forc3 commented 1 year ago

That sounds great. It would be good if you could select the package type and the wine type as well as mount a cd image. I prefer to have the cd image within the appimage so it's all in one package and it will automatically mount it from within the appimage when executing the appimage. Am I right in saying that as long as I use this command : export GIMG_PKG_TYPE=prefix I should be able to make games like touring cars that require a launcher that hooks an exe to run the actual game should work?

On Sat, 11 Nov 2023, 19:09 Ruan Formigoni, @.***> wrote:

I'll try to streamline this process, so you would mark a checkbox that you'd like to mount an image every time wine appimage is started (and select the path to where it is). I'll also try automate the installation of dgvoodoo2, so you can just install it as with dxvk and vkd3d. Ideally this should suffice to simplify this process.

— Reply to this email directly, view it on GitHub https://github.com/ruanformigoni/gameimage/issues/18#issuecomment-1806894588, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOLIO7WLM5DQ7SAKZL6H6TYD7EOHAVCNFSM6AAAAAAVILR2W6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMBWHA4TINJYHA . You are receiving this because you were mentioned.Message ID: @.***>

ruanformigoni commented 1 year ago

The fix here was of two issues.

That is what I'll try to do, to include the iso in the AppImage and automatically mount it to a fixed letter (both on install and after packaging). That way the game will find the required files in the "cd" drive. One interesting thing is that I managed to make it work without cdemu as well, one less dependency to use. I can just create a drive in wine that points to a folder (of extracted iso contents) or use fuseiso to mount it.

Blad3forc3 commented 1 year ago

"One interesting thing is that I managed to make it work without cdemu as well, one less dependency to use. I can just create a drive in wine that points to a folder (of extracted iso contents) or use fuseiso to mount it"

Some older games have a data layer and a cd audio layer. These images are generally stored as cue/bin files. The game Touring Cars is a good example of this. If you just extract the data to a folder you will lose the cd audio if you mount that as the cd drive for the game.

just a FYI

ruanformigoni commented 6 months ago

Closing this issue as it refers to #53.