Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

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



  • So a while back I modded an Arcade 1 Up machine with RetroPie and Raspberry Pi3.

    One thing I did like about the Arcade 1 Up is that it displays the control panel layout before the game is started, showing what buttons perform what action.

    So decided to see if I could replicate that in Retropie. The video below shows it in action:

    So far it is showing promise. I had to edit the Joy2Key.py file to allow the user of the Start button so the player could exit the screen using the Player 1 button. Also edited the RunCommand.sh file to look for graphic file ROMNAME-cplayout. If found, will display the control panel layout image before starting the game.

    There are some negatives to this. First to create an image for every game to show the layout, but if wanted only a few games would be fine.

    The other negative is that I had to edit the two files above. I do not like editing the system files and working on way to create this in its own separate script.

    But so far it is showing promise.



  • @TheRealSmilebit
    Why don't you add a "system" called inputs and create there a gamelist with different "games" wich actually are each system and the image of them is the button mapping?

    I made something like that some years ago for Hyperspin so the user could check in case if needed. And when you try to enter nothing happened so it worked flawlessly.
    You will also avoid the loading time every time you launch a game. Once you know the buttons it becomes very hateful that screen IMO.

    9 controller.png

    10 controller2.png

    12 controller4.png



  • For game systems that works...for arcade games, buttons may be setup in different ways. For example, I have buttons setup in Defender a certain way that is not easily identified. The screen would show the player how the controls are setup for each game.

    It is a work in progress. Could possible add an option where if the player two button is pressed, that will bypass the screen at the next setup...or just not create a file for the game and would bypass. However, player just hits the player 1 button to continue on...the game is delayed as long as the player waits to press the player one button.

    I know this is not for everyone. I plan on taking this to family events and just think showing the layout before the game lets them know what controls do what action instead of asking all the time what button does what...also...it is a project to sharpen my programming skills and learn a little bit more about coding in Linux.


  • Global Moderator

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

    The other negative is that I had to edit the two files above. I do not like editing the system files and working on way to create this in its own separate script.

    It's a nice idea. An alternative would be to use the onstart script for Runcommand to run your commands and show the image (just like Runcommand does). You can also disable the joy2key usage in Runcommand (there's a setting for that) and start joy2key - with the right parameters - just in your script. This way you don't have to keep a separate version for Runcommand and you can easily disable this behavior by removing the onstart script.



  • @mitu Been looking at the runcommand-onstart.sh script, but still trying to figure out how to get the system and rom information. If I can get that figured out, then can use that script.

    Would be interested to know how to use the joy2key with the right parameters without having to edit the joy2key.py file to add the start button...will have to dig deeper into that.


  • Global Moderator

    @TheRealSmilebit Have you looked at the doc page ? The system/rom/emulator are passed as parameters to that script so you can use them freely.



  • @TheRealSmilebit I would love to do something like this; I had thought about doing it using runcommand launching images and just setting the time the image appeared for longer but stopped short because of laziness in having to create or find control images for every game....good luck would be an awesome project.



  • Hey guys,

    If this along the lines of what you're looking for? I'm slowly working on a set of these for my own retrocade project.

    Between looking up the controls for each game, finding a good quality arcade advertisement flyer, and actually creating the image, it's taking some time to get through the roughly 200 arcade games I keep in my curated collection.

    I'm happy to take any suggestions or constructive feedback. I intend to release these when I finish, but that will take some time.

    asteroids-launching.jpg



  • @GreenGriffon I like the idea but there is no need for manual doing. You can setup a config file like keylayout.txt that holds some information about the loaded rom and the buttonlayout

    keylayout.txt sample file

    NAME of ROM|Button A text|Button B text|Button X text|Button Y text|Button 1 text|Button 2 text|Button Coins|Button Player 1 Start|Button Player 2 Start
    Annother ROMNAME|Button A text|Button B text|||||Player 1|Player 2
    asteroids.zip|Fire|Thrust|Hyperspace
    ROM|Button A text|Button B text
    

    Then you need a script that reads the values out and with a package like imagemagick you can automate button actions according to the description for every Arcade game. With the help of the community every game can get a "Button Layout Art" ;)

    The script will look like this

    #!/bin/bash
    # Keylayout Sample Script
    
    readonly LAYOUTS="keylayout.txt"
    readonly ROM="NAME of ROM"
    IFS="|"
    
    function get_game_buttons () {
        while read -r name bA bB bX bY b1 b2 bcoin bp1 bp2; do
            if [[ $ROM == $name ]]; then
                return
            else
                echo "No Layout found for $ROM!"
            fi
        done < <(tr -d '\r' < "$LAYOUTS")
    }
    
    # call function
    get_game_buttons
    
    echo "ROMNAME: $name"
    echo "Button A: $bA"
    echo "Button B: $bB"
    echo "Coin Insert: $bcoin"
    


  • @GreenGriffon wow that is exactly what I was thinking of only nicer with the artwork! Ha. Of course @cyperghost would find a way to do it with coding! I guess the coding option is good because depending on the emulator used the buttons might be different for different people (I.e. same game but fb-alpha version vs. mame2003 vs mame2003-plus, then also where people have recoded buttons in retroarch).



  • @mitu Yes...I have been looking at the RunCommand.sh to get an idea of how it is getting the information. Just trying to figure out how to code it...should not be too hard...just finding the time to work on it.



  • @cyperghost That is good idea.



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

    I guess the coding option is good because depending on the emulator used the buttons might be different for different people

    Yes...I was going to try to figure this out, as if button layout changed would have to change each graphic...but with this would only have to change the text file.



  • @TheRealSmilebit I think if the community will start to collect the files for navigation someone will start to write a good script. My contribution is likely just a text message display ... simple but will not look well ;) Maybe a more talented user can do the graphic stuff. A tool package like imagemagick is the way to go ;)

    Support for different emulators needs to be added, too.



  • @cyperghost Nice idea.
    To be useful to players the txt file and the graphics should consider also the different types of gamepads actually used.
    Buttons assignment / layout for an arcade game would be different depending on the controller you use. That makes the whole thing quite complicated.



  • @UDb23 Na it is not so complicated if we assign to a Standard layout like the XBox or PS controller. And then map the inputs to a specific layout. It is doable but needs care what we are doing here. But in fact I would appreciate such a feature



  • I found a database that will associate a rom name, with a list of button actions, like "Fire", "Jump", "Hard Punch", etc. Check out https://github.com/yo1dog/controls-dat-json. Not a full solution, but a necessary building block, for sure.



  • @TheRealSmilebit what a great idea. This would really add some value to my arcade cabinet
    @GreenGriffon wow this is an awesome looking example. I like the idea of using a flyer in addition to the button layout.
    of course an automated script based solution would be great. @cyperghost could you imagine a solution to deal with different joypad layouts that people use for their arcade? I mean GreenGriffon uses a 6-Button layout with
    123
    456
    I think of some way to easily change that via a personal input e.g. my pad would also be 6-button but
    456
    123
    other pads would be
    1234
    4568
    you get my idea.

    btw. I am pretty sure there already is a source file inside of mame with button names and how many buttons are used for each game @markwkidd am I right? this is what you used to come up with the automated button names to display in retroarch for mame2003-plus



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

    btw. I am pretty sure there already is a source file inside of mame with button names and how many buttons are used for each game @markwkidd am I right? this is what you used to come up with the automated button names to display in retroarch for mame2003-plus

    controls.c has the button names. I am determining the number of players in the code when the game is loaded, but I am pretty sure that information is available in the DAT.



  • @GreenGriffon Thats my arcade cpo icon ;)



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.