Jump to content

Cactus Canyon Continued (P-ROC) PBX launcher and media generator

Recommended Posts

Hi, I managed to figure out how to flip the pyprocgame display for my cabinet so I installed the cool Cactus Canyon Continued project on my cab.


The code for the Visual Pinball port is here:


Arngrim's DOF mod of the vpx table is here:


dB2S and wheel image here:


Requires the P-ROC to VP framework. Install files and instructions here:




The table runs with official VP10. However, Cactus Canyon Continued requires an older set of VBS scripts, found here:


It's a truly complicated setup process, but well worth it as the project adds a lot to the original which was rushed to market in a relatively incomplete state to make way for the doomed Pinball 2000 platform:


Plus more since that page was updated: more bandits, more callouts, a brand new built-in service menu, and full color virtual DMD:


Because the table requires the old VBS scripts then there has to be a separate VPX installation. I also use a DMD display resolution that is different from any other tables I run to best accommodate the available options that come with Cactus Canyon Continued. So, I setup a totally separate system in PinballX.ini and use a dedicated script for launching the table (It works best for three screen cabinets):


#SingleInstance force
SetTitleMatchMode, 2
DetectHiddenWindows, On


Run, "%antimicro_Path%\antimicro.exe" --no-tray --hidden --profile "%antimicro_Path%\profiles\VP.joystick.amgp"
Run, dc2.exe -configure="%A_ScriptDir%\dc2config\CCCSettings.xml",, Hide
Run, "C:\P-ROC\Visual Pinball\vpinballx.exe" -play "C:\P-ROC\Visual Pinball\Tables\Proc_CC.vpx",, Min
WinWait, Microsoft Visual ahk_class #32770
WinClose, Microsoft Visual ahk_class #32770

WinWaitActive, ahk_class VPPlayer

    IfWinNotExist, ahk_class VPPlayer
            Run, dc2.exe -configure="%A_ScriptDir%\dc2config\4KSettings.xml"
            Run, taskkill /im antimicro.exe /f,, Hide
            Sleep, 1000
            Goto, checkVPPlayer


; ***********************************************

; CloseVP from FPLaunch
    ;toLog("CloseVP Called")
    ;Hotkey, %exitScriptKey%, Off
    ;GoSub rosveClose
    ;GoSub bigbossClose ; change loops completely, put all data in xml !!! too slow
    ;Visual Pinball must be closed this way instead of killing process 
    ;or it wil not save your last game information.i.e score/credtis
    ;DetectHiddenWindows on ;Or next line will not work
    ;Loop, 4
    ;Gui, %A_Index%: Destroy
    ;This line fixes where the VP Window flashes real quick
    ;when closing the window for a cleaner exit
    ; win hide removed cause vp should be minimized, not hidden
    ;WinHide, ahk_class VPinball
    ;WinShow, ahk_class VPinball
    WinMinimize, ahk_class VPinball
    WinClose, ahk_class VPinball
    WinWaitClose ahk_class VPinball
    ; bigbossclose won't get executed cause main thread will exit
    ;GoSub bigbossClose
    ; there's no need for exitscript cause main thread will do it
    ;Goto ExitScript

; ***********************************************

#IfWinActive ahk_class VPPlayer

; Interlock Switch
;    i::
;        Send {End}
;        SetTimer, WaitForJoy7, 10
;    Return

;    WaitForJoy7:
;        if GetKeyState("Joy7")
;            return
;        Send {End}
;        SetTimer, WaitForJoy7, off
;    Return
; Exit Table
        Gosub CloseVP

And here is my script for generating media. It is tailored to my particular hardware setup using NVidia DSR 4K and a non-native resolution for my DMD display. Modify the ffmpeg capture parameters to best fit your setup:


#SingleInstance force
SetTitleMatchMode, 2
DetectHiddenWindows, On

; User inputs
Audio_Device="Stereo Mix (Realtek High Defini" 
;Audio_Device=""What U Hear" (Creative SB Audi" 

Run, "%PinballX_Path%\Scripts\dc2.exe" -configure="%PinballX_Path%\Scripts\dc2config\CCCSettings.xml",, Hide

Run, "C:\P-ROC\Visual Pinball\vpinballx.exe" -play "C:\P-ROC\Visual Pinball\Tables\Proc_CC.vpx"
WinWait, Microsoft Visual ahk_class #32770
WinClose, Microsoft Visual ahk_class #32770

WinWaitActive, ahk_class VPPlayer

Sleep, 5000 ; Allow time for table score display to get well beyond loading and boot images
; Fastest Capture
;    Run, %FFMPEG_Path%\ffmpeg -t 70 -rtbufsize 1500M -f dshow -i audio=%Audio_Device% -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 3840x2160 -i desktop -c:v libx264 -preset ultrafast -qp 0 -c:a copy -threads 8 "%A_ScriptDir%\playfield.mkv",, Hide
Run, %FFMPEG_Path%\ffmpeg -t 70 -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 3840x2160 -i desktop -c:v libx264 -preset ultrafast -qp 0 -threads 8 "%A_ScriptDir%\playfield.mkv",, Hide
Run, %FFMPEG_Path%\ffmpeg -t 70 -f gdigrab -framerate 30 -offset_x 3840 -offset_y 0 -video_size 3840x2160 -i desktop -c:v libx264 -preset ultrafast -qp 0 -threads 8 "%A_ScriptDir%\bg.mkv",, Hide
Run, %FFMPEG_Path%\ffmpeg -t 70 -f gdigrab -framerate 30 -offset_x 7680 -offset_y 292 -video_size 1280x320 -i desktop -c:v libx264 -preset ultrafast -qp 0 -threads 8 "%A_ScriptDir%\dmd.mkv",, Hide

WinActivate, Visual Pinball Player
WinWaitActive, Visual Pinball Player

Process, WaitClose, ffmpeg.exe, 80
Process, Close, %ErrorLevel%

Run, taskkill /im vpinballx.exe /f,, Hide
WinKill, Form1

Run, "%PinballX_Path%\Scripts\dc2.exe" -configure="%PinballX_Path%\Scripts\dc2config\StandardSettings.xml",, Hide

; Post Capture Trim and Transcode
Run, %FFMPEG_Path%\ffmpeg -y -i "%A_ScriptDir%\playfield.mkv" -ss 5 -to 65 -vf [in]rotate=PI:bilinear=0[middle];[middle]scale=1920:-1[out] -map 0:0 -c:v libx264 -crf 26 "%PinballX_Path%\Media\Cactus Canyon Continued\Table Videos\Cactus Canyon Continued (Original 2012).f4v"
Run, %FFMPEG_Path%\ffmpeg -y -i "%A_ScriptDir%\bg.mkv" -ss 5 -to 65 -vf "scale=1920:-1" -c:v libx264 -crf 26 "%PinballX_Path%\Media\Cactus Canyon Continued\Backglass Videos\Cactus Canyon Continued (Original 2012).f4v"
Run, %FFMPEG_Path%\ffmpeg -y -i "%A_ScriptDir%\dmd.mkv" -ss 5 -to 65 -c:v libx264 -crf 26 "%PinballX_Path%\Media\Cactus Canyon Continued\DMD Videos\Cactus Canyon Continued (Original 2012).f4v"

Process, WaitClose, ffmpeg.exe
; Clean up
FileDelete, %A_ScriptDir%\playfield.mkv
FileDelete, %A_ScriptDir%\bg.mkv
FileDelete, %A_ScriptDir%\dmd.mkv


If your setup is not that complicated and you make use of the alternateexe tags to run a different VPX installation. It's quite doable to just put this in the standard Visual Pinball.xml database and use PBXRecorder. You will need an alternate script to handle the Runtime error box that inevitably pops up with P-ROC controller based tables:


Lots of ways to manage the install and get it working with PinballX.

I tried to mod the code to include flipping the DMD as an option in the service menu, but I'm new to Python and couldn't get it figured just yet. I wound up "hardcoding" a solution for myself. I'm probably the only one running this in a P2K style cabinet, but if someone happens to need it then I can make the code mod available upon request.

  • Like 3

Share this post

Link to post
Share on other sites



I figured out how to get the CCC DMD to display on my Pin2dmd, the problem when I run dmdext to mirror it onto my pin2dmd, CCC gets alot of ball stutter. I am running a 3.6ghx quad I5 and gtx980ti so the system should be able to handle it. My settings are below. Are you having stutter issues?

Color Display Pixel Size: 4, Color Display X Offset: 25, Color Display Y Offset: 25,


Then my command line for dmdext is:


dmdext mirror --source screen -p 25 25 512 128 --no-virtual


I also tried this as it moves CCC dmd to my 2nd monitor and still has same stutter.

Display Pixel Size: 4, Color Display X Offset: 2350, Color Display Y Offset: 635,

dmdext mirror --source screen -p 2350 635 512 128 --no-virtual

Share this post

Link to post
Share on other sites

Aesthetically, I would place the DMD on the backglass. Of course, I run using true FS.

Before, you deal with that. You will need to deal with ball stutter. Troubleshooting: Does it eliminate ball stutter to run without DMDext?

Sent from my iPhone using Tapatalk

Share this post

Link to post
Share on other sites

yes there is only ball stutter when using dmdext and only with CCC. I use dmdext with FX2 without and performance issue.


I don't run true FS. I was also hoping there was a way to make the dmd disappear like FX2 instead of having it on the BG.


Share this post

Link to post
Share on other sites

Well, apples and oranges. FX2 is not the same thing as VPX with  P-ROC, with B2S, with DOF (I assume), etc.

Do experiment with true FS. It's been around since the stable release of 10.1, I believe, so it is not like it is a brand new feature. It's solved ball stutter issues for a lot of users. Toggling Vsync on/off may help. I always keep it off. Some people prefer to have it on. Walk back on features that require more resources (AA, alternate ball images, playfield reflection, ambient occlusion, elements detail level slider, etc.)

Wait for a built in processor affinity feature for VPX and/or B2S. It's so new that it has not even been released as beta yet, but I expect that it may be out soon. It may help as well. 

It's all I've got to suggest. I don't really have issues with CCC. There are long and currently active threads at VPF that are all about ball stutter.

It's technically possible to pipe frames from p-roc directly to a real DMD. I don't know how to do it, but I don't have a personal need for this feature either so I won't be teaching myself how to do it. It doesn't appear that anyone else has shown an interest either. Whatever solution someone codes would only benefit that one game right now, so it's not very motivating. You might put in a request at freezy's dmdext repository. He might take a look at it. He might have a little more time now that vpdb is launched. Who knows?

Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...