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 @BJRetro
      last edited by Texacate

      @BJRetro I really need to fill out the download/usage sections of the documentation. There are some dependencies there. Tonight after work, I'll work on that. But let me try to briefy answer your questions.

      Q1) Yes, that is the general idea. You would run it from command line. Using sudo should not be necessary to download the scripts and build images, but it may be needed to install ImageMagic. I'm actually building images on my Mac. Haven't actually tried to build images on the RPi yet. But I can't think of a reason why that wouldn't work. Again, I still need to separate all the image-display stuff from the image-create stuff.
      UPDATE: Added support to build images on the RPi if desired.

      Q2) That is correct: From the terminal: "button_map.sh paceman" (don't use the.zip extension, just the basename). It will it generate the image in "a" folder named "./arcade", but I don't recommend that be THE arcade folder where your roms are... Yikes. I should change the generation folder name! You'll probably want the generated image to live somewhere else. That will completely depend on how one uses the images. Let me give that problem more thought. I build the images in a completely separate "sand-box" area. And if they look okay, I move them where they need to live.

      Q3) It could be enhanced to do this. For now, you could list your rom directory to a file, and edit that file into a script that calls button_map.sh over and over again (remember to strip of the .zip extension). I may write separate, more elegant way to do what you are asking. The workaround I just suggested is pretty crude, but it gets the job done.
      UPDATE: Added new script that does exactly this: for_all_roms.sh

      Q4) Yes. The wheel folder is usually kept inside the system folder for ES and AttractMode themes that use wheel art. I only pull from this folder, so it is safe to point the button_map.sh script to the ~/RetroPie/roms/arcade/wheel folder. There is variable at the top of the script to for the pathname to the logo/wheel-art folder.

      T 1 Reply Last reply Reply Quote 0
      • T
        Texacate @Texacate
        last edited by Texacate

        Re: building images for parent roms and/or clone roms...
        Let's say you want to build an image for a clone rom, but the button label data is only available for the parent rom:

        Last night I prototyped a way to do that. I was able to build significantly more button map images for the set of roms currently in my cabinet. But it also added an additional level of complexity to the database searching issues I already have... :-(
        I definitely need to get proficient in XML searching... I'm a noob in that area. Ah, well. One more skill to acquire, right?

        1 Reply Last reply Reply Quote 0
        • T
          Texacate @markwkidd
          last edited by Texacate

          @markwkidd In your controls archiving project...

          • How are you managing the parent / clones control data? Are you just archiving the parent ?
          • Similarly, how are you managing the different (but related) parents that have identical control information ?

          The StreetFighter and KingOfFighter series are examples of this. If it's easier to point to a GitHub URL, just send me the link. I can go see for myself.

          robertvb83R markwkiddM 2 Replies Last reply Reply Quote 0
          • robertvb83R
            robertvb83 @Texacate
            last edited by

            @Texacate have a look here mame2003-plus/controls.c

            Maybe this wiki is interesting for you adding button names

            My full size arcade cabinet Robotron vs. Octolyzer

            1 Reply Last reply Reply Quote 0
            • markwkiddM
              markwkidd @Texacate
              last edited by markwkidd

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

              How are you managing the parent / clones control data? Are you just archiving the parent ?
              Similarly, how are you managing the different (but related) parents that have identical control information ?

              As @robertvb83 mentioned and is described in detail in the MAME 2003-Plus developer docs that are linked there, the mapping between the control names happens elsewhere, in the driver source.

              This can also be grepped/scripted easily because there are macro names (the GAMEC macros, etc) that can be used as tokens for finding the mappings.

              1 Reply Last reply Reply Quote 0
              • T
                Texacate
                last edited by

                @robertvb83 Most excellent! As a "User" contributor, the only thing I didn't see on that Wiki page was how to best get the info to the lr2003plus team. (email to someone, a forum post somewhere, a github issue...) And I assume if the parent of ROM isn't already mentioned controls.c, those would be the one(s) you are most interested in. Correct? I'll do my best to contribute using the format in the wiki. Ive gone through a bunch of games on my cabinet, and added new button labels. ~50 so far, only 800 to go, LOL

                robertvb83R 1 Reply Last reply Reply Quote 0
                • robertvb83R
                  robertvb83 @Texacate
                  last edited by robertvb83

                  @Texacate hey thanks thats a good point with contact information. I cannot change this myself but i think @markwkidd can add that info/links.

                  The button names for retroarch are great especially for unusual joypad layouts. So i already contributed some exotic games like stonebal or space wars. With written functions instead of btn1 btn2 btn3 it is now much easier to configure those games for any joypad that people use.

                  Of course missing clones are always welcome or even missing parent roms. But be aware not always are clones the same as parent by means of button names

                  Would be super cool if your naming contributions find their way into mame2003-plus as well

                  My full size arcade cabinet Robotron vs. Octolyzer

                  1 Reply Last reply Reply Quote 0
                  • T
                    TheRealSmilebit
                    last edited by

                    Kinda circled around back to this. You all are doing more with this than I can. This is a mock up of what I originally was going for:
                    astdelux-cplayout.jpg

                    And keep in mind this is tailored to my tastes and nothing is automatically built...everything is manual.

                    However, my goal was to get to where the background, control panel, marquee, ect. were in a separate folder for either a system or game and then have a XML setting file to assemble the file based on what files were supplied. Would work on once part at a time.

                    After looking at what you are all doing...may be making this a bit to complex. Will be trying out Texacate's example this weekend to see if I can get that up and running.

                    T 1 Reply Last reply Reply Quote 0
                    • T
                      Texacate @TheRealSmilebit
                      last edited by Texacate

                      @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 Reply Quote 1
                      • T
                        TheRealSmilebit @Texacate
                        last edited by

                        @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 Reply Quote 0
                        • T
                          Texacate @TheRealSmilebit
                          last edited by Texacate

                          @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 Reply Quote 0
                          • T
                            Texacate @Texacate
                            last edited by

                            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 Reply Quote 1
                            • T
                              Texacate @Texacate
                              last edited by Texacate

                              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 Reply Quote 2
                              • J
                                janderclander14 @Texacate
                                last edited by

                                @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 Reply Quote 0
                                • T
                                  Texacate @janderclander14
                                  last edited by Texacate

                                  @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

                                    @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

                                      @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 Reply Quote 0
                                      • J
                                        janderclander14 @Texacate
                                        last edited by janderclander14

                                        @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 Reply Quote 0
                                        • T
                                          Texacate @janderclander14
                                          last edited by

                                          @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 Reply Quote 0
                                          • K
                                            Kjarkur
                                            last edited by

                                            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 Reply Quote 0
                                            • 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.