===== VPM Hi-Scores to PNGs for Popper Media ===== (requires Pinup 1.4 or later): **Summary: after exiting a VP/FP table, a script is called to parse either the VPM nvram file or the PostIT-style high score text file, as well as Future Pinball fpram files, and generates a PNG file with the high score information for that particular rom (example: [[https://ibb.co/mJJquq|https://ibb.co/mJJquq ]]). The PNG file is saved, in this example, as GAMEFILE-06.png and stored in \POPMedia\Visual Pinball X\Gameinfo (Note: the "-06" suffix fits well into my personal setup, and the \Visual Pinball X\ folder is where I store all media for VP, independently of version). Users can choose to save in Topper or DMD folders if they fit their setup better.** __**Components:**__ \\ __1) PINemiHi 1.3.1 (from vpforums)__ \\ Takes romname.nv as parameter, and outs the high-score information via stdout\\ Note: romname is CASE-SENSITIVE\\ Note: PINemHi has an ini file that only requires pointers to VPinMAME\nvram\ and Future Pinball\fpram\\ Note: PINemHi supports Future Pinball but I did not spend any time on that __2) MagiImageMagick-7.0.8-14-portable-Q16-x86 ([[https://imagemagick.org/script/download.php|https://imagemagick.org/script/download.php]])__ \\ Note: Takes a txt file and merges it with a background picture.\\ Note: Tested with the portable 32-bit version\\ Note: lots of customization here, so you can experiment with font size, colors, background image, etc. __3) JPG for background (use [[http://www.google.com|www.google.com]]). I use a chalkboard in my setup (examples at [[https://tinyurl.com/yadrvdr2|https://tinyurl.com/yadrvdr2 ]])__ \\ Note: I'm currently using a 736×920 background image __4) windows batch script hiscore.bat that takes [ROMNAME|HSFilename] and "[GAMEFILE]" "[?GAMETYPE?]" as parameters__ @echo off SETLOCAL EnableDelayedExpansion REM START OF VARIABLES DECLARATION REM Set the following variables based on your setup REM Path to PINemHI SET "PINemHiPath=c:\Pinball\PINemHi" REM Path to ImageMagick SET "ImageMagick=c:\Tools\ImageMagick-7.0.8-14-portable-Q16-x86" REM Path to TXT files with HiScores SET "PINemHiHS=c:\Pinball\PINemHi\Text" If NOT EXIST "%PINemHiHS%" (mkdir "%PINemHiHS%") REM Path for temporary PNGs and background image SET "PINemHiPNG=c:\Pinball\PINemHi\PNGs" REM Filename of background image to be used SET "Background=chalkboard.jpg" REM Path to VPinMAME nvram files SET "NVRamPath=c:\Pinball\Visual Pinball\VPinMAME\nvram" REM Path to FP nvram files SET "FPNVRamPath=c:\Pinball\Future Pinball\fpRAM" REM Path to VP User files SET "UserPath=c:\Pinball\Visual Pinball\User" REM Path to 7z SET "Zexepath=c:\Tools" REM Folder where you want the VP high score PNGs with high scores placed (GameInfo, Topper, DMD, etc.) SET "POPVPMedia=c:\Pinball\PinupSystem\POPMedia\Visual Pinball X\GameInfo" REM Folder where you want the FP high score PNGs with high scores placed (GameInfo, Topper, DMD, etc.) SET "POPFPMedia=c:\Pinball\PinupSystem\POPMedia\Future Pinball\GameInfo" REM This suffix will be added to the second parameter passed (tablename) when saving high score PNGs SET "Suffix=-06" REM END OF VARIABLES DECLARATION REM Need to change to the PINemHi folder in order for the exe to read its INI cd "%PINemHiPath%" REM Uncomment the next line to regenerate PINemHi supported roms DB REM "%PINemHiPath%\pinemhi.exe" -lr>"%PINemHiPath%\supported.txt" REM We will select the right parsing routine SET ISTEXT=%3 if "%ISTEXT%" == "BAM" GOTO FUTURE SET ISTEXT=%3 if "%ISTEXT%" == "UltraDMD" GOTO ULTRADMD SET ISTEXT=%1 SET ISTEXT=%ISTEXT:~-5% set ISTEXT=%ISTEXT:"=% if "%ISTEXT%" == ".txt" GOTO POSTIT GOTO NVRAM :FUTURE REM Start of fpram processing SET TEMPTXT=%~2 SET OUTPUT=%POPFPMedia% REM if there is no FP nvram file, exit IF NOT EXIST "%FPNVRamPath%\%~2.fpram" exit REM call PINemHi pipped to a txt file "%PINemHiPath%\pinemhi.exe" %~2.fpram>"%PINemHiHS%\%~2.txt" REM delete TXT files with size 0 as they are empty for /f %%I in ("%PINemHiHS%\%~2.txt") do if %%~zI==0 del "%PINemHiHS%\%TEMPTXT%.txt" GOTO PNG :ULTRADMD REM Start of ULTRADMD processing SET TEMPTXT=%~1 SET OUTPUT=%POPVPMedia% REM extract hiscore files from iStor @echo High Scores>"%PINemHiHS%\%TEMPTXT%.txt" %Zexepath%\7z.exe x -o"%PINemHiHS%" "%UserPath%\VPReg.stg" %1 REM Then parse and build TXT file similar to POSTIT FOR /L %%G IN (1,1,4) DO ( more "%PINemHiHS%\%1\HighScore%%GName">>"%PINemHiHS%\%TEMPTXT%.txt" more "%PINemHiHS%\%1\HighScore%%G">>"%PINemHiHS%\%TEMPTXT%.txt" echo.>>"%PINemHiHS%\%TEMPTXT%.txt" ) REM we now clean temp files rmdir "%PINemHiHS%\%1" /s/q REM delete TXT files with size 0 as they are empty for /f %%I in ("%PINemHiHS%\%TEMPTXT%.txt") do if %%~zI==0 del "%PINemHiHS%\%TEMPTXT%.txt" GOTO PNG :POSTIT REM Start POSIT is file processing SET TEMPTXT=%~1 SET TEMPTXT=%TEMPTXT:"=% SET OUTPUT=%POPVPMedia% REM if there is no PostIT file, exit IF NOT EXIST "%UserPath%\%TEMPTXT%" exit REM We read the PostIT file into an Array set var[0]=0 set /a idx=0 for /f "usebackq delims=" %%I in ("%UserPath%\%TEMPTXT%") do ( set "var[!idx!]=%%I" set /a idx += 1 ) REM We generate a text file with the high scores table @echo High scores:>"%PINemHiHS%\%TEMPTXT%.txt" set /a "HSN=idx-5" set /a "HS=idx-10" :While IF %HSN% EQU %idx% GOTO EndWhile call echo %%var[!HSN!]%% %%var[!HS!]%%>>"%PINemHiHS%\%TEMPTXT%.txt" set /a HSN += 1 set /a HS += 1 GOTO While :EndWhile GOTO PNG :NVRAM REM Start of NVRAM processing SET TEMPTXT=%~1 SET OUTPUT=%POPVPMedia% REM if there is no nvram file, exit IF NOT EXIST "%NVRamPath%\%TEMPTXT%.nv" exit REM we will only process the nvram file if the rom is supported by PINemHi for /F "usebackq delims=" %%A in ("%PINemHiPath%\supported.txt") do ( if %%A==%TEMPTXT% ( REM call PINemHi pipped to a txt file "%PINemHiPath%\pinemhi.exe" %TEMPTXT%.nv>"%PINemHiHS%\%TEMPTXT%.txt" ) ) REM delete TXT files with size 0 as they are empty for /f %%I in ("%PINemHiHS%\%TEMPTXT%.txt") do if %%~zI==0 del "%PINemHiHS%\%TEMPTXT%.txt" GOTO PNG :PNG REM Call ImageMagick convert to create a PNG from the hiscore TXT file (note color, font and other options available) REM Choose to size the resulting image based on the background file you use REM if you'd like a monospaced output, add -font Courier IF EXIST "%PINemHiHS%\%TEMPTXT%.txt" ( type "%PINemHiHS%\%TEMPTXT%.txt" | "%ImageMagick%\convert.exe" -background none -fill yellow -pointsize 26 pango:@- -resize 570x730 "%PINemHiPNG%\%TEMPTXT%.png" ) REM Call ImageMagick composite to merge previous PNG with the background image, and center it IF EXIST "%PINemHiPNG%\%TEMPTXT%.png" ( "%ImageMagick%\composite.exe" "%PINemHiPNG%\%TEMPTXT%.png" "%PINemHiPNG%\%Background%" -gravity center "%OUTPUT%\%~2%Suffix%.png" REM Cleanup temp PNGs del "%PINemHiPNG%\%TEMPTXT%.png" ) REM done exit /B Note: the script is self-documented and could be modified as needed\\ Note: this script assumes Media for all VP versions are on the same folder. If this is not the case you can either modify the script or create different copies of the script for each system you have\\ Note: you NEED to define a few variables at the top of the script to fit your setup __5) On Popper, add this to the bottom of the VPX/9/PM5/FP close Script/s (make sure it runs after VP, and VPinMAME are closed):__ REM Generate HiScore media file "c:\Pinball\PinemHi\hiscore.bat" [?ROM?] "[GAMENAME]" "[?GAMETYPE?]" Note: notice the use of double-quotes for [GAMENAME] and [?GAMETYPE?] You then need to populate the following fields for each table using Game Manager: - For VPinMAME tables: romname in lowercase (eg. "xenon" no quotes) in the ROM field\\ - For UltraDMD tables: "UltraDMD" (no quotes) in Game Type. Also CGNAME in the ROM field (list of CGNAME mappings below)\\ - For PostIT method used by EM and some VP Originals: high score filename (eg. "Prospector_77VPX.txt" no quotes). You can find the filename within the table script: look for :"Const HSFileName="Prospector_77VPX.txt"). Some examples provided below\\ - For Future Pinball tables, just enter "BAM" (no quotes) in Game Type Note: that there are a few different formats of the PostIT Notes high-score files. This script supports the latest format as of Nov-2018 (mostly VPX tables), and will not work as-is with older versions. The file contents look similar to this: ———————-\\ 0\\ 0\\ 5\\ 1\\ 2\\ 1\\ 7500\\ 7000\\ 6000\\ 5500\\ 5000\\ AAA\\ ZZZ\\ XXX\\ ABC\\ BBB ---- Note: The script will add a suffix, if desired, to GAMENAME for the resulting PNG. Make sure you configure the MediaSearch field for your tables accordingly (example: GAMENAME* ) Useful SQL statements: Set GameType value for all FP tables UPDATE Games SET GameType= "BAM" where emuid=4 __Optional:__ \\ If you want to batch create all the PNGs in one shot, you can create a batch file with the following format: start hiscore.bat abv106 "Airborne (Capcom 1996)" SS Timeout 0 /NOBREAK start hiscore.bat acd_168h "ACDC nude (Stern 2012) Luci" DMD Timeout 0 /NOBREAK start hiscore.bat acd_168h "ACDC LE (Stern 2012) BiB" DMD Timeout 0 /NOBREAK start hiscore.bat acd_168h "FSS ACDC LE (Stern 2012) BiB" DMD Timeout 0 /NOBREAK start hiscore.bat acd_168h "ACDC LE (Stern 2012) LiBR" DMD Timeout 0 /NOBREAK start hiscore.bat acd_168h "ACDC LE (Stern 2012) Luci" DMD Timeout 0 /NOBREAK start hiscore.bat QuickDraw_75VPX.txt "Quick Draw (Gottlieb 1975)" EM Timeout 0 /NOBREAK start hiscore.bat RoadRace_69VPX.txt "Road Race (Gottlieb 1969)" EM Timeout 0 /NOBREAK Note: you can export the popper DB as a CSV file, import in excel and create this batch file in a minute\\ Note: you should still call the script when tables close to update the PNGs after each play session\\ Note: a batch process script like the above processed 832 tables in 2 minutes, generating 669 High-score PNGs on my setup __UltraDMD cgname mappings:__ America's Most Haunted –\\ Champions League Argentina (Original 2018) – uefa_cl18\\ Champions League S17 (Original 2017) – uefa_cl17\\ Champions League S18 (Original 2018) – uefa_cl18\\ Copa libertadores (Original 2018) – uefa_cl\\ Diablo Pinball (Original 2017) – diablo\\ Ghostbusters JP (Original 2015) Slimer – slimer\\ Giana Sisters (Original 2018) –\\ Gradius (Original 2015) –\\ Halloween Michael Myers Pinball Adventures (Orignal 2018) – HalloweenMichaelMyers\\ Jaws FP (Original 2018) – JAWSHighScore\\ Kiss Premium (Stern 2015) – kiss_original_2016\\ Kratos God of War (Orignal 2018) –\\ Legend of Zelda (Original 2015) – ZELDA\\ Mad Scientist (Original 2017) – madscientist\\ Masters of the Universe (Original 2018) – MOTUHighScore\\ Metal Slug (Original 2015) – Metal Slug\\ Minions (Original 2014) – minions\\ Mortal Kombat (Original 2015) –\\ Mortal Kombat II (Original 2015) – Mortal Kombat II\\ Need for Speed (Original 2018) – Need4Speed\\ Pokemon Pinball JP (Original 2015) – Pokemon_Pinball\\ PUP Champions League S18 (Original 2018) – uefa_cl18\\ PUP Clue (Original 2018) – Clue\\ PUP Masters of the Universe (Original 2018) – MOTUHighScore\\ Ready player one (Original) – Ready player one\\ Serious Sam Pinball (Original 2017) – SeriousSam\\ Space Cadet (Original 2018) –\\ Stranger Things (Original 2017) – StrangerThings\\ Streets of Rage (Original 2018) – STLE\\ Terminator Salvation (Original 2018) – TerminatorSalvation\\ The Last of Us (Original 2018) –\\ The Web (Original 2015) – TheWeb\\ Three Angels (Orignal 2018) –\\ Twilight (Original 1993) – TwilightTWILIGHT\\ Ufo Robot Goldorak (Original 2017) – Goldorak\\ Ufo Robot Grendizer (Original 2017) – Goldorak\\ Wizard of Oz (JJP 2013) – WoZ\\ Young Frankenstein (Original 2015) –\\ __Post-IT filenames:__ 2001 (Gottlieb 1971) – 2001_71VPX.txt\\ 300 (Gottlieb 1975) – 300_75VPX.txt\\ Airport (Gottlieb 1969) – Airport_69VPX.txt\\ Aquarius (Gottlieb 1970) – Aquarius_70VPX.txt\\ Atlantis (Gottlieb 1975) – Atlantis_75VPX.txt\\ Bank Shot (Gottlieb 1976) – BankShot_76VPX.txt\\ Beat Time (Williams 1967) – BeatTime_67VPX.txt\\ Beat Time (Williams 1967) (Beatles MOD) – BeatTimeBeatles_67VPX.txt\\ Big Brave (Gottlieb 1974) – BigBrave_74VPX.txt\\ Big Casino (Gottlieb 1961) – BigCasino_61VPX.txt\\ Big Shot (Gottlieb 1973) – BigShot_74VPX.txt\\ Blue Note (Gottlieb 1979) – BlueNote_79VPX.txt\\ Bristol Hills (Gottlieb 1971) – BristolHills_70VPX.txt\\ Bronco (Gottlieb 1977) – Bronco_77VPX.txt\\ Buckaroo (Gottlieb 1965) – Buckaroo_65VPX.txt\\ Canada Dry (Gottlieb 1976) – CanadaDry_76VPX.txt\\ Capt. Card (Gottlieb 1974) – CaptCard_73_2VPX.txt\\ Card Trix (Gottlieb 1970) – CardTrix_70VPX.txt\\ Circus (Zaccaria 1977) – CircusZaccaria_77VPX.txt\\ College Queens (Gottlieb 1969) – CollegeQueens_69VPX.txt\\ Cow Poke (Gottlieb 1965) – CowPoke_65VPX.txt\\ Crescendo (Gottlieb 1970) – Crescendo_70VPX.txt\\ Dimension (Gottlieb 1971) – Dimension_71VPX.txt\\ Domino (Gottlieb 1968) – Domino_68VPX.txt\\ Drop-A-Card (Gottlieb 1971) – DropACard_71VPX.txt\\ Duotron (Gottlieb 1974) – Duotron_74VPX.txt\\ El Dorado (Gottlieb 1975) – El_Dorado_75VPX.txt\\ Far Out (Gottlieb 1974) – FarOut_74VPX.txt\\ Fast Draw (Gottlieb 1975) – FastDraw_75VPX.txt\\ Firecracker (Bally 1971) – Firecracker_71VPX.txt\\ Flip a Card (Gottlieb 1970) – FlipACard_70VPX.txt\\ Free Fall (Gottlieb 1974) – FreeFall_74VPX.txt\\ FSS Fast Draw (Gottlieb 1975) – FastDraw_75VPX.txt\\ Fun Land (Gottlieb 1968) – FunLand_68VPX.txt\\ Fun Park (Gottlieb 1968) – FunPark_68VPX.txt\\ Gigi (Gottlieb 1963) – Gigi_63VPX.txt\\ Gold Strike (Gottlieb 1975) – GoldStrike_75VPX.txt\\ Groovy (Gottlieb 1970) – Groovy_70VPX.txt\\ Hearts And Spades (Gottlieb 1969) – HeartsAndSpades_69VPX.txt\\ High Hand (Gottlieb 1973) – HighHand_73_2VPX.txt\\ Jack In The Box (Gottlieb 1973) – JackInTheBox_73_2VPX.txt\\ Jet Spin (Gottlieb 1977) – JetSpin_77VPX.txt\\ Jumping Jack (Gottlieb 1973) – JumpingJack_73_2VPX.txt\\ Jungle (Gottlieb 1972) – Jungle_72VPX.txt\\ King Kool (Gottlieb 1972) – KingKool_72VPX.txt\\ King Pin (Gottlieb 1973) – KingPin_73VPX.txt\\ King Rock (Gottlieb 1972) – KingRock_72VPX.txt\\ Kings and Queens (Gottlieb 1965) – KingsAndQueens_65VPX.txt\\ Lariat (Gottlieb 1969) – Lariat_69.txt\\ Lawman (Gottlieb 1971) – Lawman_71VPX.txt\\ Magnotron (Gottlieb 1974) – Magnotron_74VPX.txt\\ Melody (Gottlieb 1967) – Melody_67VPX.txt\\ Mibs (Gottlieb 1969) – MIBS_69VPX.txt\\ Mini Cycle (Gottlieb 1970) – MiniCycle_70VPX.txt\\ Mustang (Gottlieb 1977) – Mustang_77VPX.txt\\ Neptune (Gottlieb 1978) – Neptune_78VPX.txt\\ New York (Gottlieb 1976) – NewYork_76VPX.txt\\ NOTLD-68 (Original 2018) – NOTLD68VPX.txt\\ NOTLD-68 Grunge (Original 2018) – NOTLD68VPX.txt\\ Old Chicago (Bally 1975) – OldChicago_75VPX.txt\\ Orbit (Gottlieb 1971) – Orbit_71VPX.txt\\ Out Of Sight (Gottlieb 1974) – OutOfSight_74VPX.txt\\ Outer Space (Gottlieb 1972) – OuterSpace_72VPX.txt\\ Palace Guard (Gottlieb 1968) – PalaceGuard_70VPX.txt\\ Pin-Up (Gottlieb 1975) – PinUp_73VPX.txt\\ Pioneer (Gottlieb 1976) – Pioneer_76VPX.txt\\ PlayMates (Gottlieb 1968) – Playmates_68VPX.txt\\ Pop-A-Card (Gottlieb 1972) – PopACard_71VPX.txt\\ Pro Football (Gottlieb 1973) – ProFootball_73VPX.txt\\ Prospector (Sonic 1977) – Prospector_77VPX.txt\\ Quick Draw (Gottlieb 1975) – QuickDraw_75VPX.txt\\ Road Race (Gottlieb 1969) – RoadRace_69VPX.txt\\ Rock Star (Gottlieb 1978) – RockStar_79VPX.txt\\ Rocket III (Bally 1967) – RocketIII_67VPX.txt\\ Roller Coaster (Gottlieb 1971) – RollerCoaster_71VPX.txt\\ Royal Guard (Gottlieb 1968) – RoyalGuard_70VPX.txt\\ Sing Along (Gottlieb 1967) – SingAlong_67VPX.txt\\ Sky Jump (Gottlieb 1974) – SkyJump_74VPX.txt\\ Slick Chick (Gottlieb 1963) – SlickChick_63VPX.txt\\ Snow Derby (Gottlieb 1970) – SnowDerby_70VPX.txt\\ Snow Queen (Gottlieb 1970) – SnowQueen_70VPX.txt\\ Soccer (Gottlieb 1975) – Soccer_75VPX.txt\\ Solids N Stripes (Williams 1971) – SolidsNStripes_71VPX.txt\\ Spin Out (Gottlieb 1975) – SpinOut_75VPX.txt\\ Spin-A-Card (Gottlieb 1969) – SpinACard_69VPX.txt\\ Spirit of 76 (Gottlieb 1975) – SpiritOf76_75VPX.txt\\ Strange World (Gottlieb 1978) – StrangeWorld_78VPX.txt\\ Super Spin (Gottlieb 1977) – SuperSpin_77VPX.txt\\ Sure Shot (Gottlieb 1976) – SureShot_76VPX.txt\\ Surf Champ (Gottlieb 1976) – SurfChamp_76VPX.txt\\ Surfer (Gottlieb 1976) – Surfer_76VPX.txt\\ Target Alpha (Gottlieb 1976) – Target_Alpha_76VPX.txt\\ Top Card (Gottlieb 1974) – TopCard_74VPX.txt\\ Top Score (Gottlieb 1975) – TopScore_75VPX.txt\\ Volley (Gottlieb 1976) – Volley_76VPX.txt\\ Wild Life (Gottlieb 1972) – WildLife_72VPX.txt\\ Wild Wild West (Gottlieb 1969) – WildWildWest_69.txt\\ Zip-A-Doo (Bally 1970) – ZipADoo_70VPX.txt\\ __Wrap:__ \\ This solution is provided AS-IS without support beyond this instructions page. Please put your mind into it and don't expect everything to work with a straight copy&paste. For further support, visit: ==== [[http://www.pinemhi.com/|http://www.pinemhi.com/]] for PINemHI\\ [[https://imagemagick.org/|https://imagemagick.org/ ]]for ImageMagick\\ [[https://stackoverflow.com/|https://stackoverflow.com/ ]]for Windows scripting\\ [[:support|http://www.nailbuster.com/wikipinup/doku.php?id=support|]] for Pinup PopperPopper\\ [[http://www.google.com|http://www.google.com]] for everything else __Still to do:__ \\ - HS for FX2/FX3 (high score files are encoded)\\ - HS for PROC (stored in \Games\gamename\config\game_user_data.yaml)\\ WIP - HS for UltraDMDtables \\ - Hiscores Stored in VPReg.stg. iStor file that could be read, but each game stores scores adn initials on files with no naming convention (nightmare) ===== Create info page for VP tables from IPDB ===== If you populate the IPDB number within Game Manager, the following code would create an info PNG file for each table based on IPDB's information (the file will be stored in the GameInfo folder). The file should be created only once, so you can run this as part of the launch or close scripts for the VP emulators. Make sure you modify the paths based on your setup Requires curl ( [[https://curl.haxx.se/windows/|https://curl.haxx.se/windows/]] ) and wkhtmltopdf ( [[https://wkhtmltopdf.org/|https://wkhtmltopdf.org/]] ) to be installed. REM Update IPDB and Hiscore info page info IF NOT EXIST "[MEDIADIR]GameInfo\[GAMENAME]-07.png" ( C:\Tools\curl\bin\curl https://www.ipdb.org/machine.cgi?id=[?IPDBNum?]>"[MEDIADIR]GameInfo\[GAMENAME].html" C:\Tools\wkhtmltox\bin\wkhtmltoimage --crop-h 2068 "[MEDIADIR]GameInfo\[GAMENAME].html" "[MEDIADIR]GameInfo\[GAMENAME]-07.png" del "[MEDIADIR]GameInfo\[GAMENAME].html" )