Create a custom ES system able to launch games for many systems
-
I never progressed any further with it because I can't get it to load up in the Retropie menu. I'm tackling this today.
-
@meleu said in Create a custom ES system able to launch games for many systems:
https://retropie.org.uk/forum/topic/11499/change-es_systems-cfg-script
Wonderful! I have combined @TMNTturtlguy 's change ES system script with @meleu 's 'Custom ES System able to launch games for many systems. I have a very happy family right now.
Next: to see if I can combine symbolic links with actual games files so that multiple people in my house can play the same game without overwriting each others save games/save states.
-
Hi all,
The ability to create custom collections (effectively, custom systems) from within ES is now available.
Best.
-
@meleu said in Create a custom ES system able to launch games for many systems:
@tmntturtlguy said in Create a custom ES system able to launch games for many systems:
@meleu Is there anyway that we can point the custom folders with the symlinks to use a custom launching image?
We can think in a workaround for it, but currently not.
Maybe it's better to use the game specific launching image feature.
More info in the docs: https://retropie.org.uk/docs/Runcommand/#adding-custom-launching-images
So I know most users are now using the neat and easy custom collections in ES, but for anyone still using this symlink method, i have figured out how to do what I had originally asked in an early post, quoted above. Now when I launch a rom from my TMNT collection my TMNT launch screen appears based on the theme. When I launch a Mega Man game from my Mega Man collection, a Mega Man launch screen appears. If i launch the same game from the NES system, the NES launch screen appears! Here is how to do it, if anyone is interested:
-
Go to
/opt/retropie/configs/all/emulationstation
- Create a folder called “Launching”
- Place folders for each system within this folder, with the launching image inside that folder
- Example, place TMNT folder here with “Launching.png”
- Create a folder called “Launching”
-
Create a folder called “runcommand”
- Place a custom runcommand.sh file for each custom system here named with the custom system at the end:
- Example: runcommonandtmnt.sh
- Edit runcommand starting at line 915
- Place a custom runcommand.sh file for each custom system here named with the custom system at the end:
-
# look for custom launching images if [[ "$IS_SYS" -eq 1 ]]; then images+=( "$HOME/.emulationstation/Launching/TMNT/launching" ) Fi
-
Go to
/home/pi/bin/
- Add custom runcommand for each system
- Example: runcustomtmnt.sh
- Edit the last line to launch the custom runcommand from above
- Example:
-/opt/retropie/configs/all/emulationstation/runcommand/runcommandtmnt.sh 0 _SYS_ "$system" "$rom"
- Example:
- Add custom runcommand for each system
-
In putty, go to both new runcommand files and type the following:
- chmod +x nameofruncommand.sh
-
Go to your es_systems.cfg
- Modify your runcommand for each system to the new runcustom.sh you created. Example:
runcustomtmnt.sh
- Modify your runcommand for each system to the new runcustom.sh you created. Example:
So anyone crazy enough to have read through this without just leaving the post might want to know why I am still running the custom systems through the script and not using the newest updates to ES. There are a few reasons:
- I already went through all the work to set these up about 2 months prior to this being available in ES.
- Using this symlink script I am able to have a gamelist for each custom system. I can then modify my images and marquees to be different than in the standard system list.
- I now have the ability to have the custom launching images for each custom system.
- Bottom line, it is a lot more work for the same results, but I have a lot more flexibility to set them up exactly how I want them.
-
-
@tmntturtlguy That's very complicate! And we have the ES collections as @pjft mentioned. But of course that scripting provides much more flexibility ... You are so a kind of person... here we go!
You forget... there are other "entrypoints" as only the
runcommand.sh
as it's the "brain" of our RetroPie I would leave it untouched.I would do following:
You have already a bash-file that provides $rom (that's the runcustom.sh)
So you can identify the system by filepath...- Best method is to compare es_system.cfg rom filepathes with extraced one = 100% working methof
- Set the filepathes on your own script so /home/pi/roms/nes could be NES system
Next step...
As an example...
You identified it as SNES system
Then you extract the original launch-image for SNES system and temporarily move it somewhere and copy launch image of a custom system...To genereate a generel script you can use command line parametes like
-megaman
or-tmnt
....So for your MEGANMAN "system" in es_systems.cfg you set
<command>/home/pi/bin/runcustom.sh %ROM% -megaman</command>
and then create "usecases" for the parameters "-megaman" "-tmnt" "-mario".... within @meleu runcustom.sh script!
Last line reverts all back to normal!
-
@cyperghost Thanks as always for your kind and quick response to help me out!
I have a few questions for you as I am not fully understanding your instructions:
- In regards to the runcomand.sh file - Yes i understand it is the brain of running the roms. I have left the runcommand.sh in its original location and it is untouched. It still runs all the roms for the normal systems. The modified runcommands are moved to the
.emulationstation
folder, thus they will not be orverwritten, and I can simply delete them change my es_systems.cfg back to the original path for my custom systems. In theory, if anything does not function properly, I can simply revert back with no harm done. Do you see any issues with this thinking? - I have my full system setup, and don't plan to change how anything is executed outside of the retroarch files themselves. I have only modified the location in which the runcommand pulls the launch image. What if any are the downsides of doing this? All other runcommand functions are untouched and as it is the "brain" it should not see or execute any differently than the standard runcommand.
Now onto your solution, I think this might be more elegant than my attempt, however I am unclear on how it works.
Best method is to compare es_system.cfg rom filepathes with extraced one = 100% working methof
Set the filepathes on your own script so /home/pi/roms/nes could be NES system- what are you stating here? I don' t follow. are you moving the roms location? if i repath the roms folder, then i would no longer be launching the same rom from the original location, which defeats the purpose of @meleu's script. Please explain more if you have the time.
Last line reverts all back to normal!
- what do you mean here? Currently @meleu's runcustom.sh script tells to launch using the original runcommand for the rom in its original system folder. That is the end of the runcustom.sh and it turns everything over to the runcommand.sh file. How would I create a last line to set all back to normal in the runcustom.sh script?
Again, thank you for all of your help!
- In regards to the runcomand.sh file - Yes i understand it is the brain of running the roms. I have left the runcommand.sh in its original location and it is untouched. It still runs all the roms for the normal systems. The modified runcommands are moved to the
-
@TMNTturtlguy @cyperghost hello fellows!
IMHO you guys are going through a very complex/confusing way. I already have thought on a simpler solution for this, just give me a couple of days to implement and test, and then I'll let you know when it's ready. ;-) -
@tmntturtlguy Yes... sometimes I have two or three ideas together and it's a bit diffucult to explain.
So next attempt!
My idea is following. The launch images are fixed for each system. So a SNES ROM launches a SNES images. But it's your turn to decide what is the content of the picture ;)
What I mean with this?
Best method is to compare es_system.cfg rom filepathes with extraced one = 100% working methof
Set the filepathes on your own script so /home/pi/roms/nes could be NES systemThe runcostum script extracts ROM name and ROM system (Good work @meleu)
But I'm not sure if ROM $system equals all usecases.
For NES and SNES it may work ;) but to cover all usecases it would use the ROMs folder and compare location string with es_systems.cfg >> 100% working solution.But the $system should also work
Then you add following to
runcostum.sh
As I don't know the location of the custom-launch-images I use just the name megaman.jpg# Set custom lauching image mv "/opt/retropie/configs/$system/launching.jpg" "/opt/retropie/configs/$system/launching.jpg.org" cp megman.jpg "/opt/retropie/configs/$system/launching.jpg" # Start runcommand /opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ "$system" "$rom" # Revert back rm "/opt/retropie/configs/$system/launching.jpg" mv "/opt/retropie/configs/$system/launching.jpg.org" "/opt/retropie/configs/$system/launching.jpg"
With the parameter you can avoid to use megaman.jpg as hard coeded rather set general usecases ;)
-
@meleu Is this a solution I posted above is in your mind?
Hello my friend ;) -
@cyperghost To be honest I'm against this solution. If for some reason the user turns off the pi while emulator is running, it will mess his/her launching images configs and will lead to confusion.
Wait a little, it should be a way simpler than those workaround solutions... :-) -
@meleu Well .... yes ;) But it is simplier as @TMNTturtlguy solution to need one runcommand for just one system - as it uses a script that is already provided and has nothing to do with the original RetroPie config.
Again I will learn something new soon. Excite me ;)
-
@cyperghost @meleu thank you both for your time and efforts!
@meleu as is the usual case, you always have a much more elegant way of making my complex and messy round about ways of doing things work much better.
To both of you, you are both very kind, but I am not sure how many people out there this will help, I do appreciate your efforts, but please do not spend to much of your personal time working on something that might not benefit many people.
Thanks!
-
@tmntturtlguy said in Create a custom ES system able to launch games for many systems:
please do not spend to much of your personal time working on something that might not benefit many people.
haha! I hope it will be a very simple solution. You will not owe me anything because of it. :D
-
@tmntturtlguy The reason is, that I'll learn some tricks how to solve such usecases. It won't be a big thing to do but it's just a quesion of how elegant it can be done.
I think @meleu will also present a general solution that uses annother parameter to get use of several launching images.
-
Just to show anyone who is interested how this setup works, here is a video. Notice that in the Nintendo system, the marquee above the video the teenage mutant ninja turtles game logo, in the TMNT custom system, the marquee shows what system the game is from. Also note, i have edited the game names in the games list as well.
-
@cyperghost @TMNTturtlguy the simple solution I've found depends on the approval of this Pull Request with a little change in
runcommand.sh
(added two lines). Jools is not (yet) convinced that this usecase is worth it. If you guys have more arguments, try to comment something there. -
@meleu Thanks for doing this! I looked at the code and left a message there. Not sure what to say to convince him, hopefully he can watch my video above to see the outcome.
Looking at your modifications to the runcommand file, where do i place the custom launch image? That is not clear to me? I probably am just missing something.
Thanks for your efforts!
-
@tmntturtlguy said in Create a custom ES system able to launch games for many systems:
Looking at your modifications to the runcommand file, where do i place the custom launch image? That is not clear to me? I probably am just missing something.
Once that PR is merged, we can add a line or two in the
runcustom.sh
script and get the results we want! ;-)edit: let's wait if Jools will accept that and then I'll talk about the next step.
-
#fail
The PR wasn't merged. But I have a plan B, just give me one day (because I'm away from my raspi).
-
@meleu I think the solution should depend on the
runcustom.sh
only and it's able to recreate the same parametes as available from theruncommand.sh
But I understand the situation from BuzZ the usecases is really rare... And I would stick to the
custom-collections
To be honest I'm against this solution. If for some reason the user turns off the pi while emulator is running, it will mess his/her launching images configs and will lead to confusion.
Wait a little, it should be a way simpler than those workaround solutions... :-)Yes... on runcommand-onend.sh you check existance of file
/opt/retropie/configs/$system/launching.jpg.org
if it's available you rename it back...So you might see only one time a wrong picture ;) Maybe that's confusing ;)
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.