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

Show Control Panel Layout before game starts in RetroPie, just like Arcade1UP does.

Scheduled Pinned Locked Moved Projects and Themes
arcade1upcontrolruncommandjoy2key
92 Posts 20 Posters 21.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.
  • T
    Texacate @TheRealSmilebit
    last edited by Texacate 29 Mar 2019, 02:33

    @TheRealSmilebit

    Cool. I love your concept example! Maybe someday. BTW, I just put my latest script, plus the CSV files, on GitHub. It's not very polished yet. But much better than previous versions.

    • I added support to run the main image creation script button_map.sh on the RPi.
    • Updated the Wiki on installing ImageMagick on the RPi.
    • If button data for a clone is not available, the script will attempt to use the button data from the parent rom.
    • Generates a place holder image, when no button data is available. Leaves them in the the tmp directory.
    • Uploaded a separate file with my suggested button data for additional roms. I have about 250 roms listed in custom_map.csv so far. More to come, I play a dozen or so games every day, and try to figure out what the appropriate names are for the buttons. I do try to look for a picture of the original arcade cabinet, and use those labels if possible.
    • Added a new script for doing your entire collection, all at once. for_all_roms.sh

    I'm amazed how many games are just vertical shooters, with the exact same Fire,SuperBomb buttons. I found a fun unique variation on that theme. Check out dfeveron.zip and its Disco Bomb!

    T 1 Reply Last reply 29 Mar 2019, 19:54 Reply Quote 1
    • T
      TheRealSmilebit @Texacate
      last edited by 29 Mar 2019, 19:54

      @Texacate Thanks...I plan on installing it this weekend. I have been looking at ImageMagick and messing around with it as well. Will let you know how your install goes.

      T 1 Reply Last reply 31 Mar 2019, 17:18 Reply Quote 0
      • T
        Texacate @TheRealSmilebit
        last edited by Texacate 31 Mar 2019, 17:18

        @TheRealSmilebit
        custom_map.csv contains 600 labels now! Getting the data from www.arcade-museum.com, but its not automated. Clicking on each game's web page, and copy/paste . Not all pages have labels, but it's been much faster than playing each game. Downside is, there's a chance I don't have the buttons in the right order. Verification will be needed at some point.

        T 1 Reply Last reply 5 Apr 2019, 22:15 Reply Quote 0
        • T
          Texacate @Texacate
          last edited by 5 Apr 2019, 22:15

          Update: I have collected button label data for ~1000 games, plus the ~1000 from the the controls.dat project, for a total of ~2000 titles. For now I'm done collecting the button data, and will work on improving usability of the image generation script. Suggestions are welcome.

          T 1 Reply Last reply 10 Apr 2019, 03:41 Reply Quote 1
          • T
            Texacate @Texacate
            last edited by Texacate 4 Oct 2019, 04:49 10 Apr 2019, 03:41

            I received some feedback and have flipped how the two rows are labeled by default;

            New Mapping

            MAME   RetroPad  CntrPnl
            123  -->  YXL -->  123
            456  -->  BAR -->  456
            

            Before it was

            MAME   RetroPad  CntrPnl
            456  -->  YXL -->  123
            123  -->  BAR -->  456
            

            Also, the script searches three database files for label data, (vs one previously). Now: custom_map.csv file is truly reserved for user customizations, button_map.csv file was renamed primary_map.csv, and the additional data I collected is in secondary_map.csv

            J 1 Reply Last reply 10 Apr 2019, 08:04 Reply Quote 2
            • J
              janderclander14 @Texacate
              last edited by 10 Apr 2019, 08:04

              @Texacate Thanks a lot for this project! I plan to use it on a secondary SPI LCD connected to the GPIO. I assume that in this case I need to modfiy the server so that it outputs the images in a second framebuffer, rather than a second Raspberry.

              Regarding the mappings, could this be made configurable via an external file? The motivation is that, whereas Mame-2003plus default mapping is:

              123
              456

              In FBalpha (which I use more often for arcade games) it is:

              456
              123

              Also, with this approach it could be possible to support global custom controls.

              T 3 Replies Last reply 11 Apr 2019, 01:12 Reply Quote 0
              • T
                Texacate @janderclander14
                last edited by Texacate 4 Nov 2019, 02:14 11 Apr 2019, 01:12

                @janderclander14 said in Show Control Panel Layout before game starts in RetroPie, just like Arcade1UP does.:

                @Texacate Thanks a lot for this project! I plan to use it on a secondary SPI LCD connected to the GPIO. I assume that in this case I need to modfiy the server so that it outputs the images in a second framebuffer, rather than a second Raspberry.

                Yes. Discard the simpleClient.py file completely, and strip out all the socket communication code from simpleServer.py, and only keep the bits that reassembles a full pathname of the desired image from the system name & rom name, and displays it. By the way, the whole reason I chose python for that part was I found a good tutorial on client/server communication. If I was coding it to work all on a single RPi, then the file-display stuff would have been written in bash.

                Could (the mapping) be made configurable via an external file?
                ( Mame)
                123
                456

                In FBalpha (which I use more often for arcade games) it is:
                456
                123

                Yes, button_map.sh could certainly be enhanced to read an external config file. But assuming the number of different configs is small and predictable, it might be easier to pre-code the required mappings, and just add a switch to select the one you want. Something like: if ($arg2 = "-fba") use 456123, else use 123456.

                Also, with this approach it could be possible to support global custom controls.

                I'm not sure I understand what you mean by global custom controls. Are you thinking of something beyond button labels? As in; joystick direction labeling, trackballs active/inactive, different control panel arrangements, etc.

                1 Reply Last reply Reply Quote 0
                • T
                  Texacate @janderclander14
                  last edited by 11 Apr 2019, 01:34

                  @janderclander14

                  Also a the RPi (out of the box) has only one frame buffer. This is baked right into Raspian. I did some google research on adding a second frame buffer. There are some success stories out there, but as I recall, details were sketchy and the whole thing seemed pretty advanced. That was another reason I chose a second RPI. If you find the solution, please post! I gave up, and spent an extra $30 on another RPi.

                  1 Reply Last reply Reply Quote 0
                  • T
                    Texacate @janderclander14
                    last edited by 11 Apr 2019, 07:04

                    @janderclander14 said in Show Control Panel Layout before game starts in RetroPie, just like Arcade1UP does.:

                    In FBalpha (which I use more often for arcade games) it is:

                    456
                    123

                    I use that arrangement too. I've updated the script to handle it. Try the latest version on github, and append the switch"-fba" to the command line. Default is still:
                    123
                    456

                    But button_map.sh <game> -fba gives you:
                    456
                    123

                    Also added button_map.sh <game> -8btn which gives you:
                    1237
                    4568

                    J 1 Reply Last reply 11 Apr 2019, 09:36 Reply Quote 0
                    • J
                      janderclander14 @Texacate
                      last edited by janderclander14 4 Nov 2019, 10:37 11 Apr 2019, 09:36

                      @Texacate Thanks a lot! This adds quite a lot of flexibility across emulators and control layouts.

                      Regarding the frame buffer, the RPi only supports two framebuffers if the second one corresponds to a LCD screen connected to the GPIO via SPI. These are usually small screens that plug like a HAT and that, because of the serial connection, offer poor refresh rates. However, they are fine for displaying static images like the panel layout or the marquee.

                      Here you can see the build of a user that employed one of these small screens to display the title of the game in a snes cartridge while using the HDMI output as the main display:

                      https://retropie.org.uk/forum/topic/3376/pi-in-a-super-famicom-build

                      He also provides a runcommand script to detect the running game and display the artwork, similarly to your project.

                      As far as using two framebuffers in general, for example, combining the HDMI and DSI outputs, I'm only aware of a beta kernel that seems to support this but does not seem to be included in the public distribution yet:

                      https://www.raspberrypi.org/forums/viewtopic.php?t=216399

                      T 1 Reply Last reply 11 Apr 2019, 18:31 Reply Quote 0
                      • T
                        Texacate @janderclander14
                        last edited by 11 Apr 2019, 18:31

                        @janderclander14
                        Thanks for the pointers! I noticed that post #177 of the Super Famicom project included the runcommand_onstart.sh code, to display the image on the SPI based LCD. Very cool. I'd say go with that versus what's in my simpleServer.py script. It seems to follow very similar "fall-back rules" when the desired image isn't found.

                        Let us know how your build goes! Do let me know if you find errors in the primary and secondary database files. The secondary one especially was a whole lot of copy-n-paste.

                        J 1 Reply Last reply 8 Jun 2019, 14:42 Reply Quote 0
                        • K
                          Kjarkur
                          last edited by 13 Apr 2019, 20:08

                          Hey, thanks a lot for this project. I adapted the source code and put game snaps as background, new buttons and instead of rom file name the game name. Second I modified it to use a crt friendly resolution of 320 x 240 for my arcade cab via pi2jamma.

                          Here's a little video.

                          Cheers

                          B T 2 Replies Last reply 13 Apr 2019, 21:21 Reply Quote 0
                          • B
                            BJRetro @Kjarkur
                            last edited by 13 Apr 2019, 21:21

                            @Kjarkur wow guys this video is like what everyone envisioned for this project - great teamwork. Is there some way to incorporate this easily into retropie setup some day? This project is a huge advancement for the retropie user interface for people with arcade setups.

                            K 1 Reply Last reply 14 Apr 2019, 06:51 Reply Quote 1
                            • K
                              Kjarkur @BJRetro
                              last edited by 14 Apr 2019, 06:51

                              @BJRetro the video shows my own regamebox distribution. I can make a fork on github.com. Of course it can be done with retropie easily. General steps are this

                              • create the button mapping pictures in advance
                              • put a picture viewer in runcommand-onstart.sh

                              I have used here a own picture viewer based on SDL. Reason was that I wanted to use something like quit on all keys and quit after 10 seconds.

                              F R 3 Replies Last reply 19 Nov 2019, 06:03 Reply Quote 1
                              • topic:timeago-later,9 days
                              • T
                                Texacate @Kjarkur
                                last edited by 23 Apr 2019, 02:53

                                @Kjarkur I like what you did with the code. Using a game-specific background is a great idea!

                                T 1 Reply Last reply 11 Jun 2019, 20:47 Reply Quote 1
                                • topic:timeago-later,2 months
                                • J
                                  janderclander14 @Texacate
                                  last edited by 8 Jun 2019, 14:42

                                  @Texacate It took a longer than expected but I managed to setup up everything. First, I used a Waveshare 4inch SPI LCD connected to the GPIO, as explained here.

                                  After that, I configured the lcd screen by using the overlays available here. It was quite straightforward. Just need to activate SPI in /boot/config.txt and add the overlay file corresponding to the screen. You may even use parameters to increase the refresh rate or rotate the screen (it uses a vertical orientation by default). The lcd is detected as a secondary framebuffer in /dev/fb1

                                  Finally, as you suggested, I modified the script proposed here to call for the images generated by your button_map.sh tool once the emulator runs.

                                  I post here the code that looks for the button image or falls-back to title or generic system images if not found.

                                  # /opt/retropie/configs/all/runcommand-onstart.sh
                                  # get the full path filename of the ROM
                                  rom=$3
                                  # get the system name
                                  system=$1
                                  # get rom filename without folder
                                  rom_bn=$(basename "$rom")
                                  #get rom filename without extension
                                  rom_bn="${rom_bn%.*}"
                                  # escape square brackets in rom filename
                                  rom_bn="${rom_bn//[/\[}"
                                  rom_bn="${rom_bn//]/\]}"
                                  # Set a TFT-specific image if there is one
                                  img="$(find "/home/pi/button_images/${system}" -type f -name "${rom_bn}.*" -print -quit)"
                                  # If a TFT-specific image was not found, look in the images folder in the ROMs directory for that system
                                  if [[ -z "${img}" ]];
                                  then
                                     img="$(find "/home/pi/RetroPie/roms/${system}/media/cover" -type f -name "${rom_bn}.*" -print -quit)"
                                  fi
                                  # If cover is not found, look for the title
                                  if [[ -z "${img}" ]];
                                  then
                                     img="$(find "/home/pi/RetroPie/roms/${system}/media/title" -type f -name "${rom_bn}.*" -print -quit)"
                                  fi
                                  # If no game images are found, display one for the system being emulated
                                  if [[ -z "${img}" ]];
                                  then
                                     img="$(find "/home/pi/button_images/systems" -type f -name "${system}.*" -print -quit)"
                                  fi
                                  # If no system image is found, default back to the Picade logo
                                  if [[ -z "${img}" ]];
                                  then
                                     img="/home/pi/button_images/systems/picade.png"
                                  fi
                                  # run the script to display the image
                                  sudo fbv -c -u -i -e -k /home/pi/button_images/systems/black.png > /dev/null 2>&1 &
                                  sudo fbv -c -u -i -e -k "${img}" > /dev/null 2>&1 &
                                  

                                  I used the fbv tool to display static images in the secondary framebuffer, but the more common fbi tool can also be used.

                                  T 1 Reply Last reply 27 Oct 2019, 14:26 Reply Quote 0
                                  • T
                                    TheRealSmilebit @Texacate
                                    last edited by 11 Jun 2019, 20:47

                                    @Texacate Finally had an opportunity to look at your code. Looks good.

                                    For myself, I just need static images as I showed in my video. So I think what I need to do is the following:

                                    1 - Create XML file with gaming information. I would convert the work you have done and convert to XML. Do not have to do this, but would like to practice manipulating XML files.

                                    2- Will also add to this what recommended controller to use. Joystick, spinner, trackball or lightgun.

                                    3- If Joystick, what type (2-way, 4-way, etc.):

                                    4- A note added stating if certain controller is not available, which one to use. This would be static on every image file.

                                    5- When building the image, have the user select which button layout they want to use(6 button, 8 button, etc.)

                                    I am going to program this in Windows for now, but use ImageMagic to create the image to eventually port over to the Pi. Basically would program similar to what you have (if it is ok to reference your code) and just create the images, but add the additional data.

                                    Once the static image is create, will re-visit my code to have it come up before the game starts. Also thinking about just creating the image and putting the snapshots in the Screenshots or Covers folder. I have downloaded video snapshots and marquees, so the gamelist.xml file would already have a path to get the Screenshots or Covers and can just place the image on the theme instead. Would be less programming and just create the images.

                                    In any case, will start on this over the weekend. Hopefully will have something functional by the end of the weekend.

                                    1 Reply Last reply Reply Quote 0
                                    • topic:timeago-later,5 months
                                    • T
                                      Texacate @janderclander14
                                      last edited by 27 Oct 2019, 14:26

                                      @janderclander14 and @TheRealSmilebit,

                                      Sorry for the late replies. I'm not getting much hobby time these days... Feel free to reference/reuse any of my code in your projects. I'm always interested in seeing what folks do to improve it.

                                      T 1 Reply Last reply 8 Nov 2019, 17:50 Reply Quote 0
                                      • topic:timeago-later,10 days
                                      • I
                                        ImALegendKiller
                                        last edited by 6 Nov 2019, 06:31

                                        The work everyone is doing in this thread is impressive! I am working on my first RetroPie build and currently just going through trying to figure out how to get games running. One problem I've noticed is that I have no idea what the buttons do! In MAME I know I can just hit TAB and change the controls, but for FBA the controls seem to be all over the place, and the controls in the FBA retroarch core and the pifba are not matching up, so games I run with the pi version are hard to play.

                                        This is all to say, I hope you all will make your results available once you finish, as it'd be sweet to get a quick glance at what the default controls were just before I jumped into a game so I'd at least have an idea of what to press and hopefully remap it if I needed to. Keep up the good work!

                                        1 Reply Last reply Reply Quote 0
                                        • P
                                          paffley
                                          last edited by 6 Nov 2019, 14:19

                                          Interesting read this! thanks!

                                          Just a quick question...

                                          Is there anyway to edit runcommand so it freezes and then you have an option of 'A to load game' and 'B to cancel and return to gamelist' please?

                                          1 Reply Last reply Reply Quote 0
                                          69 out of 92
                                          • First post
                                            69/92
                                            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