RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login

    Adding additional events into ES

    Scheduled Pinned Locked Moved Ideas and Development
    development
    25 Posts 5 Posters 3.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      RussellB @Folly
      last edited by

      @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.

      R 1 Reply Last reply Reply Quote 0
      • R
        RussellB @RussellB
        last edited by

        @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

        S F 2 Replies Last reply Reply Quote 1
        • S
          svera @RussellB
          last edited by

          @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.

          1 Reply Last reply Reply Quote 2
          • F
            Folly @RussellB
            last edited by

            @russellb

            C++ isn't my strongest point yet, so I guess a bit here and there.
            But overall it looks nice !

            I think you have to go through @svera 's recommendations.
            Just fork it to your own github, make the changes and do a pull request.

            R 1 Reply Last reply Reply Quote 0
            • R
              RussellB @Folly
              last edited by

              @folly Ok! Will do.

              R 1 Reply Last reply Reply Quote 1
              • R
                RussellB @RussellB
                last edited by

                @folly, @svera

                "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)

                F 1 Reply Last reply Reply Quote 0
                • F
                  Folly @RussellB
                  last edited by Folly

                  @russellb

                  Yes I read your link.
                  Bottom line everything can be confusing some times.
                  Did I summarize correct ? ;-)

                  If we can, we will help.

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    RussellB @Folly
                    last edited by RussellB

                    @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.

                    R 1 Reply Last reply Reply Quote 2
                    • R
                      RussellB @RussellB
                      last edited by

                      @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?

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        RussellB @RussellB
                        last edited by

                        Done!

                        F S 2 Replies Last reply Reply Quote 0
                        • F
                          Folly @RussellB
                          last edited by

                          @russellb

                          I am following what you are doing in the pull.
                          Curious how it goes.

                          1 Reply Last reply Reply Quote 0
                          • S
                            svera @RussellB
                            last edited by

                            @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.

                            alinkeA 1 Reply Last reply Reply Quote 0
                            • mituM mitu referenced this topic on
                            • alinkeA
                              alinke @svera
                              last edited by

                              @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

                              mituM 1 Reply Last reply Reply Quote 0
                              • mituM
                                mitu Global Moderator @alinke
                                last edited by

                                @alinke The events are in - what version (exactly) of RetroPie and EmulationStation are you using ? Make sure you have run an update to have the latest version of EmulationStation.

                                alinkeA 1 Reply Last reply Reply Quote 0
                                • alinkeA
                                  alinke @mitu
                                  last edited by

                                  @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

                                  alinkeA 1 Reply Last reply Reply Quote 0
                                  • alinkeA
                                    alinke @alinke
                                    last edited by

                                    @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.

                                    alinkeA 1 Reply Last reply Reply Quote 0
                                    • alinkeA
                                      alinke @alinke
                                      last edited by

                                      @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)

                                      alinkeA 1 Reply Last reply Reply Quote 0
                                      • alinkeA
                                        alinke @alinke
                                        last edited by

                                        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

                                        alinkeA 1 Reply Last reply Reply Quote 0
                                        • alinkeA
                                          alinke @alinke
                                          last edited by

                                          updated the Pixelcade installer script so should be good now, thanks again !

                                          https://pixelcade.org/pi-install/

                                          1 Reply Last reply Reply Quote 1
                                          • First post
                                            Last post

                                          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.