-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathVersionHistory.txt
3205 lines (2672 loc) · 166 KB
/
VersionHistory.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
PinballY Update History
11-03-2024 (1.1.0 Beta 10)
* Fixed a couple of problems with media capture (introduced in the
recent reworking of the capture options in 1.1.0 beta 9), one causing
errors in two-pass video capture, and the other causing audio source
options to be incorrectly included in the ffmpeg command line when
capturing silent video. (Issue #244 on github.)
09-25-2024 (1.1.0 Beta 9)
* The Media Capture FFMPEG options now let you fully customize the
FFMPEG command line for each capture. Refer to the Help section for
details, including recipes for taking advantage of "ddagrab" mode, which
allows capture from full-screen-exclusive windows.
The new capture options required some rework of the way the FFMPEG
command lines are generated, so it's possible that existing capture
setups might encounter FFMPEG errors as a result of differences in the
new command construction procedure. I think the rework will actually
improve the reliability of the command construction, but any change to
working code can cause short-term disruption, especially with something
as complex as capture, which has many possible combinations of options
and cases. If you encounter any problems with captures that worked
before but get FFMPEG errors now, the log file should help isolate the
problem. Make sure that the "Media Capture" box is check-marked in the
Log File options, and make a snapshot of your PinballY.log file showing
the error message from FFMPEG, along any non-default options in your
capture setup.
* A new Javascript event, "precapture", fires when media capture is
about to start. The event receives the capture parameters, including
the ffmpeg command line that PinballY constructed, and has the ability
to rewrite the command line as desired. This makes it possible to
customize the ffmpeg invocation in even more complex ways than are
possible through the option settings. Since the event can completely
rewrite the command line, it has access to everything that FFMPEG can
do.
09-21-2024 (1.1.0 Beta 8)
* The Game System settings have two new "Terminate By" settings:
WM_CLOSE and SC_CLOSE. These give you finer-grained control over the
game program shutdown method. These are used when PinballY is trying
to get a game to terminate after you press the Exit Game button while
a launched game is running. Here's how the new options and the original
options work:
* SC_CLOSE is equivalent to pressing Alt+F4, or double-clicking on the
game's "system icon" at the left side of the window's caption bar,
or clicking on the system icon and selecting Close from the menu
that drops down. This is typically the best way of getting a program
to close, but not all programs pay any attention to it.
* WM_CLOSE is equivalent to clicking the window's "close box", which
is the "X" icon at the right end of the window's caption bar. If
the window doesn't have a close box, which some windows don't, this
typically won't have any effect at all.
* Close Window, the original (and still) default setting, sends BOTH
the WM_CLOSE and SC_CLOSE commands to the game's window.
* PinSim::FrontEndControls is a new option that sends a special
"Front End Controls" command to the application to tell it to exit.
This only works with applications that implement the Front End
Controls protocol, which at the moment is limited to new versions
of Visual Pinball released in October 2024 or later. The protocol
is published, so other programs are free to implement it in the
future if they wish. This option should be the most reliable one
for programs that implement it, because it uses a well-defined
communication protocol that specifically notifies the program
that it should terminate normally - this makes the intention of
the request clear to the other program. All of the other options
are prone to glitches because they can't explicitly TELL the other
program to exit; they just try to get it to exit implicitly by
closing its windows, which isn't always enough.
* Kill Process works as it always has, by trying to terminate the
process at the Windows system level rather than trying to ask
politely by closing its UI windows.
The reason for adding these new options is that some programs don't
know how to interpret one or the other of the close commands, so the
option to send a precise command might improve the exit behavior for
some games. The original method, of trying both SC_CLOSE and
WM_CLOSE, is *usually* the simplest and best, because most programs
should respond to at least one of these, and ideally should treat both
as equivalent, or at least ignore the one it doesn't accept. So
sending both is a simply way to automatically sense which one the
program responds to, by trying both. But it can create problems if
the program does something different (other than terminate or ignore)
when sent one of the commands. So the new options let you be more
selective about which commands PinballY tries with a given game.
* A related new setting, Timeout, lets you specify the maximum time to
wait for the game to exit on its own after one of the window closing
methods was attempted. If the game is still running after this time
expires, PinballY proceeds to the nuclear option, of attempting to
terminate the game's Windows process. The timeout is specified in
milliseconds (1000 milliseconds equals 1 second), and the default is
2500 ms, or 2.5 seconds. You might need to increase this if you find
(from looking at the PinballY log file) that PinballY is resorting to
Kill Process when you don't think it should need to, simply because
some of your games take a long time to finish up before quitting. The
problem with resorting to Kill Process is that it might prevent the
game from saving its non-volatile memory updates, such as new high
score records, by abruptly killing the process before it has a chance
to finish what it was doing.
* Another related new setting, Close Win Name, lets you specify a
SPECIFIC window (or a specific set of windows) to close when PinballY
is trying to terminate the game. In past versions, and still by
default, PinballY sends the Terminate By command to ALL of the game's
open windows when you try to exit the game. This is the simplest
approach, and works for most game systems, since a game program will
usually exit automatically as soon as its "main" window is closed.
But Visual Pinball and some other systems have many windows open while
a game is running, and sometimes closing one of the secondary windows
before closing the main window has unintended consequences. Close Win
Name lets you make PinballY more selective about which specific window
it should close to get the game to exit. You can put one of three
things here:
* Leave it blank. This is the default, and it selects the original
approach of telling PinballY to close ALL of the game's windows,
by sending each one the Terminate By command.
* Enter a window name literally. PinballY will look through the
game's open windows for a window whose name exactly matches the text
you enter here, and if it finds one, it'll close ONLY that window,
by sending it the Terminate By command. (If there are multiple
windows with the same name, PinballY will close each of them.) If
there are no matching windows, PinballY will fall back on the
default approach of closing ALL of the game's windows.
* Enter a regular expression pattern. To do this, enter the pattern
text, using standard Javascript-style syntax, and check the RegEx
box to the right of the text box. This works like a literal window
name match, except that PinballY will close each window whose
name matches the regular expression pattern, instead of trying to
match the text literally. This is useful if the game program
uses varying text for its main window, such as by including the
name of the active table in the window title. As with the literal
text option, if no matching windows are found, PinballY falls back
on the default approach of closing all of the game's windows.
For Visual Pinball, the main player window is called "Visual Pinball
Player", so you can enter that literal text in the box for your
various VP versions.
* Related to the new Terminate By settings above, the procedure that
PinballY uses to close the game program has been tweaked a little to
try to make it more reliable, especially for cases where the game
shows one or more modal dialogs. VPX has a tendency to show a series
of dialog boxes if a scripting error occurs while loading the game,
which the new procedure should be somewhat more robust at handling.
* Fixed an error that prevented the "gamestarted" event from firing in
some cases, or caused it to fire, but with the wrong game
identification in the event parameters. This was due to an internal
timing error that manifested somewhat randomly, possibly varying by
the specifics of your hardware setup. (Issue #242 on github.)
* The sequencing of the "gamestarted" event relative to the other
launch events is now more predicatble. In the past, "gamestarted" was
fired asynchronously relative to the other launch events, so, for
example, it was possible for "gameover" to fire before "gamestarted"
if the game exited quickly enough. This was at the very least
counter-intuitive, and might have made some types of scripting tasks
more difficult. The asynchronous ordering didn't serve any important
purpose; it was just an artifact of the way this all worked before the
Javascript events were implemented, when the underlying internal event
processing didn't depend on any particular ordering. To make the
event sequencing more predictable, "gamestarted" is now fired
sequentially with respect to the other launch events, so it should now
consistently fire before the corresponding "gameover" event.
* The 64-bit release has been updated to the latest version of ffmpeg,
which PinballY uses for video and still screen captures for creating
custom game media. The new version of ffmpeg includes the "ddagrab"
capture mode, which captures directly from the graphics card. Direct
GPU capture is more efficient than the older capture options, and more
importantly, it allows capturing from video modes that were impossible
to capture before, particularly exclusive-full-screen mode. Since
ddagrab is only available on Windows 8 and later, the default settings
in PinballY are still set to use the more broadly compatible gdigrab
mode, so you'll have to update the PinballY capture command line
settings if you want to use the new options.
ffmpeg has NOT been updated for the 32-bit release, because the ffmpeg
official site no longer links to any approved 32-bit Windows builds.
There are some independent 32-bit Windows builds available, but I
don't want to include binaries from unverified sources in the PinballY
distribution, so I leave it up to you to find a source you feel
comfortable with if you want to get the latest.
08-30-2024 (1.1.0 Beta 7)
* The DirectOutput interface is now compatible with 64-bit DOF
installs for the 64-bit PinballY build. PinballY was originally
written before anyone was using 64-bit DOF builds, so 64-bit PinballY
used a special proxy process to connect to the 32-bit DOF. This was
meant to improve compatibility by letting you mix 64-bit PinballY with
32-bit DOF, but of course, it doesn't work if you ONLY have 64-bit DOF
installed. Now, PinballY 64-bit will first try to connect directly to
a 64-bit DOF. If that fails, it'll fall back on the 32-bit proxy as
in the past. This should hopefully allow PinballY to work with any
combination of DOF configurations.
* Updated to the latest ChakraCore Javascript engine version.
* Migrated the build to Visual Studio 2022 (build tools v143); fixed
some issues related to the changes in the language rules in the latest
build tools and cleaned up numerous warnings.
07-16-2022 (1.1.0 Beta 6)
* This update is just to test an attempt at a fix for the sticky wheel
auto-repeat problem some people have encountered (issue #203 on
github). The key handler now double-checks before each auto-repeat to
see if the repeating key is actually still being pressed, and stops
repeating if not. I haven't been able to reproduce the problem, so
this is only a wild guess at what might be going on.
05-18-2021 (1.1.0 Beta 5)
* PinballY now has its own built-in SWF renderer for Instruction Card
media. This replaces the obsolete Adobe Flash Player, which stopped
working on most systems after Adobe pushed an update to disable
existing installations. PinballY formerly depended upon the Flash
Player ActiveX plugin to display SWF files, so Adobe's pushed update
made it impossible for PinballY to display SWF instruction cards.
To fix this, PinballY now has its own built-in SWF renderer that
doesn't require Flash Player or any other external software.
This is brand new code, and I've only tested with a subset of the
available Instruction Card media, so I'm sure there are some (perhaps
many) existing card files that won't display properly. If you run
into any, please send me the SWF files so that I can take a look. (If
you want to see the way a particular SWF file "should" look, you can
still download Flash Projector from the Adobe site. Projector is a
standalone Flash Player app that will show you how the file looks
under the official Adobe renderer.) Please note that I only intend to
make the built-in SWF renderer work with *Instruction Card* files from
the HyperPin Media Packs. This isn't meant to be a general-purpose
Flash Player replacement.
With the new renderer in place, PinballY no longer uses Flash Player
at all, so you can delete it from your system if you've been keeping
it around just for the sake of PinballY. If for some reason you want
to override the built-in renderer and keep using Flash Player for now,
you can edit Settings.txt and set UseInternalSWFRenderer=0. I don't
recommend that, since it'll be an ongoing hassle to keep Flash Player
working when Adobe is trying so hard to kill it, but the option is
there for now. (If you have a strong objection to my plan to
eventually remove that option and switch to the internal SWF renderer
only, let me know why, and I might reconsider. I'd prefer to remove
the Flash Player support for the sake of code hygiene - code that no
one's using just complicates the program and creates more points of
potential failures.)
* A new option in the Audio/Video dialog lets you set the DMD "dots"
high score display to use a fixed 4:1 aspect ratio, rather than
stretching the dots display to fit the window. This only affects the
video DMD window, obviously, not a physical DMD, and it only affects
the *generated* high score displays - images and videos are still
stretched to fill the window as usual. This might be especially
useful if you're exposing the full height of the DMD monitor, rather
than masking it behind the more traditional WPC-era DMD cutout. The
traditional DMD cutout is about 4:1, so with that, you'd normally set
the DMD window size to about 4:1 anyway, making the default setting to
stretch the dots display to fill the window better. But if you're
using the full window height, stretching the dots display distorts it
considerably, so you might prefer to maintain the fixed 4:1 layout
instead. The dots image will still be scaled to fill the window as
much as possible without geometric distortion.
* Fixed a bug that appeared in 1.1 Beta 2 with shift key handling
in dialog boxes. (Issue #175 on github.)
05-08-2021 (1.1.0 Beta 4)
* APNG (Animated PNG) files are now supported, and can be used
anywhere a static PNG image can be used. APNG is an unofficial, but
widely adopted, extension of the PNG standard that allows embedding a
series of timed animation frames in a PNG file. It's similar to the
animated GIF format, but has the same improvements over GIF that
standard PNG offers, particularly its support for alpha transparency
and 24-bit color. In a PinballY context, the alpha transparency makes
APNG especially interesting for wheel icons, system icons, and any
other similar component graphics layered over the main window
backgrounds.
For the file suffix, you can use .png or .apng interchangeably.
PinballY recognizes animated PNGs from their contents, even for files
with the plain .png suffix.
This is new code that hasn't been extensively tested yet. If you
run into any problems with particular APNG files, send me a sample
so I can try it out.
(Issue #174 on github.)
05-02-2021 (1.1.0 Beta 3)
* A new "Media Capture - FFMPEG" page has been added to the settings
dialog, splitting off the options previously on the Media Capture page
that relate directly to FFMPEG settings. This is to make room for the
new FFMPEG options added in this version.
* A new option in the Media Capture - Ffmpeg page of the settings lets
you select the folder to use for temporary files created during a
video capture. This is used for the video captured on the first pass
of a two-pass capture. By default, temporary files go in the same
folder as the target media. It might be desirable to set a different
temp folder if you have a drive that's especially fast or that has
lots of free space, for example. (Issue #143 on github.)
* A new option in the Media Capture - Ffmpeg page of the settings lets
you specify the ffmpeg video codec options for the first pass of a
two-pass recording. The default settings if you leave this blank use
little or no compression, which minimizes CPU usage during the live
capture phase. This runs fast as far as CPU usage, but it creates
such large files that the disk transfer time can become a separate
bottleneck. The new option lets you experiment with different
compression levels if you want to find optimal settings for your
system. (Issue #142 on github.)
* Custom game filters created through Javascript can now control the
sorting order of the games in the wheel when they're in effect. See
the new compareForSort and pageGroup properties in the descriptor
object for gameList.createFilter(), described in the help at
Javascript scripting > System Classes > FilterInfo.
* Changed the default wheel auto-repeat rate to use a minimum delay
time equal to the old default rate; if your keyboard rate is slower
than that, it'll still use that instead. In the previous version
where the new wheel auto-repeat speed option was added, the default
was simply set to the keyboard rate, which is faster than most people
would want. This change makes the default wheel repeat speed match
older versions. (As pointed out in issue #173 on github.)
* Fixed a bug introduced in 1.1 Beta 2 that made the Shift keys
trigger PinballY commands even when PinballY was in the background.
If you had them assigned as Next/Previous keys, for example, they'd
spin the game wheel even when a game was in the foreground. (If you
were using the same keys as flipper buttons in the game, you'd spin
the wheel every time you operated a flipper - probably not what you
wanted!) (Issue #172 on github.)
* Fixed a bug in the settings dialog that sometimes prevented the
Apply button from becoming enabled after making a change to the
button/key mapping list.
* Fixed a problem in Javascript where gameList.setCurFilter() didn't
always activate a category filter properly.
04-28-2021 (1.1.0 Beta 2)
* This release is probably even more "Beta" than the previous one,
because it has some internal changes in the way the wheel navigation
buttons are handled that could be destabilizing. On the other hand,
wheel navigation is such a core function that any problems should be
immediately obvious. If you do run into any problems, file an issue
on github with the details (your key/button mappings might be
particularly important), and as always, you can go back to an earlier
version of the program if necessary.
* You can now specify an alternative location for the settings file
(Settings.txt) when launching the program, via a command-line
parameter. Add the option /Settings:<folder> to the command line to
specify the folder location. Use a fully-qualified file path starting
with a drive letter: /Settings:D:\MyFiles. Specify the folder path
only, without the filename - this is the *location* where PinballY
looks for the file, not the name of the file. (Issue #149 on github.)
* You can also specify an alternative location for GameStats.csv,
which is the file where PinballY stores metadata that applies to both
configured and unconfigured games. This file is normally stored in
the PinballY program folder, but you might want to store it in a
different location, for the same reasons that you might want to store
Settings.txt elsewhere. To specify the GameStats folder location, add
the option /GameStats:<folder> to the command line, using a full path
with drive letter. (Issue #149 on github.)
* A new option setting lets you change the auto-repeat rate when you
press and hold one of the main wheel navigation buttons (Next,
Previous, Next Page, Previous Page). In the past, the repeat rate was
the same as the Windows keyboard repeat rate, and this is still the
default, but you can now control the wheel rate separately. Not only
that, but you can also set up a custom speed "ramp" that adjusts the
rate (faster or slower) the longer you hold down the button, in as
many steps as you'd like. The new option is in the Game Wheel page of
the settings dialog; see the corresponding help page for an
explanation of how to set up a custom speed ramp. (Issue #140 on
github.)
* A new option lets you control whether or not the Game Info Box is
displayed during Attract Mode. The new option is on the Attract Mode
page of the settings dialog. In the past, the Info Box was always
hidden, since it's such a static graphic that it could defeat the
screen-saver purpose of Attract Mode if displayed. But if you prefer
to see the Info Box anyway, you can now turn it back on via the
option. (Issue #145 on github.)
* The layout of the game wheel in the main window can now be
customized via some new parameters in the settings file
(Settings.txt). See the help under Customizing > Wheel Layout.
(Thanks to Stephen Houser for implementing this enhancement.)
* A new "Paging Mode" option in the Game Wheel page of the settings
dialog lets you control how the Next Page and Previous Page commands
(which navigate through the wheel by letter group) treat games with
non-alphabetic titles, such as 2001 or 8 Ball. See the help under
Option Settings > Game Wheel. (Addresses issue #139 on github.)
* .mov is now recognized as a video file suffix. (The video layer,
libvlc, has long supported .mov files, so this is just a matter of
including .mov suffixes in PinballY's media searches. The only reason
it wasn't included in the past was that I wasn't sure how well libvlc
supports .mov files, but they appear to work just fine.)
* Javascript now has more access to joysticks. You can get a list of
attached joysticks, and information on a particular joystick, via the
new method mainWindow.getJoystickInfo(). That method returns
JoystickInfo objects, which provide extensive details on the joystick
device, and also let you read the live button status and control axis
values at any time. The new JoystickAxisEvent class also lets you set
up event handlers for axis value changes. Refer to these help
sections for more:
Javascript scripting > System Objects > Window Objects > mainWindow
mainWindow.enableJoystickAxisEvents()
mainWindow.getJoystickInfo()
Javascript scripting > System Classes > JoystickInfo
Javascript scripting > Events > Event Types > JoystickAxisEvent
There's also a new worked example, "Joystick Game Switcher", showing
how to use these facilities to implement game switching using the
joystick (which address issue #133 on github).
* Javascript can override the wheel spin repeat rate for particular
events. See mainWindow.setWheelAutoRepeatRate() in the help.
* In Javascript, optionSettings.set() now accepts 'undefined' to mean
"erase this setting" (it was already documented this way, but it
didn't work properly before).
03-27-2021 (1.1.0 Beta 1)
* I'm calling this release a Beta, since it has some significant new
features that could use some field testing, but mostly just in case
any of the code changes for the new features happen to accidentally
create any problems with existing functionality. If you run into any
serious problems, you can always switch back to the 1.0 release until
they're fixed.
* The generated high-score display now uses all of the VPinMAME color
option settings stored in the registry when generating dot-style high
score messages in the video DMD window. In the past, the basic
VPinMAME dot color setting was used, but the colorization options and
brightness ramp settings were ignored. All of these options are now
taken into account, using the same algorithm that VPinMAME uses to
figure the colors. This should make PinballY's generated high score
displays match the live VPinMAME displays (i.e., when a table is
actually being played) more consistently. (The VPinMAME options we're
talking about are set through VPinMAME, not PinballY; to access the
VPinMAME options, launch the game with Visual Pinball and bring up the
VPinMAME options dialog by pressing F6.) (Issue #161 on github.)
* A new worked example in the help ("Custom game launch options for
media capture") shows how to edit the game system's command line
specifically for a media capture operation. This is useful in
particular for VPX users who normally run in Exclusive Full-Screen
Mode, since exclusive mode by its nature prevents media capture from
working. The example shows how you can automatically disable VPX's
Exclusive mode just for the duration of a media capture launch, so
that you don't have to manually toggle it on and off when performing
captures. (Issue #146 on github.)
* You can now drag and drop images and videos directly from most Web
browser windows into a PinballY window to install media. In the past,
this worked when dragging from the Windows desktop, but not
necessarily from other programs such as Web browsers. (Support in a
particular Web browser depends upon the browser implementing the
Windows drag/drop system using one of the common interchange formats,
which most modern browsers should do as a matter of course.)
* When a game system needs to run in Administrator Mode, PinballY now
offers an option to trust that particular program permanently when it
asks for your approval to perform the Administrator Mode launch. The
menu asking for approval now gives you separate options to approve the
Admin Mode launch just for this session, or "always". There's also an
option to cancel, of course. If you select the "always" option, the
game program will be marked as trusted in the settings file, and
PinballY won't ask again in future sessions for this particular
program. (Issue #138 on github.)
(In the past, there was no "always" option, so it was only possible to
approve the launch for the duration of the current PinballY session.
I deliberately didn't provide an "always" option because Windows
doesn't have a secure way to mark a program as trusted; in order to
accomplish this, I had to rely on PinballY's own insecure settings
file. So I was concerned about the possibility that a malicious
program could manipulate the settings file to bypass the warnings.
However, after further consideration, I decided that this isn't a
meaningful risk, in that a malicious program with that kind of access
to your hard disk could already just as well overwrite PinballY itself
with a fake version; there's nothing they could do via the settings
file that they couldn't already do more easily by other means. So I
don't think this creates any new vulnerabilities. As always, the real
solution to the potential security risks here is to avoid using Admin
Mode AT ALL for any pinball-related software - there's almost never a
good reason to do so, and it inherently opens security holes.)
* Fixed a few rough edges in the UI with launching and exiting games
that run in Admin Mode. (E.g., the "Paused Game" menu sometimes
popped up unnecessarily when you terminated an Admin Mode game with
the Exit Game button.)
* Javascript code can now create its own custom windows, which operate
just like the built-in "secondary" windows (the backglass window and
so on). The new mainWindow.createMediaWindow() method creates these
windows, and the new gamelist.createMediaType() lets you define your
own new media types. Combining a custom window with a custom media
type makes it pretty easy to define your own extensions to the
standard set of windows, that operate almost as though they were built
in. Custom windows can also be controlled through scripting code to
provide more complex behavior than just the standard background media
display. The new methods just mentioned are documented in the help
under the respective objects (mainWindow, gameList). You can find a
number of examples of how to use custom windows and custom media types
in Worked Examples > Custom Media Window.
* The new Javascript classes HtmlLayout and Styled Text make it easier
to draw complex text layouts that use mixed font styles and layout
effects. HtmlLayout accepts a fairly full-featured subset of HTML/CSS
to specify the layout, and provides methods to measure the resulting
layout and draw it into a Drawing Layer or any other Custom Drawing
context. StyledText also provides mixed-style rendering, but uses a
simple programming interface to build the text stream (instead of
using a markup language). You can use any of the normal graphics
primitives alongside HtmlLayout and StyledText objects in the same
drawing context, so you can use these objects to create composite
graphics from multiple elements. See the help under Javascript >
System Classes > HtmlLayout and Javascript > System Classes >
StyledText.
* Javascript custom Drawing Layers can now be layered behind the main
background layer in a window that the system uses to draw the window's
primary media (e.g., the backglass video). Use a negative Z index
when creating the layer to place it behind the main system background
layer. This isn't useful in most of the standard windows, since the
main media background usually is opaque and fills the entire window
(so if you create a layer behind that, you'll never see it, since the
main media will always completely occlude it). But it could be useful
in custom media windows where the main background media might be
partially transparent, such as Wheel Image PNG files.
* New Javascript event set: Media Sync Events, which let script code
coordinate actions with changes of background media in the various
windows.
* New Javascript method: gameList.setWheelGame(), for directly
changing the game selection in the wheel UI. See the Javascript
section in the help for details.
* Javascript code can now use HANDLE and HWND types as "out"
parameters, for Windows APIs that return handle values in pointer
variables. This means that handle variables act the same way as other
native types when used as pointer parameters in Windows APIs where a
handle is returned via the pointer param. Simply pass a variable
containing a HANDLE or HWND object as an argument where a HANDLE* or
HWND* parameter is specified in the API parameter list, and the
variable will contain the returned handle after the API returns.
* Fixed a problem in the Javascript interpreter that prevented
creating handle objects via "new HANDLE()" with Int64 or UInt64
arguments. The interpreter didn't convert the value correctly; it
simply returned a valid HANDLE object containing a null handle value.
This is now fixed.
* Fixed an error in the Javascript system classes that caused a
runtime error on attempting to use "new HANDLE()" or "new HWND()" to
explicitly create a handle object.
07-23-2020 (1.0.0 Release)
* This is the first official "Release" version of PinballY! The last
several Beta releases have had only small changes other than bug
fixes, plus the most recent Beta has been in circulation for a couple
of months, so I felt this is a good point to declare a stable release.
This being an open-source project, the distinction between Beta and
Official Release is purely symbolic; it ultimately makes no tangible
difference to anyone what we call it. (Unlike a commercial product,
where it often determines who has access and what level of support
they get.) But even so, it's a useful bit of symbolism, in that it
lets users know how stable and complete the developers believe the
project to be.
* Slight tweak to the "typewriter" high score font settings: you can
now specify a point size for the font in the options. In the past,
the font size was always scaled automatically so that about 8 lines of
text would fit into the background image; that created the look I was
after for the default "index card" background, but wasn't necessarily
the right look for arbitrary custom backgrounds. So now you can set a
specific point size instead of letting the system scale the font
automatically. If you leave the point size as default ("*") in the
options, the auto-scaling will still apply, but you can also select a
specific point size instead if you prefer.
* Fixed a problem in the Javascript system scripts for HttpRequest.
(Specifically, the script code needed to be updated to match a change
in Beta 19 to how OLE Automation object properties were accessed; this
caused scripting errors when sending requests using the object.)
* In the past, the status line text messages were loaded from the
settings file twice during the initial program startup, due to a fluke
in the initialization procedures. This had no visible effect in the
UI, but it complicated things for Javascript code that wanted to stuff
messages into the status rotation during startup, because the second
system initialization step had the effect of erasing any messages
Javascript startup code had added up to that point. The unnecessary
second initialization step has been removed, so Javascript can safely
add status messages during startup and expect them to be visible, at
least until the next explicit user action that reloads settings (such
as making changes in the Settings dialog).
05-31-2020 (1.0.0 Beta 24)
* You can now provide a custom background image or video that's
displayed in the playfield window during the game launch process.
Normally, the system covers the playfield window with a simple dark
gray background. You can override this by placing an image file
called "Game Launch Background.png" (or .jpg or .gif) in the Media >
Images subfolder (under the main PinballY install folder), OR a video
file in Media > Videos called "Game Launch Background.mp4" (or any of
the other supported video format extensions - .avi, .f4v, etc). Much
more extensive customizations are possible via Javascript, but this
new feature is easier when you only want to replace the background.
Tip: if you merely want to keep the game's background video or image
showing during launch, for a "seamless" launch effect, all you have to
do is provide a transparent PNG file for the launch background. For
your convenience, a suitable file called "Transparent.png" is included
in the Media file. Simply copy this file into the Media > Images
folder and rename it to "Game Launch Background.png".
* A new font option lets you set the display style for launch status
messages, as well as the color of the default background displayed
during launches.
* A new option in the media capture settings lets you limit the
resolution of captured videos to HD (1920x1080). By default, the
media capture function creates videos with exactly the same pixel size
as the screen area being captured. If you have a 4K or similar large
monitor, though, the resulting videos might be too taxing for your
system to play back smoothly, especially if you have an older or
lower-end system. The new option lets you reduce the resolution of
the captured videos to HD. The new setting is accessed via a checkbox
on the Media Capture page of the settings dialog, "Limit captured
videos to HD resolution".
The resolution limit option applies to the capture process, so it
doesn't have any effect on existing videos. Existing videos files
will continue to play back at whatever resolution they were captured
at - 4K videos will continue to play at 4K, for example. If you want
to reduce the resolution on an existing video file, you'll have to
replace the old video file with a new capture, after enabling the
resolution limit option.
* A new option in the Folders section of the options dialog lets you
tell PinballY to sort the contents of the XML database files (in order
of table title, alphabetically) whenever saving changes. By default,
PinballY preserves the original ordering of the file when saving
changes, in case you intentionally ordered the entries in a particular
way. If you prefer, you can set this option to make PinballY re-sort
the file alphabetically by table title on each update. This might be
preferable if you need to hand-edit the files outside of PinballY.
* It's now easier to customize the display style for the "tt"
(typewriter) style of high score display used for electromechanical
(EM) games. First, you can provide your own custom background image,
to override the default "index card" background, by placing an image
file named "TT High Score Background.png" (or .jpg, etc) in the Media
> Images folder. Second, a new item in the Fonts page in the settings
dialog lets you specify the font and color for the text.
* PinballY can now read high scores from an ad hoc text file, for
games that don't work with the PINemHi program. This can be used to
supply live high score information for re-creations of EM-era tables
in VP, for example, since those don't use VPinMAME ROMs and thus
aren't compatible with PINemHi. See "High Scores" in the help for
details.
* PinballY can now store a title for each game in the XML database
independently of the media name. In the past, the <description> tag
served both purposes, via the convention that the media name is
formatted as "Title (Manufacturer Year)". This was for the sake of
full compatibility with the original HyperPin/PinballX XML schema, but
it was problematic in some cases, given that PinballY internally
treats the title and media name as independent, and lets you change
them independently. If you explicitly changed the title and/or media
name in such a way that the media name no longer matched the "Title
(Manufacturer Name)" format, PinballY had no way to store both changes
in the XML, so the updated title was lost the next time you restarted
the program. To address this, PinballY now adds the new tag <title>
to the XML whenever the media name doesn't match the standard
convention. This lets it keep track of the title and media names
separately when they don't match. <title> isn't part of the original
HP/PBX schema, so those programs will ignore it if present. To
minimize the risk of any compatibility issues in case you want to use
the resulting XML with HP or PBX, PinballY only generates the new
<title> tags when necessary.
* Fixed a problem with high-score displays using the alphanumeric
style, which caused the image to be displayed at the wrong position
(not properly centered) in the DMD window if the window didn't have a
4:1 aspect ratio. The positioning was further off-center the further
your window layout was away from a 4:1 ratio. This has been fixed;
the image should be properly centered now regardless of the window
layout.
* Fixed two problems with searching for era-specific manufacturer logo
files (e.g., "Bally (1970-1975).png"). The first problem prevented
era-specific logo files from being displayed at all if they contained
a space between the manufacturer name and the parentheses enclosing
the year range; spaces (one or more) are now accepted. The second
problem was a caching issue that caused the year-range file displayed
for the first visited game from a given manufacturer to be displayed
for all subsequently visited games from the same manufacturer,
ignoring the release year of the other games. Both of these bugs
should now be fixed. (See "Manufacturer logos" in the help section
for Settings > Info Box Options.)
04-22-2020 (1.0.0 Beta 23)
* On game launch, any table audio and video tracks playing are now
muted immediately. In the past, they kept playing until the videos
were stopped - which, starting in Beta 17, doesn't happen until a few
seconds after the game process has started, to give the game a chance
to draw its initial graphics before the PinballY videos stop. The
overlap was intended for a more seamless graphics display during game
launch, but the continuing video playback also meant continuing audio
playback, which sometimes caused unwanted overlap between the PinballY
audio and the game's audio. With this change, videos continue playing
as before, but all background audio is now muted immediately on
launch.
* When you renamed a game and opted to rename existing media files to
match the new name, the system didn't include the real DMD media files
and launch audio files in the files to be renamed. This has been
fixed. (Issue #123 on github.)
* When you switch PinballY back to the foreground after using other
programs, any table files you deleted from the file system will now be
automatically removed from the on-screen wheel. (With one exception:
if you enter a game's details via the Game Details dialog or by
manually editing the XML database files, the game will remain in wheel
UI even if you delete its underlying table file. This is so that
database records can exist independently of table files, and so that
the same details can be re-used for a different table file later.)
(PinballY has always scanned for *new* table files whenever you switch
the program back into the foreground, so the idea of keeping the wheel
display in sync with the live file system isn't new. The new part
here is the check for files that were just deleted.)
* The program now accepts the "Yes", "Y", "True", "T", and "1" as
affirmative values for <enabled> item in the XML database files. In
the past, only "True" was accepted. This is to improve compatibility
with hand-edited XML files or files manipulated by other programs,
since there appears to be some variation in the format that different
people and different programs use for this tag.
03-19-2020 (1.0.0 Beta 22)
* Fixed (again) muting of real DMD videos muting in Attract Mode; this
time the problem was that they wouldn't stay muted when the automatic
game switching occurred. The same thing happened with table audio
tracks, which has been fixed as well. (Issue #120 on github.)
* Fixed a problem with the audio/video playback where the audio volume
and mute settings were forgotten at the end of each playback loop and
reset to unmuted full volume. The volume and mute status should
remain the same across looped playback cycles now. (The problem was
due to an apparent bug in libvlc, and unfortunately the bug occurs in
a background thread, so the timing is unpredictable. The workaround I
added is therefore itself time-dependent. That makes it hard to know
if it will be 100% reliable on every machine or with every video
track. It seems reliable in my testing, but the timing might need to
be adjusted to make it reliable universally. So let me know if you
see any recurrence.)
02-25-2020 (1.0.0 Beta 21)
* In the past, the real DMD video wasn't included among the videos
that were muted when entering Attract Mode (assuming the options were
so configured), so its audio track incorrectly continued to play. The
real DMD video is now muted along with the others. (Issue #118 on
github.)
* MP3 playback is now handled through libvlc (the same codec layer
that we use for video playback), rather than DirectShow (as it was in
the past). The main reason for this change is that libvlc has better
MP3 support than DirectShow does; DirectShow can't play some types of
valid MP3 files due to limitations in its codecs. Since we're already
incorporating libvlc for video playback anyway, this change has the
beneficial side effect of reducing our external dependencies, and the
dependency we're eliminating in this case is an especially good one to
eliminate, as DirectShow is an older technology that Microsoft is no
longer developing. (Addresses issue #116 in github, and should fix
playback for any other MP3 files that weren't playing in past
versions.)
01-31-2020 (1.0.0 Beta 20)
* When PinballY is in "Paused Game" mode, meaning that you've used the
Pause Game command to suspend a game and bring PinballY to the
foreground, the main menu is now automatically displayed any time
there's nothing else going on (that is, when no other menu or popup is
being displayed). In the past, the menu came up automatically when
you first paused the game, but it didn't reappear on its own after
that. For example, if you brought up the game's flyer, and then
dismissed it, you'd just see the blank "Game Running" screen, and
you'd have to press the Start button to bring up the menu again. This
change is meant to make the Pause mode a little more convenient and
intuitive. Some people weren't sure what they were supposed to do
with the blank "Running" screen, and there's really nothing else you
can do there apart from bringing the menu back up, so the system might
as well do that for you automatically.
* Added a new DOF event that fires when PinballY starts up:
PBYProgramStartup. You can use this in the DOF Config Tool to trigger
DOF effects each time you run the program. (There's no corresponding
"program exit" event, because DOF automatically resets all devices
when the host program terminates, which would make a "program exit"
event useless. Any effects such an event triggered would be canceled
as soon as the DOF reset occurs.)
* Javascript code can now fire DOF events, via mainWindow.DOFPulse()
and mainWindow.DOFSet(). See the help under Javascript scripting >
System Objects > Window Objects > mainWindow.
* Javascript code can now receive notifications of DOF events, via
the new "dofevent" event. See the help under
* Javascript code can now pause and resume videos playing in custom
drawing layers, via the new methods pause() and play(), can set the
volume via the new "volume" property, can set muting via the new
"mute" property, and can load a video initially paused via the new
"play" property in the loadVideo() options argument. See the help
under Javascript Scripting > Drawing Layers for details.
* A new Javascript event, videoend, fires at the end of a video
playing in a Drawing Layer. See Javascript scripting > Events > Event
Types > VideoEvent in the help.
* Fixed a problem that sporadically caused the program to "freeze"
(stop responding to input) after returning from a launched game
session or a media capture session. The problem only affected
releases Beta 18 and Beta 19. (Issue #111 on github.)
* The Manual Capture Start/Stop button options weren't being respected
properly when using the "PinballY Admin Mode" version of the program.
That version always assumed you were using the default setting of
"press both flipper buttons". It now respects the actual option
setting.
01-21-2020 (1.0.0 Beta 19)
* Made some further tweaks to the way windows are rearranged when
switching between PinballY and a launched game (that is, when starting
a game, pausing, resuming, and terminating), to try to make focus and
window layering more reliable when switching between the game and
PinballY. This is an attempt to fix some remaining cases where either
the game or PinballY didn't always come to the foreground when
desired. (This sort of focus/activation processing is always fragile
in Windows, so it's possible that these changes will create new focus
problems that didn't exist before as well as solving some prior ones,
but hopefully this will at least be a net improvement.)
* When resuming a game after pausing, PinballY automatically restores
the game window if it's minimized. This is for the sake of games
running in "exclusive full-screen" mode, a special graphics mode that
some game programs use to take over a whole monitor at the hardware
level. When a game is running in "exclusive" mode, Windows has to
minimize the exclusive window when switching to another application,
because such a window by design can't share screen space with other
programs. So when PinballY suspends an "exclusive" game with the
Pause Game command, the exclusive window will be minimized as long as
PinballY is in control. That means we have to restore the window in
order to switch back to the game. This change should make Pause/
Resume transitions work better for games running in "exclusive" mode.
* Added a new option to force the playfield window to the foreground
during the game launch process. To enable this, go to the Windows
section of the options dialog and check the box for "Keep the
playfield window in front of other applications during launch". This
is intended as a workaround if you have any problems with other
application windows coming to the foreground during game launches.
I'd only enable it if you actually have this sort of problem in
practice, since attempts at explicit window layering can turn into an
arms race with other programs; it's best not to get started down that
road if you can avoid it.
* Fixed a problem with saving the last media type selections when
performing a media capture operation. (Issue #98 on github.)
* Fixed a bug that didn't display any text for a game title in the
wheel (for games without wheel images) when the "Wheel" font in the
options was set to a point size smaller than 40 points. (Issue #109
on github.)
* Fixed a bug that cut off the last character of some titles in the
game wheel when displayed as text (for games without wheel images),
depending on the font selected for the "Wheel" font in the options.
(Issue #109 on github.)
* When writing XML files for table databases, apostrophes in game
titles are now left as literal apostrophes in the XML text, rather
than being converted to the XML "'" entity format (as they were
in the past). The "'" format is valid XML, but PinballX doesn't
parse it properly, which caused a couple of problems if you tried to
share files with PinballX or the PBX Game Manager. The "'"
conversion isn't technically required for XML purposes, so this change
won't affect the validity of the XML, and will let PinballX read the
files more easily. (Issue #108 on github.)
* In Javascript, it wasn't possible to write to read/write properties
of OLE Automation (scripting) objects. This has been fixed. (Issue
#110 on github.)
* Javascript support has been added for read/write access to OLE
Automation object properties that require index argument. The Visual
Basic array-variable-like syntax used to assign to such properties
doesn't translate to Javascript, so we have to use the C++ convention
of adding a method called put_PROPNAME() to assign values to such
properties. For example, for the standard Windows scripting object
Scripting.Dictionary, the "Item" property requires a "key" argument
when reading or writing. To read an Item property, use the same
notation as in Visual Basic, "object.Item(key)". To assign a value to
an Item property, however, we have to use the C++ "put_" convention:
"object.put_Item(key, value)". See "Properties" in the the Javascript
> OLE Automation section in the help.
* In Javascript, "By Reference" parameters are now supported when
calling methods in OLE Automation (scripting) objects.
01-01-2020 (1.0.0 Beta 18)
* Added a new option to keep the DMD window in front of the backglass
window at all times. This might be handy if you have a single-monitor
or two-monitor setup, and you want to keep the backglass and DMD
windows on the same monitor. The new option is under the Windows page
in the options dialog. (Note that the option only applies to
PinballY's own DMD window. It doesn't affect any of the other DMD
windows in other programs, such as the "virtual DMD" window that
Freezy's dmd-extensions system shows, or the VPinMAME DMD window.
Those are controlled by separate programs, so PinballY can't set their
layering. Freezy's dmd-extensions has its own config file where you
can set its virtual DMD window to "always in front mode"; I don't
think there's any such option for the VPinMAME window.)
* Fixed a problem in the Real DMD handling that made PinballY stay
attached to the DMD device while the game was running, even if you
didn't have the "Keep using real DMD" option set for that game. When
this happened, it prevented the game from accessing the DMD device.
* If PinballY ever gets stuck behind another window or loses keyboard
focus, you should now be able to make PinballY active again by
pressing and holding the Exit Game button for a few seconds. (Exit
Game is usually mapped to the Escape key.) Ideally, you'd never run
into such a situation in the first place, since PinballY goes to some
trouble to keep itself in the foreground automatically whenever it's
appropriate for it to be there. But focus on Windows can be hard to
control, since other applications (and Windows itself) sometimes want