/
changelog.txt
3910 lines (3635 loc) · 200 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
USERS
+ Added robot editor shortcuts CTRL+Home and CTRL+End to jump to
the start and the end of the current program.
+ Added docs/fileform.html, a document describing all currently
supported MZX file formats in excessive detail.
+ 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 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 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.
+ Windows builds now attempt to load and call SetProcessDPIAware
on startup. This should fix undesirable DPI-related scaling
and fullscreen bugs.
DEVELOPERS
+ 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.
+ Fixed alignment issues in memcasecmp.
+ 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.
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.
+ Improved file manager directory read times for 3DS/NDS/Wii.
+ File IO for world saving/loading is now buffered, which should
improve save/load times on the 3DS and Switch.
+ Enabled writing zip data descriptors for the Switch.
+ Added classic/stretch video ratio support for the 3DS and NDS
lower screens. (asie)
+ "classic" is now the default ratio for the 3DS, NDS, and Wii.
+ Fixed GX renderer bug where chars with both colors transparent
could cause various graphical bugs in normal MZX mode.
+ Fixed bug where board exits could be cleared when deleting a
board or after loading a world containing null boards.
+ Fixed bugs when playing STARDSTM.GDM with the libxmp engine.
+ Fixed a crash that could occur when importing a world in the
editor containing a null board.
+ Fixed a bug where null boards wouldn't be properly refactored
on the NDS while using a memory cart, causing entrances to
point to the wrong boards and possibly other problems.
+ Fixed a bug that could corrupt the ends of robot programs when
using an NDS memory cart.
+ Improved world loading times when using an NDS memory cart.
+ Improved NDS memory cart transfer speed. (asie)
+ Disabled NDS logging hacks when stdio redirect is enabled.
+ Exiting MZX on the NDS should now power off the NDS.
+ Added Emscripten frontend. (asie)
+ Fixed bug where errors in the title screen Load World window
could clear the rest of the screen.
+ Fixed crash that could occur when attempting to load an
invalid zip world.
+ Non-recursive directory deletion in the file manager now tries
to delete the directory itself instead of its contents. Added
error messages for failed file and directory deletes.
DEVELOPERS
+ Added initial support for the dirent d_type field to help
avoid stat calls when reading directories.
+ Replaced most fseek calls in the legacy world loader.
+ Refactored move_current_board to be more readable.
+ Corrected some of the editor's bad extram handling and added
warnings to debug builds to help debug it (no platforms at the
present support both the editor and extram).
+ Replaced error wait_event() with update_event_status_delay().
+ Added preliminary VFS code to replace function pointer casting
in zip.c.
+ Fixed Wayland/X11 detection for setups that don't allow X or
Xorg to be run normally.
+ Unix builds should now attempt to load the icon from the
installed path instead of from a hardcoded path. Builds with
no sharedir set will use "contrib/icons/quantump.png" instead.
July 22nd, 2019 - MZX 2.92
Here's another inexcusably big minor version release. First off,
there are two new ports (Switch and Emscripten) and the Android
port has been updated to be actually usable. Second, joystick
support has been significantly overhauled (and depending on the
controller/joystick you plug in, it may work with no config
settings required!). Game joystick settings should no longer
override the new UI joystick behavior. Also, controllers can now
be used directly via Robotic. Read docs/joystick.html for more
information on the new features.
Other changes of note include RAD music support (v1 and v2),
palette editor improvements, and some new counters. There's a
new SDL 2 exclusive renderer to replace overlay1/overlay2 called
"softscale" that performs much better than either did and with
fewer crashes. Also of note are the massive number of fixed bugs
and compatibility improvements, fixing regressions and error
messages that affected around 20 different games (or more). A
major bug was fixed that caused the updater to not initialize
in Windows has been fixed too, so basically, update already.
FEATURES
+ Added numerous improvements to MZX's joystick handling:
+ Joystick inputs can now be bound to generic actions. These
actions correspond to XInput buttons and can interact with
MegaZeux's various windows in a context-specific manner.
They can be used directly in Robotic with the new counter
"joy#.[action]" or can be bound to keycodes in the config
file to allow them to be used with older games. The NDS,
3DS, Wii, PSP, and GP2X pad.config files have been updated
to use actions. See the help file or config file for more
info on the config options and available actions.
+ Added automatic joystick mapping for Windows/Mac/Linux/etc.
Joysticks recognized as SDL game controllers are assigned
joystick actions when detected. This behavior can be altered
or disabled via config options.
+ New counter: "joy#active" will return 1 if a given joystick
is availabled, 0 if not, and -1 if the index is invalid.
+ New counter: "joy_simulate_keys". When set to 1 (default),
joysticks can produce simulated key presses, as in older MZX
versions. When set to 0, this behavior is disabled.
+ Joystick settings in game.cnf files are now loaded as game-
specific joystick bindings. These bindings will no longer
override global/UI bindings defined by the config file or
pad.config. The default bindings are restored when any world
is loaded from the title screen; they are not restored when
a save is loaded, between world swaps, or in the editor.
+ Joystick config options can be assigned to key names in the
format of "key_X" (without quotes), where X is the key name.
+ Joystick config options for a particular controller now work
with ranges of controllers e.g. "joy[1,16].lshoulder = 13".
+ Added the config setting "joy_axis_threshold". This setting
allows the threshold for joystick axis mapped presses to be
configured.
+ The NDS directional pad is now considered a joystick hat.
+ The 3DS directional pad is now considered a joystick hat.
The circle pad is now mappable as axes 1 and 2.
+ The Wii Classic Controller triggers are now recognized as
axes 7 and 8. The Guitar Hero axes have been shifted to 9,
10, and 11, and a likely bug with the whammy bar axis has
been fixed. The Gamecube controller triggers are recognized
as axes 5 and 6, and all 8 controllers now have default
bindings in pad.config.
+ Added/updated Android port. (asie)
+ Added Emscripten port. (asie)
+ Added Nintendo Switch port. (Lachesis, asie)
+ The main menu and game menu are now usable with keyboard,
mouse, or joystick. Pressing a navigation key/joystick button
or clicking an option in these menus will enable a cursor to
select one of the options. Most listed options are selectable
unless disabled by the current game, in which case they will
be hidden from the menu entirely. However, the settings and
exit options appear regardless of their respective counters.
+ MegaZeux now supports Reality Adlib Tracker (RAD) music files.
Both 1.x and 2.x variants are fully supported.
+ New counter: TIME_MILLIS. Returns the milliseconds of the
current system time.
+ New counters: MOD_LOOPSTART and MOD_LOOPEND. These counters
return the start and end of the loop for the current playing
music and can be set to change the loop while the music is
playing. Setting MOD_LOOPEND to 0 disables the loop. These
counters only work for Ogg Vorbis and WAV audio (not modules).
+ Added support for the LOOPEND tag for Ogg Vorbis files. This
tag can be used to define the end of the loop directly, which
may be more convenient for some users. This tag takes lower
precedence than LOOPLENGTH if both are present, and will be
ignored if its value is less than LOOPSTART.
+ The SPR#_OFF counter is now readable through Robotic.
+ New sprite counter: SPR#_Z. Sprites are displayed in order
of their z value. Sprites with a higher z value will appear in
front of sprites with a lower z value. This ordering takes
precedence over both Y ordering (if SPR_YORDER is enabled) and
sprite number. Removes the need to use SPR#_SWAP for managing
sprite draw order. (Lancer-X)
+ New counters: FREAD_LENGTH and FWRITE_LENGTH. These counters
return the length of the FREAD file/directory (if open) or the
current length of the FWRITE file (if open).
+ New counter: SET "$string" "SAVE_ROBOT". This does the same
thing as SET "filename" "SAVE_ROBOT", except it saves the
robot to the specified string.
+ The default boot.dol for Wii builds with the editor enabled
is now MegaZeux instead of MZXRun.
+ New GLSL scaling shader: "sai". This shader implements the
"Scale 2xSaI" algorithm by Kreed with a modified interpolation
function to produce sharper edges. This shader can scale up to
any size larger than 640x350 and is comparable to hqscale
(though it should look and perform a little better).
+ Fullscreen mode will now attempt to match a supported screen
resolution if no "fullscreen_resolution" setting is specified.
For scaling renderers, this favors the current desktop
resolution. For "software", this favors smaller resolutions.
+ Added the config setting "fullscreen_windowed". When set to 1,
MZX will create a borderless window with the current desktop
resolution instead of regular fullscreen. Disabled by default.
+ Added the config setting "grab_mouse". When set to 1, MZX will
trap the mouse cursor within the window while the window is
active. Disabled by default.
+ The current renderer can now be set from the settings menu.
+ Added the 'softscale' renderer. This renderer is a generalized
rewrite of the former SDL 2 overlay renderer implementation.
It should perform significantly better and be more portable.
+ Added several palette editor usability improvements:
+ The current color stored with F2 is now displayed in the
bottom-right corner of the palette editor help menu.
+ In SMZX mode 2 or 3 editing, the four colors of the current
subpalette can be stored with F5. Stored subpalette colors
can be placed at the current subpalette with F6. These are
stored independently of the stored current color. The help
menu color display will cycle through the stored colors.
+ In SMZX mode 3 editing, the current subpalette's indices can
be stored with F7 and placed at the current subpalette with
F8. The stored indices are displayed in the help menu next
to the stored color display.
+ The shortcut for toggling the subpalette cursors has been
changed to Insert. The subpalette cursors are now displayed
in SMZX mode 3 editing and are enabled by default.
+ Palettes (and/or indices) can be imported into and exported
from the palette editor with Alt+I and Alt+X, respectively.
+ Added a secondary editor-only palette which can be switched
to with Tab. This palette is not saved with any world, but
can be edited and imported to/exported from and can be used
to copy colors/subpalettes between different sources.
+ checkres now displays the board, sfx, and robot (with line and
position on the board) each file was referenced in.
+ checkres can now be used with a directory as the base file.
Like a ZIP archive, checkres will recursively search the
directory for .MZX/.MZB files and display information for all
of them.
+ checkres has more display options: only display missing (-M)
(default), only display created (-C), only display found (-F),
also display missing (-m), also display created (-c), and also
display found (-f).
+ checkres can now wildcard match resources from commands that
use expressions or interpolation in filenames. This can be
enabled with -w or enabled exclusively with -W.
+ checkres can now display unused resources in a path/zip after
the other resources are listed (-u), or display only unused
resources (-U).
+ checkres can now display every reference to a particular
resource in a world instead of just the first with varying
levels of information (-v, -vv). Added the option -s, which
is the default and equivalent to older versions of checkres,
and -1 as an alternate flag for -q.
+ checkres can now sort its output either by the name of the
expected resource file (-N) (default) or by the location in
the world the file was referenced (-L).
+ checkres option flags can now be combined (e.g. -aL). This
does not apply to the "-extra" and "-in" flags.
+ New config options: "test_mode" and "test_mode_start_board".
If "test_mode" is set to 1, MegaZeux will start the given file
in testing mode, exactly as if the user used Alt+T on the
first board from the editor. Setting "test_mode_start_board"
to a valid board number in the world will start instead from
that board. Exiting testing will exit MegaZeux entirely.
- SDL 2 support for the overlay renderers has been removed. When
specified for video_output, softscale will be enabled instead.
- Removed WAV from the list of board mod extensions.
FIXES
+ SET "$string" TO "fwrite" will now always write the delimiter
regardless of the length of $string. Previously, this command
would only write a delimiter if $string was a length greater
than zero, requiring extra checks by the user to account for
this special case. Compatibility checks have been added for
for worlds made in older versions.
+ Fixed bug where robots attempting to copy the player over
themselves with COPY x y x y or COPY dir dir would get stuck
in an infinite loop instead of executing the next command.
+ SPR_YORDER and the sprite collision list are properly saved
and loaded from saves again.
+ The SPR_NUM counter now has the full range of a regular
counter and is saved. Out-of-range values are ignored for the
purposes of its legacy IF and PUT uses. This only affects
2.92+ worlds. Additionally, 2.65 through 2.69c worlds treat
its range as -128 through 127, fixing a bug in Sprite Catcher.
+ The active sprites count is properly updated when SPR#_OFF is
set and is properly loaded from saves again. This value can be
viewed from the variable debug screen now, though it may be
inaccurate for older saves.
+ Fixed various bugs related to the robot position not being
internally tracked correctly. This could be caused by WALK,
SWITCH dir dir, OPEN, MOVE ALL, moving through a transport,
pushing, and rotation. This fixes issues with IF ALIGNEDROBOT,
THISX, THISY, THIS_COLOR, PLAYERDIST, HORIZPLD, VERTPLD, RID#,
ROBOT_ID_#, the robot's coordinates displayed in the counter
and robot debuggers, and MZM saving. Due to the number of
features affected by these bugs, the fix only affects worlds
saved in 2.92 or later.
+ Fixed a regression where rotating could sometimes fail to
rotate the player, sensors, pushable robots, or transports.
+ When a robot uses the OPEN command and is pushed through a
transport, MZX no longer crashes or creates invalid robots.
+ Fixed crash that could sometimes occur when pressing Alt+Up
while drawing near the top of a board in the editor.
+ Fixed bug where canceling 'Alt+C' char selection in the
robot editor would comment the current line.
+ Fixed a bug where F5 in the robot editor would not print data
for extended chars.
+ Clicking through board name windows and other interfaces with
the mouse should no longer place the current buffer.
+ Fixed a bug where the updater could fail to initialize due to
a relative argv[0] in Windows. MegaZeux attempts to get the
executable path from Win32 first now.
+ Improved warning message when no HTTP response is received.
+ The software renderer no longer tries to use an SDL_Renderer
to draw the surface returned by SDL_GetWindowSurface. This
fixes a crash when switching to fullscreen with the software
renderer on some platforms.
+ Fixed a software renderer mouse crash bug caused by moving the
cursor off the screen with a window bigger than the screen.
+ Fixed a bug where setting SMZX_MESSAGE to 0 wouldn't always
draw the message correctly.
+ If a referenced SAM or GDM file isn't present, MegaZeux will
attempt to load a corresponding WAV or S3M (respectively) with
the same filename minus the extension. This should fix some
music/sounds in older games that referenced SAM/GDM files but
were packed with the post-conversion WAV/S3M files only.
+ The behavior for reseting the player movement repeat timers
has been reverted to requiring all four movement keys released
(as in 2.80 to 2.91i). The related player locking fix has not
been modified.
+ IF "&$string&" and COPY BLOCK # # # # "&$string&" now properly
resolve &$string& before checking if the first operand or the
copy destination are a string (respectively), bringing their
behavior more in line with SET/INC/DEC and other commands.
+ Fixed a regression where the COLOR INTENSITY commands would
update the screen if used the same cycle as TELEPORT PLAYER.
This fixes a graphical issue in Thanatos Insignia.
+ Improved string wildcard comparison performance.
+ Changed the debug window to display "2.65/2.68" for worlds
from MZX 2.65 and MZX 2.68. Features from 2.68 still check for
the intended MZX 2.68 magic; the very few existing 2.68 worlds
that use these features need to be resaved in 2.69.
+ MegaZeux now attempts to fix Robotic that fails bytecode
validation. This resolves error messages and bugs in Eternal
Eclipse Taoyarin v1.0, Loco, Manuel the Manx, SaintZZT 7th,
Slave Pit, and Ep+Arp World MZX.
+ The MOD SAM command has been restored for compatibility and
is version locked to <2.80 worlds. This fixes missing sound
effects in Crisis in Stuffyou City (original), Sprite Catcher,
and Talon's Tale. This only works for libxmp builds.
+ Fixed a sprite collision bounding bug where the collision
height bounding for the reference checked using the collision
width instead. This fixes Manuel the Manx.
+ Fixed several memory leaks in the editor related to editing,
placing, grab, and undo/redo operations on robots and scrolls.
+ Fixed vlayer memory leak when loading 2.84 saves.
+ Fixed a regression where the 'if c?? Sprite' legacy fix wasn't
locked to 2.69c and up. This fixes Depravity (2003 DoZ #666).
+ PUT Sprite now works unconditionally for <2.80 games, fixing
bugs where games relied on placing 0-height sprites or placing
sprites before initializing their dimensions: Hackers Can Turn
Your Computer Into a Bomb!, Lethal Recurse (2003 DoZ #215),
Serum (2003 DoZ #404), Trashman Dan (Summer 2004 DoZ #18349).
+ The LOCAL and LOCAL# counters are now versioned separately,
fixing bugs in Freedom Bound (Summer 2000 DoZ #4096) and
Impact (2001 DoZ #027).
+ SHOOT now properly updates the blocked array. This fixes a bug
in Captain Proton and the Reality Rippers (1999 WEoZ #173).
+ Fixed a bug where the custom SFX flag and max samples wouldn't
be reset when creating a new world in the editor.
DEVELOPERS
+ Fixed -Wunused-result warnings for Linux builds.
+ Added "Intel EMGD" to auto_glsl blacklist (questionable
OpenGL 2.0 support).
+ Added platform-independent joystick event functions and
updated the SDL, NDS, 3DS, and Wii event handlers for them.
+ MinGW builds now use -Wl,-Bstatic and -Wl,-Bdynamic to enforce
the preferred linking when both static and dynamic builds of
libraries are present.
+ For MSYS2 shells, config.sh now chooses the prefix /mingw32
or /mingw64 by default if $MSYSTEM is "MINGW32" or "MINGW64"
and either the "win32" or "win64" arch is selected.
+ MegaZeux now uses the renderer free_video function on exit.
+ GL_LoadLibrary no longer fails if the library is already
loaded in SDL 1.2. (Lancer-X)
+ GL renderers free textures and revert to fixed function
pipeline where appropriate. (Lancer-X)
+ OpenGL ES support can now be enabled for SDL builds with the
--enable-gles option. This option is force-enabled for
platforms that only support OpenGL ES.
+ opengl1 renderer now always uses power of 2 textures, same as
opengl2 and glsl. This provides a tiny performance improvement
on most cards and a massive performance improvement on some
other cards. (Lancer-X)
+ Added debug build sanitizer options for AddressSanitizer,
MemorySanitizer, and ThreadSanitizer. MemorySanitizer requires
clang and all currently require Linux/BSD/Mac OS X/similar.
Support for all three is very experimental; they may require
disabling options like modular builds or may not work at all.
+ Moved several param functions from robot.c to run_robot.c.
Aside from a few exceptions, these functions are largely used
in run_robot.c only. This should improve Robotic performance
in release builds.
+ Updated MSVC project for Visual Studio 2019. (elig, Spectere)
+ Added experimental pledge(2) and unveil(2) support for OpenBSD
builds. By default, this is enabled for the utils but not for
MZX. Additionally, config.sh now detects OpenBSD properly and
several warnings have been fixed.
+ Fixed faulty '!' rule logic in match_function_counter and
changed 'key?' to 'key!' to prevent potential false matches.
- Removed uthash as a build option.
February 20th, 2019 - MZX 2.91j
Here's a huge collection of bugfixes and a couple of features
that needed to be split off from 2.92.
Features: every release has an HTML copy of the help file now,
the editor keeps separate board/overlay/vlayer buffers now, and
anyone who still uses scrolls/sensors can view their info in the
counter debugger. The global volume settings use an exponential
curve now, range from 0 to 10, and have updated UI elements.
Fixes in this release include: the updater won't complain about
mzx_help.fil anymore, the NDS and 3DS ports have keyboards that
work again, several bugs that would lead to worlds/saves with
"Robot # does not exist on board #" errors have been fixed, and
several crashes have been fixed.
USERS
+ A complete HTML copy of the MegaZeux help file is now packaged
with releases for all platforms. It can be found in the docs/
folder.
+ Nvidia and AMD switchable graphics drivers should now detect
MegaZeux and MZXRun properly on Windows.
+ The editor now remembers the contents of the buffer when
switching between board, overlay, and vlayer editing. For
example, if a robot is selected on the board before switching
to overlay mode, the robot will still be in the buffer when
the user switches back to board mode.
+ The editor now remembers the last filename for importing and
exporting MZM, MZB, CHR, PAL, and PALIDX files.
+ Scrolls and sensors can now be viewed in the counter debugger.
They can be found by expanding the Board list (when present).
+ Readded "#version 110" directives to all GLSL shaders, fixing
warnings on some Intel HD drivers. OpenGL ES builds should now
comment out these directives.
+ Fixed bug where using Modify+Grab on built-ins could clear the
floor under the built-in.
+ Fixed bug where key repeat wouldn't work for any text field in
the NDS/3DS/Wii ports. This also affected the robot editor in
Wii builds.
+ Fixed NDS touch screen support. Touching the screen no longer
acts like escape and the keyboard properly works again.
+ Fixed a bug where the NDS keyboard would drop keypresses on
games not running at speed 2.
+ The counter debugger now correctly displays the value of
local0.
+ Fixed a bug where the counter debugger would not reopen to
the correct robot local# value.
+ MZX now attempts to retry removal of an old file when updating
if deletion fails initially. Error messages related to the
failed deletion of "mzx_help.fil" or "assets/help.fil" are now
suppressed as they are caused by a bug in older MZX versions.
+ The help file is now closed before the updater restarts MZX.
+ Fixed crash bug that could occur when removing old files after
an update.
+ Improved manifest validity checks.
+ Fixed board editor crash caused by invalid thing IDs.
+ Player movement key repeat no longer resets when the player is
locked. It will reset for a direction only when the arrow key
corresponding to that direction is released. This fixes a bug
in Brotherhood where the player would move at a fraction of
the speed they were supposed to while swimming.
+ Added version checking for legacy IF c?? Sprite behavior. In
versions 2.82b and prior, c?? would make this command ignore
the provided param and use SPR_NUM instead. This fixes Project
MoveZig.
+ Fixed spelling error in missile param dialog.
+ Switching boards in the editor now properly translates the new
board's mod name, fixing cases where board mods would restart
sometimes.
+ Fixed a bug where the current board mod wouldn't play after
starting a listening mod, testing, returning to the editor,
and then disabling the listening mod.
+ Replaced the linear volume setting curve with an exponential
curve to make lower volumes less loud. The volume settings can
now be set from 0 to 10 instead of from 1 to 8.
+ The config file setting pc_speaker_on=0 no longer prevents
turning on PC speaker SFX at runtime.
+ Added temporary workaround for numpad 5 key detection when
numlock is disabled.
+ "Forest to floor" and "Collect bombs" are properly enabled
again for new boards by default. This fix doesn't alter config
settings or saved .editor.cnf defaults.
+ The "Downver. world (MZX)" option in the "Export as" dialog
is now completely highlighted when selected. (Lancer-X)
+ Starting MegaZeux with "startup_editor=1" no longer loads the
default palette over the startup world's palette.
+ The move block action and undo/redo operations should now
preserve the element beneath the player.
+ Fixed crashes caused by using block actions or COPY BLOCK on
the player while the player is standing on a sensor.
+ Fixed several bugs where editor block actions and the commands
COPY/COPY BLOCK would not check for the player or clean up
robots/scrolls/sensors. Worlds/saves saved after these bugs
occured could display "Robot # does not exist on board"
errors when loaded.
+ The DUPLICATE SELF x y and DUPLICATE SELF dir commands now
properly check for the player before attempting to duplicate
a robot. This fixes a bug where MZX could create saves with
"Robot # does not exist on board" errors.
+ Fixed a crash that could occur when importing a new board.
+ Fixed a bug where the 3DS onscreen keyboard would send key
releases instead of key presses.
+ The 3DS onscreen keyboard now returns shifted chars when shift
is active.
+ Fixed a bug where the libxmp implementation of MOD_ORDER and
JUMP MOD ORDER could not restart the current order.
+ Fixed a crash with the libxmp implementation of MOD_POSITION
when providing an out-of-bounds value.
+ Fixed a bug where Ctrl+[key] shortcuts would not work while a
dialog list element was active on the Wii.
+ Fixed a bug where setting the board mod/charset/palette could
truncate the first letter of the path on the Wii.
+ "mask_midchars" no longer masks the non-text char 127.
+ The message box title and the command [ now properly display
the graphic for char 9 instead of a tab.
+ Added newline escaping to robot, counter, and string names in
the counter debugger to work around formatting bugs.
DEVELOPERS
+ Added the hlp2html utility, which can be used to convert
WIPHelp.txt into web and printable HTML files.
+ Updated to latest NDS ARM7 template.
+ Updated SDL2 for Windows release builds to SDL 2.0.9.
December 9th, 2018 - MZX 2.91i
A small release with a bunch of fixes for bugs introduced mostly
within the past few versions. Other highlights: joysticks should
be hot pluggable now and Alt shortcuts now also work with the
command key in Mac builds.
USERS
+ MZX now properly detects when joysticks are connected and
disconnected at runtime for platforms using SDL 2.
+ Fixed bug where the robot editor would open with the cursor at
the end of the line instead of the start of the line.
+ Fixed a bug where the robot box could display using MZX mode
but SMZX colors if opened on the first frame SMZX was enabled.
+ The built-in text box title should display correctly again in
SMZX modes.
+ Fixed regression where keys could trigger wrong "keyN" labels.
+ Alt+F2 can now be used to open the settings dialog.
+ Mac users can now optionally use command in place of alt.
+ Improved editor cursor color selection for SMZX modes 2 and 3.
DEVELOPERS
+ Fixed make test for SDL 1.2 builds.
November 14th, 2018 - MZX 2.91h
A minor release primarily focused on improving counter/string
lookups and fixing bugs in the robot editor and counter debug
menu.
USERS
+ auto_glsl correctly switches to glsl on startup now.
+ Fix bug where "(editor)" wouldn't always display in the
caption when editing.
+ The single line macro dialog now allows the full size of the
single line macros to be edited. This fixes a crash caused by
having a macro configured to be longer than the edit box could
display.
+ Setting a counter to a string no longer duplicates the entire
string in memory.
+ Fixed faulty BOARD_X and BOARD_Y bounding for values greater
than the board width or height. Fixes potential crashes with
BOARD_CHAR, BOARD_COLOR, BOARD_ID, and BOARD_PARAM.
+ The value of SPR_YORDER is now correctly displayed in the
counter debug menu.
+ Improved the performance of the counter debug search.
+ Fixed cosmetic counter debug menu issue where the the "String"
tree appeared to be expandable/collapsable when empty.
+ Fixed faulty substring searching algorithm used in the counter
debug menu search and for breakpoints.
+ Added "Search" and "Cancel" buttons to the counter debug menu
search so it can be used with the mouse.
+ When testing from the editor, if "__test.mzx" exists MegaZeux
will now choose a numbered name for this world backup (e.g.
"__test2.mzx") instead of potentially overwriting work.
+ Fixed bug where six-digit line numbers would display in the
robot editor incorrectly.
+ Inserting text in the robot editor using the F2/F3/F4/F5
shortcuts can no longer exceed the line length limit, fixing
related crashes.
+ Using F5 in the robot editor generates decimal numbers instead
of hex numbers now.
+ Fixed robot editor bug where pressing delete at the end of a
line wouldn't join lines unless the current line was empty.
+ Restored the ability to use the F7/F8 cheats outside of the
editor. This feature was broken in 2.91g. To enable cheats
outside of the editor, the config option "allow_cheats" must
now be set to "mzxrun" or 1. The former will enable them for
MZXRun only (same as from 2.82b to 2.91f) and the latter will
enable them for both executables (same as the -þ flag in DOS
versions).
+ Fixed bounding bug on the "board_default_width" and
"board_default_height" config file options.
+ Separated robot editor "Search and Replace" dialog into a
"Search" dialog and a "Replace" dialog. Both dialogs are
smaller in size than the original. The order of the elements
in these dialogs has also been altered to be more user-
friendly. The hotkey for the new replace dialog is Ctrl+H.
+ Fixed Ctrl+R repeating for the "Replace All" robot editor
search operation. Previously, it would act like "Replace".
+ Canceling the robot editor search/replace menus no longer
disables the repeat feature.
+ Searching in the robot editor now properly preserves the case
of the search string if case sensitive search is disabled.
+ Fixed bug where toggling the robot debugger position wouldn't
take effect immediately.
+ Exiting the editor with the "startup_editor" config setting
enabled should no longer inappropriately close MZX.
+ Selecting "tile" for the char editor import mode works again.
+ The bounds for the main editor charset import/export offsets
and size have been increased to allow for extended charset
values.
+ Fixed the "KEY?" labels for keys that no longer have a unicode
representation in SDL2.
+ Fixed SET "$string" "FWRITE#" bug where, if # exceeded the
length of $string, the output would be clipped to the wrong
length.
+ The missile color ID char is now correctly set back to its
default value when a new world is created from the editor.
DEVELOPERS
+ Cleaned up the counter debug menu code.
+ Switched from uthash to a modified version of khash for
counter and string lookups. Counters/strings now consume less
memory and counter/string lookups should perform slightly
better on most platforms.
+ Replaced toupper/tolower in memcasecmp and substring searching
with a lookup table-based implementation of tolower.
+ Refactored the following contexts to use the main loop: robot
editor, intake, thing menu. For compatibility purposes the old
intake still exists, but all robot editor hacks have been
removed from it.
October 7th, 2018 - MZX 2.91g
This bugfix release fixes various minor-to-moderate bugs in
various areas of MegaZeux. The title/game update code has gone
through a fairly major overhaul and several parts of MegaZeux
have been combined to use the same loop. The conversion of
MegaZeux's interfaces to be compatible with this loop is an
ongoing process expected to occur over several versions.
USERS
+ Added "allow_screenshots" config file option. Setting this
option to 0 will disable the built-in screenshot feature.
+ The F12 key can now be detected by Robotic.
+ Loading saves from the title screen no longer resets TIME.
+ Loading saves from the title screen no longer erroneously
changes the player restart position.
+ Swapping worlds now sets the correct TIME and player restart
position values.
+ Fixed a bug where the fade out effect from COLOR FADE OUT
would be reset after any Robotic dialog.
+ Undo for overlay and vlayer mouse drawing now works properly.
+ Mouse drawing in the editor now draws smooth lines instead of
lines with gaps.
+ Fixed move block bug when the source and destination both
overlapped the player.
+ Palette editor component entry now accepts most of the same
inputs as dialog number boxes.
+ The board name in the caption now updates to reflect the
current board while testing.
+ Fixed bug where TIME would either decrement normally or not
decrement at all while the slow time effect was active.
+ Added compatibility for pre-port endgame teleport behavior.
In DOS versions of MZX, the endgame teleport would disable
itself after being triggered for the first time and any
following endgame would instead trigger a game over.
+ Reduced stutter in NDS and 3DS main screen scrolling.
+ Fixed a bug where creating a string MZM would not correctly
set the string's length for preexisting strings.
+ Fixed a bug where loading robot source code from a string
wouldn't work correctly with the robot debugger.
+ The help system is now accessible from the main menu and game
menu.
+ The settings screen is now accessible from the main menu, game
menu, editor, and palette editor.
+ The shortcut Ctrl+F2 can be used to open the settings screen
from anywhere the settings screen is accessible. This shortcut
works even if F2 is used for a different feature and will also
ignore the value of the F2_MENU counter.
+ Fix a crash that would occur decrypting a world with a
password exactly 15 chars long.
+ The label for the INPUT STRING command should no longer be
able to overflow outside of the window.
+ Fix a crash that would occur attempting to open the help file
from the world decryption confirm dialog.
+ Fix bug where saved layer MZMs and board MZMs without robots
would have useless extra data at the end of the file.
+ Scroll contents properly display game colors during gameplay.
+ An error message is now displayed for failed board exports.
+ Enabled writing zip data descriptors on the 3DS to decrease
saving time.
- The "password protected" error message has been removed as it
was redundant with the confirmation dialog following it.
- The "disassemble_extras" and "disassemble_base" options no
longer affect Robotic output during gameplay. SAVE_ROBOT will
always output extra words and base 10 numbers regardless of
user configuration.
DEVELOPERS
+ Implemented a main event loop to replace the various separate
event loops scattered around MegaZeux. See core.h and core.c
for more info.
+ Refactored the following contexts to use the main loop:
titlescreen, gameplay, main menu, game menu, editor, palette
editor.
+ When enabled, the debug FPS display will now update from any
interface using the main loop. If fullscreen mode is active,
the FPS display will now appear in the top-left corner of the
screen for any main loop interface aside from the editor.
+ The --disable-screenshots config.sh option can be used to
disable screenshot support. This allows platforms that don't
use render_layer.c to stop building and linking it.
+ Cleaned up m_show()/m_hide() overuse.
+ Replaced all uses of "bool" with "boolean" to avoid potential
C/C++ compatibility issues.
- Removed most old/unused source code in contrib/unzip, src/old,
and src/vfs.
September 17th, 2018 - MZX 2.91f
A bugfix release focusing primarily on renderers, the 3DS and
Wii ports, and the Makefile build system. Highlights: the 3DS
port should perform better now, the Wii port's GX renderer has
been restored, the 'darwin' platform has more Unix-like options
now, and several crashes have been fixed.
USERS
+ The config setting 'audio_buffer' can also be specified with
'audio_buffer_samples' now. The default value for this setting
is now 1024 (instead of 4096).
+ Fixed a crash that could occur in the counter debugger.
+ Fixed a crash that occurs when attempting to add a watchpoint
for robot local counters, loopcount, etc. Using these counters
as watchpoints will watch the global robot's instances of
these variables (for other robots, use e.g. r#.local1).
+ Using SMZX_INDICES or LOAD_ROBOT on an unset string no longer
causes a crash.
+ png2smzx is now properly bundled with Linux builds.
+ Improved the performance of loading partial charsets for the
glsl, opengl2, and 3DS renderers. Other renderers were not
affected by this issue.
+ Fix opengl2 unbound sprite regression introduced in 2.91e.
+ The opengl2 renderer now correctly draws unbound sprites
containing chars with a transparent foreground color.
+ 3DS renderer optimizations. (asie)
+ 3DS screen focusing now mimics the NDS port's behavior. (asie)
+ Fixed bug where games could fail to open files on some
platforms if the paths contained duplicate slashes. (asie)
+ Added a Wii software layer renderer. This renderer can be
selected with "video_output = xfb" in the config file.
+ Wii GX renderer optimizations.
+ Added layer rendering support to the GX renderer.
+ The Wii GX renderer now uses the gl_vsync config option to
toggle vsync. For the Wii, this feature is on by default.
Disabling it may increase the framerate of some games but may
also cause other problems.
+ The loading bar on console platforms now redraws the screen
less often.
DEVELOPERS
+ GAMESDIR/BINDIR/SHAREDIR now properly apply PREFIX when they
are not explicitly set by config.sh.
+ LIBDIR is now user-definable like BINDIR et al. Variations
such as "lib64" currently must be explicitly provided for
platforms that still use them.
+ Remove src folder from CFLAGS to fix a bug where system
includes could be mistaken for MegaZeux headers. All includes
of MegaZeux headers must be done using relative paths now.
+ Fixed include bugs for X11 and Carbon clipboard handlers.
+ Makefile now attempts to respect the prefix when running
sdl-config, sdl2-config, and libpng-config.
+ Renamed the "darwin" config.sh platform to "darwin-dist".
+ Added "darwin" and "darwin-devel" config.sh platforms. These
act like Mac OS X versions of the "unix" and "unix-devel"
options.
+ The darwin-dist build system and instructions are now somewhat
more clear and robust.
+ Fixed a bug where zlib wouldn't necessarily be linked to
png2smzx.
+ Renderers will now use render_layer to draw the text_video
fallback if no render_graph function is present.
September 3rd, 2018 - MZX 2.91e
Bugfix release fixing some crashes, port bugs, and some other
significant issues affecting a variety of things.
USERS
+ Fixed bug where loading a board charset would also clear all
of the extended charsets.
+ Fixed bug where loading a default charset in the editor would
also clear all of the extended charsets.
+ Loading a 2.91 world when a renderer with no layer support is
active no longer triggers an error message.
+ Fixed a memory corruption bug in the non-SDL Wii port caused
by faulty threading code.
+ Fixed crash that could occur when updating a board undo frame.
+ Fixed crash when changing to a board with overlay disabled in
overlay editing mode.
+ Fixed a bug where the protected charset could get cleared for
renderers without layer rendering support.
+ Enabled C99-compliant stdio functions for mingw, fixing at
least one crash bug and possibly improving performance.
+ The NDS port now attempts to detect argv[0].
+ The 3DS port now attempts to detect argv[0] and otherwise will
start in /3ds/megazeux instead of /.
+ The 3DS port .3dsx file is now located in /3ds/megazeux.
+ The MOVE PLAYER [dir] and MOVE PLAYER [dir] [label] commands
now update the commands cycle and commands total values.
+ Fixed a bug where MZX and checkres wouldn't accept some
DEFLATE-related ZIP flags.
+ checkres no longer crashes on failing to open a resource zip.
+ The window caption now updates correctly when using either of
the overlay renderers.
+ Update checking will now display an error instead of silently
hiding the updater when the updater fails to initialize.