# Configuration file for MegaZeux # December 16, 2004 # Comments begin with #. Whitespace is ignored. Empty lines are # ignored as well. # Options are set in the following format: # option = value # If value is not given, then it is assumed to be 1. # You can include spaces in values by escaping them with \s. # (see the default macros for examples) # For directories, use forward slashes (/) instead of back-slashes, # as they work more reliably. # Note that even if the option is given to change the values # in MZX, this text file will NOT be modified, and hence the # values will revert to what they are here when you restart MZX. # Default options are given (and commented out) with # an explanation. If an option is not chosen at all # this default will automatically be used. ### Video options ### # Resolution MZX uses for fullscreen. Note that MZX will always # be 640x350 centered within the resolution you choose # (in other words, it won't be stretched). Give in x, y format. # Use this if the default is giving you problems. Suggested # values are 640, 400 and 640, 480. # This resolution may not actually work; if it doesn't, you will # get the nearest that does. # You may also try a resolution like 640x700 that multiplies # the width, then set the multiplier.. force_resolution = 640, 480 # Make it so the display is stretched by this amount (must be # integer). This is useful for getting resolutions like 640x700 # to look correct (set to 2). #force_height_multiplier = 1 # Whether MZX should start up in fullscreen or not. # Press ctrl-alt-enterWh to toggle fullscreen as MZX runs. fullscreen = 1 force_32bpp = 1 ### Audio options ### # Audio buffer size. Setting this to lower can improve latency, # so audio will be heard sooner after it is set to be changed. # It is also possible to change PC speaker effects more rapidly # with lower values. Lower buffer sizes need more CPU power to # process. The default is adequete for PC speaker playback every # command at speed 4. audio_buffer = 2048 audio_sample_rate = 44100 # Allow music to be sampled at higher precision. Increases CPU # usage but increases audio quality as well. #enable_oversampling = 1 # Set resampling mode. Choices are: # none (fastest, poor quality) # linear (fast, good quality) # cubic (slow, great quality) # fir (very slow, excellent quality) resampling_mode = linear # Whether music/samples should be played or not. # Does not include PC speaker effects. #music_on = 1 # Whether PC speaker effects should be played or not. #pc_speaker_on = 1 # Volume music plays at #music_volume = 8 # Volume samples play at #sample_volume = 8 # Volume PC speaker SFX play at #pc_speaker_volume = 8 ### Game options ### # Name of world file that should be loaded when MZX starts. startup_file = megademo.mzx # Default save file name given when you first try to save. #save_file = saved.sav # Speed MZX should start at (1 through 9) mzx_speed = 5 ### Robot editor options ### # Enable or disable color coding in the editor. # If color coding is off, ccode_string is used for the entire # line. #color_coding_on = 0 # Color codes for various types. # For colors, use 255 to show a color box. #ccode_colors = 255 #ccode_commands = 15 #ccode_conditions = 15 #ccode_current_line = 11 #ccode_directions = 3 #ccode_equalities = 0 #ccode_extras = 7 #ccode_immediates = 10 #ccode_items = 11 #ccode_params = 2 #ccode_strings = 14 #ccode_things = 11 # Whether or not "extra words" should be displayed. # For instance, if turned on, a line like "wait 1" will # become "wait for 1." #disassemble_extras = 0 # The base numbers should be displayed as. Valid options # are 10 and 16 (decimal and hexidecimal). Hex numbers are # prefixed with a dollar sign ($). #disassemble_base = 16 # Changing this will allow invalid comments to automatically # be marked to "delete" or "comment" instead of "ignore". # Don't change this unless you know what you're doing. #default_invalid_status = ignore # Single line macros # These are the traditional MZX macros; they may only # occupy one line in their definition in this file. They # correspond to parameter-less macros: when you press # F6 through F10 the following strings are printed to # the editor, verbatim. For instance if you set macro_1 to # * "hello", * "hello" will be inserted every time you # press F6 in the robot editor. # The following are the default singe-line macros. #macro_1 = char\s #macro_2 = color\s #macro_3 = goto\s #macro_4 = send\s #macro_5 = :\splayershot # Extended macros: # See macro.txt. # The following is an example extended macro. # It sets up a sprite. If you find it useful, remove the #'s. macro_5 = Sprite\sSetup (number255 spr_num) (number255 w, h, rx, ry) (number255 cx, cy, cw, ch) (number255 x, y) set spr!spr_num!_width !w! set spr!spr_num!_height !h! set spr!spr_num!_refx !rx! set spr!spr_num!_refy !ry! set spr!spr_num!_cwidth !cw! set spr!spr_num!_cheight !ch! set spr!spr_num!_cx !cx! set spr!spr_num!_cy !cy! put !x1! sprite p!#spr_num! !x! !y! # Whether or not the palette should be reverted to default # when the robot editor is load. If set, SMZX mode 0 will # also be enforced. #robot_editor_default_palette = 0 # Set to 1 if you want the robot editor to not show the hotkey # help and horizontal border by default. #robot_editor_hide_help = 0 # Backup options # Backups are save files made in the editor. They will only be made # while in the main editor, not while in a sub-editor or a dialogue # box of sorts. Note that this can cause slight pauses while editing, # as the game saves. # If you have multiple backups you should check the modified date in # a console or file properties to determine which was most recently # modified. The number will not indicate most recently saved. # How many backups to be made. Set to zero to disable backups. #backup_count = 3 # How often (in seconds) backups should be made #backup_interval = 180 # The name of the backup file. If you choose "backup" with 3 backups # the backups will be named backup1.mzx, backup2.mzx, and backup3.mzx. #backup_name = backup # Joystick options # It is possible to emulate key presses using a joystick. If this file # is config.txt these options will apply as a default to all games - # you can put them in game.cnf to apply specifically to game.mzx. # A joystick is first specified as joyN where N is the number from # 1 onwards identifying the joystick in your system. You may have # to experiment to find which joystick is which number, if you have # multiple ones, otherwise just use 1. Up to 16 joysticks are # recognized. # You can currently map two things, axes and buttons. # Axes/buttons are mapped to keys given by number. You can find out # a key's number by printing key_pressed in a loop (NOT key_code). # Axis mapping looks as follows: #joyXaxisY = A, B # Where X is the number of the joystick, Y is the number of the axis # (1 is typically left/right, 2 is typically up/down), A is the key # for one extreme (such as left) and B is the key for the other # (such as right). # Button mapping looks as follows: #joyXbuttonY = A # Where X is the number of the joystick, Y is the number of the button # (you may have to experiment to find out which button is which number), # and A is the key whose press is emulated when this button is pressed. # Misc Options # Set to 1 if you want MZX to pause when key focus is lost. Useful for # when another app (such as someone IM'ing you) steals the screen. This # might cause MZX to lock up sometimes on some machines - if you have # problems with it don't enable it. #pause_on_unfocus = 0 # Set to 0 if you want input boxes and strings in the robot editor # to use the game set for characters 32-127, as opposed to the protected # GUI set. #mask_midchars = 1 January 27, 2007 - MZX 2.81f This release is mostly about the new renderers, the first of which was introduced in the previous version. There's also a few important bugfixes, and a lot of internal tidy-up work. I'd like to thank Mr_Alert, Quantum P. and LogiCow for contributing to this release. Thanks guys. USERS + Renamed the force_32bpp config option to force_bpp, in preparation for 16bit OpenGL render modes. This option now takes 8, 16 or 32. 16 is reportedly broken on Windows, so stick to 32 for now. + The force_height_multiplier option has been removed. A lot of code wasn't properly designed to handle it, there have been mouse warp bugs with it for years, and nobody seems to use it. If people want stretching, they can choose one of the four hardware renderers to achieve this. + Added infrastructure for "pluggable" renderers. This code isn't perfect, but it's far better than the mess in 'e'. Defaults to the 'software' render mode. + Added Logicow's alternative OpenGL renderer. For more information about this renderer, see config.txt. NOTE: This code may be buggy! Please test! + Added Mr Alert's YUV overlay renderers. One does full YUV macropixel approximation, the other (faster) render does chroma supersampling. See config.txt for more information. NOTE: This code may be buggy! Please test! + Simplified Exophase's OpenGL renderer present in 'e', and fixed a few bugs that caused it to not work for some people. + Really made MegaZeux use 'directx' by default on Windows. The code in 'e' was non-functional. Use 'windib.bat' to run MegaZeux with the SDL windib driver. + The OpenGL renderers now have a 'filter' option that allows you to choose linear (where pixels are interpolated, looks "blurred") or nearest (where nearest-neighbour approximation occurs, looks "sharp"). + Mouse warping was broken when using any of the hardware renderers. There should be code in there now to take account of this (thanks Mr_Alert). DEVELOPERS + OpenGL can now be disabled via config.sh. This allows MegaZeux ebuilds to be constructed on systems that do not have any form of OpenGL support. (Although MZX runtime loads the OpenGL library, 'e' required the headers to build correctly. This is now no longer the case.) + Improved support for cross compiling with mingw32 on Linux, combined the win32 Makefile with this new support. + Rewrote the config.sh script. All of the options have changed, and the broken platform auto-detection has been removed. See ./config.sh for more information. + Rejigged MegaZeux's headers so that they can be used in both C and C++ mode. Renamed fsafeopen.cpp to fsafeopen.c. Hopefully by 'g' most of MegaZeux should be ported back to C, instead of the "C++" it is now. + Fixed up the 'txt2hlp' utility which Terryn has been using a version of to build the internal MZX help system. This binary is built in the source distribution, but it is not distributed with the MegaZeux binaries. + Moved some antiquated Greg code out into 'old'. No attempt has been made to make it compile, it is available purely for observational purposes. + For the windows binaries, "windib.bat" is now generated by package.sh and auto-generated for the name of the MegaZeux executable. + Updated Xcode package from Quantum P. (see macosx.zip). January 18, 2007 - MZX 2.81e + Made grabbing in the editor not combine background color, only uses "special" in game colors for player, tell me if anything ends up being weird because of this. + Possibly fixed an obscure bug where moving something happened immediately if it was sent to a label by a robot further east/south than it and it moved north or west (has to do with the way robots are reverse scanned). Tell me if this changed any behavior for the worse and I'll change it back or try to work out something new. + Added GDMs to ctrl + n, this will of course auto convert and play the s3m. + Added ability to preset player locked status from board settings. - Removed ability to change SMZX mode ingame (F11) + Instead added ability to debug variables (counters and strings) ingame with F11. There's also an option to export the current variables to Robotic program that sets them. + Fixed bug where moving a block with the player into an overlapping region leaves a space where the player was. + Fixed bug with a robot indirectly sending itself to a subroutine via send all or send name causing it to loop the send. + Added compatability hacks for key# prior to MZX 2.69 worlds and ridNAME falling through in MZX 2.70 and earlier worlds. + F6, F7, F8, and F11 debug/cheat keys only work in editing mode now (as things were prior to the port) You can still save/load in the editor so if you want all of these things you can play the game from the start there. + Space in the editor no longer deletes something of similar type that is beneath not sure what the point of this was anyway. + Fixed bug causing cursor to clipped be out of bounds in SMZX char editor if changing to smaller multichar edit region. + Accidentally messed up screen centering in fullscreen for 32bpp mode, fixed. + Added hardware scaling option. You can now supply a window resolution besides 640x350 and allow for window resizing if hardware scaling is on; this will also scale fullscreen output to fill the entire screen. This can slow down rendering somewhat. + Fixed bug causing flip block to crash in the editor. + Made blocked directions relative to the player for put dir player. + Fixed bug where putting something to a direction relative the player overwriting the robot could crash MZX. + Fixed ability to input in input boxes by clicking on their question string. + Removed the bogus patch to Modplug and correctly fixed it in the build system. + Added 'debian' subdirectory for building Debian and Ubuntu upstream packages. Hopefully MegaZeux will be in the primary pool in a few months. + Added OS X xcode project files (see 'macosx.zip'). Fixed many bugs relating to endian that caused MegaZeux to be buggy on big-endian architectures (like PPC). Credit goes to Quantum P for finding these bugs and engineering high quality solutions. + Made 'directx' the default video render again on Windows. NOTE: This overrides the default SDL behaviour, but will not be applied if you set SDL_VIDEODRIVER yourself. + Repaired the 'linux-static' target so that it no longer includes a system C++ library, which caused unpredictable results on distros without a static version. + Fixed a locking bug with the audio code that caused hangs at startup on OS X. Also provided a mutex implementation using GNU pthreads as a temporary workaround for an SDL bug on the Linux platform. + Added PlayStation Portable (PSP) port. This code was written by Exophase and is highly experimental. It may not work at all for you. Please see docs/build.txt for more information regarding this port. + Fixed mouse movement from being affected by height_multiplier when not in fullscreen mode + Fixed height_multiplier config.txt option allowing you to enter really stupid values (like negatives, 0, and values too large for the resolution) + Added in an extra video mode check to stop MZX crashing on video modes that the video card can not reproduce + Fixed Avalanche to a constant placement rate of 1/18 (this caused MZX to deliver an uneven number of boulders, and crash with certain board sizes + Fixed sprite collision box to stop MZX from crashing when stupid values are entered + Fixed setting the viewport size to weird values like some old MZX games do + Default fullscreen resolution is now 640x480, this can be changed in config.txt + The config.txt option force_32bpp is now enabled by default + Seeking with mod_position when using a .WAV file as background music now works (thanks Mr_Alert) December 10, 2006 - MZX 2.81d + Fixed a compilation failure on Linux, due to SDL no longer depending on libX11. Now we manually link X11 into MZX if necessary. + Various build system improvements, fixing bugs in the prefixing of dependencies. + New libmodplug 0.8 imported, fixing many endian problems on big-endian machines, integrating all of our local patches to 0.7. + Fixed bug causing MZX to freeze when starting up on Win9x machines. + Fix a warning generated by GCC 4.1. + Update the GPL boilerplates project-wide to the newest FSF address. + Fix a string range check causing an obscure crash in certain games. + Update the build.txt documentation. + Address documentation bugs found in the internal MZX help system (Terryn). + Fixed a recently introduced bug breaking the open command. + Fixed some bugs with changing params and pressing escape. December 14, 2005 - MZX 2.81c + Oops, accidentally broke shift + F2. Fixed that.. + Also accidentally broke &+counter& for full hex representation. Fixed. + Fixed memory leak problem with playing certain WAVs in a loop. + Fixed inconsistency of bad viewport sizes behaving differently on current versions from old DOS versions. + Accidentally broke joystick stuff in config.txt (has to do with way configure options were being read), fixed. + Fixed bug causing crash when loading MZBs larger than the current board size. + Made cursor hidden in alt + V in editor. + String comparison failed with nulls in the strings, fixed. Also should be slightly more optimal. + Fixed bug when using negative numbers for if sprite_colliding "counter" + Fixed math operations (inc, dec, etc) not working on string indeces. + Added ability to force screen to 32bpp. Fixes some slight rendering issues, and if you have problems with fullscreen let me know if this helps (try it without first though). See force_32bpp in config.txt. + Fixed sprite clipping bug with respect to overlay. + Fixed bug where pressing enter on things besides robots, scrolls/signs, or sensors in the editor would clear whatever was underneath it. + Accidentally broke SFX with optional PC speaker chains (played both, should only play PC speaker when digital music is off, fixes Bernard the Bard) + Made last character in char selection for F3 and alt + C remembered (note that they're remembered in two different places for both) + Accidentally broke life animations, fixed November 26, 2005 - MZX 2.81b + Fixed inability to make proper .savs of worlds with strings (they'd crash when loaded..) + Fixed PC speaker audio bug causing a constant high pitched noise to be played instead of PC speaker audio sometimes. + Fixed some issues with long pathnames. + Fixed a bug causing Caverns to crash in recent versions (long story, it was most likely due to an error in ver1to2) + Now when you set mzx_speed in a game you can no longer change the speed from the F2 menu. Setting mzx_speed to 0 reallows this (and doesn't set the speed) + When loading a game its speed is now set to the speed MZX started with (whatever's in config.txt, or the default of 4) + Added backup_ext config.txt option to specify the extension of backup files (default is .mzx). + Fixed backup_interval for config.txt possibly being broken. + Fixed a bug messing up the death board on some old MZX games (like Nick Brick 2) + Escaped more things and made displays always in escaped form for certain character sequences. It should be impossible to type non-escaped forms. The following should be used: \0 for 0 (this probably won't work in strings, but in chars should) \t for tab (character 9) \n for newline (character 10) \r for carriage return (character 13) \" for double quote \\ for slash + Copy + paste on escaped character won't unescape them anymore. + Fixed error message for invalid lines in Robotic + Fixed inability to import text files from other directories. + Huge overhaul of the source (proper types for things, directions, equalities, conditions, chest items, and potions), if anything is suddenly broken now let me know. + Made scrolls/signs only display text (letters, numbers, etc) in the default char set. That should be enough for now. + Added mousewheel support for robot editor and robot box display. + Fixed inability to load MZMs from other directories in the editor. + Wrapped audio stuff in proper mutex, hopefully this fixes some issues (like crashing when changing mod_frequency a lot). + Long current directory paths no longer write out too much in the file loader (instead the last bit is shown with a ... prefixing the beginning) + Decided to be nice and make board_scan not crash. Don't use it. It's only there to make one legacy game work. If you use it I will personally scold you. And don't tell other people to use it (that means you CJA). Use copy block x y w h "$str" t instead. If you don't know what that means read the help file, it explains everything. + Removed ability to copy + paste after changing board dimensions of the source under any circumstances (alt + R, alt + Z, import world, import board) + Fixed appearance of ghosts in F10 menu. + Prevented char editor from counting moving the cursor as an undo step if nothing was actually drawn. + Made pressing escape on initial char selection/board selection/param selection for things cause it to cancel placing anything. + Made it impossible to set board width/height to 0 again (oops) + Made starting lives and starting health take effect immediately for the first alt + t + Added ability to play OGG from alt + l (but not the other mods, don't want to clutter that up) + Made it so if no note follows an embedded SAM in a play string it's played at native frequency. + Accidentally made loading worlds in the editor not change the current directory, fixed that. November 20, 2005 - MZX 2.81 + Fixed a bug where MZX world/save names > 12 chars could cause weird things to happen (like doors breaking) + Fixed problems with helpfile/charsets loading when loading MZX outside of the directory MZX is in. This should fix file associations on Windows as well. + Changed board selector so when board 0 is "(no board)" it doesn't actually refer to the title but to no board. + Made import world not overwrite the title string. + Fixed bug that causes crash when trying to flood fill an area with the color it already is in the SMZX char editor. + Redid audio engine. Everything is unified now, meaning that anything you can use as a mod you can use as a sam and vice-versa. + The new audio engine uses its own master resampler that has three interpolation modes - see config.txt for more information. + sam 0 filename will play a file at its native frequency (note that SAMs that have been converted from WAVs are set to be played at 8363Hz). + Added support for OGG vorbis audio files. + Fixed bug causing SFX volume control in F2 menu to not work. + Removed limitation on number of SAMs that can be played simultaneously. + Fixed bug where the mouse got "stuck" in the black border edges of non 640x350 fullscreen resolutions. + Fixed issues with message boxes being part default palette part current palette, they now always use the current palette. + Added mod_position counter. What these actually set/return is dependant on the type of file loaded. Modules use the current row, OGGs use the current PCM sample. + Added mod_frequency counter. There are a few things to note here: Modules have a "nominal" frequency of 44.1KHz. Other data types have their own nominal frequency to prevent output from sounding differently depending on the audio_sample_rate in config.txt. For OGGs and WAVs the nominal frequency is the one the file is encoded at. Changing the frequency can cause a noticeable one time popping sound, so it might not be desirable to slide it. This is much more prominent with lowering the frequency than raising it. This value is capped so it can't reach below 16. + Changed alt + L to play back at natural frequency instead of 8363Hz. + Fixed bug causing sensor deletion while the player is on top to destroy the player. + Fixed bug causing imported boards to possibly crash after being tested. + Fixed bug causing save_game and save_world to not work if a file with the given name isn't already present. + Changed function counter matching removing restriction on number of digits for parameters. 10+ digit inputs should no longer fail (for instance, abs-123456789) - Save files from 2.80 are not compatible due to several changes in the save format. + Made counter/string names internally variable length instead of a fixed 14 chars. There is now no longer a name length limitation. + Changed alt+8 for mod * to just * in the hotkey listing. + Fixed crash when referencing (by param) sprites > 256. + The string system has been redone. Strings are now dynamically sized and don't have an artificial maximum length. Writing to string.N will guarantee that the size of the string becomes at least N, while reading in this way will return 0 if out of bounds to maintain the illusion of null termination. Be careful when using this. + $str.length returns the length of string $str (this is faster than iterating through it to find when chars hit 0) + Vlayer is dynamically sized. The vlayer_width/vlayer_height counters still work as per usual, but the vlayer_size counter has been added to adjust the maximum size. The default is 32768. + Fixed bug not allowing things to move over goop. + Fixed bugs causing current directory to be changed when importing things from other directories. + Properly implemented support for volume "string" + Fixed a few commands not working when they should from the global robot (such as put to dir of player) + Fixed a bug where going to a label at the end of a robot would treat it as if it's the first of its name in a sequence of labels. + Fixed a bug involving moving the a block with the player not moving what was underneath the player. + New help file, thanks MUCHLY to Terryn for pulling off this enormous effort! June 6, 2005 - MZX 2.80h + Fixed a bug which could cause crashes when quiting the game. + Fixed some bugs when changing boards and other things that can cause duplicate players.. I think. + Fixed a bug that could cause crashes when adding boards + Improved response time in editor for slower computers/high load situations + Fixed some endian issues with the GUI + Fixed some crash when moving the mouse cursor around in the editor + Fixed bug where you if you had a robot whose name is the same as the global robot it wouldn't get messages (fixes yoyo in Weirdness) + Fixed debug box not moving with text input + Fixed bug with duplicate player appearing when killed and a new one can't be put at 0, 0 + Added copy/paste for outside of MZX to/from the robot editor. It only works in Windows and X11, and functionality may be limited in X11 right now (currently seems to work in native X11 apps and GTK 2.6 apps but not earlier GTK or QT, also try shift + insert to paste) + Fixed bug in resizing involving overlay blanking. + Fixed clear messages/projectiles not working (and damaging the game instead) + Fixed behavior of P key in editor for wildweasel. + Fixed random in Robotic not correctly swapping the range if they're given in the wrong order + Fixed clip length in [ messages + Fixed crash when changing volume without a game loaded + Redid internal GUI system, fixes some minor things + New file loading/saving window - press del to delete a file/dir, alt + n to create a new directory, alt + r to rename a file/dir. + Added PC speaker volume control to F2 settings and config.txt + Fixed yet another crash bug with resizing boards + Fixed inability to type * in text placement in the editor (although this adds inability to turn on mod * while F2 is on...) + Added ctrl + n in the editor to load a module for listening only (won't set the current board's module, and will let you choose ones from different directories) + Fixed crash on macros with more variables than can be displayed in their configuration. + Fixed bug that causes char selection cursor to reset to 0 on unhandled keys (and continuously do so for lock keys) + Tweaked ctrl + dir in text entry boxes. + Added gdm2s3m in-tree to the contrib/ directory. gdm2s3m no longer needs to be installed on the system before compiling mzx. + Improved the build system to automatically build .c and .cpp files with compound system CFLAGS/CXXFLAGS, respectively. + Made package.sh automatically ship the source package with a Makefile.dist to warn the user that they need to run config.sh before 'make'. + Rectified inconsistency in source copyrights. + Added multicharacter editor. Select multiple keys in the character selection with shift. The char editor also now has the ability to perform operations (delete, copy, scroll, etc) on subblocks. Hold down shift or press alt + b to highlight a region (press escape to remove the latter). Blocks copied like this will be pasted to where the cursor is at. Other small things in chareditor tweaked/changed... No longer press tab to toggle through set/clear/toggle draw modes, instead tab for set mode and shift + tab for clear (no more toggle). Mouse behavior is modified as well. In non-SMZX left click sets, right click clears. Shift + F2 will cut a block (clear + copy) alt + x/alt + i can now be used to import/export partial charsets while in the char editor. You can do so for several in series: put a # in the name of the charset then set the First for the first number # will be replaced with and the Count value to indicate how many in series to work with. For instance, saving s#.chr with first = 0, count = 3, starting at offset 100, with a 2x2 char selection will save charsets s0.chr from 100, s1.chr from 104, s2.chr from 108, and s3.chr from 112. *** NOTE *** Series import/export will only work correctly with char selections that are one in height (can still be split up another way in the editor itself). So if you want to use partial charsets on your edits it's important that you select all the chars in a row. + Made characters for the editor/GUI use another charset that's protected. Please notify me if any characters are incorrect. Modify mzx_edit.chr to change this charset. + The same thing goes for colors. It doesn't work for SMZX, which also might look a bit different in the editor... + Added option (defaults on) to protect chars 32-127 in input boxes and strings in the robot editor. + Mouse warping goes to middle instead of top corner now, so there isn't a biased towards moving up. + Hopefully fixed another bug with the cursor and changing boards... + Fixed module looping problem in modplug... + Added libmodplug 0.7 with both patches (see contrib/) in-tree. Removes system dependency on libmodplug. + Made auto-backup on by default (3 count) + Made if touching idle, beneath always false instead of like nodir + Fixed bug that caused bad things to happen if you pressed too many different keys too rapidly. + Made mouse wheel emulate up/down in dialog boxes and list menu. + Added ctrl + backspace to intake (delete previous word) + Made modulo operator use floored instead of truncated mod (uses positive remainder instead of negative) + Fixed crash when testing after using ctrl + z to clear a board. + Fixed bug where sending other robots to subroutines caused the return address to be to the next instruction like local subroutine calling works. + Fixed bug where going to a label on the last line of the robot could screw the game up. + Fixed a bug where the editor froze if you tried to fill the board with players (eheh...) + Fixed a bug that could cause crashes when sending all sensors something. + Fixed some crashes when exporting/saving fails. + Fixed import world's ability to go over the board limit and cause crashes. + Allowed input of decimal numbers for params. April 1, 2005 - MZX 2.80g + Fixed crash on alt + x in robot editor. + Fixed missing line on alt + h in robot editor. + Introduced incorrect enter action in robot editor (didn't reset to beginning of the line), fixed. + Fixed garbage appearing when moving from a larger to smaller board and being outside of that board's scroll region. + Fixed bug that could cause glitches/crashing when resizing the board + Fixed error with global next option not retaining the three checkmark options correctly. + Added work around so that move block moves the player (won't move it on inter-board moves) + Fixed bad palette loading for Linux introduced in 2.80e or f or something + Made it so block highlighting doesn't highlight the debug window. + Made the debug window move if necessary when home/end is pressed. + Added autorepeat buffering so previous keys can be resumed. + Fixed bug with swap world possibly not working (crashing??) off Windows + Fixed more problems with garbage/crashes when resizing with the cursor in a position causing the scroll to go off the edge + Fixed incorrect text cursor offset with force_height_multiplier on. + Redid way directories are loaded internally so you can load dirs with over 4096 entries now. Might be faster (unsure) + Chest contents list menu looked funny, fixed. + Changed default.spl to smzx.pal so you can load it more sanely. + Export block wasn't getting the last selected line. Fixed. + Hacked scroll editor so it wouldn't crash when removing lines. Scroll code either needs to be 100% overhauled or replaced by robots somehow... + Fixed config files not being closed. + Added include file option for config files. Use it like this: include configfile e.g. include subconfig.cnf will load subconfig.cnf's options + Fixed freadN not terminating strings. + Fixed graphical glitch when using the mouse in the char selector. + Fixed save games crashing when they can't load fopened files. + Fixed some other problems with save games and fopened files... + Accidentally had title screen running a bit slow... + Value strings starting with ( not parsed as an expression if they don't end with the ) + Fixed problem with key_code being triggered for keys that aren't in-game + Removed the unimplemented if player dir and if not player dir commands from RASM + Added extended macros. This allows for parameter based macros to be entered in the robot editor via a window or by command. See macro.txt for more information. + Fixed player cloning after flip/mirror and player placing. + Added random seeding that was mysteriously missing... + Finally added drive changing for Windows builds. + Fixed mousex/mousey for resolutions other than 640x350 (only applies to fullscreen) + Fixed crash on weird invalid death/endgame boards... + % and & messages clip correctly now. + Fixed potential crash on double closing the files. + Fixed crash bugs with placing sensors and maybe scrolls. + Fixed sending sensors when you have robots of the same name (fixes Weirdness chapter 1) + Fixed bug that can screw up your world when placing scrolls or sensors.. sometimes. December 26, 2004 - MZX 2.80f + Fixed a bug that could cause crashes when auto-quoting params in the robot editor (eg, set x 1 -> set "x" to 1) + Fixed a bug that could crash the robot editor if you added a new line prior to the first line of a marked block, then did an action on it. + Fixed a bug where clearing the first and only line could cause it to appear as if it hadn't been cleared at all. + Unified global and global next parameter setting so that nothing is lost between first/next but information can be cancelled without application. + Fixed E/S block markers appearing in the robot editor when they should be off the screen. + Left click position in robot editor mysteriously disappeared after having been added somewhere after 2.80d. Readded. + Added option to hide the hotkeys help and horizontal border in the robot editor with alt + h. Also added a config.txt option to have it default this way. + Search/replace in the robot editor. ctrl + f to find or replace/replace all, ctrl + r to repeat either search or replace (depending the last one you did, if you cancelled this does nothing) + The load_game counter sequence was broken; fixed. + Hopefully fixed all means of overrunning the current line max length in the robot editor... + Fixed robot editor validation not showing every 13th line + Fixed aesthetic problem with validation report.... + Fixed crash with setting message column less than 0. + A couple things added for 2.80e mysteriously disappeared in source handling. Readded. + Changed max board size prevention to auto resize the lower dimension to the max that can be handled with the higher (ex, 30000x25000 becomes 30000x559) + Added floodfill to char editors (alt + f) + Added single depth undo to char editors (alt + u) December 19, 2004 - MZX 2.80e + Fixed a bug causing problems with static overlay if a non-overlaid sprite is displayed so it's clipped off the edge of the screen. + Fixed a bug in the display of c?x color boxes in the F2 menu in the robot editor + Fixed a bug that caused incorrect thisx/thisy for one cycle after copyblock + Fixed a bug preventing calls to nonexistant subroutines from passing that point in the robot + Fixed crash on sam 0 "file" + Fixed a bug where loading new SFX may not correctly overwrite previous ones + Fixed a bug where you could only load/unload so many mods before MZX couldn't load anymore.. same bug as the SAMs but went unnoticed! + Fixed a bug that caused you to be infinitely stuck in the global settings dialog box when you press previous on the next page. + Fixed a bug where going to next then exiting would not save the changes from the previous page. + Fixed a bug that could cause crashes while ending modules. + Fixed a bug that could do the same kind of thing with sams. + Fixed an allocation bug when loading MZX worlds that could lead to crashes. + Fixed a bug that caused MZX to crash if you interpolated an expression with a value equal to or greater than 1 billion. + Fixed a bug where mixing ccheck1/2 with sprites from board and vlayer could cause problems (that's the short version of the explanation, I'll spare you the long one) + Fixed a bug that could cause certain old MZX games to crash after the title screen + Somewhere broke missiles between 2.80c and 2.80d. Fixed. + Fixed error in lit bomb anim sequence setup in char ID editor. + Reworked a lot of robot editor code; adding/deleting lines while marked areas are active should work more naturally now and it's hopefully no longer possible to crash it in the same ways it was previously. + Fixed crash when setting mesg row to less than 0. + Fixed mouse presses not working in the robot editor. + Made MZX ignore alt + tab so you can safely switch in your WM without it triggering... + Added numerical key entry for number boxes. Use 0-9 to add to the most significant digit and backspace to take it away. - Fixed maximum board size to about 16.7 million tiles (128MB), for now. + Added config.txt option to make MZX pause when key focus is lost (when clicking on another window, perhaps) or when it's minimized. Music will still continue. + Added save/load position to the editor. Works for loads inbetween boards as well. Press ctrl + num to save to slots 0 through 9 and alt + num to load from that slot. Please press shift + 8 or the numpad * key instead of alt + 8 to set mod wildcard. + MZX now ignores the mouse scroll wheel instead of interpreting it as a click. + Fixed a further bug that could cause playing samples to crash. + Added config file option to revert the robot editor to the default palette when loaded. + Fixed bug in shoot command. + Fixed error when making save name in editor but cancelling. + Auto-backup - see config.txt for details. + Joystick key mapping - see config.txt for details. + You can now load game-specific config files by creating game.cnf for the corresponding game.cnf (for instance, caverns.cnf). This is mainly useful for joystick key mapping. Note that these settings will NOT go away if another game is loaded that doesn't have a .cnf. + Alt-enter finally works as block action in the robot editor. + Loading a .mzx/.sav from another directory indirectly (via command-line or robotic) will now actually change the current working directory. + Fixed bug that crashed MZX with ctrl + i in the robot editor. October 9, 2004 - MZX 2.80d + Fixed cursor going invisible when escaping from import in the editor + Fixed robot editor entry when pressing OK on global info + Fixed lack of name for MZB import/export (any MZB's exported in prior beta versions still won't have a name) + Fixed some problems with setting the mouse position + Fixed problem with exits not bringing you all the way to the edge if width over 400 or height over 200 + Fixed bug that cleared too much when increasing both width and height while resizing the board + Fixed problem with 1 char shortcut commands with spaces immediately after them + Fixed problems with load_robot and load_bc (caused crashes and infinite loops) + Optmized RASM heavily (this should be most noticable when doing a lot of external robot loading from text files) + Fixed inability to use absolute paths in loading a game from command line + Fixed lastshot/lasttouch conditions with directions not working + Fixed char editor in robots not going into SMZX mode when proper + Cleaned up source code so it passes -Wall without complaint and in the process corrected some glaring code errors that may have corrected random problems + File opening broken in 2.80c, fixed + Implemented MZM2 saving and loading and rewrote mzm.cpp (if anything is changed or fixed regarding MZMs, attribute it to this). MZM2s can be of larger dimensions, smaller filesize for same amount of data, and can store robots. + Fixed bug that could cause MZX to crash when making new strings + Block operations to overlay when overlay was off caused crashes - fixed + Fixed a problem with sprite ccheck2 against other sprites + Optimized function counter lookups a bit; speed gain for all counter accesses (especially ones that begin with certain characters such as _) + Fixed disassembly error with ' ' character + Fixed assembly error where condition extended dir (such as blocked opp seek) was not getting compiled with the dir extension + Fixed editor bug where the param was not being cleared when overwriting things by double placement + Fixed inability to use counters with playercolor/bulletcolor/missilecolor + Added ability to use counters in place of p?? in the robot editor Note - even though this expands functionality of the editor this does not require a version number change because the worlds will still be playable in older MZX versions (and will display correctly in the robot editor - you simply won't be able to correctly edit the commands) + Mouse correctly limited to screen edges now + Fixed inability to overwrite robots with pushable robots and vice-versa, as well as scrolls with signs and vice-versa + Possibly fixed problem with windowing error when editing global robot (?) + Fixed disappearing cursor after color selection box with mouse (and other places?) + Fixed bug in sprite clipping that caused some to be clipped off inappropriately + Made board_id/board_param counters readable + Added bound checks for all counters using board_x/board_y/overlay_x/overlay_y + Removed ability to put robots, scrolls/signs, and sensors (with the put command in Robotic) + Fixed potential direction corruption bug causing directions not to work sometimes even if they display correctly in the robot editor + Fixed copy overlay to MZM copying to overlay too + Fixed a bug where debug window could display the wrong amount of robot mem and potentially even crash MZX + Fixed help_menu counter not doing anything (durr) + Changed sprite draw order so they're drawn underneath the message bar, debug box, and time remaining display + Changed put p?? in Robotic so it will put default params if available + Fixed a bug that could cause copies from overlay to vlayer to not end up at the correct destination + Fixed a bug where c?x and cx? would not display correctly in the robot editor + Optimized copy blocks a bit using variable length arrays instead of malloc August 16, 2004 - MZX 2.80c + Fixed issues with the commands counter not being reset + Color intensity now gets reset when you enter the editor + SAMs got cutoff sometimes now.. fixed + Fixed bug where loading a world with empty boards could change the starting, endgame, and death boards + Fixed bug where you could text enter off the bottom of the board, causing problems + Fixed bug involving cutting/clearing the entire robot in the robot editor while not at the first line + Fixed robot name entry for global robot not disappearing on small boards + Fixed bug where you could duplicate the player by holding down a direction as a saved game loads + Fixed bug where you could go to line 0 in the robot editor + Saving an MZM now auto-adds the .mzm extension... + Fixed black screen on quicksave + Fixed bug where opening a file didn't close the old one if one was open (so it'd eventually crash MZX) + Changed alt+backspace behavior in intake so it doesn't exit + Added clipping for refx/refy/width/height for sprites (less than 0 at initialization, greater than board width/height at draw) + Fixed direction parsing for move all + Fixed bug where creating things on top of the player would use a slot for robots/scrolls/signs/sensors instead of just copy to the buffer + Added ability to use chars as immediates in Robotic commands (ie, set "$str.0" 'a') + Added options to enable oversampling and specify resampling mode in the config file (higher quality audio) + Building with patched modplug that fixes loading 2-channel mods outputted by FT2. If you're building yourself, see build.txt. + Fixed inability to mouse click in alt + h mode + Fixed ability to mouse click outside of board range + Should work better for Linux users; case insensitivity for file opens has been added. + Fixed close bug that was affecting Linux builds (may affect more) + Keypad enter works where normal enter works now + Fixed disappearing cursor when cancelling out of abandon changes box when loading a new world in the editor + Fixed problems when loading/saving robots outside of ID range (do not hardcode ID's people) + Fixed problem with NO BOARD exits being set to something else when empty boards were being stripped or when worlds were being imported + Fixed bug where auto-decrypting worlds didn't work if the XOR value was negative + Fixed problem with rid not working the first cycle + Fixed inability to interpolate (with &&'s) counter names larger than 14 + Added new robot mem counter in debug box (only kb precise, rounds up) + Fixed ability to clone the player on non-title board after testing + Lengthened size of mod name buffers + Fixed bug where send x y doesn't work from the global robot + Fixed a few bugs that could cause MZX to crash + Fixed a bug that prevented copyrobot "string" from working in some situations + Fixed a bug allowing player duplication in board importing August 11, 2004 - MZX 2.80b + Made it possible for robots to move through teleporters + Fixed bug with pressing shift in text entry boxes + Made it so alt + tab does not switch draw modes in editor + Fixed a disassembly error for color intensity N percent command + Fixed problem with looping on mods that do not loop explicitely + Fixed alt + dir scrolling in the char editor + Fixed not being able to click the rightmost char in the char editor + Readded unmark (alt + u) to robot editor (mysteriously disappeared??) + Fixed key label so it returns proper unicode values + The player and pushable robots can now be pushed by the push command + Fixed bug where you could clone the player by switching boards + Fixed bug where you could either turn off overlay or switch to boards that don't have it while in overlay edit mode... + Fixed bug where remains of debug window would not be cleared in editor if the board width is too small + Fixed bug where turning off the menu with a board too small would mess things up + Fixed bug where run lengths were saved one too large... this could fix stability problems in at least occasional cases (with saved worlds or save games, at least) + Fixed placing solid things beneath robots (like bombs) + Added support for a keyboard plus in the char editors + Fixed previous button in SFX editor + Made robot name box disappear when robot char box comes up... + Fixed bug where mods restart after pressing P if they're the same mod as what was playing before + Fixed problem with changing params (with P) in the editor. + Fixed bug where null boards were not being pruned from old worlds upon load + Made file name saving box larger (for saving games and worlds) + Fixed bug where default (100%) palette intensity values would not be applied to the palette a game loads with + Fixed bug where exporting char sets that are full size caused a 0 byte charset to be exported (8bit wraparound) - Removed export text in the board editor. Don't think anyone wanted it... + Added support for forms such as :line + Fixed sporadic incompletion of strings without trailing quotes at the end of the line + Fixed bug where clearing/cutting the last line of a robot crashed MZX + F4 in robot editor now works more generally + Made line numbers in robot editor error report start at 1 + Added ctrl + G to go to a line in the robot editor (ala nano) + Made it possible to change a robot's color in the editor + Fixed bug where spitfire, seekers, and missiles didn't hurt something immediate adjacent to whatever shot it + Fixed editing of spitfires + Made default speed 4 again (5, bleh) + Readded quicksave/quickload + Readded F8 clear (always works - be careful) + Fixed autorepeat problems for spacepressed/delpressed. + Wrapped around sprite values so LogiCow's bad code would work (HTMCIAB) + Cleared block commands inbetween board changing and other things like that + Fixed bug where MZX would crash if put dir player overwrote the robot doing it + Fixed bug where playing SAMs would eventually crash MZX + Fixed some mod * problems (hopefully?) + Fixed bug where pasting blocks over the edge of the board in the editor would cause MZX to crash + Uses new GDM2S3M source that fixes some bugs. If your converted GDM's have problems, delete the S3M's it generated. August 9, 2004 - First release, MZX 2.80 BETA Extended macros Extended macros allows which takes parameters over several lines in this file. Like single line macros, macro_1 through macro_5 correspond to the F6 through F10 keys, but you can name these anything, so long as you start it with macro_ (for instance, macro_sprite is valid). The first line is the definition which states the macro's name and label, and all proceeding lines which are indented by a single space or tab character are part of the macro body. Lines enclosed in parentheses denote parameters. The format is as follows: (type param1, param2, param3, ...) Where type describes the kind of parameter and param1, 2, 3, etc are parameters of that type. For instance, you may type (string32 first_name, last_name, address) Where the user is expected to supply three strings of up to 32 characters. These strings are referred to as first_name, last_name, and address. The following types are valid: stringN - strings of N characters Example: string100 The N is not optional. numberA-B - an integer value in the range of A to B. numberA - an integer value in the range of 0 to A. Examples: number20-30 number256 character - a single byte character. color - an MZX style color (includes wildcard variants) After defining all of your parameters, you can write the contents of the actual macro. To insert the value of the parameter, put inside the macro its name, enclosed in exclamation points. For instance: * "~fHello, !firstname! !lastname!." Parameters may also have default values. For instance, (string10 name=Bob, address=Nowhere) Note that whitespace may not be placed before or after the equals sign, otherwise it'd be considered part of the variable name and the default value respectively. The following are valid default values: For string: Any sequence of characters. For number: An integer number such as 1234 For character: An integer value or a character inside single quotes, for instance 200 or 'x' For color: An MZX style color, such as c0F or c?3 If you don't supply defaults, default defaults are used: For string: The empty string For number: The lower boundary of the type For character: 0 For color: c?? Once you write up an extended macro you can use it in the robot editor. F6 through F10 will execute the macros named macro_1 through macro_5 if they exist (even if single line versions are defined). This will bring up a GUI window where you can visually enter all paramter values. For other macros, you can enter them via text. All lines starting with are considered macro invocations. The format is macro_name(param1, param2, param3, ...) Note that the parameters can be supplied in one of two ways, by order or by name. Supplying by order means that the nth by order parameter you enter will correspond to the nth parameter defined in the macro. By name means that you give the name of the macro along with its value in the following way: name=value Note that values here follow the same formatting that default values do. Here's an example of writing a simple macro then calling it textually from the robot editor: macro_test = A Test (number20 a, b) (string32 c) set "!c!" "(!a! + !b!)" If the user then types.. #test(1, 2, counter) The following code would be produced: set "counter" "(1 + 2)" You could also type something like: #test(c=counter) Which would output... set "counter" "(0 + 0)" Notice that you don't have to supply every paramter. If you don't supply something for a value, its default will be used. By pressing alt + m, you can bring up a text box that will let you enter the name of a macro to be edited via GUI. MegaZeux 2.80 public BETA -- Introduction -- MegaZeux 2.80 is a hybrid port/rewrite of MegaZeux 2.70 for DOS (actually, development for 2.80 began a bit prior to 2.70's release, but it's 100% feature compatible). It is not a complete rewrite, in that the existing MZX source was used as a base for its development. Nonetheless, quite a lot of the code has been rewritten, and what hasn't been has been reformatted and carefully examined. As much as 75% or more of the current source is new code or code that has been heavily modified from the original. For this reason, it is not adequete to simply refer to it as a port, because a typical port will only have the bare minimum changes necessary to make the program run seamlessly on other platforms (or sometimes, just one other platform, such as MZX32). This does not fully realize this project's short and long-term goals, which include: - First and foremost, as stated, allowing MZX in its current state to run seamlessly on other platforms with no handicaps (for instance, missing robot editor) - Removing unnatural limitations within MZX itself. - Providing a relatively sane and efficient implementation of MZX's functionality. - Providing source code which is decently readable, maintainable, and can easily be modified and expanded upon. - As much portability as possible, placing portability over other ideals. In case anyone is actually interested, here is a more technical overview of what has actually been done so far on this project: - All ASM files have been rewritten to ANSI C compliant C++; this mainly involves the mammoth game2.asm. - Everything graphics related has been replaced with an SDL driven engine, including text mode rendering (also capable of rendering SMZX modes) - All keyboard and mouse events are now also handled by an SDL driven engine. All internal keyboard/mouse routines use SDL keycodes; no attempt was made to convert to MZX's old format at this level. - All world/board/robot loading and saving code has been entirely rewritten and is more modular now. - All robot handling code has been rewritten from scratch, and is more sane/efficient now (allocation, message sending, sensors, etc.) - All counter handling code has also been rewritten from scratch. This includes the functionality of builtin and "function" counters. It also includes a new string framework. - The robot interpreter has been almost entirely rewritten. - The main game playing code (game.cpp) has been almost entirely rewritten. - All module/sample playing code has been rewritten to use modplug and SDL. PC speaker effects are emulated. - The main part of the editor (edit.cpp) has been almost entirely rewritten. - The robot editor has been entirely rewritten, utilizing a modifed (fixed) version of RASM (released by me over a year ago) - All other source files (for instance, window handling code, scroll displaying, char editor, etc.) have been largely overhauled, some to more of a degree than others. At the very least, everything has been reformatted and made to work with the new systems. Now, for a disclaimer. This release is very much in beta status. What that means is that it will almost definitely have several bugs. I have every intention of fixing such bugs as soon as I can, and if I don't, someone else definitely will. The port has been tested internally by private beta testers for some time now, and I suspect that there is at least a 90% compatability rate. Nonetheless, MZX has such a diverse number of applications and worlds have so many variables that it's impossible to test exhaustively, especially with the features added after version 2.51s3. See more about bugs/reporting procedure further down. -- Platforms -- Currently, the port will only definitely work on Windows (9x or NT based). It should build on Linux, however, there is no support for case insensitive file reading yet, so you would likely have to run games off of a FAT paritition to have any luck with them. Chances are it won't work very well on MacOS X because the code is not 100% endian safe yet. These problems will definitely be alleviated in due time. -- Minimum Requirements -- I really can't give any exact numbers here, because for one thing it depends entirely on the game being ran. Chances are the requirements will only be slightly higher than it would be for a machine that can run the DOS version correctly, and sometimes may even be slightly lower. As compared to the original, the port has to manually draw the screen pixel by pixel without acceleration. However, the renderer is optimized and quite fast. For the record, I believe the lowest specs machine that has ran the port so far is a 266MHz mobile Pentium 2 with 32-64MB of RAM. Chances are it can run fine on something even slower than this. Right now, I don't know, but in the future this section will likely have more information. If you have any specific success or failure stories on older hardware, let me know. -- Gameplay -- Gameplay should be more or less the same as it always was. Some keys are changed though: - Use ctrl + alt + enter to toggle between fullscreen and windowed mode (read the disclaimer on this further down!) - Use F12 to dump the screen to a BMP; this can be done at ANY time. The default values (speed, volumes, etc) are the same as they were before, but if you change them in MZX they won't stay that way the next time you load. To change them permanently, you have to change the config file (see below). Password protected worlds are not supported natively. However, if you try to load one, you will be presented with an option to permanently decrypt the world and then load it. With that said, password protection is now 100% removed from MZX, and no trace of encryption code exists outside of the decryption module. There are a couple discrepencies that break compatability that should be noted: - key_pressed and key_code now return unsigned chars instead of signed, so if the game checks for negative values, it won't work. - The same goes for reading back characters for strings. - Some things that worked in the DOS version only worked due to chance, such as there being default (but valid) values for sprite widths or heights and thus sprites could be displayed before new values were set. These shouldn't apply to very many games (I know of one.. in the recent DoZ. The game was already really broken anyway :p) -- Limitations -- The MZX port removes many limitations of the original. However, some still remain due to the world format which has not been changed. These are the changes: - Boards may now be as large as 32767x32767. Please do not make boards this large. :) - You may now have up to 250 boards. - Boards may have up to 255 robots, 255 scrolls, and 255 sensors. - There is no robot memory per board limit. However, individual robots may only be up to 64k large. If you include the global robot, this means that you effectively can have up to 16MB of robot memory per board. - The same applies to scrolls, which have separate memory spaces and may only be up to 64k in length each (so you could have almost 16MB of scroll text per board, but who would want that??) - The robot stack need not be initialized, and will be dynamically resized as necessary (useful for recursion). This refers to lines such as . "#*-1-2-3-4-5-6-7-8" at the beginning of robots. They're no longer necessary or useful (they will be ignored, like any other comment). - You may have a virtually unlimited number of counters active. The theoretical limit is some 4 billion. The effective limit depends on memory available. - The same goes for strings, which may now have any name, so long as it begins with a dollar sign ($). The same conventions regarding strings in 2.68+ still apply (see 268_info.txt for more information) - Local2 and local3 no longer have dangerous side-effects. Local4 through local32 are also available per-robot now. A warning: I have tried my best to make it impossible to exceed these limits, however, you may be able to somehow. If you do, don't save the game. You will probably corrupt it. Just exit. -- Video -- The port by default runs in a window that is 640x350. It can run fullscreen, but chances are you won't get 640x350. It's very likely that you'll get 640x400, which only has minor black bars at the top and bottom (I find it to be entirely satisfactory). If you're not so lucky, you might be limited to 640x480. You can manually specify a resolution in the config file. In fact, before going into fullscreen, I recommend forcing 640x480 then 640x400. So far we've experienced temporary monitor problems when trying to go into 640x350 fullscreen for one user - it may be a good idea to force 640x400's refresh rate using a tool like hztool (win9x) or NVRefresh (win2k+). You can also set these with PowerStrip, as well as experiment with custom refresh rates. It is worth trying to add 640x350 and 640x700 in this utility. If you don't get 640x400, there might be a remedy to this.. but as of now I don't know any. I believe that most video cards can handle it, though. In the cases where you can't, it's probably a driver/OS/configuration issue. It is also possible to set a multiplier for the height, for the image to be stretched. Be sure that the multiplication of 350 is within the resolution chosen or MZX will crash! On my machine, I can run MZX at 640x700 with a 2x height multiplier and it looks great. -- Audio -- With this version, many more module formats are playable than compared to the previous version. The following are natively supported: XM, S3M, MOD, MED, MTM, STM, IT, 669, ULT, WAV, DSm, FAR, AMS, MDL, OKT, DMF, PTM, DBM, AMF, MT2, PSM, J2B, and UMX. Yes, WAVs can be loaded as mods, and although this is not generally recommended it could be useful sometimes (such as for short musical clips). GDM is not supported natively. However, if a GDM file is attempted to be loaded, an attempt will be made to load an alternate .S3M version, and if it does not exist, one will be created by converting the GDM file. The same goes for SAM; they will be converted to WAV. Therefore, you can now use WAV files natively as samples. It is strongly recommended that you do not include any GDM or SAM files in distributions of new MZX games; instead include only their conversions. You cannot load GDM files with alt + N in the editor at all anymore. However, you can convert SAM files by testing them with alt + L, and you can convert GDM files by loading them with a robot. Or, you can use an external convertor. Audio is always sampled to 16bit, 44KHz. If your computer cannot support this, then I believe SDL will emulate it, although I'm not 100% certain (this remains to be seen). If this is the case, you're in dire need of a new soundcard anyway. The size of the audio buffer can be changed in the config file. See the comments therein to determine the affect of this. -- Editor -- Although quite a lot of the editor has been rewritten from scratch, a sincere attempt has been made to make it as compatible and similar to the original as possible. These are the differences: - You cannot click on help options to make it happen (for instance, you can't click on L:Load and expect it to bring up the load window). - You cannot import or export ANS files. Use MZM instead. - You can now perform repeated copies by selecting "Copy (repeated)" from the block command window. This will cause you to repeat the copy indefinitely until you press escape. Also, after the first paste is made, you may press ctrl + direction to move in steps that are the size of the copy (you really have to try it to get a good idea of what I mean) - Press alt + H to hide/unhide the menu/information occupying the bottom 6 lines of the screen. - Right click is similar to pressing insert (grabs whatever's under the cursor) - Exporting char sets now gives direct options to set the size/offset for partial charsets. The old format (prefixing the name) will not work. - For saving files, you may make filenames larger and use mixed case (as opposed to all caps). - Now when you import worlds their exits will actually work. - Loading worlds results in all empty boards and empty robots/scrolls/sensors within the boards being removed. When you delete a board, you won't be presented with a gap in the board list anymore. - You may once again select ASCII as a default charset and revert to it in the char editor. You may also select a default SMZX charset. - Anywhere you can enter a line of text you can now press ctrl + left and ctrl + right to go to the previous/next word. - This isn't totally limited to the editor, but now everywhere a selection box shows up (such as for files, boards, items) you can press multiple keys to seek to a specific entry. Furthermore, in file selection boxes you can press backspace to go up a directory. - The SMZX char editor has been changed quite a bit. First, to use, you must be in SMZX modes 1-3 (toggle using F11). Within the editor, press keys 1 through 4 to change the "current color." You can place this color with space, and you can toggle repeated placement on/off using tab (sorry, no clear/toggle in this mode, they got in the way far more than they helped). You now move in increments of 1 char naturally instead of "half chars." Right click grabs the current "color" underneath the cursor. - The robotic editor has been rewritten from scratch and is therefore quite different. Some options do not appear in the help at the bottom (not enough room), so refer here for information: You are now able to type invalid code within a robotic line. You will see that it's invalid due to the way the line is color coded. If you try to escape while any lines are invalid or if you press alt + V, a window will be brought up describing the nature of all erroneous lines. It will also let you mark each line to be deleted or commented out on exit. If all invalid lines are marked with anything besides ignore, you can exit safely. You may also mark invalid lines using ctrl + I, D, and C (to mark as ignore, delete, and comment respectively). ctrl + C may also be used to comment out a normal line, and then uncomment. alt + O is still available, but you may only change macros here (see the config file for the other rarely used options). This does give you more room to modify macros, though. They may be up to 64 characters in length, and you may set up to around 45 or so in this window. (To get larger, you'll have to use the config file.) There are some slight discrepencies in robot size; if you highlight the last line then leave it it will register as a compilation of that line. Yet, when you exit, the line will be discarded, so this addition is not permanent. This shouldn't be problematic. alt + enter and alt + escape no longer work; use the alternatives (alt + b and alt + u) -- Config File -- The config file is named config.txt and is a plain-text file that is intended to be edited in a text editor. All information about it and options are described in the file itself. It's a good idea to keep a backup of it in case you want to be made aware of the defaults again, but if you simply delete the file these defaults will be used. You may also set config file options at commandline. Note that you may not use whitespace at all here (if you do, different words will be counted as separate options). For instance, you may run from command line: mzx280 startup_file=test.mzx mzx_speed=7 To start MZX with test.mzx at speed 7. It's probably worth the time of any new user to check out the config file options. -- Misc -- The default char sets for MZX, SMZX, ASCII, and even blank are stored as actual charsets in the same directory as MZX (mzx_default.chr, mzx_smzx.chr, mzx_ascii.chr, and mzx_blank.chr respectively). They are not read-only by default, but you may want to make them so. Don't change them unless you know what you're doing. See build.txt for information about building from source. -- Known Bugs -- As of this release I don't KNOW of any bugs, and in general I don't make a habit of releasing something when I know of specific bugs. Since I wrote much of the code and have a good understanding of virtually all of it, and because it's much easier to debug outside of DOS, chances are I should be able to fix any bugs that crop up. -- Bug Reporting Procedure -- If you find a bug, report it on DigitalMZX (there will be a special pinned thread for this) or e-mail me at exophase@adelphia.net. Here are some guidelines to consider: - Describe exactly what is happening to you. Do not attempt to diagnose the nature of the bug, because you may be wrong, and this could throw me off significantly. - I may ask for you to then send the world file where this is happening, or even better, a save file. - Include directions of how to reproduce the bug. If the bug doesn't happen every time, try to find out what is causing it some of the time and reproduce it regularly. - If possible, it would be very helpful if you were to create a new world which synthesizes the bug in as little code as possible. This may require some debugging of your own on the game in question to find out exactly what's not working. Please do NOT make reports such as: "HELP ME MZX IS CRASHING HELP THIS SUCKS" Because they won't help anything. -- Credits -- Main author: Exophase (Gilead Kutnick, exophase@adelphia.net) Original MZX base code: Gregory Janson Additional MZX contributions: Spider124, MenTaLguY, CapnKev, JZig, madbrain, Akwende, Koji (I'd also like to thank MenTaLguY for idput.cpp, the first converted piece of MZX's code base, which has been included in the DOS build since version 2.51s3) Original SAM2WAV code: madbrain GDM2S3M library code: ajs Default SMZX charset: LogiCow Beta Testers: Wervyn Quasar84 Terryn asgromo I'd really like to give a special thanks to my beta testers, especially Terryn. They really worked very hard in not only finding bugs but helping crush them. If not for them, the port would have never progressed at all. They were very patient and hardworking throughout this whole ordeal. abcdefgghijk