/
changelog.txt
3270 lines (3027 loc) · 167 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
FEATURES
+ Nvidia and AMD switchable graphics drivers should now detect
MegaZeux and MZXRun properly.
+ The editor now remember 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.
+ New counter: TIME_MILLIS. Returns the milliseconds of the
current system time.
FIXES
+ 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 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 crash bug that could occur when processing delete.txt.
+ 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.
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.
+ Fixed an issue where UIs would execute redundant frames.
+ Fixed a bug where string comparison would not order strings of
different lengths correctly. (GreaseMonkey)
DEVELOPERS
+ Code style has been cleaned up in numerous files.
+ Moved GLSL shaders from assets/shaders/ to assets/glsl/.
+ Added missing GPL headers to GLSL shaders and added slightly
better documentation to them.
July 12th, 2018 - MZX 2.91d
This is a minor bugfix release to get a handful of fixes out
primarily concerning the updater. The NDS/3DS/PSP/Wii ports now
include a copy of Caverns of Zeux.
USERS
+ Added timeouts to updater network operations.
+ Fixed bug where the updater would retry downloads without
regard to the status code.
+ The updater is now force-disabled for all non-Windows
platforms in config.sh.
+ Fixed bug where breakpoints could trigger on the wrong line.
+ Amended VOLUME/MOD FADE # # bounding to clamp values in port
versions. DOS versions will still wrap between 0 and 255.
+ Added DOS compatibility fix for sprN_off.
+ Window caption is now properly updated when loading a world
from an unedited world in the editor.
+ Fixed bug where ".." would change to the current directory if
the current path ended in a path separator.
- Removed undocumented support for "title.cnf", "game.cnf", and
"editor.cnf" config files, which would have been loaded from
the same directory as the main config (not to be confused with
world-specific config files, which are still supported).
DEVELOPERS
+ The MSYS2 buildscripts have been overhauled to work with the
new devkitPro pacman repositories.
+ Added config options to select vorbis, tremor, tremor-lowmem,
or to disable ogg vorbis file support. The 3DS and Wii ports
now use tremor instead of tremor-lowmem.
March 4th, 2018 - MZX 2.91c
This release contains an assortment of bugfixes ranging from
player clone fixes to obscure compatibility patches. A handful
of updater issues have been fixed (or at least addressed).
MegaZeux can now automatically check for updates on startup on
Windows platforms. This behavior can be configured, and by
default will simply leave a message in the window caption.
USERS
+ MegaZeux can now automatically run the updater on startup
on applicable platforms. This can be configured with the
'update_auto_check' config file option.
+ Fixed a bug where several .MOD variants stopped working with
libxmp enabled.
+ Sound effects in subdirectories can now be used in the SFX
editor.
+ Fixed a bug where checkres would fail on legacy worlds with
very long custom SFX.
+ Checkres no longer ignores the SFX tables of 2.90+ worlds.
+ Fixed a bug where interpolated expressions containing ternary
operators could terminate counter names early.
+ Fixed faulty IF ANY compatibility behavior.
+ Fixed a bug where FWRITE functions could change the case of
user-defined filenames when creating new files on non-Windows
platforms.
+ SMZX mode 1 palettes are now exported correctly as 16 colors
instead of as 256 colors.
+ Fixed subtly inconsistent timing in certain built-ins.
+ Fixed bug where wind and transporters could clone the player.
+ MegaZeux now restarts correctly in paths containing spaces
when the updater is run.
+ Subroutines in pre-port MZX worlds now always return to the
command after the subroutine was sent.
+ Typed color components now wrap from the maximum value to zero
like dialog number inputs, and pressing minus will now negate
the input number.
+ Copying chars in the char editor between regular and SMZX
screen modes now works properly.
+ Fixed a crash that could occur when placing things on a vlayer
larger than the current board.
+ Sharks and SpittingTigers with firing rates greater than 4 now
retain their firing rate when edited.
+ Fixed a bug where world decryption could crash. (Revvy)
+ If the glsl renderer is selected by default, the detection of
a software opengl driver will result in falling back to
software. (Lancer-X)
+ Fixed a bug in the GLSL renderer where an additional window is
created if the OpenGL version is low enough to cause a
fallback to software. (Lancer-X)
DEVELOPERS
+ Added .MZX-based unit testing system. Run with "make test".
See testworlds/README.md for more information.
+ The default renderer is now auto_glsl, which turns into glsl
if not using a blacklisted opengl driver. (Lancer-X)
January 6, 2018 - MZX 2.91b
Here's a fairly significant update for MegaZeux 2.91, fixing
several major Robotic, audio, and editor related bugs, as well
as issues that mostly affected Linux platforms. Also of note is
the updated MSVC and Xcode support by Spectere.
USERS
+ Added the config file option "editor_thing_menu_places". When
set to 0, selecting an object from the thing menus (F3-F10)
will place the object in the buffer but not on the board.
Defaults to 1.
+ Fixed a bug where MZMs could sometimes fail to load in the
editor.
+ MZMs loaded in the editor now behave correctly when undone.
+ Fixed bug where GOOP_WALK wouldn't always be 0 when loading
old worlds.
+ Values of GOOP_WALK greater than 1 no longer cause issues.
+ Board time limits greater than 255 are no longer truncated
when saving worlds/saves.
+ Fixed bug where "robot not found" errors could result from
using backspace on robots in the editor.
+ Fixed backwards string inequality evaluation.
+ String inequality compares are now endian-safe.
+ Fixed a bug where certain mods (e.g. FR_TOWER.MOD, Neve.s3m)
could repeat to the wrong order after reaching the end.
+ Fixed a bug where certain .it channels could partially ignore
the volume command.
+ Setting mod_position in libxmp now works for positions in the
middle of orders (NoSuck).
DEVELOPERS
+ Updated MSVC for Visual Studio 2017. (Spectere)
+ Added xcode support. (Spectere)
+ "make clean" now deletes ccv. (pgimeno)
+ Fixed creeping CRLF usage. (Lachesis, pgimeno, Spectere)
+ Fixed a bug where the MSYS2 build scripts could inadvertently
include non-portable SDL2 binaries in Windows builds.
November 22, 2017 - MZX 2.91
This release introduces mostly new editor features, but also a
a few Robotic features to note. It also fixes over 30 bugs.
MegaZeux now features a palette editor for SMZX modes 2 and 3,
and worlds can be saved and loaded in SMZX mode. The char editor
has been changed to allow preview palettes (mostly to aid with
SMZX editing), and can now access the extended character sets.
The new vlayer editor allows the vlayer to be edited directly.
On the Robotic side of things, LOAD_COUNTERS actually works now,
SMZX mode 3 indices can be loaded from a file, the message line
can be configured to use normal MZX mode in SMZX modes, and new
string features such as simple wildcard matching and negative
offsets have been added. String support has been improved to
disallow invalid or nonsense string splices that previously had
undefined behavior.
Additionally, asie's new Nintendo 3DS port has been merged into
MZX, and optional SDL support has been added for the Wii.
FEATURES
+ Added SMZX_INDICES special counter to load SMZX indices. This
counter works with either a filename or a string, e.g.
set "file.palidx" "SMZX_INDICES", and will do nothing outside
of mode 3.
+ Added MOD_LENGTH counter. The value of this counter is length
of the current playing music in rows for modules, or in
samples for PCM audio.
+ Added MAX_SAMPLES counter. When set, MegaZeux will limit the
maximum number of samples that will play simultaneously. Set
to -1 to disable the sample limit.
+ Added 'max_simultaneous_samples' config file option. This
behaves the same as the MAX_SAMPLES counter, but applies
globally.
+ Added SMZX_MESSAGE counter. When set to 0 with SMZX active,
messages will display in normal MZX mode instead of SMZX
using the first 16 colors of the SMZX palette.
+ Added 'random_seed#' counters to read and write the random
seed, 32 bits at a time (random_seed0 controls the low 32 bits
and random_seed1 controls the high 32 bits. (Lancer-X)
+ Added a case-sensitive string equality operator:
IF "$string" === "ABC" then "label".
+ Added wildcard-matching string equality operators:
IF "$string" ?= "a?%" then "label"
IF "$string" ?== "a?%" then "label" (case-sensitive).
The character '?' will match exactly one of any character in
$string, and '%' will match any number of any character in
$string (including no characters).
+ Added negative indexing for strings, e.g. SET "$string.-X" 32.
This manipulates the string at the Xth character starting from
the end of the string (with -1 for the final character).
+ Added negative offsets for strings, e.g. SET "$string+-X" "a".
+ Added multiple character indexing for strings. When a length
is provided with a string index, e.g. SET "$string.X#Y" 12345,
the characters at positions X, X+1, ..., X+Y-1 will be treated
as a single 8*Y bit number. This works for values of Y between
1 and 4, with 4 characters providing the same functionality as
a counter.
+ The palette editor and character editor are now accessible
while testing. Press Alt+E or Alt+C respectively to access
them from the counter debugger.
+ Extended the palette editor to SMZX modes 2 and 3. The updated
palette editor allows the editing of all 256 SMZX mode 2/3
colors and editing color indices for SMZX 3.
+ Component numbers can now be typed in the palette editor by
clicking the component name or its number, e.g. clicking "Red"
allows you to type a red value.
+ SMZX indices can now be imported/exported while editing in
mode 3 using import/export palette.
+ Added a new vlayer editor. In the world editor, press Alt+V to
switch to the vlayer editor. The vlayer is something like an
invisible global overlay that can be used to store and
retrieve graphical data through Robotic. See the editor help
and the Robotic reference manual for more details.
+ Added color selection to the character editor. Press C to
choose a color to preview and edit chars with, and press Alt+C
to revert back to the default grey.
+ Added extended charset support to the char editor. Extended
charsets can be selected during char selection. Note that in
gameplay these chars can be accessed only by unbound sprites.
+ Selected blocks of chars with a height greater than one
(before selecting a subdivision) are now properly supported.
Using -/+ with these selections will move in a tiled manner,
with no overlap between chars in "tiles". Charsets can also be
exported/imported using this tiling behavior.
+ The -/+ keys now behave the same in the char selection screen
as they do in the char editor.
+ The character editor help now covers several shortcuts that
were previously missing (Alt+B, Shift+Arrows, etc...).
+ The undo/redo shortcuts in the character editor are now Ctrl+Z
for undo and Ctrl+Y for redo.
+ Added undo/redo functionality to the world editor. Use Ctrl+Z
to undo changes to the board/overlay/vlayer and Ctrl+Y to
redo.
+ The default editor undo history stack size has been extended
to 100 levels.
+ The editor will now prompt the user to create a new starting
board when opened. If a new board is created, the global first
board will be set to the new board and the title board will be
renamed.
+ Saved positions now have confirmation dialogs. Saved positions
are saved to/loaded from the editor.cnf file for each world.
+ Pressing Enter/Return on the overlay (and vlayer) now acts the
same as on the board, changing both the buffer and the current
layer being edited.
+ Pressing P on the overlay (and vlayer) now acts the same as on
the board, changing the character in the buffer but NOT on the
current layer. This is equivalent to the original overlay
behavior for Enter.
+ Block tiling movement (Ctrl+Arrows) now works with most block
actions, and does not require an initial block placement to
activate.
+ Restoring its DOS functionality, Alt+D now toggles the default
colors of built-in types in the editor. When disabled,
built-ins placed from thing menus will use the buffer color
instead of their default colors, and a red dot will appear on
the right side of the status bar.
+ Color selection now supports typing in the hex value of a
color/subpalette to select the given color/subpalette. For
example, typing "4c" will select background color 4 and
foreground color 12.
+ Readded the downver utility.
- Removed the undocumented Shift+F7 shortcut in the editor. This
shortcut was redundant with F11.
FIXES
+ Fixed a bug that would cause Linux binaries to fail to find
most resources.
+ Fixed a bug where loading a save from the titlescreen, exiting
gameplay to a world that doesn't exist, and then loading a
second save would corrupt the counter and string hash tables.
+ Fixed crash that would occur when loading a saved position on
the same board referring to out-of-bounds coordinates.
+ Fixed a freeze that could occur opening the counter debugger
to an empty list or searching for a counter in an empty list.
+ LOAD_COUNTERS now works as intended.
+ Fixed a bug where key repeat would be prematurely terminated
when releasing a key while holding another key.
+ Attempting to open the robot validator with no errors will no
longer crash MegaZeux.
+ Backspace now mirrors delete in overlay mode instead of
affecting the board.
+ Moving an overlay block partially out of bounds in the editor
will now correctly clear the block's original position.
+ The color selector will now correctly display SMZX palettes in
SMZX mode instead of the default char 254.
+ Fixed bug where the mouse cursor would vanish after using the
robot debugger configuration dialog in the editor.
+ Fixed a bug where the counter debugger could sometimes display
behind the robot debugger after exiting the counter debugger.
+ Undo in the char editor now works correctly with the mouse.
+ The char editor no longer forces the screen to SMZX mode 1
when editing in SMZX modes 2 or 3.
+ Fixed screen corruption bug when resizing the char editor in
SMZX modes.
+ Fixed a bug where multichar editing wouldn't correctly wrap to
the start of the charset.
+ The editing area outside of the current board is now correctly
drawn when SMZX is enabled.
+ The viewport is now correctly drawn when SMZX is enabled and
the UI or unbound sprites are active.
+ The editor bar no longer appears while SMZX is enabled in view
mode.
+ Messages are now drawn correctly in SMZX mode.
+ Fixed bug where centering the viewport could change the width
and height of the viewport.
+ Unbound sprites are now clipped correctly against the viewport
when the viewport origin is not 0,0. (Lancer-X)
+ The VLAYER_SIZE counter now clears new vlayer area added when
it is increased. This applies only to 2.91+ worlds.
+ The VLAYER_WIDTH and VLAYER_HEIGHT counters now preserve data
on the vlayer when set. This applies only to 2.91+ worlds.
+ Fixed several bugs with string length and offset parsing that
would allow invalid string accesses to work in certain cases.
+ COPY BLOCK $string now works correctly with string splices.
+ Fixed a bug where saving and loading 2.90X files wouldn't work
on the Nintendo DS.
+ Fixed a bug where mouse clicks would carry through from the UI
into games.
+ Invalid gl_scaling_shader values should no longer appear as
the current loaded scaler.
+ MegaZeux now falls back to the default scaling shader when a
selected scaling shader fails to compile.
+ Blank sprite chars are now drawn when ccheck is 3. (Lancer-X)
+ The sprite color is used with ccheck 3 collisions. (Lancer-X)
+ When spr_yorder is enabled, sprites with the same (sprN_y +
sprN_cy) value are now consistently ordered by their sprite
numbers.
+ The collision rectangles of ccheck 3 sprites now constrained
to the sprite dimensions (Lancer-X).
+ MZX no longer crashes when a line of length 512 characters or
longer is pasted into the robot editor.
+ Fixed a crash bug when trying to swap a sprite with an
invalid sprite index.
DEVELOPERS
+ Added Nintendo 3DS port. (asiekierka)
+ Added "make uninstall" option to the Linux makefile.
+ Added devkitPro portlibs paths to the NDS and Wii Makefiles.
- Removed the depackers and non-MegaZeux formats from libxmp.
September 4, 2017 - MZX 2.90d
Here's another bugfix release. This is mostly assorted small
fixes, but there are also a couple of major fixes here: first,
the ternary operator now works correctly when nested both with
and without expressions, and second, sprN_setview does not break
in conjunction with certain unbound sprites. Additionally, SAMs
will not be converted to WAV files anymore (and are now natively
supported) and the robot debugger config is accessible from the
editor.
FEATURES
+ The current MegaZeux version is now visible from the enter
menu on the title screen. This is to assist identifying the
version on platforms that don't respect window title changes
or have no window border.
+ Updated checkres.bat and checkres documentation.
+ The robot debugger configuration screen is now accessible from
the editor via Alt+F11.
+ Removed SAM to WAV converter. MegaZeux now has native SAM
support. (asiekierka)
+ Added crt-wave.frag, updated crt.frag. (astral)
FIXES
+ Fixed a bug where MegaZeux would crash when editing a robot
with an invalid IF command operator.
+ Fixed a bug where the ternary operator would fail to find the
correct colon when the middle term contained a second ternary
operator in a nested expression.
+ Nested ternary operators should now behave as expected.
+ Fixed a bug where the built-in cursor would disappear after
exiting testing with EXIT_GAME.
+ Fixed a bug where the listening mod would not restart after
exiting testing.
+ Fixed a bug where the robot debugger would not wrap long lines
of Robotic code correctly.
+ Attempting to save a world in a write-protected location
correctly displays an error message again.
+ Fixed a bug where key repeat would not work when scrolling
through the counter debugger tree list.
+ checkres will no longer report empty filenames as dependencies
e.g. SET "" TO "FWRITE_OPEN".
+ The -q flag in checkres will now correctly output filenames
instead of nothing.
+ Fixed a bug where sprN_setview would scroll the viewport to
the wrong side of the screen if the sprite is unbound and is
close to the top or left edge of the board. (Lancer-X)
DEVELOPERS
+ Fixed PSP and NDS ports. (asiekierka)
July 25, 2017 - MZX 2.90c
This is a small fix release mostly cleaning up issues from the
previous release.
Notable fixes include a crash on certain instances of string
interpolation into counters/labels/text. Playing mods as sound
effects works again, and the audio_sample_rate config file
option now works correctly.
This release also includes support for loading save files from
MegaZeux 2.84X and experimental editor behavior for handling
board charsets and palettes.
FEATURES
+ Save files from 2.84X worlds can now be loaded.
+ The editor can be configured to automatically load board
charsets and palettes now. Use the 'editor_load_board_assets'
config file option to enable this behavior. This behavior is
disabled by default. Note that this will OVERWRITE THE CURRENT
WORLD CHARSET AND PALETTE and your changes will NOT be saved
automatically.
+ GLSL is now the default renderer. (Lancer-X)
FIXES
+ Fixed bug where --disable-modular builds would fail to link.
+ Fixed bug with libxmp integration where mods could not be
played as sound effects.
+ Fixed bug with libxmp integration where MZX would assume
audio_sample_rate was 44100, causing mods to play at incorrect
pitches with other rates.
+ Fixed bug where editor config file options would be ignored at
the command line.
+ Fixed bug where string interpolation into a label/counter name
could cause MZX to crash with very long strings.
July 16, 2017 - MZX 2.90b
It's been two weeks, so here's a bugfix release for MZX 2.90.
There isn't a whole lot that's new to talk about.
Firstly, the palette editor has gone through an overhaul. This
is mostly internal preparation for an eventual SMZX palette
editor, but the new features include the partial restoration of
mouse input (which was removed in 2.80X), the addition of color
sliders, the ability to hide the palette editor help, and two
new colorspaces (HSL and CIELAB) to aid in the selection of
palette colors.
Next, the robot debugger introduced in 2.90 has new features.
You can now set "watchpoints" to watch the status of particular
variables, and you can send labels/goto from the robot debugger.
The robot debugger config screen has been visually improved, and
line number breakpoints can be defined. Another notable feature
is that KEY_PRESSED and KEY_CODE values are now displayed in the
debug window during gameplay.
libxmp is now the default sound engine for modules, fixing a
longstanding bug where certain S3Ms would have muted channels.
GDM modules are now supported by MZX again. If you notice any
inaccuracies with mod files, please report them to the tracker.
Fixed bugs include a major overhaul of the glsl shaders for
compatibility with almost any system, various sprite, text box,
and input bugs, a crash fix when MZMs were saved from out of
bounds board locations, and a bug where opening worlds or
testing from the editor could cause MegaZeux to exit.
FEATURES
+ The "shaders/extra" folder is now "shaders/scalers". The
default vertex shader is still located in the shaders folder.
+ The default scaling shader can now be set in the config file
using the gl_scaling_shader option. If not defined, MegaZeux
will load assets/shaders/scalers/semisoft.frag.
+ The robot debugger now supports monitoring the values of
counters and strings. Use the config menu/breakpoint editor to
add watchpoints; when the debugger detects a change in a
watchpoint counter/string AFTER a command has been executed,
the robot debugger will open.
+ The robot debugger can now send robots labels. Use 'G' or
select 'Goto' in the robot debugger to use this feature. The
name and label inputs support expression parsing and string/
counter interpolation.
+ The robot debugger can now use line numbers in breakpoints.
+ The palette editor help can now be hidden with Alt+H. The
default behavior for this can be set in the config file. The
palette editor help is visible by default.
+ The palette editor's mouse functionality has been improved.
Behavior when clicking the palette has been restored, and
component sliders have been added.
+ The palette editor now supports alternate color spaces.
+ The debug window now displays the last key_code (green) and
key_pressed (magenta) values detected during gameplay. These
values are located in the bottom right corner of the window.
+ The default fullscreen resolution for scalable renderers is
now 1280,720. The default fullscreen resolution for 'software'
is still 640,480. The default aspect ratio is now 'modern'.
+ The checkres utility has been updated to support 2.90X worlds,
worlds in subdirectories of zip archives, multiple input files
to test, and the ability to specify secondary directories and
zips to search (e.g. for games with separate music zips).
BUGFIXES
+ Fixed a bug where certain "keyN" labels, such as "key$", would
not work correctly.
+ Integer comparisons between numbers greater than 2^31-1 apart
now work correctly. (Lancer-X)
+ The palette editor now displays the SMZX mode 1 palette
correctly.
+ Sprite collisions now correctly ignore the sprite's visual
width and height.
+ Blank lines are no longer skipped when copy-pasting text into
the robot editor. (Lancer-X)
+ Fixed a bug where key presses in dialogs could be detected in
games, and keypresses could still carry between other dialogs.
+ [ message boxes now use the same screen mode as everything
else. Same with scrolls. (Lancer-X)
+ spr#_setview now works with unbound sprites. It's pretty nasty
as the viewport can't scroll with pixel precision, but the new
behavior should still be better than the old. (Lancer-X)
+ Fixed a bug affecting certain Intel HD Graphics cards and the
GLSL renderer that appears to have been around since that
renderer was first introduced. (Lancer-X)
+ Fixed a bug where the numeric numpad keys were inappropriately
translated to regular keys based on numlock when they were
read from KEY_PRESSED. This behavior is now locked to worlds
from 2.82X through 2.84X.
+ Fixed a bug where warping the mouse on one axis would snap the
mouse to the nearest pixel on the other axis, causing problems
for upscaled windows.
+ Fixed a bug where mouse control would not respect video_ratio
settings aside from "stretch".
* Fixed a bug where MZX would attempt to load certain invalid
worlds that should have been caught by validation.
+ Copy block to MZM no longer crashes when the MZM is partially
overlapping the board edge. (Lancer-X)
+ Fixed bug where MegaZeux would sometimes exit immediately on
loading a game or would immediately exit testing.
DEVELOPERS
+ libxmp is now the default module sound engine. Use "make xmp"
to make and install libxmp if it is not available on your
platform.
+ Mac OS X portability improved. (Spectere and Why-Fi)
June 29, 2017 - MZX 2.90
Hey, it's been a while! Didn't mean to keep everyone waiting.
To make up for it as much as possible, we've prepared an extra
special release of MegaZeux here for you. Yeah, you!
I don't even know where to start with this release, as there's
simply a lot to talk about. MZX's world formats and rendering
architecture have gone through major overhauls, and a multitude
of bugs have been fixed (60+). Particularly the MZX UI graphical
glitch that occurred when an SMZX mode was enabled.
Some notable new features are unbound sprites (MZX's new native
pixel precision support), loading character sets/palettes/source
code/MZMs from strings, saving MZMs to strings, a new Robotic
debugger, the SAVE_COUNTERS and LOAD_COUNTERS function counters,
options to help create standalone game releases, the ability to
assign character sets/palettes to a board to load on entry, and
resetting boards on entry. The size limit of Robotic bytecode
has been increased to 2MB.
Other important mentions: MegaZeux has been updated to use
SDL 2.0 and libmodplug 0.8.9.0. The SAVE_WORLD function counter
has been permanently removed. The downver utility has been
temporarily discontinued, as adapting it to this release would
have been a considerable amount of work. Instead, there is a new
option in the Export menu in the editor to export a 2.84 world.
Enjoy, and try not to get overwhelmed by all of the new stuff!
FEATURES
+ Added a built-in robot debugger. See the Debug Mode section of
the help file for details.
+ Added the COMMANDS_STOP special counter to MegaZeux. When a
robot executes a number of commands exceeding this value while
testing, the robot debugger will be enabled automatically and
will open. During regular gameplay, it will be ignored. The
default value of COMMANDS_STOP is 2000000.
+ The counter debugger now remembers its previous position after
being reopened.
+ Added commands_cycle and commands_total variables to the Robot
section of the counter debugger. See the Debug Mode section of
the help file for details.
+ Certain types specified as 255 on the char ID table are now
treated as Custom* types when placed and selected in the
editor. If you switched a type to char ID 255 in a game that
already had that type, the parameters will not be changed
(and the types will still be char 0 if they were already
placed in the world). When making a type a Custom* type from
the global chars dialog, it will appear visually different in
the list and in the character selection window, and also ask
for confirmation.
+ The enter menu can be closed with escape now.
+ In the editor, the Backspace key now removes the top layer
and brings the under layer to the top, as a compliment to Del.
This does not affect the text entry behavior.
+ Seeking in the String section of the counter debugger will now
ignore the $ prefix.
+ Tentative joypad POV hat support added: joyNhat = U, D, L, R
+ The BUTTONS counter has been extended to support the mouse
wheel and X1/X2 buttons.
+ Strings can now be used in the LOAD PALETTE "file" command in
place of a file name, i.e. LOAD PALETTE "$string+10".
+ Strings can now be used in the LOAD CHAR SET "file" command in
place of a file name, i.e. LOAD CHAR SET "@240$chars".
+ Strings can now be used for the special counter LOAD_ROBOT in
place of a file name, i.e. set "$str" "LOAD_ROBOT".
+ Strings can now be used for saving and loading MZMs in place
of a file name, i.e. put "@$str" image_file... (Lancer-X)
+ Added ESCAPE_MENU counter. When set to 0, this counter will
prevent pressing escape from opening the exit gameplay menu.
This will not affect any other escape menus in MZX, and the
exit gameplay menu can still be opened by other means, such as
ALT+F4, CTRL+C, the window close button, etc.
+ Added EXIT_GAME function counter. When set to anything but 0,