-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathchangelog.txt
4976 lines (4637 loc) · 255 KB
/
changelog.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
GIT - MZX 2.94
FIXES
+ TODO: 2.94 enables board message clipping bugfixes from 2.93b.
GIT - MZX 2.93c
Initial support for SDL3 has been added, but as it has not been
released yet, no MegaZeux release builds use it currently.
As part of the preparation for SDL3, this release includes many
long-belated changes to the way MegaZeux resizes windows and
calculates the scaled display area within the window (including
mouse coordinate conversion). This overhaul has fixed several
bugs, but please be on the lookout for regressions.
The Xcode port has been updated to build with the latest version
of SDL and other dependencies, and now requires OS X El Capitan
(x86_64) or macOS Big Sur (arm64) to run. This port no longer
supports x86 (32-bit). The Darwin multiarchitecture port has
also been updated to fix arm64 and arm64e support (only arm64 is
included in builds).
USERS
+ The DOS Sound Blaster driver now supports Sound Blaster with
DSP 2.0, Sound Blaster 2, and Sound Blaster Pro/16 mono mode.
Original Sound Blaster with the old DSP is still unsupported.
+ The DOS port and SDL ports now support mono audio. Mono can be
selected with the new config option "audio_output_channels".
+ Setting the config option "system_mouse" to "1" or "on" will
no longer disable the software cursor. The old behavior can be
restored by setting it to "only". The new behavior of "1" is
more useful, especially in Wayland (due to forced mouse grab
when the system cursor is hidden).
+ macOS now enables fullscreen_windowed by default to work
around macOS bugs involving real fullscreen and maximizing.
+ Fixed window resize bugs in Windows, macOS, Linux/BSD (both
X11 and Wayland), and probably other operating systems caused
by MZX recreating the window after every window resize event.
+ Fixed junk display in the letterbox area after resizing using
the software, gp2x, or SDL 1.2 overlay renderers.
+ The software and gp2x renderers now enable blitting when the
created window is smaller than expected instead of crashing.
+ Fixed sai.frag not being installed by "make install" or
distributed with Unix-style packages for Linux/BSD/Darwin.
+ Fixed the board editor show thing hotkeys (broken by 2.93b).
+ Fixed a crash that would occur in builds using extra memory
hacks (DOS) when copying blocks between boards in the editor.
+ Fixed text input bugs caused by a 2.93b change accidentally
reenabling old deadcode for exiting intake().
+ Fixed crash when saving editor config files/"Set as Default"
after the file fails to open for write. If the ".editor.cnf"
file fails to save or load, MZX will attempt to save or load a
".cne" file instead. This allows this feature to work in DOS
builds when there is no long filename (LFN) support.
DEVELOPERS
+ Added initial support for SDL3. No platforms select SDL3 by
default, but it is now possible to build and test MegaZeux for
platforms that already support the current prerelease (3.1.6).
+ Split the renderer function "set_video_mode" into two renderer
functions "create_window" and "resize_window" to more closely
reflect the reality of SDL2/3. The former is used during
renderer init and is mandatory; the latter is used to resize
and update other window settings like mouse grab/visibility
e.g. when switching to/from fullscreen, and is optional. If
it is not provided, switching to/from fullscreen will do
nothing. "resize_window" is also invoked in SDL 1.2 when a
window resize event is received. Some renderers (software,
gp2x) still use the same implementation for both functions.
+ Renamed the renderer function "resize_screen" to
"resize_callback" to more accurately reflect its purpose. It
is called in response to SDL2/3 window resize events and after
"resize_window" (by the video functions that call it, see
above). This function is now responsible for post-resize
maintenance such as glViewport and selecting the filter mode,
and is no longer required to call update_screen.
+ Replaced renderer functions "get_screen_coords" and
"set_screen_coords" with a single function "set_viewport" to
calculate the current window's display area. This area is used
in places where "fix_viewport_ratio" previously was and also
to convert mouse coordinates. Most renderers should use one of
the two prefab implementations of this function.
+ SDL text event enablement now happens after the window is
created. This shouldn't really affect anything.
+ Added detection for LoongArch64. 64-bit architectures that
platform_endian.h fails to identify as such should no longer
abort in the software layer renderer.
+ Updated the Xcode project. Supported architectures are now
x86_64 and arm64. The x86_64 architecture requires OS X El
Capitan (minimum version supported by SDL) and arm64 requires
macOS Big Sur. The Xcode project format is still 8.x, but
Xcode 12.2 or newer is required to compile release builds.
+ Tweaked the Darwin .app buildsystem to properly support arm64
and arm64e. The documentation has also been updated to note
linker issues in versions prior to 10.10 when combining
x86_64 and x86_64h into the same binary, and issues involving
arm64e builds being terminated by the kernel.
+ The dependency builder scripts now support building Xcode
frameworks for both x86_64 and arm64. Updated SDL to 2.30.8,
libpng to 1.6.44, libogg to 1.3.5, and libvorbis to 1.3.7.
September 10th, 2024 - MZX 2.93b
This is mostly a big bugfix release, but there are a few new
features of note. First and probably of most interest, there is
a new feature to export a full screenshot of an entire board or
the entire vlayer from the editor. Renderers based on the
software layer renderer should see some performance improvement.
The Darwin multiarchitecture .app port has also been massively
overhauled, and now targets up to 5 architectures (ARM still
pending). libxmp now plays stereo samples correctly.
DOS port users should be happy to hear that Sound Blaster Pro
support has been restored, and support for even more sound cards
is coming. Additionally, some Ogg Vorbis-related crashes have
been fixed, and the SVGA renderer should work better than prior.
Screenshots have been enabled for this port, and the TIME/DATE
counters should now work properly.
Finally, as usual, there are a large number of bugfixes, which
includes several crash fixes, scroll fixes, and FREAD fixes.
No compatibility checks have been added for the string splice
FREAD/FREADn bugfixes, as the old behavior was unusably buggy.
USERS
+ Added board and vlayer image export to the editor (Alt+X).
This feature will render the entire board (with overlay, if
applicable) or vlayer as it appears in the editor. This may
take a long time with large boards/vlayers.
+ Builds without libpng (Android, DOS) now use a simple fallback
PNG exporter for screenshots instead of falling back to BMP.
+ The DOS port now supports Sound Blaster Pro in stereo mode.
The driver should also support all other Sound Blasters with
DSP >=2.00 and the mono/8-bit modes of the Sound Blaster 16,
but these are disabled for now (no software mixer support for
mono output). IRQs higher than 7 are also supported now.
+ The DOS port now uses stb_vorbis for Ogg Vorbis playback,
which should fix most audio-related crash bugs. Related crash
bugs caused by stream management have also been fixed.
+ All "gamecontroller[...]" config.txt options have been renamed
to "gamepad[...]". The old names are still supported.
+ Windows UNC paths are now supported in the file manager.
+ Paths with colons (:) are now explicitly supported in Linux
and macOS and always rejected in path strings used by worlds.
+ Fixed blank screen bugs that occur with the glslscale renderer
in conjunction with Intel HD Graphics 2500 graphics drivers
and possibly some other old drivers.
+ The softscale renderer now respects disable_screensaver.
+ HTML5: fixed the poor performance of FREADn and other features
that rely on calculating the length of an open file.
+ Clear world (Alt+R) now resets the world version.
+ Fixed a crash bug and a false positive match bug in the
command IF ALIGNEDROBOT. The false positive bug has been
version locked to 2.80 through 2.92X (just in case).
+ Software layer rendering performance for transparent sprites
has been improved, significantly in some cases.
+ Fixed a software layer renderer bug where a buffer with a
pixel alignment that varies between lines would cause the
frame to render incorrectly.
+ Fixed a software layer renderer bug in 32-bit builds where
SMZX sprites would sometimes render incorrectly when clipping
off the left side of the screen.
+ Setting a string offset, limit, or splice to FREADn now
respects the provided limit. If n is larger than the limit,
n total bytes will still be read (up to the maximum string
size); any bytes read past the limit are discarded.
+ Setting a string offset, limit, or splice to FREAD now
respects the provided limit and no longer pads the string with
spaces in some cases. Setting any string to FREAD now reads
the file until a terminator or the end of the file is found
instead of stopping when the maximum string size is reached;
any bytes read past the limit or maximum size are discarded.
+ Setting a string splice to FREAD or FREADn with invalid offset
or size values no longer causes a crash.
+ Setting a string splice to FREAD with a valid offset that
would write past the current length no longer causes a crash.
+ Fixed a rare networking bug where fetching a compressed file
over HTTP could fail for particular compressed file sizes.
+ The About MegaZeux dialog now shows both the compiled and
linked versions of libpng if they are different.
+ Fixed flash thing layer draw order bug that would cause it to
display over editor elements using the game UI layer.
+ Licenses are now properly loaded in the About MegaZeux dialog
for Darwin builds.
+ Fixed potential heap overflows in mfread and mfwrite when the
current position is past the end. This should never actually
happen, but it's safer and shuts up _FORTIFY_SOURCE and ASan
compilation warnings.
+ Fixed platform-dependent out-of-memory errors when loading
robots from <=2.84 save files with corrupt stack sizes.
+ Fixed hangs in the robot editor caused by trying to use
Replace All to replace quotes or extra words with nothing.
+ Fixed the handling of lines over 64 characters long during
scroll editing. Scroll editing now previews colors and allows
lines up to 255 bytes in length. Like robot message boxes, any
characters past the first 64 will clip.
+ Clicking a line in the scroll display and editor now jumps to
that line (same as the help file).
+ You can now toggle between editing scrolls with the protected
palette/charset and the game palette/charset with Alt+V.
+ Games for versions 2.80X through 2.90X now display scrolls
using the protected palette instead of the game palette (fixes
a scroll in Welkin).
+ Fixed possible robot stack and scroll message memory leaks.
+ Fixed a 2.93 regression where color strings with escapes like
"~x", where x is not a hex digit, would also print the ~ or @.
+ Fixed clipping of the board message when it contains color
codes and when the message column is set to something besides
centered or 0. The next row will also use the correct color
code from the previous row (as if there had been no clipping)
instead of whatever the last color code displayed was. The old
behavior is version locked to <=2.93, so this fix won't take
effect until 2.94.
+ Added compatibility for MegaZeux 1.x's reverse send behavior
which allows robots to execute twice per cycle in some cases.
+ Fixed COPY when used with REL COUNTERS for 1.x worlds.
+ Added support for MegaZeux 1.x entrance precedence (color
match, then thing match only). This fixes an entrance bug in
MegaZeux Tutorial.
+ Added support for MegaZeux 1.x entrances linking to other
entrances on the same board. This fixes the whirlpools in the
Aqua Cavern board in Caverns of Zeux.
+ Added support for MegaZeux 1.x entrances not triggering when
the player is pushed onto them.
+ Added support for MegaZeux 1.x TELEPORT interrupting the
current board scan and partial support for the same behavior
in RESTORE PLAYER POSITION/EXCHANGE PLAYER POSITION.
+ The DJGPP port now locks all of its memory. This prevents
paging crashes related to audio, but increases memory usage.
+ Fixed the TIME and DATE counters in the DOS port when the
environment variable TZ is not set.
+ The SDL audio driver will now initialize the software mixer
frequency with the value returned by SDL_OpenAudioDevice.
+ Fixed audible pops when setting MOD_FREQUENCY.
+ ccv and png2smzx now return slightly more useful error
messages when an image fails to load.
+ ccv and png2smzx now support BMPs that use BI_BITFIELDS and
BI_ALPHABITFIELDS.
+ ccv and png2smzx now support Truevision TGA images.
+ Fixed YUV subsample averaging for UYVY (little endian) and
YUY2/YVYU (big endian).
+ ANSi file import/export options are now identified as both
ANSi and TXT, and the extension of the selected format is now
forced during export.
+ Fixed taking screenshots when in the board editor text mode.
+ The SVGA renderer now uses vsync palette/display page flips,
which improves performance and fixes display bugs. (asie)
+ Fixed libxmp stereo samples not playing correctly.
+ Fixed libxmp music not playing at high audio sample rates.
DEVELOPERS
+ Renamed "compat_sdl.h" to "SDLmzx.h". This header is now used
to abstract ALL trivial includes of SDL headers. This makes
supporting the future release of SDL 3 cleaner.
+ The version of SDL to build with is now determined by the
config.sh options:
--enable-sdl (enables the default SDL version, usually 2);
--enable-sdl2 (enables SDL 2.x);
--enable-sdl1 (enables SDL 1.2.x);
--disable-sdl (disables SDL).
For compatibility, "--disable-libsdl2" is still recognized.
+ Added SDL 2 support to the Wii port.
+ Added SDL 2 and SDL 1.2 support to the 3DS port. (asie)
+ Updated the "sdlaccel" renderer, which can now be enabled with
--enable-sdlaccel in config.sh. This renderer uses the SDL
renderer API for hardware rendering and has an experimental
threaded charset texture update routine. SMZX isn't currently
implemented and it's slow, so it's disabled by default.
+ Moved SDL renderer window creation to render_sdl.c so both of
the SDL renderer-based renderers can benefit from it.
+ Removed floating point division usage in render_gl2.c.
+ Added --enable-lto to enable link-time optimizations. This is
now enabled by default in most platforms' config scripts.
+ The sanitizer config.sh options can now be used with release
builds e.g. --enable-release --enable-asan.
+ Simplified the configuration of system directories for ports
in config.sh, which now prints more information about them.
+ Fixed config.sh output of "/usr/bin/git" and the Git HEAD.
+ Fixed testworlds process running check edge cases.
+ Fixed config.sh and platform_endian.h detection for IBM Z and
System/390 architecture.
+ Software mixer configuration (rate, buffer, channels) is now
done using the function audio_mixer_init instead of each
driver handling it manually.
+ The software mixer render function now takes the number of
frames and channels to render and the output format instead
of the number of bytes. Supported output formats are 16-bit
signed, 8-bit signed, and 8-bit unsigned.
+ Audio streams with a null mix_data function are now supported.
These streams will be ignored by the software mixer.
+ sampled_mix_data now properly handles output requests smaller
than the size of the audio buffer.
+ Added software renderer regression tests.
+ Removed PPAL compile time render_layer variants. These did not
help performance and increased the render_layer size by 50%.
+ Added dependency builder makefile system in scripts/deps to
help with regenerating MinGW, DJGPP, darwin-dist, and Linux w/
MemorySanitizer dependencies.
+ Overhauled the darwin-dist build system to allow for more
modern XcodeLegacy-based compilation, including code signing
and shared library support (via dylibbundler). The following
architectures are now supported: i386, x86_64, x86_64h, ppc,
ppc64, and arm64/arm64e (untested).
+ Updated libxmp to 4.6.0+6cb48a4a+sample rate patch.
+ Added more PowerPC64 GCC defines to platform_endian.h.
December 31st, 2023 - MZX 2.93
This is the first MegaZeux release in about 3 years, so there
are a lot of changes, including a large number of crash fixes.
Brief summaries of each section:
General: worlds are decrypted in memory now, MegaZeux 1.x worlds
are now supported, you can have more custom sound effects, the
1/8th random movement chance of dragons has been readded, and
static sprites now collide at their apparent position.
Robotic: new label PLAYERDIED, new counter KEY_PRESSEDn, new
counter DATE_WEEKDAY, new counter SPRn_OFFONEXIT, new viewport
counters, and setting MOD_LOOPSTART after MOD_LOOPEND now works.
Editor: the robot editor now has undo/redo, layer MZM block type
can now be selected, reimplemented ANSi/TXT import/export,
watchpoint improvements, a new variable debugger RAM menu, and
vlayer saved positions.
Video/audio: most GLSL performance and graphical issues have
been addressed and libxmp has received a massive bugfix update.
Portability: new PS Vita, DOS, Wii U, and Dreamcast ports.
Numerous NDS and 3DS improvements. The extra memory system from
the NDS port has been generalized to several ports and now
supports memory compression. Virtual filesystem support.
Utilities: vastly expanded image file support for ccv/png2smzx
and a new video conversion utility called y4m2smzx.
GENERAL
+ Added an "About MegaZeux" dialog, accessible from the main
menu. This menu contains extended version information, and
displays license information for MegaZeux and the 3rd party
software it uses.
+ Protected worlds are now decrypted to RAM or a temporary file
when 'auto_decrypt_worlds' is enabled and the original file is
left unmodified. This setting is now enabled by default.
+ Added experimental support for loading MZX 1.x worlds. Support
is not fully implemented yet, but all currently known 1.x
worlds are playable.
+ Up to 256 custom sound effects are now supported instead of
50, and custom sound effects can be up to 255 chars in length.
Currently, the sound effects editor is restricted to 100 SFX
of length 68; the CHANGE SFX # to "" command may be used as a
temporary workaround.
+ Custom sound effects can now be given custom names in the
sound effects editor. Currently names are limited to 9 chars
and are only useful when editing.
+ Fixed dragon 1/8th chance of random movement, which has been
broken since 2.80. The original DOS behavior (random movement)
or the 2.80 behavior (no random movement) can be selected via
the new board setting "Dragons randomly move".
+ Reset Board on Entry and load charset/palette on entry now
optionally will be performed even if re-entering a board from
itself (enabled by default).
+ Fixed a Reset Board on Entry bug where a temporary board would
not be generated when loading the title screen or if the
starting board is the title board.
+ Fixed bug where the second cycle of a board when entering from
a board edge or entrance would be shortened due to incorrect
gameplay framerate timing introduced in 2.91g.
+ Fixed a bug where, if a world's title screen music is set but
fails to load when the world is loaded, the music from another
world could continue to play.
+ Fixed a bug where boards wouldn't be pulled from extra memory
before saving, potentially causing save corruption on the NDS.
+ Fixed a standalone mode crash on exit that occurred when using
Alt+F4 or the window close button.
+ Fixed a crash that could occur when loading a save file with
the temporary board flag set but no temporary board data.
+ Fixed a bug in the random number generation function that
could cause it to rarely return a number outside of the
expected range. This unfortunately breaks compatibility for
the RANDOM_SEED# counter.
+ Static sprites now collide as if they are at the position on
the board where they are currently being drawn i.e. relative
to the viewport instead of at their actual X/Y position. This
behavior has also been added to the IF SPRITE AT # # command.
+ Optimized ccheck 3 sprite collision performance by generating
visibility masks for characters directly instead of using an
intermediate render and skipping pixel checks for blank chars.
+ Fixed a bug where worlds with SMZX mode selected would display
the previous world's palette after switching back to MZX mode.
+ World and save files now save the MZX mode palette when in
SMZX modes 2 or 3. Save files now save the MZX mode palette
intensities when in SMZX modes 2 or 3. The palette and palette
intensities for SMZX modes 2 and 3 are now saved as "palsmzx"
and "palints" when one of these modes is active.
+ Save files now save palette intensities for all modes as a raw
array of little endian DWORDs instead of bytes. The 2.92 and
2.93 intensities file formats are mutually incompatible.
+ Scrolls can now display standard message ~@ color codes.
+ Fixed warning messages caused by SDL controller CRCs.
+ Fixed hangs that could be caused by malformed counters files.
+ Fixed world/save/counters file corruption in rare edge cases
where the aforementioned files could break the zip format's
internal field bounds.
+ Fixed loading of world/save/counters files over 4 GB.
+ Fixed crashes when loading world or save files that contain
invalid current board IDs (both loaders), saved position
board IDs (both), start/death/game over board IDs (zip), board
exit board IDs (zip), robot program positions (both), robot
stack pointers (both), or robot stack sizes (legacy).
+ The output file mode (FWRITE_OPEN, FWRITE_MODIFY, or
FWRITE_APPEND) is now stored in save files. This fixes a bug
where the output file would be reopened in the wrong mode (ab)
when reloading a saved game.
+ Added a second Robotic command listing to the help file that
lists commands categorized by command type. (Terryn)
+ Links in the help file table of contents and Robotic Reference
Manual are now grouped into categories. (Terryn)
+ Other misc. help file corrections and maintenance. (Terryn)
ROBOTIC
+ New built-in label: PLAYERDIED (and the subroutine equivalent
#PLAYERDIED). When the built-in player dies, this label is
sent on the board the player died on. Because player death
occurs at the end of the cycle, this is received during the
following cycle.
+ New counter: KEY_PRESSEDn, to read internal keycode statuses.
This is like KEYn, but KEY_PRESSEDn accepts internal keycodes
instead of PC XT keycodes. KEY_PRESSEDn will return 1 if the
key is currently pressed, or 0 if it is not pressed.
+ New counter: DATE_WEEKDAY, which returns the number of the
current day of the week. Values are 0=Sunday, 1=Monday,
2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, 6=Saturday.
+ New counters: VIEWPORT_X, VIEWPORT_Y, VIEWPORT_WIDTH, and
VIEWPORT_HEIGHT to read the current board's viewport settings.
(Sparkette)
+ New counter: SPRn_OFFONEXIT. When enabled for a sprite, that
sprite will be automatically turned off when exiting the board
(same as setting SPRn_OFF). This occurs even if the new board
and the previous board are the same. (Sparkette)
+ Fixed crash bugs caused by using CHANGE SFX # to "" with an
invalid sound effect number.
+ Fixed loop detection for Ogg Vorbis files when MOD_LOOPSTART
is set to a value greater than MOD_LOOPEND.
+ Fixed a crash bug when attempting to save MZMs over 4MB to an
existing string.
+ Fixed a buffer overflow crash that could occur when using LOAD
CHAR SET with both a large input file and a large offset.
+ Reading from and writing to extended character sets should no
longer display an "advanced graphical features" error message
when a renderer without layer rendering support is active.
This will, however, display a (new) error message specific to
the Nintendo DS port.
+ Fixed CLIP INPUT and IF FIRST STRING "" "" bug where INPUTSIZE
would be used as the bound on the input string without also
checking for null chars, potentially allowing heap corruption.
+ Fixed a hack where the TELEPORT command would temporarily
store the current board to extra memory, causing the game
update loop to potentially cause memory corruption with stale
board pointers on the NDS.
+ Fixed string wildcard matching bug that could cause patterns
ending with ? to sometimes fail.
+ Dividing the value -2147483648 by -1, either by the commands
DIVIDE and MODULO or through expression operators / and %, no
longer crashes MegaZeux.
+ When the right operand to a bitshift operator in an expression
is less than 0 or greater than 31, << and >> will return 0,
and >>> will return 0 if the left operand is positive or -1 if
the left operand is negative. The old behavior of the bitshift
operators for these shift values was architecture dependent.
+ The date and time for the Robotic date and time counters is
now sampled once per command maximum. When multiple date/time
counters are read in the same command, they are guaranteed to
represent the same time.
+ The Robotic message box commands now properly display char 10.
+ The Robotic command ? now correctly accounts for color codes
in its length bounding.
+ Fixed crashes in the & Robotic command caused by bad color
string length calculations.
+ Fixed PrintScreen/SysRq and Menu/"Right Click" keycodes.
+ Unsupported keys no longer return a KEY_PRESSED value of 1
for SDL 2 builds.
+ Fixed crashes when executing the GIVE, TAKE, TAKE ELSE, and
TRADE commands with an invalid item type.
+ Fixed crashes when disassembling a Robotic command with an
invalid condition.
EDITOR
+ Added robot editor undo (Ctrl+Z) and redo (Ctrl+Y). Like with
board/vlayer/charset editing, the size of the undo stack is
defined by the config setting "undo_history_size". Note that
extended macro expansion can sometimes clobber undo or redo
frames (this is not easily fixable, and prevents worse bugs).
+ When loading a layer MZM to the board in the editor, instead
of always loading the MZM as CustomBlocks the conversion type
can now be selected from CustomBlock, CustomFloor, and Text.
Canceling the object type dialog no longer cancels the current
block or MZM placement.
+ Reimplemented ANSi import/export support for the editor. ANSi
and TXT files can be imported in the editor with Alt+I and can
be exported by selecting a block (Alt+B).
+ Creating a new world using N from the title screen or Alt+R
in the editor now clears the extended character sets.
+ Improved the performance of Robotic debugger watchpoints,
especially for non-built-in counters and non-spliced strings.
+ Robotic debugger watchpoints can now watch for particular
counter or string values. Leaving the value field blank will
still check for any value.
+ Added a list of variables related to RAM usage to the counter
debug window. This list can be found in the "World" list.
+ Added vlayer saved positions to the editor. Like regular saved
positions, these can be configured with the config file option
"vlayer_position#", and they work identically to board saved
positions.
+ Fixed bugs caused by missing validation in the Import SFX
feature in the editor.
+ Fixed a bug where multichar char tile movement could still
sometimes jump to the -/+/= chars in the main charset.
+ Fixed another bug that would cause string searching in the
robot editor to sometimes skip matches.
+ Replace all (Ctrl+H) in the robot editor should no longer skip
adjacent instances of the search string.
+ Opening the block action menu in the robot editor (either with
Alt+B or Alt+Enter) now updates the current line, fixing bugs
where it could copy old line contents to the buffer.
+ Fixed a robot editor crash that could occur when combining two
lines with backspace or delete if one of the lines contained
the start or end block mark.
+ Fixed a bug in the robot editor where Ctrl+Home and Ctrl+End
would only set the current line (and not the current column).
+ Fixed a robot editor extended macro crash that would occur:
when pasting a line containing a macro from the clipboard;
when importing a Robotic source file that invokes macros;
when invoking nested extended macros.
+ Invoking an extended macro with enter/return no longer inserts
an extra blank line.
+ Pressing enter at the start of a line with an extended macro
now invokes the macro instead of just inserting a line.
+ Fixed editor extra memory crashes when importing and deleting
boards.
+ editor_show_thing_toggles is now enabled by default.
- board_editor_hide_help and robot_editor_hide_help are no
longer enabled by default for accessibility.
VIDEO/AUDIO
+ Added the "glslscale" renderer. This is the same as the GLSL
renderer, but uses software rendering with scaling shaders
instead of hardware rendering. This is faster on low end PCs
and embedded devices and is the new default renderer selected
by auto_glsl. (Hardware rendered GLSL is still available for
users with graphics cards by selecting the "glsl" renderer.)
+ The software fallback renderer functions now support SMZX mode
3 indices, fixing graphical bugs in situations where the
fallback would be used and display the wrong colors in games
using custom indices.
+ Added an "auto" mode for the force_bpp config option. Modern
SDL automatically selects a native window pixel format and a
fixed value can make the software renderer slower. Detecting
the BPP from the created window is more in line with reality.
+ Fixed color inaccuracies in the softscale renderer on Mac OS
caused by using full-swing YUV values instead of the expected
studio-swing values for GL_YCBCR_422_APPLE textures.
+ Simplified GLSL renderer texture data packing to improve
support for OpenGL ES and older OpenGL implementations.
+ The GLSL tilemap fragment shaders will now use highp floats if
provided by the OpenGL ES driver. If highp is unavailable and
mediump has inadequate precision, MZX will print a warning.
+ Fixed software renderer display issues caused by relying on
SDL_PixelFormat::BitsPerPixel instead of BytesPerPixel on
platforms with native 15 BPP display modes.
+ Added disable_screensaver configuration option. MegaZeux now
leaves the screensaver enabled by default (fixes regression
caused by SDL 2.0.2+).
+ Added an "sdl_render_driver" config setting. This setting can
be used to specify the underlying SDL renderer driver used by
the softscale renderer. This setting does not affect any other
renderers.
+ libxmp playback improvements for GDM, AMF, and OctaMED modules
as well as general stability improvements.
+ Updated libxmp to 4.6.0+ceb2d025.
+ Fixed crashes in the RAD player that could be caused by
references to uninitialized instruments.
+ Applied various Opal fixes from OpenMPT.
- Removed GL4ES from the GLSL blacklist.
PORTABILITY
+ Added an experimental PlayStation Vita port. (Spectere)
+ Added an experimental Wii U port. (asie)
+ Added an experimental Dreamcast port. (asie, Lachesis)
+ Added an experimental MS-DOS 32-bit port based on DJGPP.
(Mr_Alert, asie, Lachesis)
+ Added support for BlocksDS to the NDS port. (asie)
+ Added support for 800x240 mode to the 3DS port. This mode can
be toggled with the 3DS keyboard. (asie)
+ Added support for using 352kB of previously unused NDS VRAM
as board storage. This area can be used for board storage even
when a slot 2 expansion cartridge is not present. (asie)
+ Reduced RAM usage by 50k by removing variants of *printf and
*scanf with floating point support on the NDS. (asie)
+ The MOD_ORDER counter is now readable on the NDS. (asie)
+ save_slots is now enabled by default for consoles. (Spectere)
+ Inactive boards and some robots are now compressed on the NDS,
which (combined with asie's VRAM patch) should vastly increase
the number of games that can be played on the original DS and
DS Lite without a slot 2 expansion cartridge. This is also
enabled for the PSP and DOS ports.
+ The NDS, PSP, and DOS ports now write zip archives with the
fastest zlib compression level. This makes saved files that
use compression (worlds, saves, etc.) slightly larger.
+ Added virtual filesystem support to MegaZeux. Currently, this
is only used for caching files, and is only enabled by default
on platforms with slow or buggy file IO (3DS, Vita). This
feature may be optionally configured with the config options
vfs_enable, vfs_enable_auto_cache, vfs_max_cache_size, and
vfs_max_cache_file_size.
+ Fixed a bug where the 3DS and Switch ports would display .. in
the file manager when selecting a board module, board charset,
or board palette.
+ Fixed a bug where, when a faulty dirent implementation returns
.. when listing the contents of a root directory, .. would be
displayed despite being meaningless.
+ Fixed a bug where some checks in the file manager could fail
when getcwd returns different slashes than expected.
+ Fixed a bug where stdio redirect could generate corrupted log
files on the Nintendo DS due to poor freopen support.
+ Enabled the GLSL renderer for the Android port. The Android
port now uses the GLSL scaled software renderer by default.
- Removed 3DS CIA support. (asie)
UTILITIES
+ ccv and png2smzx now both support the following image formats:
PNG (libpng builds only), GIF, BMP (uncompressed, RLE8, RLE4),
NetPBM (PBM, PGM, PPM, PNM, PAM), farbfeld. png2smzx will now
build when libpng support is disabled, though it won't support
loading PNGs with this configuration.
+ ccv and png2smzx now both support streaming image data from
stdin using the input filename "-".
+ Added y4m2smzx, a video converter frontend for the same image
converter that png2smzx uses. This is a rewrite of Mr_Alert's
original frontend from 2010. This uses a custom y4m loader
rather than MJPEG Tools for now, so it may be buggy. Usage:
ffmpeg -i input -f yuv4mpegpipe pipe:1 | y4m2smzx - out.mzv
+ The downver utility now supports save files.
+ Fixed a bug where checkres would not check the current dir
for files when provided with a MZX filename with no path
component.
+ checkres now attempts to scan every board in <=2.84 worlds
where a corrupt board/robot is found. Due to old world format
limitations, robots after a corrupt robot can not be scanned.
+ checkres now supports scanning protected worlds.
+ Added experimental checkres support for MZX 1.x worlds.
DEVELOPERS
+ Added --enable-extram config.sh flag to enable extra memory
hacks on arbitrary platforms. This is enabled by default in
CONFIG.NDS, CONFIG.PSP, and CONFIG.DJGPP. When enabled, non-
active boards are compressed in RAM. Certain platforms can use
platform-specific storage, like the NDS.
+ Board input strings, charset paths, and palette paths are now
heap allocated on-demand to save RAM for low-memory systems.
+ Status counters are now saved as a nested properties file.
+ Refactored the 3DS renderer to use templates. (asie)
+ intake2() now supports custom handling of intake events, i.e.
it can now be used without providing a fixed size buffer.
+ The draw and click handlers have been removed from intake2().
This should provide more flexibility to the parent context for
displaying the string that is being edited.
+ Added "mzxout" and "mzxerr" streams for printing console
messages. In most places these should be used instead of
"stdout" and "stderr" to allow debug and warning messages
print to the correct log files when stdio redirect is enabled.
+ Fixed broken MIPS big endian detection inherited from SDL 1.2.
+ Added architecture width detection for RISC-V RV32 and MIPS64.
+ Replaced the macro-based mixers in sampled_stream.c with more
maintainable template-based mixers.
+ Fixed the DSO -Wstrict-aliasing warnings in Socket.cpp and the
OpenGL renderers for GCC versions using -Wstrict-aliasing=2.
+ Added --host config.sh option to manually specify a cross
compiler prefix. This is ignored or overriden by most ports
and is mainly just for Linux.
+ Relicensed ccv from GPL 3 to GPL 2+ to match the rest of MZX.
(Lancer-X)
+ If available, GetSystemTimePreciseAsFileTime and clock_gettime
are now used to calculate the system clock time.
+ If available, SDL_GetTicks64 is now used by get_ticks().
+ Minor performance improvements for run_robot, is_string, and
find_function_counter.
+ _FILE_OFFSET_BITS=64 is now used for 64-bit fseeko, ftello,
readdir, and stat/fstat support for 32-bit Linux builds.
+ Updated Android SDL to 2.28.2. (asie)
+ Updated Android NDK to r23c. (asie)
+ Fixed Android build system handling of missing libraries.
+ Improved fileform.html, joystick.html, keycodes.html, and
platform_matrix.html readability on small/mobile displays.
- String values are now allocated separately from the string
struct and name. This may make strings very slightly slower,
but means string pointers are now stable through an entire
gameplay session.
November 22nd, 2020 - MZX 2.92f
Here's another bugfix release. Highlights of this release are
crash fixes (including the 3DS OGG crash bugs), numerous SAM/WAV
playback bugfixes, some edge case compatibility fixes, world
decryption improvements, networking improvements (including
experimental Wii, 3DS, and Switch support), bugfixes for the
file manager in Nintendo Switch builds, and too many libxmp
fixes/improvements to list. Since libxmp development is active
again, the number of MegaZeux hack patches is down to just two!
The editor is now enabled for 3DS builds, and some rudimentary
joystick support has been added to the editor so it will (maybe)
be (almost) usable.
Of special note are asie's improvements to the NDS port. New
features include protected character set and palette support,
improved touchscreen focus, reduced memory consumption, and
*audio support*. Currently NDS audio requires preconversion of
music files to .MAS and sample files to .SAM, but that it works
at all is amazing by itself. Pre-converted .MAS files are
included with the packed-in copy of Caverns of Zeux.
USERS
+ Added audio support to the NDS port. PC speaker effects and
.SAM files will work out of the box, but .MOD/.S3M/.XM/.IT
files require preconversion to .MAS using mmutil. All other
audio formats are unsupported. (asie)
Example:
mmutil -d -m CV_TECH.MOD
+ Added protected character set and palette support to the NDS
port and reduced overall RAM usage for the NDS port. (asie)
+ Fixed a bug in the NDS port where MZX would immediately focus
the player after a touchscreen press event, preventing the
touchscreen from being used to scroll the upper screen. (asie)
+ Fixed a crash that could occur sometimes when duplicating
robots on a board with Reset Board on Entry enabled.
+ Added SET RANDOM, INC RANDOM, DEC RANDOM, and TAKE "label"
commands to the list of commands that should allow "infinite"
loops in pre-2.80 versions.
+ Fixed SET RANDOM # TO # for large ranges on certain platforms
(example: Linux) confused by the 32-bit math used to calculate
the random range.
+ Fixed crashes that could occur when attempting to run MegaZeux
without help.fil.
+ Fixed graphics corruption when using the glsl and opengl2
renderers on big endian platforms.
+ Fixed a bug that would cause string searches to sometimes skip
certain matches.
+ Improved performance of saving ZIP worlds/save files/etc. for
some platforms.
+ Platforms without a protected palette and the meter enabled
should now fade out properly before loading a world.
+ Rewrote decrypt() to work better on low-memory platforms.
+ Improved GLSL layer renderer performance slightly by sending
the palette and indices to the GPU fewer times per frame.
+ Fixed a bug where the GLSL renderer could attempt to load the
framebuffer symbols from a driver that doesn't support them
when resizing the window.
+ Fixed a bug where checkres wouldn't correctly detect
"LOAD_ROBOT#" when used to load to a specific robot.
+ Fixed a memory leak when printing network error messages in
Windows builds.
+ Fixed a potential crash bug in the netcode where socket IDs
could be reused after close() when attempting to connect.
+ Fixed a crash bug affecting the compatibility implementation
of getaddrinfo() that would occur if NULL was returned by
gethostbyname() during DNS resolution.
+ Fixed a potential crash in the compatibility implementation of
getaddrinfo() caused by gethostbyname() being thread-unsafe.
+ Fixed a bug where the updater would hang for up to 10 seconds
due to connections timing out during the confirmation UI.
+ Fixed a bug where the local manifest.txt would be overwritten
by the remote manifest, potentially causing bugs. The local
manifest will now be replaced only after a successful update.
+ Fixed bugs where the HTTP layer would filter header names,
content/transfer coding values, and content type values too
strictly.
+ Fixed a bug where INPUT STRING would display newlines from
an interpolated string.
+ MZX now validates the world version of encrypted worlds before
offering to decrypt them. This should reduce the chance of
accidentally "decrypting" a corrupted file and prevents MZX
from attempting to decrypt MZX 1.x files (which store the
password differently).
+ Added config settings "editor_show_thing_blink_speed" and
"editor_show_thing_toggles". The former controls the blinking
speed of the show thing (Shift+F2 et al.) editor keys and the
latter allows these keys to be treated as a toggle instead of
blocking input.
+ Added SOCKS5 IPv6 and username/password support.
+ Added "network_address_family" config setting to allow users
to force either IPv4 or IPv6 connections/name resolution. By
default, MZX will now request either or both depending on the
system IP address configuration (previously, it was hardcoded
to only allow IPv4 despite IPv6 support being implemented).
+ The config setting "updater_enabled" has been added to turn
off the updater system entirely without disabling networking.
+ The updater now allows update checks to be performed even when
a full update wouldn't be possible, and should be more helpful
about printing warnings to the console when this situation
occurs.
+ Enabled rewinddir hack and .. file manager hacks for Nintendo
Switch builds to fix the file manager and directory seeking.
+ Fixed a bug where importing a board over the title board would
not update the world title.
+ Fixed a crash that could be caused by selecting a block on the
overlay/vlayer, changing boards, then pressing enter.
+ Fixed a bug where the currently playing PC speaker note would
play for the rest of its duration after turning off PC speaker
sound effects, after "end play", after exiting gameplay, etc.
+ Fixed a regression where turning off music in the settings
menu and then turning music back on would not start playing
the music file for the current board.
+ Fixed multiple libvorbis and tremor crashes related to the
3DS platform_mutex_lock implementation not blocking.
+ Fixed audio frequency bugs in .SAM file playback.
+ Certain .WAV subtypes handled by SDL_LoadWav should now load
properly on big endian machines.
+ Signed 16-bit samples should now work correctly with MOD SAM
on big endian machines.
+ Fixed the white border present when using the GLSL renderer in
HTML5 builds.
+ Added joystick input handlers for most editor interfaces.
Only very basic things are supported like navigating boards
and robots. This is intended for things like handheld consoles
without a keyboard.
+ Fixed a bug where turning off the listening mod would load the
mod that was playing when the listening mod was loaded instead
of the current board's mod.
+ Fixed a bug where setting a board mod to a partiular mod, then
setting the board mod to *, then changing to a different board
with the same mod would not restart the board mod.
+ Fixed a bug where libxmp would not ignore zero volume samples
in STM files.
+ Restored libxmp support for Soundtracker 2.6/IceTracker .MODs.
Currently only libxmp supports this .MOD variant.
+ Fixed a bug where MZX would fail to load Noisetracker,
Octalyser, and Mod's Grave .MOD files if they were named using
the extensions .NST, .OCT, and .WOW (respectively). These can
now be selected with Alt+N/Ctrl+N in the editor.
+ Enabled loading .XM and .AMF files with MikMod. Whatever the
issue was with these in 2007 seems to have since been fixed.
+ Fixed loading Soundtracker 15-instrument .MODs with MikMod.
+ Fixed MOD_POSITION and MOD_LENGTH counters for MikMod.
+ MikMod now uses interpolation if module_resample_mode is set.
- Disabled playing modules using the SAM command with MikMod to
avoid crashes due to MikMod using a global player state.
DEVELOPERS
+ The test worlds now run correctly when AddressSanitizer is
enabled.
+ The SUPPRESS_BUILD Makefile flag has been split into several
flags, allowing more granularity for disabling default rules.
The Android and Darwin "dist" meta targets use these flags to
to disable the default "all" target, so "make" can now be used
in place of "make dist" for these platforms.
+ Using "make build" will now remove the build/${SUBPLATFORM}
directory if it exists before preparing a build. Before, using
"make build" when the platform build directory already exists
would not copy any updated binaries/assets/etc., potentially
causing confusion.
+ The check_alloc series of functions should now be thread safe.
The main thread will display a fatal error as usual when
allocation fails; others threads will print a warning and
return NULL.
+ Added implementations of new/delete/__cxa_pure_virtual that
can be linked to avoid linking libstdc++/libc++ on platforms
and configurations that otherwise don't need those libraries.
+ Refactored the netcode to use C++ instead of/in addition to C,
allowing some cleanup that otherwise wouldn't have worked.
Host::bind, Host::listen, Host::accept, and Host::poll are no
longer disabled. Other network deadcode functions have been
updated but are still disabled.
+ Fixed FD_ISSET in the Windows netcode.
+ Added a EAI_AGAIN define for the getaddrinfo() fallback.
+ Fixed leak of updates.txt file pointers in the updater that
could occur when updates.txt fails to download. The updater
now downloads updates.txt to a buffer instead of to disk.
+ Added graphics.renderer.hardware_cursor for platforms with
hardware cursors that may need to be updated during any frame
regardless of the current cursor state/blinking (i.e. DJGPP).
+ Fixed "make build" error after using "make debuglink" with png
support disabled.
+ Added const and restrict to the software render_graph and
render_layer implementations for a small performance boost.
+ Added --disable-getaddrinfo and --disable-ipv6 config.sh flags
to allow disabling these for old platforms and consoles SDKs.
Amiga, Wii, and PSP network builds force-disable these. Switch
and 3DS builds currently force-disable IPv6.
+ Added experimental network support for Wii, Switch, and 3DS.
+ Updated libxmp to git-ab70ec9f, refactored libxmp patches.
+ Removed unused libxmp Paula simulator code to save RAM. (asie)
+ SDL is no longer required to build MZX with MikMod enabled.
+ Fixed MikMod static linking on Windows.
+ Added --disable-stack-protector config.sh option. Platforms
that previously disabled the stack protector in the Makefile
now force disable this config option. These force disable
hacks will probably be removed in the near future.
July 20th, 2020 - MZX 2.92e
This bugfix release includes miscellaneous audio fixes and fixes
for bugs in the configuration system. Other things of note are a
fix for a graphical bug in the robot editor, a freeze bugfix in
the updater when updating from older MZX releases, and the title
of the Alt+A ("Select Char Set") dialog has been reverted back
to roughly what it was in DOS versions. A second default SMZX
character set with a different font has been added as well.
USERS
+ Fixed Windows file handle leaks in audio_xmp.c caused by
MinGW's non-compliant fdopen.
+ Fixed a bug where the title screen's intro message wouldn't
cycle the scroll color while no world was loaded.
+ Added the missing "ccode_chars" config setting.
+ Fixed a bug where the "ccode_extras" config setting would
change the strings color code instead.
+ Fixed a bug where "macro_#" where # is 0 or between 6-9 would
corrupt various parts of the editor configuration. Notably,
"macro_6" would corrupt the extended macros and cause crashes.
+ Fixed division-by-zero crashes and GL errors when using
invalid fullscreen_resolution or window_resolution values.
+ Fixed a bug where files included by the config file include
directive would ignore editor settings. Also added a recursion
limit for includes and fixed a bug where the "include=file"
format would not work on some platforms.
+ Fixed a libxmp bug where pattern jump/break could take effect
after using JUMP MOD ORDER or setting MOD_ORDER/MOD_POSITION.
This fixes a bug at the end of the Inmaportal scene in Cans 3.
+ Zip files with the language encoding flag set no longer print
unsupported flag errors.
+ Fixed a bug where recursive directory deletion in the updater
could get stuck in an infinite loop due to not checking the
return value of rmdir and path_get_directory not behaving the
same as get_path used to.
+ Fixed a bug where the cursor could display over the color
selector and char editor when opened from the robot editor.
+ Fixed a bug where the default character set selection menu was
inconsistently labeled "Object type".
+ Added a second SMZX default character set with a more legible
font. The original is still available for those who prefer it.
DEVELOPERS
+ Fixed memcasecmp test alignment checks for the Motorola 68000.
+ Improved validation of config setting inputs and added a unit
test for config file and command line parsing.
+ Added buffered zip compression/decompression support.
+ Added unit tests for the zip functions and (de)compressors.
May 8th, 2020 - MZX 2.92d
This release includes minor new features, an overhaul to the way
MZX handles text input from SDL 2.0 which should fix various
text bugs (particularly with non-US keyboards), fixes required
to get the Android port working, and a new file format document.
Other things of note are two libxmp patches fixing issues with
S3Ms saved by the original Modplug Tracker and with GDMs relying
on fine effect continue, checkres updates, and misc. fixes for
the Windows and HTML5 ports.
Fixed compatibility issues in this release are a string compare
bug that prevented Mines of Madness from working and MODs with
extended filenames working when referenced by their truncated
DOS SFN in the MZX file. The latter fix only works when there is
a single unambiguous match, which turned out to be essentially
every affected game.
It is worth noting that the Android port is EXPERIMENTAL and is
likely to have compatibility issues on many devices. A USB OTG
or Bluetooth keyboard or game controller is required at minimum.
Many devices have key press issues that are likely caused by
drivers or SDL. SDL text input events are disabled as they cause
even more keyboard bugs, and as a result non-US keyboard layouts
probably won't work with this port right now. Other problems
with this port that have been reported include graphical bugs
and crashes when focusing/unfocusing MegaZeux.