Adding additional events into ES
-
@RussellB this is really cool! To add your changes to ES, you will need to create a pull request against https://github.com/RetroPie/EmulationStation. So, if you haven't worked with Github before, these are the basic steps you need to follow:
- Fork ES repository in your Github user space.
- Clone ES repo in your system.
- Create a new branch naming it as you wish, e.g.:
game-system-select-events
- Apply changes in your cloned ES repository.
- Commit your changes and push them to Github
- Open a new pull request from the branch in your fork against
retropie:Master
, explaining what you did in the description and following whatever guidelines Retropie has. - Wait for your changes to be approved/merged. Be ready to do whatever changes are required until your code is considered fit for merging.
I know most of what I said here will make no sense if you haven't worked with git and gitHub before, in that case it is better to read something like https://product.hubspot.com/blog/git-and-github-tutorial-for-beginners before diving in.
Good luck!
-
(@svera, nice explanation on the how to ! )
Making these pull requests is very difficult, if you never done this before !
Even I have still trouble understanding it and doing this.
Before going though the process of a pull request, I think, it better to share you code first and make a tutorial for this.
That way more people can look at it and test it and get out the flaws or add ideas to it.
Otherwise you will stuck in doing multiple pull request on all changes you will be making.
My advice, just let it evolve until you are really satisfied, then make a pull request.
As I understand before, you didn't change things on Emulationstation, am I correct ?
So if you want to do a pull request you have to do a pull request to the part you want to integrate it to.If you are planning to do a pull request, it would be nice if you explain the whole process in this thread so everybody can learn from this.
I think @svera can be of more help with this, than I can. -
@folly I just cloned from here: https://github.com/RetroPie/EmulationStation.
I ended up changing six files. I'll post the changes here specifically shortly.
-
@russellb said in Adding additional events into ES:
@folly I just cloned from here: https://github.com/RetroPie/EmulationStation.
I ended up changing six files. I'll post the changes here specifically shortly.
Ok, modified the following files:
Scripting.h :
int fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2="", const std::string& arg3="");
Added a third string variable so I can send "system", "rom name", "game name" as unique parameters. I made it optional so as to not have to change every occurrence.
Scripting.cpp:
if (arg1.length() > 0) { script += " \"" + arg1 + "\""; if (arg2.length() > 0) { script += " \"" + arg2 + "\""; if (arg3.length() > 0) { script += " \"" + arg3 + "\""; } } }
Added putting the third parameter onto the call to the script.
ISimpleGameListView.cpp
#include "Scripting.h" . . . FileData* cursor = getCursor(); SystemData* system = this->mRoot->getSystem(); if (system != NULL) { Scripting::fireEvent("game-select", system->getName(), cursor->getFileName(), cursor->getName()); }
This is at the end of the ::input function to fire the "game-select" event
SystemView.cpp:
#include "Scripting.h" . . . if(config->isMappedLike("left", input) || config->isMappedLike("right", input) || config->isMappedLike("up", input) || config->isMappedLike("down", input)) listInput(0); Scripting::fireEvent("system-select", this->IList::getSelected()->getName(), "input"); if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("select", input) && Settings::getInstance()->getBool("ScreenSaverControls")) { mWindow->startScreenSaver(); mWindow->renderScreenSaver(); return true; }
This is at the end of the ::input function to fire the "system-select" event
ViewController.cpp:
#include "Scripting.h" . . . void ViewController::goToStart() { // If specific system is requested, go directly to the game list auto requestedSystem = Settings::getInstance()->getString("StartupSystem"); if("" != requestedSystem && "retropie" != requestedSystem) { for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++){ if ((*it)->getName() == requestedSystem) { goToGameList(*it); Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); return; } } // Requested system doesn't exist Settings::getInstance()->setString("StartupSystem", ""); } goToSystemView(SystemData::sSystemVector.at(0)); Scripting::fireEvent("system-select", SystemData::sSystemVector.at(0)->getName(), "gotostart"); }
This is the "system-select" event of selecting a system at startup
SystemScreenSaver.cpp:
#include "Scripting.h" . . . void SystemScreenSaver::startScreenSaver() . . . 3 points to call the event "screensaver-game-select"
I didn't want to put all the code here.
Please let me know if you have any questions.
RussellB
-
@russellb the best way to get feedback for your changes is by opening a pull request.
Don't clone from https://github.com/RetroPie/EmulationStation but from your fork, that should be https://github.com/<your github user name>/EmulationStation. Create a branch, make your changes there and push that branch back to https://github.com/<your github user name>/EmulationStation. Once that is done, go to https://github.com/RetroPie/EmulationStation/pulls and open a pull request of the branch in your fork against Retropie's master branch. Refer to my previous post if you need more details.
When you have created the pull request, the changes you made will be reviewed by Retropie's repository maintainers, and if there's something that can be improved they will drop you a comment in the pull request page. Once everything is fine, your changes will be merged against master.
-
-
@folly Ok! Will do.
-
"Like the sauce... it's in there!"
https://edgewatertech.wordpress.com/2008/08/25/web-20-like-prego-spaghetti-sauce-its-in-there/
RussellB (EnsignRutherford)
-
Yes I read your link.
Bottom line everything can be confusing some times.
Did I summarize correct ? ;-)If we can, we will help.
-
@folly, @svera - The pull request is now pending so let's see what happens.
While doing more testing I found a 'bug', at least what I think is a bug:
In ViewController.cpp if there is a startup system specified the event fires for that system. When the bash script gets the event it sets the marquee to the system, e.g. Atari Classics.
The problem here is the user interface shows the "Atari Classics" marquee, NOT "720 Degrees" which is the first game selected.
I'm missing the "game-select" event for when a startup system is specified. For my purposes, it's a bug and I need to figure out how to get the "current game" in ViewController.cpp or where the first game is set during startup.
It's not REALLY a bug as everything works as was designed. I just want to find the spot to fire that event so the bash scripts can capture it too. The bash script can decide to either show the game marquee or the system marquee. I'd rather it there than in the C++ code.
-
@folly, @svera Ok I figured it out. Need to add another parameter to game-select and specify "requestedgame". This gives the bash scripts an option to either display the requested game logo or the system logo when a startup system is specified.
I'm going to have to redo my pull request.
@svera, Can I just cancel it and redo it?
-
Done!
-
I am following what you are doing in the pull.
Curious how it goes. -
@russellb you don't need to close and reopen the pull request every time you do changes in the code, just commit and push those changes and the pull request will be updated automatically.
-
-
@svera @RussellB do you know if this one ever made it, specifically the new game-select and system-select event scripts. I did just try the latest 4.8 RetroPie on a Pi 4 but no luck. game-start works fine as it did before , just not these two new ones. They would be super helpful to have for the integration of Pixelcade arcade marquees with RetroPie .
The two events are listed also in the docs https://retropie.org.uk/docs/EmulationStation/#scripting
Thanks!
Al
-
-
@mitu thanks for the quick reply, I just downloaded the latest 4.8 vanilla info from retropie.org.uk for a Pi 4 but I did not do the update, will give that a shot and report back
-
@mitu that did the trick! thanks again!
What i'll do is add a check to the Pixelcade installer script to do that.
I can dig around the RetroPie update script but do you know if there is a way to check the ES version from bash. If so, then I can just check if the user has what is needed and if not, kick off the updater.
-
@mitu I can grep the output of ./emulationstation -h to get the version so that'll work for Pixelcade script
Version 2.11.0rp, built Dec 10 2022 - 12:26:20
would you happen to know what minimum version of ES has the new scripts (game-select and system-select)
-
as an fyi, the vanilla 4.8 download has ES 2.10.1rp and then after updating from the RetroPie updater, it's 2.11.0rp so I'll use a minimum required of 2.11 for now unless you know different, thanks again
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.