PinballY Update History

09-13-2018 (1.0.0 Alpha 20)

* Upgrade notice: the Settings.txt file variables for video capture
times have changed from "Capture.<type>Time" to "Capture.<type>.Time".
The change is the insertion of the '.' before Time.

 Capture.PlayfieldVideoTime  ->  Capture.PlayfieldVideo.Time.
 Capture.BackglassVideoTime  ->  Capture.BackglassVideo.Time.
 Capture.DMDVideoTime        ->  Capture.DMDVideo.Time.
 Capture.TopperVideoTime     ->  Capture.TopperVideo.Time.

You can either hand-edit Settings.txt to update the variable names, or
you re-enter settings in the Media Capture section of the options
dialog.  This change was to make the names more readable and more
consistent with the new related settings for manual start/stop modes.


* Batch capture!  This works a lot like the regular capture process
for a single game, but lets you apply the operation to more than one
game at a time.  Batch capture is great for setting up a new machine
with relatively little manual intervention.  You can also use it from
time to time to automatically back-fill missing media for games you've
added recently, since one of the options is to capture only missing
items.

  - On the Operator Menu, use the Batch Capture command to initiate
  a batch capture.

  - The Batch Capture command walks you through a multi-step
  process to select what to capture:

    - Which games to include in the batch  All Games, Games Marked
      for Capture (see below), and games from the currently active 
      filter, as set in the main menu (e.g., 70s Tables, Williams 
      Tables, Favorites, a category filter).

    - Which media types to capture in this batch.  This uses the
      same selection list as in a regular single game capture.

    - What to do about games with existing media of the selected
      types: keep existing media (that is, only capture that media
      item for games that don't already have it) or replace any
      existing items with a new capture.

  - Once you've selected all of the capture criteria, you'll
  have a chance to review the items to be captured, and then
  start (or cancel) the batch operation.

  - On the Game Setup menu, the "Mark for Batch Capture" command
  flags an individual game for inclusion in a future batch capture.
  This lets you pick a specific set of games for capture without
  doing the capture right away.  This is intended to let you flag
  games that need additional media items as you encounter them
  during a regular gaming session, without having to interrupt the
  gaming session to do the capture immediately and without having
  to scribble down a note somewhere.  Just flag games as you come
  across them, and then at a convenient later time, fire off a
  Batch Capture command with the "Games Marked for Capture" subset
  selection.  

  - After any successful capture operation (batch OR single), the 
  Mark for Capture flag is automatically removed from the game
  that was involved in the successful capture.

* All of the capture media types can now be set to manual start and/or
stop mode, via the Media Capture page in the settings. 

  - "Manual Start" means that the capture process will stop and
  prompt you to press a button before it starts capturing that
  particular item.  If Manual Start isn't selected for an item, the
  capture process simply starts capturing that item immediately as
  soon as it's that item's turn in the capture sequence.  Manual
  start is useful if you want to capture at a particular point in
  the game's attract mode sequence.  This might be especially useful
  for DMD videos, since most newer machines display a cycle of
  messages on the DMD between games; you could use this to start the
  capture at the beginning of a cycle.

  - "Manual Stop" means that a video or audio capture will continue
  until you manually stop it by pressing a button, rather than using
  a fixed timer.  The status window will prompt you for this while
  the capture is taking place, to remind you that you have to
  intervene when you want the capture to end.  Manual Stop is useful
  if you want to time a video to end on a good boundary for looping.
  This is might be especially useful for DMD videos, so that you can
  capture exactly one attract mode message cycle.

* Added a Pause Game command.  This can be mapped to any keyboard key
or joystick button, using the normal Buttons page in the options
dialog.  

When a game is running, PinballY monitors the Pause Game button, just
like it monitors the Exit Game button.  When you press the assigned
button, PinballY interrupts the game temporarily by bringing the main
PinballY window to the foreground.  You can use menu commands to
switch back to the game when you're ready to resume, or terminate the
game or exit PinballY.

This is an experimental feature at the moment: it works with VP but
hasn't been tested with other systems yet.  All it actually does is
bring PinballY to the foreground.  This happens to work nicely with
VP, because VP freezes its physics whenever it's in the background.
If every other system works the same way, great.  If not, we'll have
to look at adding system setup options to do whatever's needed in
other systems to effect similar physics freezes.

* For two-stage game launches (where the initial process that PinballY
launches is actually just a launcher that starts a third process where
the actual game resides, a la anything Steam-based, or FP + BAM),
PinballY now waits for the final game process to terminate when you
press the Exit Game button.  In the past, if you used the Exit Game
command in the middle of the first stage of the launch, when the
initial launcher was still working on loading the final game program,
PinballY would leave the game program running because it only bothered
to wait for the initial launcher stage to exit.  PinballY now tries to
wait for the final game to exit, even if you press the Exit Game
button early on before the actual game process has even started.

* For Alphanumeric style high scores in the video DMD window, limit
the display to 2 lines at a time, to better match the original style
of the generation of games that used these displays.

* Fixed drawing problem with message boxes in the main playfield
window on high-resolution monitors.


09-04-2018 (1.0.0 Alpha 19)

* Added DOF support to the 64-bit version.  Note that this requires
installing the latest experimental version of DOF R3++, dated
2018-09-04 or later.  You can find that here:

  http://mjrnet.org/pinscape/dll-updates.html

* Added a setting to turn logging for DOF-related messages on and off,
and added logging for DOF setup events.

* Added [ROTATE(window,angle)] commands for Run Before and Run After
commands for game launches.  These allow rotating UI windows during
the launch to compensate for system monitor layout changes made by the
commands.

* Ensure that the Run Before and Run After commands are always paired,
to allow the After commands to clean up any system-wide settings
changes made in the Before commands.  In particular:

  - Run After (2) will always run if Run Before (1) is executed
  - Run After (1) will always run if Run Before (2) is executed

* Added substitution variable expansion to the Table Folder in the
system settings.  Currently, there's just one defined variable:

  - [PinballY] expands to the PinballY install folder, as a full
    absolute filename path

* Added a [PinballY]\Farsight folder containing ".pinballArcade" files
for all of the games in the current edition of The Pinball Arcade by
Farsight Studios.  These are just empty files that are there for the
sake of their names.  If you own Pinball Arcade, you can use these to
populate the game wheel with all of the Farsight tables by updating
the system settings for Pinball Arcade in your options as follows
(enter the text [PinballY] literally):

  - Table Folder:  [PinballY]\Farsight
  - Default extension: .pinballArcade

PinballY will use that information to scan the Farsight folder, just
like it scans the Visual Pinball and Future Pinball table folders for
their games, which will allow it to discover the list of Farsight
tables.  This will create standard "unconfigured" entries in the game
wheel, which you can configure as usual with the Game Setup menu.  You
can use the "Hide Game" command in the Game Setup menu to hide any of
the games that you don't own. 


08-31-2018 (1.0.0 Alpha 18)

* Improve the drag-and-drop UI for dropping individual media files:

  - Add visual drop areas for different media types when a file 
    could be used in different ways.  For example, when dragging a
    PNG file onto the playfield window, it could be used as the 
    table background image or as a wheel logo image.  The new
    on-screen display lets you specify which to use by dropping 
    the file onto the appropriate area.

  - Audio files can now be dropped onto the playfield window to
    add table audio and launch audio to a table.

  - Skip menu prompts when dropping a media file into a role
    where there isn't any existing file; just add the file.  Only
    prompt when an existing media file would be replaced, and then
    use a simple confirmation prompt (rather than the more complex
    menu shown for media packs, which are necessarily more elaborate
    because they have to deal with multiple files).

  - Automatically remove the result message after a few seconds
    when the drop succeeds (rather than forcing the user to dismiss
    it manually), since it's usually obvious enough that the drop
    succeeded in that the dropped item(s) will appear in the UI
    immediately.

* In cases where there are two or more files for a given media type of
different formats (e.g., two table background images for the same
table, one JPG and one PNG), the one with the latest timestamp is
used.  When installing files via drag-and-drop, files are always
updated with the current time when installed, so this ensures that the
most recently installed file is displayed when there are multiple
matching files.

* Add a second phase to the Run Before and Run After commands, to
allow for finer control over visual effects while the commands are
processed.  Each system now has two, labeled (1) and (2), for the Run
Before and Run After commands.  Run Before (1) is executed with a
plain blank screen showing in the main playfield window, which makes
for smoother visual transitions if the command needs to make any
global changes to the monitor layout.  Run Before (2) is executed with
the "Loading game" message displayed in the main window, so it
shouldn't make any display adjustments, but it can carry out
longer-running tasks more comfortably given that the user can see some
visual feedback that the launch is in progress.  Run After (1) and (2)
essentially reverse this process: Run After (1) is run while the
"Exiting game" message is still on the screen, then the main window is
cleared to all black, and finally the Run After (2) command is
executed.  As with Run Before (1), Run After (2) can make display
layout changes more smoothly thanks to the blank black screen.

* Add [HIDE] and [MINIMIZE] flag options to the Run Before and Run
After commands, to control the window appearance of the launched
command.  These are useful to make the visual transitions smoother
when launching certain types of commands.  [HIDE] launches the program
with its window hidden; this is useful for CMD scripts, for example,
to prevent the DOS box from popping briefly into view.  [MINIMIZE]
launches it with its window initially minimized, which is useful for
background tasks that you want to leave running during the game
without seeing their UI.  (You can also use [HIDE], but you might
prefer [MINIMIZE] for a background task so that you can switch to it
with the Windows desktop if it becomes necessary to intervene manually
for some reason.)

* Fix libvlc video/audio media loading for filenames that contain
non-ASCII characters (by converting filename strings passed to libvlc
to UTF-8).

* Improve the way that DmdDevice.dll is found and loaded when using
the 64-bit version of PinballY:

  - If a 32-bit version of VPinMAME is installed, PinballY will still
    be able to find it, even when running in 64-bit mode.  In the
    past, 64-bit PinballY could only find 64-bit VPinMAME, which is
    rarely installed.

  - You can now install 32-bit and 64-bit versions of DmdDevice.dll
    side by side, for compatibility with 32-bit and 64-bit clients.
    Most people use the 32-bit version of Visual Pinball and VPinMAME,
    which require the 32-bit version of the DLL, because Windows
    doesn't allow mixing 32- and 64-bit code - the DLL and EXE type
    always have to match.  That created a problem if you wanted to
    use 64-bit PinballY, for the same reason.  The solution is that
    you can now install BOTH the 32- and 64-bit version of the DMD
    DLL, and you can install them side by side in the VPinMAME folder.
    Simply install the original 32-bit version as usual, and then 
    ALSO copy the 64-bit version of DmdDevice.dll into the same
    folder, RENAMING IT to DmdDevice64.dll.  

    64-bit PinballY will always look for DmdDevice64.dll first, and
    use that file if it exists.  If not, it looks for DmdDevice.dll
    as usual.  So if you're already using 64-bit VPinMAME, there's
    no need to rename anything or create extra copies of the DLL.
    The extra DmdDevice64.dll is only needed if you need BOTH the
    32-bit and 64-bit versions to be installed simultaneously.

* Make capture work properly for Windows 8.1 and 10 systems with
multiple monitors that use different DPI settings and/or display scale
settings by marking FFMPEG as "DPI aware".  In the past, FFMPEG
sometimes reported errors or grabbed the wrong screen area when
capturing in such setups.  The problem was that the standard build of
FFMPEG isn't marked as being compatible with the newer "high DPI"
features in Windows 8.1 and 10 that allow more user control over the
display layout.  With the compatibility flag missing, Windows was
forced to "lie" to FFMPEG about the monitor layout, which resulted in
the errors and mismatched pixel areas when capturing from PinballY.
The solution was to add the flag to the FFMPEG executable, to allow
FFMPEG to see the true monitor layout.  The reason Windows has this
flag in the first place is that older GUI programs that aren't
programmed for the newer display features sometimes get the UI layout
wrong, so Windows by default virtualizes the pixel layout for old
programs to protect them from such anomalies.  But FFMPEG doesn't have
a GUI, so the virtualization did no good for it and caused us lots of
problems with capture.  (I personally think the official FFMPEG
distribution ought to add this same flag, but there might be
complications for more general FFMPEG use cases that I'm unaware of.
For our limited purposes of using FFMPEG as a capture tool, I'm pretty
sure it's a completely safe change, given that FFMPEG doesn't use or
affect display layout in any other way for this use case.)

* Fix a weird problem with caption bar drawing in the playfield and
backglass windows that occurred when one of these windows was
initially created in full-screen (based on the saved settings from the
last session) and then later switched back to windowed mode.


08-27-2018 (1.0.0 Alpha 17)

* Try to fix problem releasing real DMD device while a game is running
(so that the game can take it over)

* Stop including an empty category name in the category selection list
in the game setup menu


08-25-2018 (1.0.0 Alpha 16)

* Try fixing font scaling for high-DPI monitors

* Recognize the temporary mjr test build of dmd-extensions as
containing fixes

* Fix slight UI pause during game switching when real DMD is in use

* Use actual monitor aspect ratio for playfield background videos and
images when in full-screen portrait mode.  (A fixed 16:9 aspect ratio
is still used in other cases.)  Some computer monitors have slightly
different aspect ratios (e.g., 16:10) from the HD standard; using the
live monitor's actual aspect ratio fills the screen, which is usually
preferable to letterboxing or windowboxing the image when the monitor
is close to but not exactly 16:9.  (This probably won't affect many
people, because 16:9 is practically universal as far as pin cab
monitors go.  But if there actually is anyone out there with a
non-16:9 pin cab monitor, and you think this makes it look worse, this
could easily be turned into an option.)


08-23-2018 (1.0.0 Alpha 15)

* For testing: Mark program as DPI-aware, for (hopefully) better
behavior on 4K monitors and other high-DPI monitors.

* Fixed line wrapping of very long manufacturer names in the popup
game info box.


08-22-2018 (1.0.0 Alpha 14)

* Speed up VP X exit times.  (In the past, VP X exit was really slow
due to a workaround we were using for a VP 9 problem that made VP 9
crash if we closed it while it was showing a dialog.  The workaround
had to do with the order of closing the child app's windows.  The new
approach is safe against the VP 9 crash problem but lets VP X exit
quickly.)

* Explicitly terminate ffmpeg capture when the game exits prematurely
or the user cancels the operation.  (In the past, we didn't try to
terminate ffmpeg separately, so it could sometimes keep recording the
screen even though the game wasn't running any more.)

* Include blank lines between sections in the high scores box.

* Reduce the high score box font size as needed to make it fit a
reasonable window height for games with unusually long high score
lists (I'm looking at you, Medieval Madness).

* Clean up some anomalies with on-the-fly changes to the real DMD
enable/disable status when dmd-extensions is in use.


08-21-2018 (1.0.0 Alpha 13)

* Add "Delete Game Details" command to the game setup menu, to delete
the bibliographic database entry for the selected game.

* Add "Info Box" options page, with options for what to show in the
auto popup info box (and whether to show it at all).  Most details can
now be separately enabled or disabled.  Also added options for showing
the game wheel logo in place of the plain text title; showing the
table file name; showing the table type (solid state, etc), in full or
abbreviated; and for whether or not to use graphical logos for the
manufacturer and system type.

* Take the mirror/flip display transformations into account during
video capture.

* Reverse the 90- and 270- degree rotation senses for the capture.
These were backwards in past versions.

* Mirror/flip the capture status box to match the settings of the
window it's over.

* When deleting media from the "Show Media Files" list, stop video
playback to ensure that we don't create our own sharing conflict with
the file by holding it open for video playback.

* Try to work around a dmd-extensions problem (dmd-ext issue #125,
crash if no game name set: workaround is to set a dummy game name
after startup, taking care not to do this more than once to avoid
the separate dmd-ext issue #123).

* Log FFmpeg results to log file whenever FFmpeg fails, even if Media
Capture logging is disabled in the options.  You'll probably want to
see any FFmpeg errors even if you don't normally need any capture
logging information, to help diagnose whatever went wrong.


08-18-2018 (1.0.0 Alpha 12)

* Tweaked ffmpeg parameters per STV's findings to try to get 4K
capture working

* Fix error message logging and process exit code recognition in ffmpeg launch

* Switch to 64-bit ffmpeg in 64-bit release bundle

* Update libvlc 32-bit to 3.0.3

* Clear media on real DMD during game play (restores previous behavior
broken in alpha 11)


08-17-2018 (1.0.0 Alpha 11)

* If a real DMD is active, close our connection to it whenever we
launch a game, to avoid contention with the game for access to the
device.  (Exception: we don't do this when using dmd-extensions in
virtual mode, due to a problem in the DLL that crashes the process in
this situation.)

08-16-2018 (1.0.0 Alpha 10)

* Changed the Auto Launch feature to use Windows Task Scheduler logon
tasks instead of the Run registry key.  The registry key didn't work
with Admin mode launches, and didn't seem reliable on some machines
even for regular user mode launches, especially with the 64-bit
version.  Task Scheduler is the more officially supported way to do
these sorts of launches, so it should be reliable for all cases.


08-13-2018 (1.0.0 Alpha 9)

* Added the table type (Solid State, Electromechanical, Mechanical) to
the "Information" display box

* Added support for manufacturer and system logos.  Place PNG logo
files in <media path>\Company Logos and <media path>\System Logos.
For the manufacturers, the files are matched based on the company
name in the game database, but you can also create different logos
for different eras by using this format for the file names:
Gottlieb (1971-1982).png.  For games where the release year is
known, PinballY will try to match a logo for the era containing
that year.  For systems, the system name as defined in the options
is matched.  Systems will also be matched by prefix when there's
no exact match, so the file "Visual Pinball.png" will match 
systems "Visual Pinball 9.2", "Visual Pinball X", etc.  This
lets you create different logos for different system versions
if you like, but also lets you use a common logo for all
versions, as long as you follow the naming convention of placing
the version at the end of the system name.


08-11-2018 (1.0.0 Alpha 8)

* Change the minimum video card "shader model" required to shader
model 4 (from 4.1), for compatibility with older video cards.  (The
shader model is basically a Microsoft-defined API that has to be
implemented in the video card hardware and/or device drivers, so
higher shader models generally require newer or more powerful video
cards.  My goal is to be compatible with anything that can run Windows
7 SP1 and Direct3D 11, but it's not quite that simple because the
shader model is an additional dimension of system requirements that
depends entirely on the video card, regardless of how up-to-date your
Windows and D3D software are.)

* Use the correct auto-launching registry key for 64-bit builds.
32- and 64-bit programs are auto-launched with different registry keys:
64-bit: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
32-bit: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

08-10-2018 (1.0.0 Alpha 7)

* Added several new logging options, to get (lots) more detail about
various operations.  See the new Log File page in the options dialog.
Some of the new options add a lot of extra information to the log
file, so it's best to keep them disabled unless you're trying to
debug something in that particular area.

* Look for dmddevice.dll in the PinballY program folder first, then in
the VPinMAME folder.  This allows using a specific version of the DLL
with PinballY, without affecting what VPM uses, simply by copying the
desired DLL into the PinballY install folder.

* Detect the dmd-extensions version of dmdevice.dll, and check if its
"virtual" device (the fake on-screen DMD window) is enabled.  If so,
suppress loading the DLL unless the config setting for RealDMD is
explicitly ON; skip it on AUTO.

* Detect the dmd-extensions version of dmddevice.dll and work around
a crash bug in the DLL if we identify it.  (I found the problem in
the DLL and sent a pull request to freezy with the fix, but that will
take a while to propagate around, so for the time being we have to
deal with the existing buggy version of the DLL.)  If you ran into
a problem in the past where PinballY (a) showed a second DMD window 
on the screen that was stuck on top, and (b) tended to crash the
first time you switched to a different game in the wheel UI, this
should fix it.


08-07-2018 (1.0.0 Alpha 6)

* Added media file viewer: select via the Game Setup menu; shows
all media folders for the game and all matching files; commands to
open folders in Windows Explorer and delete individual media files

* Added Table Audio media type support, including capture

* Remember dialog window positions, and set the initial default
position so that it's over a non-rotated window
 
* Add media file name template to game info box

* Add option to suppress splash screen at startup

* Fix extra separator bar in "last played" filter menu

* Added a "watchdog" process that restores the desktop taskbar to
visibility, if PinballY happens to crash or otherwise exit abnormally
while the taskbar was hidden for a game launch

08-03-2018 (1.0.0 Alpha 5)

64-bit build, to better support 4K video (libvlc needs about 600MB to
play back one 4K video); change memory management for video player to
ensure D3D11 resources are always allocated and released on the main
UI thread.

08-02-2018 (1.0.0 Alpha 4)

Fix slight UI pause when generating alphanumeric high score images;
ensure video player D3D11 resources are released on main thread, to
avoid any driver-dependent threading issues with resource deletion;
create game database folders automatically as needed.

07-31-2018 (1.0.0 Alpha 3)

Added alternative high score display formats: alphanumeric 16-segment
display style (for 1980s solid-state machines with segmented
displays); typewriter style (for EM machines).

07-27-2018a (1.0.0 Alpha 2)

Bug fix: the program could get stuck on startup searching for
PinballX, if PinballX wasn't installed.

07-27-2018 (1.0.0 Alpha 1)

Inaugural release
