PinballY Update History

02-02-2019 (1.0.0 Beta 3)

* Startup videos can now be displayed in any or all of the windows.
As with the playfield window startup video, each window's startup
video goes in the Media folder within the main PinballY folder, and
uses a special name that identifies it as a startup video for one
of the windows:

   Playfield:  Startup Video.mpg       (or .mp4, etc)
   Backglass:  Startup Video (bg).mpg
   DMD:        Startup Video (dmd).mpg
   Topper:     Startup Video (topper).mpg
   Inst Card:  Starutp Video (instcard).mpg

The startup videos are loaded and started simultaneously (or as close
to simultaneously as possible).  You can therefore synchronize effects
across windows simply by editing the videos to place simultaneous
events at the same point in time in each video.

(Addresses issue #33 on github.)

* There are now two options for how the playfield background image or
video is displayed.  By default, the original aspect ratio of the
image or video is maintained, and the image is made as large as
possible such that it fits entirely within the window.  Alternatively,
you can "stretch" the image or video so that it exactly fills the
window.  This might be preferable if you're using a desktop setup
rather than a pin cab, and might even be preferable on a pin cab if
you have a mix of background videos captured with slightly different
aspect ratios.  The new option can be found in the Audio/Video section
in the settings dialog.  (Addresses issue #15 on github.)

* You can now continue to show PinballY's backglass, DMD, topper, and
instruction card windows while a game is running.  By default, these
windows are all blanked out to a plain black background when a game is
launched, which is how it always worked in the past.  But now you can
make any of these windows continue to show its image or video for the
running game.

This is controlled individually for each window AND each game.  For
example, you can make the VP version of Aladdin's Castle show just the
PinballY DMD graphics while the game is running, while the FP version
of the same game shows both the PinballY backglass and DMD graphics.

To select which windows should continue to show graphics during a
game, use the Game Details dialog, which you can reach from the Game
Setup menu.  (The Game Setup menu, in turn, can be reached from the
Operator menu: with the default key mappings, press "0", the digit
zero, to bring up the Operator Menu.)  Look for the "Show when
running" checkboxes.

When a window is designated to keep showing its graphics during the
game, PinballY also makes it a "topmost" window, which helps ensure
that it's not covered up by a window that the game program opens.
This lets you use the feature not only to fill in for display elements
that a game lacks entirely, but also to replace display elements that
the game displays but which you don't like.  For example, some game
systems can only display static backglass images, which you might
prefer to cover with the PinballY video display instead.  This feature
naturally does that by ensuring (or at least trying to ensure) that
the PinballY window stays in front of any window the game system opens
in the same area of the display.

(This address issue #26 on github.)

* The Topper window and main playfield windows now have "Show window
borders" options in their right-click context menus.  This allows
hiding the caption bar and sizing borders on these windows if desired.
(This is the same borderless option that was already available for the
DMD, instruction card, and backglass windows.  You can move a
borderless window by dragging it with the mouse anywhere within the
window, and you can resize by dragging near any edge or corner of the
window with the mouse, as though the normal sizing borders were still
there, even though you can't see them.)

* You can now disable DOF effects, via a checkbox on the new DOF page
of the settings dialog.  (Issue #27 on github.)

* The ID for each game in the GameStats.csv file has been changed to
include the manufacturer and year of the game, if known.  In the past,
the ID consisted only of the game's title and system name, which was
problematic because there are a number of real pinball machines that
share titles with other, unrelated machines (e.g., IPDB lists 9
different machines named "Circus").  Using only the title made it
impossible to distinguish the GameStats records for different tables
sharing the same name, so the system couldn't store separate star
ratings, play times, etc for each like-named game.  

The change should be transparent, because the program looks for a
record using the old "Title.System" ID format whenever it can't find
an entry under the new format, and then immediately updates the record
to the new format.  So your GameStats.csv file should be automatically
updated to the new format the first time you run the new version, and
all of your existing records should be carried forward.

(Issue #35 on github.)

* Javascript additions: status line events (StatusLineEvent);
StatusLine objects; a new optional "overrides" parameter to
mainWindow.playGame().  See the Javascript section in the help files
for details.

* The configID property of a GameInfo object returns the "new" config
ID, which uses the format "Title (Manufacturer Year).System".  (The
manufacturer and/or year are omitted if they're not configured in the
game's database entry; the System is "Unconfigured" if that hasn't
been set for the game.)  If you created any external files that used
the old config ID that was based only on the title and system, they'll
no longer match the entries, so you'll have to fix up your files by
hand.

* Fixed a couple of problems in the 64-bit ZIP distribution (these
didn't affect the MSI): 7z.dll was missing; the folder containing the
ffmpeg files was incorrectly named ffmpeg64.


01-22-2019 (1.0.0 Beta 2)

* The system now features a built-in Javascript engine, offering
extensive new customization capabilities.  Scripts can intercept many
UI events to change or augment the normal handling of buttons and
commands; create custom menus; create custom filters; send HTML
requests to integrate with Web applications; and more.  See
"Javascript Scripting" in the help for details.

* You can now set up a custom startup video.  Place a video file
called "Startup Video.mp4" in the PinballY\Media folder.  (You can use
.mp4 or any of the other supported video extensions: .mpg, .f4v, .mkv,
.wmv, .m4v, .avi.)  If this file exists, the video will be played in
the main playfield window immediately after the program loads, and
then the initially selected game will be shown as normal.  If there's
no such file, the program goes straight to the normal UI. 

* You can also set up a custom startup audio track.  Place an audio
file called "Startup Audio.mp3" in the PinballY\Media folder.  (You
can also use .wav or .ogg format.)  If this file exists, it will be
played immediately after the program loads.  If a startup video file
is also present, the video and the audio track will be played
concurrently, so you'll probably prefer to use a silent video in this
case.

* You can now select custom fonts for most of the on-screen displays.
The Fonts page in the options dialog lets you select a font for each
display function.

* The game metadata now accepts the IPDB ID of each game.  In the
game information editor dialog, the IPDB ID is automatically
filled in when you select a known game from the list of suggested
matches.  The IPDB ID is stored in the XML table list file under
the tag &lt;ipdbid&gt;.

* A new "lock video refresh rate" option lets you throttle the
graphics rendering rate in each window to match the physical refresh
rate of the monitor displaying the window.  In the past (and if this
option is not selected, which is the default), graphics frames are
rendered as quickly as your machine's hardware can render them.  If
you have video card, this can waste system resources by rendering more
internal frames than are actually needed for the physical display.
This can in turn place a higher than necessary load on your CPU and/or
GPU (video card), which can cause unpleasant side effects such as
making your GPU fan run continuously.  The "lock refresh rate" option
helps avoid this by making the renderer pace itself in step with the
monitor refresh cycle.  If you have a fast machine, enabling this
option should reduce CPU/GPU load without any degradation in graphics
quality.  (Issue #13 on github.)

* You can now manually select an audio input device to use for media
capture operations.  By default, as in the past, the system searches
your audio recording device list for a device with the words "Stereo
Mix" in its name.  But the actual device name doesn't always match
this pattern, especially on systems with non-English localizations,
where the device name may be translated to the local language.  So the
program now lets you select a suitable device yourself.  You'll find
the new "Audio Capture Device" option in the settings dialog, in the
Media Capture section.  That offers a list of available devices for
you to choose from.  (Issue #16 on github.)

* PinballY Admin Mode.exe now passes through any command line
arguments to the child PinballY.exe process.

* The default "Window Mode" setting for game systems (the window
display style used for the first window opened when launching a game)
is now "Show Minimized" instead of "Show".  Before this option was
added (in Alpha 21), the effect was always "Show Minimized", so that
should have been maintained as the default when the option was added
in the first place.  This version fixes that and restores "Show
Minimized" as the default.  That's the proper default because it's the
right setting for the most common systems, VP and FP.  The reason the
option was added at all is that some of the commercial games work
better with other "show" modes, so it's best if this setting can be
customized per system.

* The Filter by System and Filter by Manufacturer menus are now
paginated and scrollable if necessary (that is, if there are too many
items to fit the available display space).  (Issue #17 on github.)

* On some systems, menu graphic arrows weren't drawing properly.  This
is because the font "Wingdings 3" was being used for the arrows, and
this font isn't available on all Windows systems.  The more universal
Webdings is now used as a fallback, since that font contains similar
looking arrows, so the arrows should draw properly everywhere now.

* The options dialog now checks for uniqueness when changing the
display name of a player system via the dialog.  The display name is
used internally to identify the system in some cases, so it's best for
each system to have a unique name to avoid any ambiguity.  It's also
just confusing at the UI level for multiple systems to have exactly
the same name.

* In Beta 1, the cumulative playing time for wasn't being updated
after playing a game.  This has been fixed.

* DOF re-setup after finishing a game session is now performed in a
background thread, for improved responsiveness.

* A new Media Drop logging category has been added, which logs the
details of media file drag-and-drop operations.  This is mostly to
help troubleshoot problems with these operations that aren't
adequately explained by the on-screen error messages.

* In past versions, media drop operations with archive files (ZIP,
RAR, etc) didn't work properly in the 64-bit version of the program
because the release distribution incorrectly included the 32-bit
version of the 7-Zip DLL.  The 64-bit distribution now includes the
correct version of the DLL.  (Issue #14 on github.)

* In past versions, mp3 audio clips were sometimes cut off near the
end, so that the last fraction of a second was never played back.
This was particularly noticeable for the sort of short clips typically
used for Launch Audio sound effects.  This has been fixed; clips
should always play back in their entirety now.  (Issue #18 on github.)


10-13-2018 (1.0.0 Beta 1)

* The "Pause" menu (displayed when a game is running) now includes
commands to view the instruction card, flyer, game information,
and high scores.  In addition, this menu now appears automatically
any time you switch back to the PinballY window while a game is
running (there's no need for an additional button press to bring
it up).

* You can now specify how PinballY terminates a running game program
when you press the Exit Game button.  This can be set in the options
dialog for each system, via the "Terminate by:" item, and can also be
set in the config file via SystemN.TerminateBy.  The config variable
options are:

  - CloseWindow.  This is the default, and is also how this worked
  before the option was added.  This simply tries to close all of
  the program's open windows, as though the user manually closed
  them with the mouse.  This is considered the best way to
  terminate a program, since it's the way most programs expect to be
  terminated under normal conditions, and because it allows the 
  program to perform an orderly shutdown, releasing any system
  resources it's using before it exits.

  - KillProcess.  This asks Windows to terminate the process
  directly.  This is the same thing that happens when you use Task
  Manager to terminate a program.  This is a more forceful way to
  stop a program, because it doesn't require any cooperation from
  the program itself.  However, it's considered risky in terms of
  system stability, specifically because it doesn't give the subject
  program a chance to cooperate even if it wanted to, meaning the
  program can't do any cleanup work it would normally do on exit.
  This can, in some cases, leave system resources (like files or
  devices) locked or in other dubious states.  This option is
  sometimes necessary, though, because some programs won't cooperate
  properly with the more polite CloseWindow approach.  Use this as
  a last resort when the CloseWindow option doesn't work reliably.

* Fixed a crash bug that occurred if you tried to capture video
with audio (or just audio) when no "Stereo Mix" is available.  The
program *should* have displayed an error message explaining that
the capture device isn't present, and returned you to the wheel
UI, but there was a flaw in the error checking that caused the
crash.


09-28-2018 (1.0.0 Alpha 22)

* The image loader now recognizes and respects "orientation" metadata
embedded in JPEG images.  The orientation marker is stored by some
cameras to indicate which direction is "up" when a photo is taken with
the camera held sideways, and some image editor programs use the
marker in lieu of re-writing the actual JPEG pixels when you manually
rotate an image.  The Windows 10 Photos app works this way.  Earlier
versions of PinballY ignored the orientation mark, which was confusing
if you tried to rotate a source image using a photo app that only
updated the marker - PinballY would strangely show the original
orientation even though your photo editor claimed the image was
rotated.  PinballY now uses the orientation marker to determine the
image rotation when displayed.  This only applies to JPEG images, not
to PNGs or any video formats.

* The Table Path variable in a game system's settings can now contain
additional substitution variables: [SteamDir] for the Steam program
folder, if present; [lb] and [rb] for left and right square brackets;
and [PinballX] for the PinballX install folder.

* When PinballY switches to the foreground after being in the
background, it explicitly repositions each full-screen window.  This
works around some Windows quirks handling full-screen windows, such as
taskbar hiding on secondary monitors.

* When you show a hidden window while a game is running (e.g., select
"Show Backglass" on the playfield window's right-click menu), the
program formerly loaded media (images, videos) into that window, even
though media are normally disabled when a game is running.  The window
now stays blank.  (The windows are all kept blank during play mode to
minimize memory and CPU usage while a game is running, so that the
game can run as smoothly as possible.)

* PinballY Admin Mode.exe displays a more helpful error message in the
event that you set "Run as Administrator" mode in PinballY.exe's file
properties.  You shouldn't do this, as it prevents PinballY Admin
Mode.exe from functioning.  The new error message explains this and
suggests corrective actions.  There's also a new "Administrator Mode"
section in the help files with more details on how PinballY handles
games that need Admin mode permissions to run and how the PinballY
Admin Mode.exe program is meant to be used.


09-19-2018 (1.0.0 Alpha 21)

* If you installed an earlier version, and you were using the default
"Auto" option for the main Media or Table Database folder, you might
see a dialog the first time you run the new version asking you to
select a new option.  This is because the "Auto" option has been
removed, and replaced with more specific options; see below.

* Pinball Arcade DX11 can now be launched directly.  See the System
Options help file for the correct settings.  You can also use these
settings to launch the cabinet mode version; just substitute
PinballArcadeCabinet.exe for PinballArcade11.exe.

* The "Auto" option for the Media and Table Database paths has been
removed, and replaced with two new, more specific options: "Use the
PinballY Folder" and "Use the PinballX Folder".  

In the past, "Auto" meant "use the PinballX folder if present,
otherwise use the PinballY folder".  This was meant to make folder
selection easier by making it automatic, but it proved to be *too*
automatic and thus too confusing.  The big problem with "Auto" was
that, because PinballY checked for a PinballX path every time it ran,
newly installing PinballX on your system would make PinballY suddenly
change its folder paths (by using the new PinballX path).  This could
make your previously working table lists and media lists stop working.

The new options let you choose specifically whether you want to use
the PinballX folder path, the PinballY folder path, or some other
folder path.  There will no longer be any surprise changes due to
newly installing PinballX.  Of course, if you explicitly select the
PinballX folder, and then uninstall PinballX, an error will occur the
next time you run PinballY because of the now-missing PinballX folder
path.  But that case shouldn't be as surprising or confusing, since
you now have to explicitly choose up-front to share the PinballX files
and thus should expect that to stop working if you later uninstall
PinballX.

* Two new game system settings have been added:

  - Environment.  This lets you enter a list of environment
  variables to pass to the game program.  The "environment" is an
  internal Windows feature that lets a program store a
  program-defined list of NAME=VALUE pairs in memory.  These
  variables can be passed to child programs when one program
  launches another, so they serve a function similar to command line
  parameters.  In fact, some programs depend upon receiving
  information from their parent process via these variables rather
  than via the regular command parameters.  This is why this has
  been added to PinballY: it's another way of passing information to
  the launched game that's needed for certain game programs.  To
  specify a list of variables, specify a series of NAME=VALUE pairs,
  separated by semicolons (;).  The NAME portion must be a string of
  alphanumeric characters; a few punctuation marks (underscores,
  dashes) are allowed, but most others aren't, and spaces shouldn't
  be used.  The VALUE portion can contain any character.  If you
  want to use a literal semicolon character within the VALUE
  portion, double it: to set a value of "A;B", write "A;;B".

  - Window Mode.  This specifies how the game program's window will
  be shown when it's first created.  Some programs, such as Visual
  Pinball, work best when the initial window is created in
  "Minimized" mode, while others need to be shown normally.  In past
  versions, PinballY always used "Minimized" mode, because that
  worked best for all versions of VP and FP.  However, some Pinball
  Arcade versions will crash if launched minimized, so it was
  important to allow you to set the right initial window mode for
  each system.

* The new substitution variable [STEAMDIR] can be used within a
system's EXE file name to refer to the Steam install folder.  This
is useful for directly launching Steam games without going through
the main Steam executable.

* The options dialog page for setting up a system has been tweaked to
clarify that the Media and Table Database folder settings are always
subfolders of their respective global folders as set in the Folders
page of the options.  Past versions allowed entering full absolute
paths here, which was misleading; the dialog now warns if you try to
enter path separator characters.  Past versions also used a regular
folder browser to select the folder, which suggested (incorrectly)
that arbitrary folders could be selected.  The dialog now uses a more
restricted folder browser that only allows selecting a suitable
subfolder of the main global container folder for the item type.

* The backglass window can now be made "borderless", removing the
title bar and sizing borders so that the entire window area is filled
with the backglass graphics, just like the DMD and instruction card
windows.  Switch between regular and borderless mode using the "Show
Window Borders" command, which is on the context menu that pops up
when you right-click in the backglass window.

* Added the new option flag [ADMIN] for game system Run Before/After
commands.  This launches the target program in Administrator mode.
This feature is only available when running the "PinballY Admin
Mode.exe" version of the program.

* A few minor upgrades to the Run Before/After option prefix flag
parser:

  - The option flags can now be specified in mixed case  

  - The flag parser provides more helpful diagnostics when invalid
  flag syntax is used

  - The parser now accepts a completely empty flag set, [].  The
  empty flag set can be used to explicitly say "there aren't any
  flags here!", which might be useful in the (unlikely but possible)
  case that you want to specify a command line that literally starts
  with '['.

* PinballY 64-bit now tries to detect when an older DOF version is
installed, and displays an explanation of the need for an update and
where to find it, rather than showing an inscrutably technical Windows
error code.  (PinballY 64-bit has supported DOF since Alpha 19, but
only if you have a very recent DOF update, R3++ 2018-09-04 or later.
With an older DOF, trying to load in 64-bit mode causes some weird and
not very informative COM errors, which earlier PinballY versions were
just passing along in an error box.  The program now tries to be more
helpful in this situation by explaining the probable cause of the
errors and how to fix them rather than leaving it for you to puzzle
out what the COM error codes mean.)

* The program now responds to window-level DPI change notifications
from Windows by resizing affected windows.

* In the event that a required font isn't installed, the program now
tries to fall back on suitable default fonts.  This really shouldn't
ever be necessary, as the program only uses standard Windows fonts
that should be installed on all Windows systems, so this is just in
case we run into a weird situation (e.g., the user has intentionally
deleted a standard font for some reason).



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
