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

    Upright Arcade Build

    Scheduled Pinned Locked Moved Projects and Themes
    cabinetcustom buildretro arcade
    20 Posts 6 Posters 2.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.
    • A
      aechadwick
      last edited by aechadwick

      This has been an occasional-weekend project for a couple years.

      1-.jpg

      1-crash-kitchen.jpg

      The nominative mission has been, "so my son can learn the classics," and i really emphasized two-player games and favorite hotseats. To that end, this is an overbuilt box of 2x4 and MDF, it's virtually indestructible.

      1-construction.jpg

      there is a set of overpowered car-audio speakers in the upper part, and a big subwoofer in the base. The whole system makes a satisfying rumble.

      1-juno-oblique.jpg

      The Marquee changes artwork based on system or game, and the buttons light up in game-specific layouts.

      i made custom launch screens showing off the controls, and custom overlays for each game. Artwork is ruthlessly appropriated from everywhere, including around this forum (thanks everyone!).

      1-junofrst-launching.jpg

      1-juno-launching.jpg

      1-junofrst.png

      1-juno-overlay.jpg

      The main buttons are Spectra Eclipse by GroovyGameGear--the outer ring lights up around black buttons. The pictures do not do them justice, it's very clean in person, with just enough spill to give neighboring buttons some life. The basic layout is non-standard--that's not because i'm a know it all, it's purely because i'm a scene designer, i was just... going for a look.

      2½" trackball by Holland Computers, SpinTrak by Ultimarc. Everything is controlled by an Ultimarc Ultimate I/O.

      30" monitor with custom black sintra bezel, mounted behind 1/4" smoked glass. The Bezel has a series of "game type" indicators--fight! cooperate! hotseat! there's no real need for them, i just wanted to see if i could make it work (plus it fills the space under the monitor)

      control-panel.jpg

      the panel itself is under-printed onto plexiglass and backed with white vinyl (then laminated into a couple layers of MDF, it's a good thick board)

      control-panel-1.jpg

      *in retrospect, i wish i'd done light-up joysticks, and/or servo-lock sticks that can be set to [Only 4-way, Only 2-way] and so on. I might still tear the panel apart and redo that. Never be satisfied!

      after some playing around, I hacked in a set of coin acceptors... i couldn't acclimate to simply pushing a button to get more credits, i really wanted the panic of [need quarters where is the slot oh god faster]

      coin.jpg

      a buddy welded the monitor-holder frame for me. 700W power supply is overkill, but damn i was tired of getting under voltage warnings.

      behind.jpg

      the crash kitchen is what i call my garage. i used to do cooking shows like "iron chef america," and always liked the name.

      crash-kitchen-door.jpg

      A 1 Reply Last reply Reply Quote 1
      • A
        aechadwick @aechadwick
        last edited by

        more pictures of how i utilize the buttons.

        buttons-ms5.jpg

        buttons-missile.jpg

        sometimes i use the "non-functional" buttons as just pixels, like color-keyed to the character/graphics.

        buttons-aligator.jpg

        buttons-aligator-overview.jpg

        launch screens give you five seconds to memorize the layout!

        xmcota-launching.jpg

        buttons-xmen.jpg

        for v2, i will do a light-ring around the spinner, too...

        tempest2-launching.jpg

        A 2 Replies Last reply Reply Quote 2
        • A
          aechadwick @aechadwick
          last edited by

          people ask "do you have Joust?" and i reply "this was built to play joust."

          joust-launch-screen.jpg

          joust-launching.jpg

          joust-overlay.jpg

          joust.png

          GreenHawk84G 1 Reply Last reply Reply Quote 4
          • GreenHawk84G
            GreenHawk84 @aechadwick
            last edited by

            @aechadwick wow man, the theming detail is crazy. So much work! Very impressive. I would love to have a dynamic marquee on my bartop.

            A 1 Reply Last reply Reply Quote 0
            • H
              h2805270
              last edited by

              That's pure dedication right there...

              A 1 Reply Last reply Reply Quote 0
              • maschineM
                maschine
                last edited by

                Love the digital marquee

                1 Reply Last reply Reply Quote 0
                • A
                  aechadwick @GreenHawk84
                  last edited by

                  @greenhawk84 how i did it...

                  from ebay... (3) P4 PH4 32*64 Pixels Dot Matrix RGB Full Color LED Module Board For Video Wall, i think they were like $20 apiece when i got them.

                  that just happened to fit the arbitrary 30½" x 5½" marquee (i didn't plan a marquee, i decided to add it later) (this whole project is "oh you know what ELSE would be cool...")

                  controlled by a second Pi with the Adafruit "RGB Matrix HAT + RTC"—maintaining the matrix just chews up too much power, i tried using one pi for both but decided against compromising gameplay for cosmetics.

                  The two pi are directly connected with an ethernet cable, and the RetroPie runcommand scripts, onstart & onend, send ROM info to the MatrixPi to trigger the change.

                  I'm glad to share the scripts if anyone is interested. there might be a better way, it's just how i did it.

                  B 1 Reply Last reply Reply Quote 2
                  • A
                    aechadwick @h2805270
                    last edited by

                    @h2805270 it's my distraction from work and stuff, so it's totally worth the time. priceless.

                    1 Reply Last reply Reply Quote 1
                    • A
                      aechadwick @aechadwick
                      last edited by

                      he visibly flinched several times. GOTTA LEARN THE CLASSICS. IMG_6036.png

                      H 1 Reply Last reply Reply Quote 2
                      • H
                        h2805270 @aechadwick
                        last edited by

                        @aechadwick
                        I didn't even know the Arcade Original used an Overlay.

                        1 Reply Last reply Reply Quote 0
                        • B
                          BritX @aechadwick
                          last edited by

                          @aechadwick hey! great build!
                          Would you be willing to share you code for the marquee? im trying to get some LCD panels for the RGB hat working but failing big time...
                          I would like to use just one pie also so if you have anything like that illl take it..:-)

                          I have installed pimarquee2 but this uses LCD via a second HDMI port...its great software also but i cannot get it working with a RGB hat....
                          im not a coder either so its all trail and error....

                          Using a second pi perhaps a zero may work also....

                          thanks in adavance!

                          A 1 Reply Last reply Reply Quote 0
                          • A
                            aechadwick @BritX
                            last edited by

                            @britx Here is how i did it; i'm open to other ways, but this has worked constantly & consistently.

                            i named the units RetroPi and MatrixPi. They are connected directly with an ethernet cable; they connect to the network via Wifi, and to each other over ethernet. (I don't remember the exact instructions i used but it';s pretty straightforward.)

                            on MatrixPi, i created folders for Scripts and Marquees:

                            /home/pi/Arcade/Marquees/
                            /home/pi/Scripts

                            I made a script that, when called, searches the Marquees folder based on the arguments sent to it: the script will search for an image based on the ROM or SYSTEM. If it does not find an image (or is not sent any information) it will just display the "crash kitchen" logo.

                            I am using the Adafruit Matrix Hat with the hzeller library.

                            #!/bin/bash
                            
                            system=$1 # get the system name
                            rom_bn=$2 # get the ROM with full path
                            
                            exec 2> /home/pi/Arcade/Scripts/runcommand-onstart.log # send stderr to a log file
                            exec 1>&2 # send stdout to the same log file
                            
                            # first, make sure marquee is clear
                            sudo start-stop-daemon --stop --name  led-image-viewe
                            
                            function contains() {
                               local n=$#
                               local value=${!n}
                               for ((i=1;i < $#;i++)) {
                                     if [ "${!i}" == "${value}" ]; then
                                        echo "y"
                                     return 0
                                  fi
                               }
                               echo "n"
                               return 1
                            }
                            
                            # rom_bn receives $rom excluding everything from the first char to the last slash
                            rom_bn="${rom_bn##*/}"
                            
                            # rom_bn receives $rom_bn excluding everything from the last char to the first dot
                            rom_bn="${rom_bn%.*}"
                            
                            ArcadeArray=("lr-fbalpha", "lr-fbalpha2012", "PiFBA", "lr-mame2003", "lr-mame2010", "MAME4ALL-Pi", "AdvanceMAME 1.4", "AdvanceMAME 0.94", "AdvanceMAME 3", "lr-mame2014", "lr-mame2016", "lr-mame2000")
                            if [ $(contains "${ArcadeArray[@]}" $1) == "y" ]; then
                               system="arcade"
                            fi
                            
                            # set the image file to the first result matching the ROM name - accounts for various possible file extensions
                            img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}.*" | head -1)"
                            
                            # check to see if there was a file found (length of the file name not zero), ELSE find an image based on system
                            if [[ -z "${img}" ]]
                            then
                               img="$(find "/home/pi/Arcade/Marquees/systems" -type f -name "${system}.*" | head -1)"
                            fi
                            
                            # check to see if there was a file found (length of the file name not zero), ELSE use Crash Kitchen logo
                            if [[ -z "${img}" ]]
                            then
                               img="/home/pi/Arcade/Marquees/systems/CrashKitchen.png"
                            fi
                            
                            # display the image, (6) 32-pixel panels, centered
                            sudo /home/pi/rpi-rgb-led-matrix-master/utils/led-image-viewer --led-chain=6 --led-daemon -C "$img"
                            

                            That's pretty well noted... (thanks, PASTaechadwick)

                            I called it "runcommand-onstart.sh" simply to keep track of it—it is triggered by runcommand on the RetroPi...

                            to trigger the MatrixPi Script, i added this line at the top of /opt/retropie/configs/all/runcommand-onstart.sh on the RetroPi...

                            ssh pi@192.168.1.22 "/home/pi/Scripts/runcommand-onstart.sh \"$1\" \"$3\""  # tell MatrixPi to display logo
                            

                            (of course, use your pi’s IP address)

                            I also made scripts for -onend and -onstop, they simply revert the marquee to the “crash kitchen” logo.

                            #!/bin/bash
                            
                            # first, make sure marquee is clear
                            sudo start-stop-daemon --stop --name  led-image-viewe
                            
                            # set to crash kitchen logo 
                            img="/home/pi/Arcade/Marquees/systems/CrashKitchen.gif"
                            
                            # display the image, (6) 32-pixel panels, centered
                            sudo /home/pi/rpi-rgb-led-matrix-master/utils/led-image-viewer --led-chain=6 --led-daemon -C "$img"
                            

                            That's it.

                            When i add a game or system, i can just drop a new logo into the MatrixPi’s “Marquees” folder, and it's all taken care of. (I always make custom images and save them as a PNG, but it will try to display anything it finds.)

                            Let me know if there's anything i can explain further. good luck!

                            B 2 Replies Last reply Reply Quote 0
                            • B
                              BritX @aechadwick
                              last edited by

                              @aechadwick Amazing....thank you so much for posting...
                              here is a burner email, nkfey6aod59a@opayq.com
                              if you ok with it send me an email and ill reply back with my personal one..i dont know how to DM on this site...

                              Iv been trying to get things working for weeks....so this may give me the info :-)
                              Also i have a good way of scrapping files automatically for the system..
                              plus i have over 1000 gifs in the 32x128 format...

                              thank again..i know what im doing tomorrow working from home...:-)

                              1 Reply Last reply Reply Quote 0
                              • B
                                BritX @aechadwick
                                last edited by

                                @aechadwick hey quick question, does emulationstation have to be running for this to work?
                                I have everything done...but upon boot nothing is displayed? but if i execute the command manual then it displays the crashkitchen file?

                                Ill bash away at it....but you answered a lot of open questions i had teaching myself :-)

                                A 1 Reply Last reply Reply Quote 0
                                • A
                                  aechadwick @BritX
                                  last edited by

                                  @britx i think the runcommand scripts are a function of retroarch, not emulationstation? regardless, i understand exactly what's happening:

                                  at boot, there is nothing started nor anything ending, so you need one initial call to get an image on the marquee. i did that by simply having rc.local run the "onend" script after boot--that's functionally the same as your manual execution.

                                  (also, you don't have to use the name crashkitchen.gif, you can change that to anything you want)

                                  B 1 Reply Last reply Reply Quote 0
                                  • B
                                    BritX @aechadwick
                                    last edited by BritX

                                    @aechadwick hey thanks again...
                                    Im nearlt there.....i have the image playing on boot :-)
                                    have the stop gif playing when exciting a game from arcade:-)

                                    I dont have the change when selecting a game... i have just the default retropie installed noting else and i chose lr-mame2003 as the default.
                                    It appears its not picking up the "$img" through the system? as it does play the gif on the ELSE command when it doesnt find a suitable file....

                                    I have also set it up to just run on one Pi for now as easier on reboots etc....

                                    here is my runcommand-onstart:

                                    #!/bin/bash
                                    echo "message to log" >&2
                                    	
                                    # get the full path filename of the ROM
                                    rom=$3
                                    # get the system name
                                    system=$1
                                    # get the ROM with full path
                                    rom_bn=$2 
                                    
                                    
                                    exec 2> /opt/retropie/configs/all/runcommand-onstart.log # send stderr to a log file
                                    exec 1>&2 # send stdout to the same log file
                                    
                                    # first, make sure marquee is clear
                                    sudo start-stop-daemon --stop --name  led-image-viewe
                                    	function contains() {
                                       local n=$#
                                       local value=${!n}
                                       for ((i=1;i < $#;i++)) {
                                             if [ "${!i}" == "${value}" ]; then
                                                echo "y"
                                             return 0
                                          fi
                                       }
                                       echo "n"
                                       return 1
                                    }
                                    	# rom_bn receives $rom excluding everything from the first char to the last slash
                                    rom_bn="${rom_bn##*/}"
                                    	# rom_bn receives $rom_bn excluding everything from the last char to the first dot
                                    rom_bn="${rom_bn%.*}"
                                    
                                    
                                    	ArcadeArray=("lr-fbalpha", "lr-fbalpha2012", "PiFBA", "lr-mame2003", "lr-mame2010", "MAME4ALL-Pi", "AdvanceMAME 1.4", "AdvanceMAME 0.94", "AdvanceMAME 3", "lr-mame2014", "lr-mame2016", "lr-mame2000", "retroarch", "mame-libretro")
                                    if [ $(contains "${ArcadeArray[@]}" $1) == "y" ]; then
                                       system="arcade"
                                    fi
                                    	# set the image file to the first result matching the ROM name - accounts for various possible file extensions
                                    #img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}.*" | head -1)"
                                    img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}-image.*" | head -1)"
                                    
                                    
                                    	# check to see if there was a file found (length of the file name not zero), ELSE find an image based on system
                                    if [[ -z "${img}" ]]
                                    then
                                       img="$(find "/home/pi/Arcade/Marquees" -type f -name "${system}.*" | head -1)"
                                    fi
                                    	# check to see if there was a file found (length of the file name not zero), ELSE use Crash Kitchen logo
                                    if [[ -z "${img}" ]]
                                    then
                                       img="/home/pi/Arcade/Marquees/systems/intro.gif"
                                    fi
                                    
                                    # display the image, (6) 32-pixel panels, centered
                                    
                                    
                                    sudo /home/pi/rpi-rgb-led-matrix/utils/led-image-viewer -f -C --led-no-hardware-pulse --led-rows=32 --led-cols=64 --led-chain=2 --led-slowdown-gpio=2 --led-gpio-mapping=adafruit-hat --led-daemon "$img" 
                                    
                                    

                                    Any ideas on what im missing...:-) i just cant nail it down...also the log is blank indicating the logic is correct?

                                    I think its something here:

                                    	# set the image file to the first result matching the ROM name - accounts for various possible file extensions
                                    #img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}.*" | head -1)"
                                    img="$(find "/home/pi/Arcade/Marquees/${system}" -type f -name "${rom_bn}-image.*" | head -1)"
                                    
                                    
                                    	# check to see if there was a file found (length of the file name not zero), ELSE find an image based on system
                                    if [[ -z "${img}" ]]
                                    then
                                       img="$(find "/home/pi/Arcade/Marquees" -type f -name "${system}.*" | head -1)"
                                    fi
                                    	# check to see if there was a file found (length of the file name not zero), ELSE use Crash Kitchen logo
                                    if [[ -z "${img}" ]]
                                    then
                                       img="/home/pi/Arcade/Marquees/systems/intro.gif"
                                    fi
                                    

                                    maybe the path to where the gig/png/jpg are stored? arrrhhhhhh LOL

                                    tree.png
                                    thanks for your help....i have learnt so much just through this.......

                                    B 1 Reply Last reply Reply Quote 0
                                    • B
                                      BritX @BritX
                                      last edited by BritX

                                      @britx
                                      cracked it.....a simple $2........

                                      1 Reply Last reply Reply Quote 0
                                      • L
                                        LandyVlad
                                        last edited by

                                        Hmm, that's a LOT of buttons.

                                        Hardware: The parts of a computer system that can be adjusted with a hammer.

                                        A 1 Reply Last reply Reply Quote 0
                                        • A
                                          aechadwick @LandyVlad
                                          last edited by

                                          @landyvlad some games use more, some games use less. better over-prepared than under-equipt!

                                          1 Reply Last reply Reply Quote 1
                                          • A
                                            aechadwick
                                            last edited by

                                            i added a (re)Action Cam, a fisheye lens mounted inside the bezel.

                                            it shoots out so you can watch faces people make while playing—more fun than staring at backs.

                                            the camera is connected to the direct interface slot of the pi that controls the LED marquee, running the RPi Cam Web Interface; the feed can only be viewed inside my house's network, it is not connected to the internet. It's just for fun.

                                            IMG_6167.jpg

                                            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.