-
Notifications
You must be signed in to change notification settings - Fork 20
/
changelog.txt
4729 lines (4404 loc) · 242 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
No compatibility checks have been added for the string splice
FREAD/FREADn bugfixes, as the old behavior was unusably buggy.
USERS
+ All "gamecontroller[...]" config.txt options have been renamed
to "gamepad[...]". The old names are still supported.
+ 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.
+ 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.
+ The About MegaZeux dialog now shows both the compiled and
linked versions of libpng if they are different.
+ Licenses are now properly loaded in the About MegaZeux dialog
for Darwin builds.
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 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.
+ -Og is now the default debug optimization level (was -O0).
+ Added --enable-lto to enable link-time optimizations.
+ 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.
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.
USERS
+ Added robot editor shortcuts CTRL+Home and CTRL+End to jump to
the start and the end of the current program.
+ Char selector tile movement is now disabled outside of the
char editor and for 1x1 char selections. This allows typing
-/_/=/+ in other char selectors to jump to those characters.
+ Added docs/fileform.html, a document describing all currently
supported MZX file formats in excessive detail.
+ When startup_file is provided with both a directory and a
filename and no startup_path has been set, the directory will
now be used as startup_path. If startup_path is set, the
directory portion of startup_file will still be ignored.
+ The flash thing editor functions (Show Robots, etc.) now use
the protected charset and will display with the protected
palette in SMZX mode and in regular mode situations where the
normal flashing would be difficult/impossible to see.
+ Fixed a bug where input text with no corresponding internal
key would be ignored by the robot editor.
+ Fixed a bug where some AltGr key combinations would not work
in the robot editor (note: SDL doesn't distinguish Alt from
AltGr, so any Alt key combos with a special meaning in the
robot editor will still be intercepted by MZX).
+ Windows Alt+numpad sequences corresponding to ASCII characters
32-126 should now be recognized.
+ Fixed an out-of-memory error in the save slot UI and improved
its mouse functionality.
+ Added optional CRC-32 output to checkres. Currently this flag
only works for files in ZIP archives and no CRC-32 validation
is performed.
+ Fixed checkres parsing for LOAD CHAR SET "+&+var&file.chr".
+ Fixed checkres crash that could occur on some platforms when
attempting to checkres a directory.
+ Fixed wrong robot board positions reported by checkres for
some files when run with -vv.
+ Repurposed the old checkres -A flag to display everything but
unused files, which should be much more useful than the older
behavior (particularly with loose files in directory dumps).
+ Fixed memory leaks in legacy_assemble_line.
+ Fixed potential null termination issues in both world loaders
that could be triggered with invalid board name, robot name,
scroll, sensor, sfx, and status counter strings. Also improved
loaded robot stack bounds checks.
+ Decreased the sizes of the counter and string structs and
fixed a crash that would occur when attempting to expand the
counters or strings lists beyond 1 billion. Checks have been
added to prevent them from expanding beyond 2^31 (please don't
actually use this many counters/strings).
+ Fixed string comparison for pre-2.81 games that relied on
null-terminated string compares. This fixes Mines of Madness.
+ Fixed hlp2html bug where certain chars wouldn't be escaped and
decreased the size of the output HTML files somewhat.
+ Fixed libxmp playback for S3Ms containing ADPCM4 samples. This
fixes mm2flash.s3m in ZeuxDrop.
+ Fixed libxmp playback for GDMs where 100/200/A00 should
continue the fine portamento and fine volume slide commands.
This fixes LB2_7.GDM from Kikan.
+ fsafetranslate now attempts to detect matches for truncated
DOS SFNs on non-Windows platforms. If an unambiguous match for
a truncated SFN is found, the SFN will be expanded to the
match. This fixes numerous games relying on truncated SFNs
with unambiguous matches.
+ Reimplemented COPY # # # # for layer-to-layer copies.
+ Fixed a collision bug affecting unbound sprites with ccheck 3
set in SMZX mode where wrong colors could be treated as the
transparent color for the purposes of collision.
+ Fixed softscale bug on some platforms where the screen border
wouldn't be cleared.
+ The GLSL renderer will now attempt to use a framebuffer when
available. This fixes GL_INVALID_OPERATION bugs with certain
OpenGL ES 2.0 implementations.
+ Directory navigation in the file manager now checks directory
access permissions before allowing navigation and displays an
error when navigation fails.
+ Fixed windowing code bug in extended macro editor that would
occur after selecting "Default" multiple times.
+ Fixed a bug where long extended macros could sometimes break.
+ Fixed extended macros not working when the params line is
indented by more than one space or tab.
+ Windows builds now attempt to load and call SetProcessDPIAware
on startup. This should fix undesirable DPI-related scaling
and fullscreen bugs.
+ Fixed Emscripten crashes on startup when built with Emscripten
1.39.5 and up caused by usage of deprecated canvas behavior.
+ Fixed a COPY BLOCK $string bug where the buffer could be
allocated at the empty destination string's value on some
platforms and a faulty bounds check would result in the string
being expanded but otherwise blank.
DEVELOPERS
+ Added a set of C++-based unit tests for portions of MZX that
can't be reached/tested easily by MZX worlds. These tests will
be built and run when "make test" is used prior to running the
test worlds.
+ Decoupled SDL 2 text input handling from regular key handling
and added a text input buffer. Text keys can now be requested
multiple times and either as ASCII or unicode; the next key in
the buffer is returned on subsequent calls. intake and editor
text entry can now accept multiple text chars per frame.
+ Added SDL 1.2 implementation for __peek_exit_input.
+ Contributed sound engines (libxmp, libmodplug) should now
properly rebuild after config.sh is run.
+ Fixed a bug where khash tables couldn't expand beyond 2^31,
added hash caching, made the MZX copy of khash use MZX style,
and better documented the changes made to it.
+ Added fast sprintf replacements for Robotic counter to string
conversion (counter interpolation, string/counter compares).
+ Fixed alignment issues in memcasecmp.
+ Fixed alignment issues in get_cursor_color.
+ Added a config.sh flag for UndefinedBehaviorSanitizer.
+ Categorized config.sh flags list.
+ Added a trace logging level that is disabled by default and
changed most dns.c, fsafeopen.c, and checkres.c debug logging
to use it. Use the --enable-trace config.sh flag to enable
trace logging for debug builds.
+ Added a config.sh flag to build using GCC's -fanalyzer flag
(disabled by default).
+ Refactored path functions out of util.c.
+ Replaced the Android build scripts with an improved Makefile
system. The Android Makefile now uses the NDK toolchains
directly. Also added support for APK signing and fixed several
Android port bugs.
+ MZX will now exit on startup if no world could be loaded and
the SDL dummy video driver is active.
- Removed -fpermissive from CXXFLAGS (pointless).
- Removed -fbounds-check from debug builds (pointless; MegaZeux
doesn't use GCC to build any Fortran or Java code).
March 8th, 2020 - MZX 2.92c
Here's another bugfix release, this time mostly oriented towards
fixing bugs in the Emscripten/HTML5 port and checkres. Other
fixes of note are the module_resample_mode (formerly 'modplug')
config setting has been fixed, numerous optimizations have been
made to the software layer renderer, and yet another ternary
operator bug has been fixed.
Finally, Spectere has added an experimental save slots UI that
can be enabled with the config setting "save_slots". This
feature is intended primarily for consoles and will likely be
enabled by default for consoles in the future.
USERS
+ Added an optional save slots interface to complement the file
manager. This can be enabled by setting the "save_slots"
config setting to 1, and is disabled by default. (Spectere)
+ Board list typing now allows non-alphanumeric keys like spaces
and periods. Typing a space first will match zero or more
prefixed spaces while seeking.
+ Added the config setting "auto_decrypt_worlds". When set to 1,
this allows MegaZeux to automatically attempt to decrypt
protected worlds. For most platforms this option is disabled
by default.
+ MegaZeux now silently ignores robots in older worlds with
corrupt programs that are marked unused. This fixes an error
message that would display when loading Wes.
+ Renamed "modplug_resample_mode" to "module_resample_mode".
Fixed a bug where the xmp interpolation mode wouldn't be set
correctly from this setting and instead would always reset to
"linear". The default for this setting in config.txt has been
corrected (the default has been "cubic" since 2.82b).
+ Fixed a ternary operator bug where the expression could break
with certain counter names in the second and third terms.
+ Added a comment to the Emscripten frontend for how to disable
the "Click to Play" splash.
+ Fixed Emscripten frontend issues when MegaZeux is embedded in
an iframe making it difficult to regain focus after losing it.
+ Fixed an Emscripten frontend bug where certain filenames could
cause false positives when checking for a directory name,
preventing fsafetranslate from detecting the correct path.
This fixes various things in Eternal Eclipse Taoyarin.
+ The Emscripten frontend should now fall back to memory storage
if IndexedDB or local storage fails to initialize. This fixes
an error when using MZX in a private browser window.
+ Fixed a robot editor regression where certain numpad symbols
could not be typed.
+ Added "GL4ES wrapper" to the auto_glsl blacklist.
+ Added "Software Rasterizer" to the auto_glsl blacklist.
+ checkres no longer requires zip archive filenames to end with
the .ZIP extension.
+ Added optional CSV output to checkres.
+ Added error to checkres for 1.xx worlds.
+ Fix checkres errors when encountering VER1TO2 empty robots.
+ ZIP support now ignores __MACOSX/, .DS_Store, and Thumbs.db.
+ Added decompression support for various legacy ZIP compression
methods and deflate64.
+ The Emscripten frontend now falls back to a wrapper for MZX's
internal ZIP support when UZIP fails to extract an archive.
+ Fixed IndexedDB support for legacy Edge versions. (asie)
+ Fixed an 8bpp software layer renderer bug where transparent UI
colors would not be transparent in SMZX mode.
+ General software layer renderer (software, softscale, opengl1)
performance improvements.
+ Fixed out-of-bounds CHAR_BYTE access with BYTE values over 14,
added compatibility check for games relying on this. (asie)
+ Fixed faulty bounding on CHAR_X/CHAR_Y/PIXEL.
- Removed the options "overlay1" and "overlay2" from the list of
selectable renderer options except when SDL 1.2 is enabled.
DEVELOPERS
+ Refactored render_layer_code to use C++ templates.
+ render_layer now disables the (unused) 64-aligned renderers
for 32-bit platforms and Emscripten builds.
+ Fixed buggy render_layer clipping that required clipping
renderers to unconditionally use a suboptimal alignment.
+ Switched from xmp_load_module to xmp_load_module_from_file.
+ Fixed various clang unused argument compiler warnings.
+ Updated MSVC dirent.h implementation to latest version.
+ Moved dir_* functions from util.c to dir.c.
+ Added Windows UTF-8 compatibility layer to vfs.c and dir.c.
UTF-8 support for Windows is still limited.
+ Moved Makefile compiler version checks to arch/compat.inc.
+ Added cycles_and_commands.txt to build and install targets.
September 23rd, 2019 - MZX 2.92b
This release fixes several bugs, notably 3DS and Wii rendering
issues and a bug where the wrong palette would be saved while
COLOR FADE OUT was active. Also in this release are performance
and usability improvements for the NDS and 3DS ports and a new
frontend for HTML5/Emscripten builds (special thanks to asie).
USERS
+ Fixed a bug where mouse warping both mouse coordinates would
not actually warp both coordinates.
+ Fixed a port regression where save files would be saved with
the wrong color intensities while COLOR FADE OUT was active
(or during the first cycle of a board for <2.90 worlds). This
fixes fading bugs in Ruin Diver 3.
+ Added compatibility for a bug where the robot message box
would disable COLOR FADE OUT in versions 2.83 through 2.90X.
This fixes several BKZX games.
+ Fixed checkres bugs separately preventing detection of global
robots in both world formats.
+ Fixed 3DS renderer bug where the UI wouldn't properly display
char foregrounds with extended graphics enabled.
+ Fixed 3DS renderer bug where sprites containing chars with
transparent foregrounds wouldn't draw any char backgrounds.
+ Fixed 3DS renderer crashes that would occur when large numbers
of sprites were active.