New in 3.62 (Update by mfuegemann)
- Added wpc_ph.vbs (based on wpc.vbs)

New in 3.61 (Update by vbousquet, wiesshund)
- Setup PinMameTimer to be a controller sync timer (interval = -2)
- Changed emulated lights to only update once per frame or, if FrameIndex call is not available, at 100Hz max
- Added staged flippers functionality to all kinds of machine .vbs files
- Changed "UseVPMModSol" to match the new VPinMAME 3.6 PWM support:
  True or 1 for the previous/legacy modulated solenoids (0..255 value), or 2 for physical solenoids/lamps/GI/AlphaNumSegments (0..1 value)
- Increase conMaxTimers to 50

New in 3.60 (Update by toxie, wiesshund)
- Added solarwars.vbs (based on peyper.vbs)
- Added LTDPecmen.vbs
- Added BallyG.vbs

New in 3.59 (Update by toxie, JP)
- NVOffset now uses the internal ROMName (needs VPM 3.5)
- Change coin key mappings for Inder games
- Added inder_skateboard.vbs

New in 3.58 (Update by mfuegemann, DJRobX, toxie, wiesshund)
- Added possibility to selectively disable B2S by setting new variable "B2SOff=True" (after ExecuteGlobal GetTextFile("controller.vbs"), but before LoadXXX)
- Added directional (pan/fade) sound to DropTargets, Kickers, Trough, BallStacks, Locks, Diverters
  VPinball versions prior 10.7 will use a constant size of 950x2100 for positional reference
  If some objects are not properly initialized, or Walls are used as Drop Targets, the old center sound will be played
- Add PullbackandRetract to cvpmImpulseP
- Added Atari1b.vbs
- Added joctronic.vbs
- Added s8_StillCrazy.vbs (System 8/Still Crazy)
- Added inder_atleta.vbs
- Slightly updated LTD3.vbs (3 coin chutes)
- Added WIP LTD4a.vbs
- Added constant (vpmFourStepSol) for new 4-solenoid stepper motor mech type used by High Roller Casino, Starship Troopers, and Playboy
- Cleanup scripts and separate the major documentation part into Scripts.txt
- Fix an old bug in controller.vbs that did uninitialized validity/version checks
- Fixed FPVPX.vbs (unsure how this was supposed to work before at all)

New in 3.57 (Update by nFozzy, DJRobX, chepas, Gaston)
- Beta 1 NF fastflips 2
- Add UsePdbLeds(top of script)/ChangedPDLEDs(controller)/PDLedCallback(callback) support and PDB.vbs especially for VP-PROC
- Added LTD3.vbs (LTD System III)
- Added FPVPX.vbs (1.01, helpers for Future Pinball conversions)

New in 3.56 (Update by nFozzy, DJRobX, Fuzzel)
- Add specialized sega2.vbs for Apollo 13 and GoldenEye
- Update gts1.vbs and hankin.vbs so that the common coin keys (e.g. "5") also add coins on Gottlieb System 1 and Hankin tables
- vpmFlips fixes / improvements
  - Fixed vpmFlips execute script error
  - Added extra error check for detecting outdated system vbs files when UseSolenoids = 2
  - Change GameOnSolenoid from 16 to 19 for Hankin
  - Fixed an execute script issue that was causing dead flippers for some system languages
- S.A.M. fast flips support: To activate, add InitVpmFFlipsSAM to the table init.
  Should work for most games (see PinMAME whatsnew for supported sets). May need additional configuration for two-stage flipper support.
- Whitestar fast flips support
- Capcom fast flips support
- Fix WPC tables that use 'cSingleLFlip' (regression from 3.55)
- Fix script errors if using NudgePlugIn.vbs
- Add Rubber, Ramp, Flasher, Primitive and HitTarget support to vpmToggleObj
- Add Rubber, Primitive and HitTarget support to vpmCreateEvents

New in 3.55 (Update by nFozzy)
- Prevent 'object not a collection' errors if vpmNudge.TiltObj isn't set
- Support for double leaf flipper switches
  - For now, keybinds for these staged flippers are defined in VPMKeys.vbs. By default they are set to LeftFlipperKey and RightFlipperKey, disabling them.
  - Adapting older tables requires vpmFlips: Create upper flipper subs and point SolCallback(sULFlipper) and SolCallback(sURFlipper) to them.
  - This may break compatibility with some older WPC tables that use the 'cSingleLFlip' method (More info in WPC.vbs), note that close to no 'modern' (e.g. VP8/VP9/VPX) table uses this anyway
- Integrated FastFlips, (new object vpmFlips): Low latency flipper response for games with pre-solid state flippers
  - Ensure 'vpmInit me' is called in the table init section
  - UseSolenoids = 2 enables and auto sets the game-on solenoid (based on GameOnSolenoid in the system .vbs script)
  - Important info on supported WPC games is documented in WPC.vbs
  - Pre-solid-state flipper games (except Zaccaria and LTD) should work perfectly. This includes Bally/Williams WPCs up to Terminator 2 / Party Zone
  - Data East / early Segas will work perfectly, unless they have ROM-controlled flipper effects
  - Fliptronics and WPC-S games (Addams Family through Jack Bot / WHO Dunnit) will work with caveats (no ROM controlled flipper effects, beware stuck balls. More info in WPC.vbs)
  - Sega Whitestar (Apollo 13 / Goldeneye / etc), WPC95 (Congo / AFM / etc), and Capcom and everything onward will not work
  - There's also a debug test command which may be useful if it's not working properly. Open the debug window (Accessible from the VP-escape menu, press the ">" button to bring up the text field) and type in 'vpmFlips.DebugTest'

New in 3.54 (Update by mfuegemann & nFozzy & Ninuzzu/Tom Tower & Toxie)
- Added UltraDMD_Options.vbs to configure Ultra DMD based tables globally (see the file itself for detailed descriptions)
- Added sam.vbs
- Added Class1812.vbs
- Added inder_centaur.vbs
- Restore basic functionality of cvpmDropTarget.CreateEvents for drop targets with an animation time (e.g. VP10 and newer)
- Minor cleanups and code unifications for all machines
- Add keyConfigurations to VPMKeys.vbs for Taito and also remap the hardcoded keycode '13' to keySoundDiag

New in 3.53 (Update by Toxie)
- Add more key mappings to help dialog

New in 3.52 (Update by DJRobX & Toxie)
- Change default interval of the PinMAME timer to -1 (frame-sync'ed) if VP10.2 (or newer) is running
- Add modulated solenoids to support ROM controlled fading flashers:
  To use, add "UseVPMModSol=True" to the table script
  Also use SolModCallback instead of SolCallback to receive level changes as input: It will be a level from 0 to 255.
  Just continue to use SolCallback if you only care about boolean values though, as it will only fire if level changes from on to off.
  Note: vpmInit MUST BE CALLED or VPM will not switch modes (if you are only getting 0 and 1 from SolModCallback then that may be the issue)

New in 3.51 (Update by mfuegemann & Arngrim & Toxie)
- gts1.vbs dip fix
- Add comments to cvpmDropTarget.CreateEvents: do not use this anymore in VP10 and above, as drop targets have an animation time nowadays
- Change default interval of the PinMAME timer to 3 if VP10 (or newer) is running, and leave it at 1 for everything else
- Fix missing SlingshotThreshold() when using VP8.X
- (Controller.vbs changes)
  - now its allowed to have each toy to be set to 0 (sound effect), 1 (DOF) or 2 (both)
  - new DOF types: DOFFlippers, DOFTargets, DOFDropTargets
  - all values are now stored in the registry (HKEY_CURRENT_USER\SOFTWARE\Visual Pinball\Controller\), and can also be changed from within VP10.2 and above
  - InitializeOptions call added to the controller init, for tables that want to use this functionality during gameplay (options menu via F6)

New in 3.50 (Update by Toxie & mfuegemann & Arngrim)
- Added MAC.vbs & IronBalls.vbs & Lancelot.vbs & Antar.vbs
- (Core changes)
  - Increased NVOffset limit from 10 to 32
  - Use temporary variables for Switch() calls to workaround current PROC issues
  - Controller.vbs user-folder detection fix, and add simple PROC usage via LoadPROC (see Controller.vbs for details)
  - Add UseVPMNVRAM = true to the table script (place before LoadVPM, or otherwise calling core.vbs)
    to make changed content of NVRAM available (since last update) via the NVRAMCallback (delivers a three dimensional array with: location, new value, old value)
    (requires VPM 2.7 or newer)

New in 3.49 (Update by Arngrim)
- Add new Controller.vbs to abstract DOF, B2S, VPM and EM controller loading, usage and sound/effect handling,
  see Controller.vbs header on how to use it exactly

New in 3.48 (Update by JimmyFingers)
- (Core changes)
  - Changed vpmNudge.TiltObj handling to use Bumper.Threshold / Wall.SlingshotThreshold temporary value changes rather than force / SlingshotStrength changes to disable tiltobj array objects
  - There existed a bug in VP since at least the 9.x versions where the Wall.SlingshotStrength value being set by scripting during game play did change the value but the slingshot behaviour / "Slingshot Force" (from the editor) of the wall object did not change (i.e. did not have an effect); As a result the attempted disabling of bumpers and slingshots after a tilt event on supported games (that can send a relay for vpmNudge.SolGameOn ) would only work for the bumper objects
  - Using thresholds instead also now has added benefit by not actually triggering the related _Hit or _Slingshot routines so animations, sound processing, and other potential nested subroutine calls will also not activate resulting in a better tilt simulation
  Note: NudgePlugin option .vbs files were also updated as they contain and are reassigned the vpmNudge routines when invoked

New in 3.47 (Update by Toxie)
- (Core changes)
  - Add UseVPMColoredDMD = true to the table script (place before LoadVPM, or otherwise calling core.vbs)
    to automatically pass the raw colored DMD data (RGB from 0..255) from VPM to VP (see VP10+ for details on how to display it)

New in 3.46 (Update by KieferSkunk)
- (Core changes)
  - Added two new classes: cvpmTrough and cvpmSaucer
    - cvpmTrough takes over for cvpmBallStack in non-Saucer mode.
      - Can handle any number of balls (no more "out of bounds" errors with lots of balls)
      - Accurately simulates ball movement and switch interaction in a real trough
    - cvpmSaucer takes over for cvpmBallStack in Saucer mode.
    - cvpmBallStack is now considered "legacy" - kept for compatibility with existing tables.  (No changes)
  - Updated vbsdoc.html with these new classes.
  - Added two helper functions, vpMin(a, b) and vpMax(a, b).
    - These each take two numbers (or strings) and return the lower or higher of the two (respectively).

New in 3.45 (Update by KieferSkunk)
- (Core changes)
  - Rewrote cvpmDictionary as a wrapper around Microsoft's Scripting.Dictionary object.
    This provides two major benefits:
    (1) Improved performance: Keys are stored by hash/reference, not by index, and existence checks and key location are now O(1) instead of O(N) operations.
    (2) Keys and Items can now both be primitive types or objects.  You can use integers, strings, etc. as keys, and you can use any object as an Item.
        Note: The only restriction is that a Key cannot be a Scripting.Dictionary or an Array.
  - cvpmTurnTable now smoothly changes speeds and directions. You can adjust the following properties to change the turntable's behavior:
    - MaxSpeed: Sets new maximum spin speed. If motor is on, turntable will smoothly accelerate to new speed.
    - SpinUp: Sets new spin-up rate. If currently accelerating, turntable will accelerate at the new rate.
    - SpinDown: Sets new spin-down rate. If currently slowing to a stop, turntable will decelerate at the new rate.
    - SpinCW: True for clockwise rotation, False for counter-clockwise.  If motor is on, switching this will smoothly reverse the turntable's direction.

New in 3.44 (Update by Toxie)
- (Core changes)
  - Added ability to define default ball mass (in VP Units) inside table script.
      Defaults to 1 unit if undefined. Example...
          Const BallMass = 2 '(place before LoadVPM, or otherwise calling core.vbs)
      Note that this should be used if changing the ball size via BallSize,
      as the mass is of course proportional to the radius of the ball: m=k*r^3.
      One can also use the diameter/size like in VP, so BallMass=k*BallSize^3 with k=1/125000.
      Example: BallSize = 55, so BallMass = (55*55*55)/125000 = 1.331.
  - Add UseVPMDMD = true to the table script (place before LoadVPM, or otherwise calling core.vbs)
    to automatically pass the raw DMD data (levels from 0..100) from VPM to VP (see VP10+ for details on how to display it)
  - Add toggleKeyCoinDoor in VPMKeys.vbs to choose between a real coindoor setup (e.g. cabinets) and the 'classic' on/off behaviour (e.g desktops/keyboards)
  - Add inverseKeyCoinDoor in VPMKeys.vbs to in addition choose between the behaviour of a real coindoor switch (key pressed = closed, key not pressed = open)
    or the inverted behaviour (key pressed = open, key not pressed = closed)
  - Increase maximum number of balls/conMaxBalls to 13 and conStackSw to 8 (for Apollo 13), use InitSw8() then instead of InitSw()
  - Deprecate vpmSolFlip2, as VP10 does not feature speed on flippers anymore

New in 3.43 (Update by Koadic)
- (Core Changes)
  - Minor adjustment to vbs loading via LoadScript to account for files in nonstandard locations
  - Fix minor bugs when loading some tables

New in 3.42 (Update by Koadic)
- (Core Changes)
  - Minor adjustment to vpmInit to unpause controller before stopping controller

New in 3.41 (Update by Koadic)
- (Core Changes)
  - Modified vpmInit routine:
      Added creation of _Exit routine to vpmInit to perform Controller.Stop (will retroactively effect all tables using vpmInit call)
      Modified vpmInit to create _Paused, _UnPaused, and _Exit separately, so if any don't exit, they will be created individually
      Modified Error handling to fix bug where vmpInit might throw "Invalid procedure call or argument" error
       and cause table not to work due to improper Table_Init scripting.
  - Added 2 functions: CheckScript(file) and LoadScript(file) that can return True/False as well as the latter loading the script if true.
     These check for existance in either the Tables and Scripts directory and can return a boolean value as well as the LoadScript autoloading
      the file, as opposed to my previous methods only checking the local folder containing the table being run.
     CheckScript(file) checks for existance, and if found returns a True value
     LoadScript(file) checks for existance, and if found, loads specified file (via ExecuteGlobal GetTextFile(file)) and returns a True value
      Examples:
          If LoadScript("thefile.vbs") Then DoThisOtherThing  ' If Loadscript found 'thefile' and loaded it (returned true) then do this other thing
          LoadScript("somefile.vbs")                          ' Checks for 'somefile' and loads it if it exists
  - Reworked CheckLEDWiz routine into generic LoadScript(file) routine to allow for better detection of script in the VP tables
     or scripts directory, not just current directory containing the table.
  - Added ability to load NudgePlugIn.vbs and if found, it will be loaded and replace current default nudging class.
      - This detection and autoloading can allow for 'on demand' replacement of other core components as well in the future.
  - Added ability to load GlobalPlugIn.vbs containing any custom scripting the user wants loaded with the core.vbs (instead of modifying the core)
-(Other Additions)
  - Updated B2BCollision.vbs with vpmBallCreate method and renamed new file to B2B.vbs (to maintain compatiblity with tables using old file).

New in 3.40 (Update by Koadic)
- (Core Changes)
  - Modified NVOffset routine to allow use of alternative controllers (like dB2S B2S.Server)
New in 3.39 (Update by Koadic)
- (Core Changes)
  - Hopefully fixed bug introduced in 3.37 when using a VP version older than 9.0.10
New in 3.38 (Update by Koadic)
- (Core Changes)
  - Added automatic detection of ledcontrol.vbs and enabling for LedWiz use, allowing concurrent use by both users and non users of an LedWiz
New in 3.37 (Update by Koadic)
- (Core Changes)
  - Added ability to define default ballsize (in VP Units) inside table script.
      Defaults to 50 vp units if undefined. Example...
          Const BallSize = 47 '(place before LoadVPM, or otherwise calling core.vbs)
New in 3.36 (update courtesy of Koadic)
- (Core Changes)
  - Added VPMVol routine for allowing setting of Global VPM Volume (normally adjustable from '~' key, but otherwise unsaveable without this)
- (System VBS Alterations)
  - Added keyVPMVolume in VPMKeys.vbs, set to use the F12 key
  - Added call to VPMVol routine in each system's .vbs file, allowing end-user to access the new routine
New in 3.35 (Update courtesy of Koadic)
- (Core Changes)
  - Added NVOffset routine for allowing use of multiple nvram files per romset name
New in 3.34 (Update by Destruk)
- (System VBS Additions)
  - Added Play2.vbs
New in 3.33 (Update by Destruk)
- (System VBS Additions)
  - Added LTD.vbs
New in 3.32 (Update by Destruk)
- (System VBS Alterations)
  - Added Playmatic Replay setting switches
New in 3.31 (Update by Destruk)
- (System VBS Additions)
  - Added play1.vbs
New in 3.30 (Update by Destruk)
- (System VBS Additions)
  - Added zacproto.vbs
New in 3.29 (Update by Noah)
- (System VBS Additions)
  - Added jvh.vbs and ali.vbs by Destruk for Jac van Ham and Allied Leisure
Corrected VPBuild Number for slingshots/bumpers and ball decals - Seeker
New in 3.27 (Update by PD)
- (System VBS Additions)
  - Added gts1.vbs by Inkochnito for Gottlieb System 1
New in 3.26 (Update by PD)
- (Core Changes)
   - Added "GICallback2" function to support Steve Ellenoff's new support in VPM for Dimming GI in WMS games
     GICallback returns numeric values 0-8 instead of a boolean 0 or 1 (on/off) like GICallback does.
     Existing tables will need to be altered to support dimming levels and need to use GICallback2 instead.
     The old GICallback is left intact so older tables are not broken by the new code

New in 3.25 (release 2) (Update by PD)
- (Core Changes)
   - Restored former flipper speed due to complaints about some tables having BTTF problem returned and a resolution
     of arguments over the settings
   - New Optional Flipper Code Added (vpmSolFlip2) that let's you specify both up and down-swing speeds in the script
     plus the ability to turn flipper sounds on or off for that call
     Format: vpmSolFlip2 (Flip1obj, Flip2obj, UpSpeed, DownSpeed, SoundOn, Enable)

New in 3.24 (Update by PD)
- (Core Changes)
   - Altered flipper code so the upswing defaults to your downswing (i.e. VBS no longer adds a different value)
     (This change was done due to arguments over issues now resolved)
   - I have decreased the return strength setting to be very low, though. So any downswing hits (say from a ball
     heading to the trough) won't get hit with any real power.  So, assuming you have a reasonably fast upswing,
     you won't get any balls through the flipper and any balls hit by the underside won't get pegged anymore, which
     is a more realistic behavior.

New in 3.23 (Update by PD)
- (System.vbs Additions)
   - SlamtTilt definitions added to AlvinG and Capcom systems
   - High Score Reset Switch Added to Williams System7 (S7.vbs)
   - Sleic.vbs system added (courtesy of Destruk)
   - Peper.vbs system added (courtesy of Destruk)
   - Juegos.vbs system added (courtesy of Destruk)

New in 3.22 (Update by PD)
- (Core Changes)
  - Outhole switch handling updated so it resets correctly with an F3 reset.
    This affects mostly Gottlieb System3 games (Thanks Racerxme for pointing this out)
  - Flipper handling modified to have a low return strength setting so any balls under such flippers
    won't get hit hard.  This allows the higher 'flipper fix' return speed without the associated hard hit issue.
- (System.vbs Additions)
  -Inder.vbs test switches updated (Thanks Peter)
  -Bally.vbs swSoundDiag value changed to -6 (Thanks Racerxme)

New in 3.21 (Update by PD)
-(Core Changes)
  - Attemped bug fix in the Impulse Plunger object that could cause weak plunges sometimes on full pulls

-(System.vbs Additions)
  -Zac1.vbs has the program enable switch added to it (Thanks TomB)
  -GamePlan.vbs has the accounting reset switch added to it (Thanks Incochnito)

-(Other Additions)
  -PD Light System VBS file updated to V5.5 (adds fading reel pop bumper handler and checklight function)

New in 3.20 (Update by PD)
-(System.vbs Additions)
  -Apparently Atari2.vbs uses 81/83 for the flipper switches and Atar1.vbs uses 82/84 so this repairs
   the Atari2.vbs file.

New in 3.19 (Update by PD)
-(System.vbs Additions)
  - Fixed the swLLFlip and swLRFlip switch numbers in the Atari1.vbs, Atari2.vbs and Atari.vbs files
    SolFlipper should now work with Atari tables using the updated file

New in 3.18 (Update by PD)
-(System.vbs Additions)
  - Added Atari1.vbs and Atari2.vbs files (Thanks to Inkochnito).
    -The old Atari.vbs file is now obsolete, but included for backwards compatability with any existing tables
     that may have used it. New Tables should use the appropriate Atari1.vbs or Atari2.vbs files.

New in 3.17 (Update by PD)
-(System.vbs Additions)
  -Fixed wrong switch definition in Sys80.vbs for the self-test switch.  The operator menus should work now.
   (Thanks to Inkochnito for pointing it out).
  -Added inder.vbs, nuova.vbs, spinball.vbs and mrgame.vbs files (Thanks to Destruk)

New in 3.16 (Update by PD)
-(System.vbs Additions)
  -Added "BeginModal" and "EndModal" statements to each system (required for latest versions of VP ( >V6.1) to
   avoid problems during the VPM "F3" reset.
-(Other Additions)
  - PDLightSystem Core updated to version 5.4

New in 3.15 (Update by PD)
-(Core Additions)
  - Added a new higher resolution Impulse Plunger Object
     (It uses a trigger to plunge the ball.  It can be a variable Manual Plunger or function as an Automatic Plunger)
     (It also features random variance options and optional pull / plunge sounds)

-(System.vbs Additions)
  - Fixed wrong switch number for Tilt & Slam Tilt in Sega.vbs
  - Added Master CPU Enter switch to S7.vbs for Dip Switch control in Williams System7

-(Other Additions)
  - Added PDLightSystem.vbs (V5.3) file to archive
    (open it with a text editor to see how to use it; it's called separately like the core file)

New in 3.14 (Update by PD)
-(System.vbs Additions)
  - Added latest Zac1.vbs and Zac2.vbs files to archive

New in 3.13 (Update by PD)
-(Core Additions)
  - Added Destruk's code to "Add" or "Remove" a ball from the table when "B" is pressed.
  - Added "AutoplungeS" call which is the same as "Autoplunger" except it will play a specified sound when fired

-(System.vbs Additions)
  - Taito.vbs updated to fix service menu keys and default dip switch menu added
  - Dip Switch / Option Menu "class" code added to all table VBS scripts to ease menu coding for table authors
  - Fixed some labeling errors and organization and added a "Last Updated" version comment at the start of each file

New in 3.12
  - Made flipper return speed a constant conFlipRetSpeed
  - set conFlipRetSpeed to 0.137 to reduce ball thru flipper problem

New in 3.11
  - Added a short delay between balls in the ballstacks to ensure
    that the game registers the switches as off when balls are rolling
    in the trough. All balls should probably move at the same time but it is
    a bit tricky to implement without changing a lot of code.
  - Removed support for the wshltdlg.dll since funtionality is in VPM now

New in 3.10
  - Public release
