• Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
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 @RussellB
    last edited by 17 May 2021, 01:12

    @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 17 May 2021, 07:31 Reply Quote 1
    • S
      svera @RussellB
      last edited by 17 May 2021, 07:31

      @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 17 May 2021, 08:21

        @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 17 May 2021, 12:09 Reply Quote 0
        • R
          RussellB @Folly
          last edited by 17 May 2021, 12:09

          @folly Ok! Will do.

          R 1 Reply Last reply 17 May 2021, 16:17 Reply Quote 1
          • R
            RussellB @RussellB
            last edited by 17 May 2021, 16:17

            @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 17 May 2021, 18:32 Reply Quote 0
            • F
              Folly @RussellB
              last edited by Folly 17 May 2021, 18:32

              @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 17 May 2021, 19:56 Reply Quote 0
              • R
                RussellB @Folly
                last edited by RussellB 17 May 2021, 19:56

                @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 18 May 2021, 15:12 Reply Quote 2
                • R
                  RussellB @RussellB
                  last edited by 18 May 2021, 15:12

                  @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 19 May 2021, 01:30 Reply Quote 0
                  • R
                    RussellB @RussellB
                    last edited by 19 May 2021, 01:30

                    Done!

                    F S 2 Replies Last reply 19 May 2021, 06:11 Reply Quote 0
                    • F
                      Folly @RussellB
                      last edited by 19 May 2021, 06:11

                      @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 19 May 2021, 07:50

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

                        A 1 Reply Last reply 2 Jan 2023, 06:16 Reply Quote 0
                        • M mitu referenced this topic on 25 Feb 2022, 16:18
                        • A
                          alinke @svera
                          last edited by 2 Jan 2023, 06:16

                          @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

                          M 1 Reply Last reply 2 Jan 2023, 08:58 Reply Quote 0
                          • M
                            mitu Global Moderator @alinke
                            last edited by 2 Jan 2023, 08:58

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

                            A 1 Reply Last reply 2 Jan 2023, 20:22 Reply Quote 0
                            • A
                              alinke @mitu
                              last edited by 2 Jan 2023, 20:22

                              @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

                              A 1 Reply Last reply 2 Jan 2023, 21:42 Reply Quote 0
                              • A
                                alinke @alinke
                                last edited by 2 Jan 2023, 21:42

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

                                A 1 Reply Last reply 2 Jan 2023, 23:11 Reply Quote 0
                                • A
                                  alinke @alinke
                                  last edited by 2 Jan 2023, 23:11

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

                                  A 1 Reply Last reply 3 Jan 2023, 01:34 Reply Quote 0
                                  • A
                                    alinke @alinke
                                    last edited by 3 Jan 2023, 01:34

                                    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

                                    A 1 Reply Last reply 5 Jan 2023, 07:53 Reply Quote 0
                                    • A
                                      alinke @alinke
                                      last edited by 5 Jan 2023, 07:53

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

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

                                      1 Reply Last reply Reply Quote 1
                                      25 out of 25
                                      • First post
                                        25/25
                                        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.

                                        This community forum collects and processes your personal information.
                                        consent.not_received