home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 October / Chip_2004-10_cd1.bin / oddech / supaplex / supaplex.exe / supaplex / SPFIX63.DOC < prev    next >
Text File  |  2002-11-16  |  164KB  |  2,842 lines

  1. *******************************************************************************
  2. ** For a completely modernized game in the same genre (with bigger, better and
  3. ** more challenging levels), visit http://www.elmerproductions.com/igor/
  4. *******************************************************************************
  5.  
  6.            +-------------------------------------------------------+
  7.  Version   | SUPAPLEX SPEED-FIX, FOR ALL COMPUTERS, FAST AND SLOW! |
  8.    6.3     |     WITH MANY EXTRA FEATURES LIKE DEMO RECORDING      |
  9.            +-------------------------------------------------------+
  10.  
  11.  NEW: For info about the two files TESTSIG.EXE and MYSPSIG.TXT, see below at
  12.  the "full version history of changes and additions", at "v6.2 -> v6.3".
  13.  
  14.  
  15.                   PLEASE READ FOLLOWING FEW LINES CAREFULLY.
  16.             IT IS NECESSARY FOR CORRECT OPERATION OF THE SPEEDFIX.
  17.  
  18.                                 THANK YOU.
  19.  
  20.  
  21. This program is a highly improved "replacement" for the executable file
  22. SUPAPLEX.EXE only: all other files from the original Supaplex package are
  23. necessary for the game to run, but are not included here.
  24. The complete original (unimproved) Supaplex package SUPAPLEX.ZIP can be
  25. downloaded from the Supaplex WebPages (see below)!
  26.  
  27. Use of this program is at your own risk.  We are using this program all the
  28. time, and have never had any damage, so your computer will probably not be
  29. damaged, but don't come crying to us when it is ...
  30.  
  31. First "install" the original Supaplex package if this is not already done,
  32. and keep that SUPAPLEX.ZIP somewhere safe:  Don't delete it: You may need it.
  33. Do NOT use the Install program of that package: just create a subdirectory
  34. and unzip that package into that subdirectory.  You're ready to run Supaplex.
  35.  
  36. (If you already played Supaplex, you may want to backup the Supaplex directory
  37. before using this program.  Make sure you also backup your personal scores
  38. files, which are hidden files.  Use "ATTRIB -h *.*" to reveal them.)
  39.  
  40. SPFIX63.EXE is totally backward compatible with the original SUPAPLEX.EXE:
  41. Many bugs have been fixed, and many features have been added without changing
  42. the game!  (The "new" demo's from the SpeedFixes before version 6.2 are not
  43. needed anymore: They can still be used, but they don't work with the original
  44. SUPAPLEX.EXE.  Now the original game can also be used and without drawbacks.)
  45.  
  46. The best way to play Supaplex is using plain DOS, not any Win9x DOS box, and
  47. not the DOS from the Win9x shut-down menu!  Use the F8 key (Win95) or Ctrl-
  48. key (Win98) at boot time, and start the plain DOS command line from the menu!
  49. If the mouse does not react, you may want to install a DOS mouse driver.
  50. (A mouse is not needed at all because it only works in the menu screen.)
  51. It is possible to use the (full screen) Win9x DOS box, but to prevent the
  52. jerky movements, you must change the properties of that DOS box.  Win9x wants
  53. to do many things in the background which must be prevented!  No guarantee!
  54.  
  55. Supaplex will not work with Windows NT, because this Windows version does not
  56. permit direct communication with the hardware at any time, to prevent crashes.
  57.  
  58. Make sure you visit the Supaplex WebPages at:
  59.   http://www.elmerproductions.com/sp/
  60. to find all about Supaplex.
  61.  
  62. ------------------------------------------------------------------------------
  63.  
  64.                            +--------------------+
  65.                            | FIRST INTRODUCTION |
  66.                            +--------------------+
  67.  
  68. This file contains lots of information about the original Supaplex, and also
  69. information about the SpeedFix.  If you are interested, read it all, if not,
  70. just read the changes below (if you are upgrading from a previous version) or
  71. all about the instructions for use and the command line parameters (if you are
  72. new to using the SpeedFix).
  73.  
  74. If you are not smarter after reading it, you might be one of the authors of
  75. Supaplex yourself.
  76.  
  77. Except for the following version history at versions v5.x, almost all "I"s and
  78. "me"s etc. refer to me: Herman Perk.
  79.  
  80. To Philip Jespersen:       thanks for your support, and for the game itself.
  81. To Robin Heydon:           thanks for the PC version of the game.
  82. To Hilde Anita Hopen:      thanks for spreading the game through the internet.
  83. To Herman Perk:            thanks for making the first SpeedFixes.   <Maarten>
  84. To Maarten (Elmer) Egmond: thanks for writing SPEDIT, a Supaplex level editor.
  85.                                       and for making all SpeedFix 5 additions.
  86. To Digital Integration:    thanks for not making problems.
  87. To Sergei Sinicyn:         thanks for showing me some problems and solutions.
  88. To Matrox Tech support:    thanks for the repeated non-support and un-answers.
  89. To Jens Randloev-Hansen:   thanks for your contributions and beta testing.
  90. To Frans Meulenbroeks:     thanks for your contributions and beta testing.
  91. To Yonatan Rozenshein:     thanks for your contributions and beta testing.
  92. To Kim Min-Soo:            thanks for your contributions and beta testing.
  93.  (His family name is Kim)
  94.  
  95. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  96.  
  97.                                   SUPAPLEX
  98.  
  99. You are Murphy, bug hunter extraordinaire, exploring deep inside a crazy
  100. computer.  The only way out of each brain-teasing level is to collect the
  101. Infotrons and this is where the fun begins!  Snik Snaks must be avoided at all
  102. costs...and falling Zonks will trap the unwary...exploding discs, Electrons
  103. and ports add up to the coolest action game around!
  104.  
  105.                        (Quote from the original manual)
  106.  
  107. ==============================================================================
  108.  
  109.               +-----------------------------------------------+
  110.               | FULL VERSION HISTORY OF CHANGES AND ADDITIONS |
  111.               +-----------------------------------------------+
  112.  
  113. History v1,v2,v3,v4  (Herman Perk):
  114.  - see SUPAPLEX SPEED-FIX: INSIDE INFO AND HISTORY below.
  115. Changes from v4 to v5  (Maarten Egmond):
  116.  - Added a little check routine to avoid loading demo files that are
  117.    too large for the segment.
  118.  - Command line option EGA (Capitalized) changed to EGA (any CaSe).
  119.  - :file.sp option added to command line options.
  120.  - Pressing F11 in the menu will replay the demo and F12 will play the level.
  121.  - In stead of ---DEMO LEVEL--- as level name of a demo, the real level name
  122.    appears in the panel.
  123.  - : option will activate (FORCED) player.
  124.  - Added a credit line on the title screen for my work
  125. v5 -> v5.1  (Maarten Egmond)
  126.  - fixed a small bug in demo-loading routine, which would crash if a file
  127.    was being loaded that was too big (larger than about 45000 bytes).
  128.    Usually, this error would not occur (or you'd have to run the SpeedFix
  129.    with a wrong :file.sp file, or maybe record a *very* long demo?)
  130. v5.1 -> v5.2  (Maarten Egmond)
  131.  - Fixed a bug in the demo-loading routine.  If a demo was wrong, spfix51
  132.    would return to DOS without clearing the screen (and possible waiting for
  133.    a key press), so it appeared if the machine hung.
  134.  - Fixed demo format (again).  Random events (like "bugs") would still be
  135.    randomized after recording a demo.  So recording a good solution of any
  136.    level with important random effects (e.g. level 9) would always result in
  137.    a wrong demo.  The random number used at recording-start is now saved to
  138.    the demo, and restored when it's being played, so these random effects
  139.    will always be the same in the demo (the demo always looks the same).
  140.    Demo's recorded by v5.2 are compatible with v5.0 and v5.1, and vice versa.
  141.    (That means, they can be played, but can give true random events in stead
  142.    of recorded random events).
  143.    (Technical:) To accomplish this I've used the last two bytes of the 1536
  144.    byte level.  These two bytes were (according to my experience) not used
  145.    by anything else.
  146. v5.2 -> v5.3  (Maarten Egmond)
  147.  - Fixed pan back to menu after playing a level at startup (using colon
  148.    parameter).  It would flash up the screen.  Now it correctly pans back.
  149.  - Fixed demo bug: playing a demo by pressing the 'demo' button in the menu,
  150.    or a random demo started after a while would not run correctly most of the
  151.    time.
  152.  - Added 'DEMO SUCCESS', 'DEMO FAILED', 'LEVEL SUCCESS' and 'LEVEL FAILED'
  153.    messages so you can easily see if the level was ended successfully (i.e.
  154.    though the exit, with enough Infotrons collected).
  155.  - Added '@' command line option.  Must be used together with the colon
  156.    option and a demo.  This will replay the demo at VERY high speed, and quit
  157.    Supaplex right after the end of it.  One of the above 'DEMO SUCCESS'
  158.    or 'DEMO FAILED' messages will be shown.  This is handy to check large
  159.    amounts of demo files to see if they run correctly.  (You can test your
  160.    own solutions with this option too).
  161.  - Changed cheat mode ('#' option) to set all levels to SKIPPED in stead of
  162.    DONE.  This way, you can keep track of which levels you have done properly
  163.    in one Supaplex session.
  164.  - Timing problem at demo recording (which has been in the original Supaplex
  165.    too) solved.  Sometimes, when recording a demo, Murphy would walk very
  166.    close to danger (i.e. Snik Snak, falling Zonk, etc.), but still pass it.
  167.    Then, when replaying the demo, the level failed.  This has been fixed.
  168.    All demo's should now run exactly as recorded.  (If not, email me).
  169.  - While recording a demo, no debug keys may be used, you can still change
  170.    the speed with the gray keys.  This is to enable 'us' to see the REAL
  171.    playing time, in stead of the time the demo takes at default speed.  So if
  172.    you're really good, you can record your demo at the highest speed, and set
  173.    a new record easier.  Demo's will still be played at the current speed,
  174.    regardless of how they were recorded.
  175.  - Ctrl-F12 will stop demo recording, and lets you play on.
  176.  - The system time will have changed after Supaplex has been run (was also
  177.    in the original Supaplex).  This is normal Supaplex behavior, and will
  178.    cause the time in your computer to change.  Time will be reset to proper
  179.    time after a reboot.  To keep the correct time without rebooting, you can
  180.    use the TIMEFIX.EXE program from Elmer Productions (see the Supaplex Web-
  181.    Pages) to fix it.  If you use it, run like this: TIMEFIX 50 0 SPFIX53.EXE
  182.    and it should set the correct time after exiting the SpeedFix.  You can
  183.    add your favorite command line options to the back.
  184.  - You can now only start demo recording when the speed auto-detect routine
  185.    is done.  (Just wait about a second after starting a level for the first
  186.    time).
  187.  - Cleaned up this documentation to make it easier for new users.
  188.  - When playing an .SP file yourself (by using the colon option and/or by
  189.    pressing F12 in the menu) the currently selected level would be set to
  190.    'solved' when you correctly solved the level.  This is now fixed.
  191.    No matter how you end the .SP level play, it will never interfere with the
  192.    normal playing.
  193.  - Now when playing an .SP file, the level number displayed on the screen
  194.    will always be .SP in stead of just 'sometimes'
  195.  - Renamed this readme document to SPFIXnn.DOC, which helps it being
  196.    identified as a SpeedFix document easily.
  197. v5.3 -> v5.4  (Maarten Egmond)
  198.  - Removed time bug - apparently, the gray * key was not correctly tested to
  199.    change the slowest demo speed.  This would not affect game/demo play, but
  200.    compromise the accuracy of the timing (duration) of the demo.
  201.  - Level names are finally shown correctly all the time (also when playing
  202.    demo's and .SP files)
  203.  - Fixed bug: If a demo would run when a player was selected, the time it
  204.    took would be added to the player's playing time.
  205.  - Removed bug that would cause ENTER to blow up Murphy in the game when
  206.    no mouse driver was active, in stead of just switching panel on/off.
  207.  - Built in system time correction.  It's accurate up to 0.05% of normal
  208.    system time.  No need to use TIMEFIX.EXE anymore, this is much better.
  209.    (If you still use TIMEFIX, it will make the time wrong, since SPFIX54.EXE
  210.    lets the system timer run at (almost) 18.2 Hz itself).
  211. v5.4 -> v6.0  (Herman Perk)
  212.    Thanks to Maarten many extra features were added and he also created
  213.    most of the "savegame" code, which he never released due to hard-to-find
  214.    bugs.  Furthermore there still were annoying bugs to fix, so time for 6.0.
  215.  - "savegame" code enabled and debugged, so it is possible now to save a
  216.    game situation.  See Ctrl-W and Ctrl-L in the key list below for details.
  217.    (Looking through that code I found game options that were never used:
  218.    Ports that can freeze Zonks and/or Snik Snaks & Electrons, and that same
  219.    Zonk-freeze option can be set at game-start, like gravitation.)
  220.  - Option added to switch Debug mode on and off during a game.
  221.    See Ctrl-ScrollLock and Alt-ScrollLock in the key list below for details.
  222.  - Demo recording still contained bugs that could make a recorded demo fail.
  223.    - One problem was to let the recording always start at exactly the same
  224.      frame (frame=1/35th of a second), seen from the play-back point of view.
  225.    - Another problem was the exact timing of the BUG sprites: those bugs fired
  226.      one frame too early in the playback of the recorded demo, which also
  227.      could make a good demo fail.  These problems have been solved at last
  228.    (If there are still problems: PLEASE (e-)mail and send any bad demo to us!)
  229.  - If there was no DEMO0.B?? (or any of the DEMO?.B??) and waiting in the menu
  230.    started a random demo, the SpeedFix would crash!  This also happened if any
  231.    standard demo was forced to start by clicking "Demo" in the menu etc.  This
  232.    bug has been removed.  This was the most annoying bug: Crash after wait!
  233.  - If such a random demo (DEMO?.B??) contained BUG-sprites, those demo's could
  234.    not finish: the stored start position of such demo was not fetched, which
  235.    caused the bugs to react different each time the demo was started randomly.
  236.    This has been fixed.
  237.  - The Ctrl-F12 key now also stops a demo PLAYBACK, so you can take over.
  238.    I just thought it was a logical and handy thing to do.
  239.  - Screen "glitches" caused by writing menu text to the play field have been
  240.    removed.  There were some, especially in Debug mode using the white - and =
  241.    keys to change levels during the game.  Stuff needed to be updated, but in
  242.    those update routines also menu text was written to screen.  This is fixed.
  243.    If there were any other such occasions, those cannot happen anymore.
  244.  - All sprites beyond the invisible wall are now invisible too.
  245.    I changed this because due to a Supaplex bug (which we don't want to fix),
  246.    Infotrons and Zonks can change into fixed objects that just won't fall.
  247.    These objects cannot be reproduced if a saved game is loaded again (if the
  248.    complete video memory is not saved too).  Those objects became strange
  249.    looking random blobs and that is why I made those invisible.
  250.    If someone objects to this, I can easily change that back.
  251.    Just try and see the difference between this and an older version SpeedFix
  252.    especially with the debug "s" key (remove all Snik Snaks).
  253.    (The invisible wall was not designed into Supaplex!  It accidentally
  254.    happened to be there without the programmer knowing about it.)
  255.  - I recently found out that there are notebooks with LCD displays that do not
  256.    use the official VGA frame frequency 70Hz, but 60Hz instead.  There goes
  257.    another standard.  (Thanks Compaq!)  Nothing fixed here: that's life.
  258. v6.0 -> v6.1  (Herman Perk)
  259.  - Oops, forgot about Maarten's checksum.  I fixed the demo recording BUG-bug,
  260.    but in cases that that fix had to do something (sometimes), the checksum
  261.    was wrong.  The demo was ok, but Maarten rejected it for his Hall Of Fame.
  262.    Actually, those rejected demo's proved, that my BUG-bug fix works!
  263.    Now also the checksum will be ok, and recording must be always perfect.
  264.  - The savegame option (Ctrl-W and Ctrl-L) can now be safely used during a
  265.    recording:  the recording is ended properly now when Ctrl-L is pressed,
  266.    and also recording "scars" in the saved game are ignored now with Ctrl-L.
  267.  - After loading a saved game, now the random number is randomized, which
  268.    means that each time the game is loaded, the bug-sprites fire differently.
  269.    In 6.0 those bugs always reacted in the same manner.
  270.  - At last!: There was an original Supaplex problem with the Red Disk release.
  271.    If Murphy was killed DURING a Red Disk release, he could NEVER release
  272.    another Red Disk, not even in other levels, until Supaplex was completely
  273.    restarted.  This has been fixed.
  274.  - After loading a saved game, the actual level could not be skipped.  Fixed.
  275.  - Changed our text in the author screen a little: extra line of text.
  276. v6.1 -> v6.2  (Herman Perk)
  277.    While everyone was playing with version 6.1, I spend some time to improve
  278.    the SpeedFix a lot.  Here is the list of changes/improvements:
  279.  - Command line parameter collisions (spfix61 /n !m :fname first loaded the
  280.    game without demo, and after you exited that game it played the demo of
  281.    it.  When that demo finished, the /n !m did their job).
  282.    Now the demo is played first, then the /n !m start that level and the level
  283.    pointer in the menu points to that level afterward.
  284.    A major change was needed in Maarten's SP file control routines, where
  285.    several minor bugs (which were "corrected" in his code) were removed too.
  286.    This change was tricky, but now the code is much simpler.
  287.  - If command line had just : or @: strange things happened:  A filename was
  288.    recognized, but rejected after changing a byte in the SPFIX data space ...
  289.  - The level pointer was reset to level 1 by starting a game with F12.  Fixed.
  290.  - I changed the name of the saved game from "SUPAPLEX.SAV" to "SAVEGAME.S??"
  291.    which prevents possible wildcards problems with DOS file manipulations.
  292.    Each level set has its own unique saved game now, but the old way of having
  293.    only one saved game for all level sets can be forced with the new command
  294.    line option "W", to always use "SAVEGAME.SAV" in stead of "SAVEGAME.S??".
  295.    (If you have an old "SUPAPLEX.SAV" that you still want to use, you can
  296.    rename it to any of the 101 different possible "SAVEGAME.S??" at will.)
  297.  - The saved game does not use the saved debug mode information anymore, so
  298.    if you saved in normal mode, and are in debug mode when loading the saved
  299.    game, you now stay in debug mode (vice versa).  This prevents surprises.
  300.  - The panel on/off status after loading a saved game was bad: The panel was
  301.    (in)visible as before but the viewing window was taken from the saved game.
  302.    That panel on/off info from the saved game is now ignored.
  303.  - If a saved game was loaded during a first-time run of an ":SP_file", the
  304.    player name appeared as "WIBBLE??".   Fixed to show the initial name.
  305.  - If a saved game was loaded during a demo run, the last demo input "key" was
  306.    not deleted, which sometimes moved Murphy from his saved location.  Fixed.
  307.  - Changing from debug mode to normal mode didn't issue Q and 1 which entered
  308.    the normal mode without resetting debug options M, D, 2,...,9,0.  Fixed.
  309.    The Q and 1 commands are now also issued when a game exits, and after
  310.    loading a saved game.
  311.  - Debug S-command did not remove Snik Snaks properly.  Fixed.
  312.  - Explosions in the top corners of the game field edge destroyed internal
  313.    variables.  (This happened with experimental levels only.)  Fixed.
  314.  - If Murphy went into the top left 8 edge fields of the game border, he was
  315.    beamed away to unknown places.  This could only happen in levels where
  316.    Murphy was allowed to walk on edges.  Fixed because it was a bug anyway.
  317.  - Maarten removed by accident the "restore video mode" (SPFIX54) when the
  318.    game was aborted due to an error.  (This was already fixed in SPFIX60.)
  319.    He corrected for it by staying in the game after a demo-file load error.
  320.    The behavior was unpredictable:  Restored to exit after such error.
  321.  - In debug mode an explosion cloud showed as red signal lamps and Sergei
  322.    Sinicyn from Russia showed me that this was because of a mouse button bug.
  323.    This original bug was also responsible for the fact that Murphy was killed
  324.    by the Enter key if no mouse driver was loaded.  The mouse button reactions
  325.    (during the game-play only!) are now exchanged and Maarten's bug fix of
  326.    that "kill Murphy by Enter" is removed because it is not needed anymore.
  327.    This exchange of button reactions is no problem since their reactions
  328.    during the game are annoying and were of no value anyway.
  329.    Now also the right mouse button is the ESC key in the game too, not only
  330.    in the menu, so actually I think it is better this way. (More consequent,)
  331.  - The "abort Supaplex on error" exit did not restore the int 24h vector and
  332.    didn't switch off running music: A DOS boot could have been needed.  Fixed.
  333.  - This "abort Supaplex on error" exit could have passed errorlevel 0 to DOS.
  334.    In case of 0 it passes an errorlevel 255 to DOS now.  (For batch "freaks".)
  335.  - SP-demo files longer than 50698 bytes are now rejected as legal demo's.
  336.    This number includes 1536 bytes for the level, 48650 bytes for the maximum
  337.    demo length (with the terminating 0FFh) and 512 bytes for the signature.
  338.    This filters out many problems when using wildcards with the now enhanced
  339.    command line option "@" to test demo's at warp speed (see below).
  340.  - The debug M command now reacts on the gray 6-key block as a "Goto".
  341.    Their relative positions on the keyboard indicate which field part to show:
  342.       Ins,Home,PgUp = Go to the top of the level:     left,middle,right
  343.       Del,End ,PgDn = Go to the bottom of the level:  left,middle,right
  344.  - Loading a saved game now blacks the screen and fades in.  This became
  345.    necessary because it loads the "dull" game field, updates the panel,
  346.    restores "fancy" stuff, which all would flash around the screen for a few
  347.    moments.  I think it looks better this way, and it gives an extra short
  348.    pause during the fade-in, when immediate reaction to the saved game is
  349.    needed, so you can rearrange your fingers on the keyboard in anticipation
  350.    of the game.
  351.    I made the screen dark without fading, so it doesn't take extra time.
  352.  - Supaplex had disabled code to 'shake the screen during an explosion', which
  353.    is now enabled.  Because it sometimes was too much shaking now, I enabled
  354.    this feature (by default) only if Murphy dies.
  355.    For changing this default, two new command line parameters have been
  356.    introduced: "S" or "s" if the screen should Shake on every explosion, and
  357.    "N" or "n" if the screen may Never shake, as in the original game.
  358.    Too bad that this shaking still makes problems on the Matrox Millennium.
  359.    (Sergei Sinicyn showed me a way to optimize code here, but because of my
  360.    many command line switches, I could not use much of his optimized code.)
  361.  - Moving to the left when the debug M-command was active, the game field
  362.    jumped when the left edge was reached.  Now you cannot go beyond the field
  363.    edges anymore so the outside of the game field cannot be viewed.
  364.    To change this default setting, another command line parameter "M" or "m"
  365.    has been introduced to be able to look beyond the field edges again, but
  366.    this time without the described jump.
  367.  - The debug M key was affected by Murphy's demo moves during a demo run.
  368.    This was not a logical M key reaction.  Now it does not follow Murphy.
  369.  - The Alt-SysReq key now exits faster and more reliable.
  370.    This makes some sense of this key combination and more attractive to use.
  371.  - Maarten's result text of the "@" command line option is now redirectable to
  372.    a file, which allows unattended demo file checking with file-output to be
  373.    evaluated later after all demo's have been tested.
  374.    In order to use this feature, it was necessary to change the original idea
  375.    a little: If there is no demo attached or no (or bad) ":file" parameter
  376.    used, the program now exits immediately with an appropriate message.
  377.    Only demo's can play now if the "@" command line option is used.
  378.    The message now also includes the file name from the ":" parameter, even
  379.    when a (bad) demo file is shorter than a level or larger than 65535 bytes.
  380.    For even extra speed, fading has been disabled and the exit is done now
  381.    without removing the panel first.  See below for more details.
  382.  - LEVEL.L?? (LEVEL.LST) is now optional and not mandatory.  This means that
  383.    it is not needed anymore.  SPFIX62 tries LEVEL.L?? first in case some extra
  384.    speed is needed (if the game runs from floppy disk), and, if it does not
  385.    exist, the information from LEVELS.D?? is used.
  386.    A new command line parameter "C" or "c" will tell SPFIX62 to create
  387.    LEVELS.L?? in case it does not exist.
  388.    (If it is not needed, it is not necessary to create it by default, and
  389.    like this Supaplex can still be played from write-protected disks.)
  390.    Yes, I noticed the difference between the original LEVELS.DAT and the new
  391.    created LEVELS.DAT: The original has a dash in the level name of level 042
  392.    between "LITTLE" and "PLEASURE".  LEVELS.DAT has a space in that name.
  393.  - If the 4 byte long SUPAPLEX.CFG had as first byte anything else than
  394.    "i", "s", "a", "b", "r" or "c", Supaplex did not load any sound driver
  395.    as it should, and looking at the 'controls' screen it showed as if "s" was
  396.    active, and going back to the menu without changing anything, "b" was put
  397.    here in this CFG file.  This could lead to a crash if this choice was bad.
  398.    Now the code has been simplified to test only non-default values, otherwise
  399.    a default is forced for any non-default byte.  This fixed this 'bug'.
  400.    The file is now also closed after a read error, to free the handle.
  401.  - Clicking on the "floppy 1<->2" in the menu was a useless thing to do.
  402.    I changed this into changing level sets!  All existing LEVELS.D?? are
  403.    presented one by one in the message line, in ascending order.
  404.    Doing the same with the shift key pressed, they show in descending order.
  405.  - Clicking this "floppy 1<->2" with the Alt key pressed, the old but improved
  406.    floppy stuff is activated: It now also accepts drive letters up to F
  407.    (without showing this in the screen text).  After ESC-exit, the default
  408.    drive is restored now as it was before pushing the disk button in the menu.
  409.    If a drive was chosen where no Supaplex files were found, it now does not
  410.    abort the whole program anymore, but still there has to be any formatted
  411.    medium in the drive to be able to escape, but at least not to DOS anymore.
  412.    In case someone does not want to hold the Alt key, I introduced the command
  413.    line parameter 'F', which only inverts the Alt-key influence here.
  414.  - It has been possible to change "normalized" Hardware and RAM-chips back to
  415.    the original "fancy" stuff, so saved games do not look dull anymore.
  416.    (The size of a saved game is increased with the 1536 bytes for that.)
  417.    Furthermore, all debug keys where something is removed, now leave that
  418.    "fancy" stuff intact too, and prevent the level to successfully end with
  419.    an update of the level pointer (and the time doesn't count either).
  420.  - The now left mouse button used to turn "fancy" stuff to "dull" stuff.
  421.    It now toggles between "fancy" and "dull".  The "normalize" or "change to
  422.    dull" routine affected the (initial) movements of Snik Snaks and Electrons,
  423.    because it was meant to be called at game-start only.  This has been fixed.
  424.  - The auto-repeat of the Enter key for switching the panel on and off has
  425.    been drastically slowed down, and it now immediately reacts after each new
  426.    Enter key press.
  427.  - The auto-repeat of the debug keys F1,F2 and F3 was too fast: you never knew
  428.    when gravity was on or off etc.  This has been changed to key-actions
  429.    without auto-repeat.  The F2 key has also been changed to on-off-on-off.
  430.  - I finally managed to do something about that screen "glitch" that appeared
  431.    when the game successfully ended (or when demo's were aborted), just before
  432.    panning to the menu.  This "glitch" was only observed when Murphy was on
  433.    the right side of the game field, and was caused by overwriting the viewing
  434.    window.  The game field is used by panning to the menu etc. as follows:
  435.    The viewing window is copied to the top right of the game field, (even
  436.    extending beyond the normal game field, which accounts for the trash which
  437.    is visible with the debug M key), then the screen jumps to that new
  438.    window, then the menu is copied to the middle of the top of the game field,
  439.    and finally the panning begins.  See the section "Map of the video memory".
  440.    Fix: If the viewing window is completely outside the far left viewing area,
  441.    (otherwise we would introduce the same problem over there again,) a
  442.    preliminary copy to the top left and jump to that copy is done first now.
  443.    From there the rest is as it was:  The original copy is done etc.
  444.    (Sergei Sinicyn also did good work on this "glitch", but his solution did
  445.    not work at all on the Matrox Millenium VGA card!  Sorry Sergei!)
  446.  - At the start of each game, Murphy changes very little.  The pictures of
  447.    the not-moving Murphy in FIXED.DAT and MOVING.DAT are slightly different:
  448.    The game field is initially painted with FIXED.DAT, and as soon as the game
  449.    runs, only Murphy's picture from MOVING.DAT is used.
  450.    Now the field is initialized too with Murphy's picture from MOVING.DAT.
  451.  - The menu messages "demo failed", "game successful" etc. are now updated
  452.    before the menu appears, which means that you don't have to wait until
  453.    the panning or fading has been completed to see those messages.
  454.    (The SpeedFix version info on top in the author screen now appears faster
  455.    too, but I left the names on the bottom as they were, because before those
  456.    names appear, no key to proceed to the menu is accepted by Supaplex.)
  457.  - Short original demo's were opened, but never closed after rejection:
  458.    The error "Too many open files" followed.  Fixed, but also:
  459.  - The original old-style demo's are recognized now and can be used again:
  460.    The NEWDEMOS.ZIP is now obsolete, so the original Supaplex can be used too
  461.    without problems.  (NEWDEMOS.ZIP cannot be used with the original game!)
  462.    Also SPFIX62 :DEMOn.BIN works.  Any original DEMO?.BIN will show BIN in
  463.    stead of .SP in the panel.  Any mix of new and old demo's can be used, and
  464.    the new demo's will always show .SP in the panel, as before.
  465.    The original DEMO?.BIN files are recognized by their length and the first
  466.    4 bytes.  (Knowing this, you can fool the SpeedFix, but that's life.)
  467.    The old demo's need the original LEVELS.DAT file (with the original name!)
  468.    to play, even if the demo's are renamed and thus activated for a different
  469.    level set (like DEMO?.B01).  This way you can have the original demo's
  470.    running with all different level sets by copying the demo's.
  471.    If the order of the demo files is changed by renaming (like DEMO6.BIN
  472.    becomes DEMO2.BIN etc.) the demo's still work (as in the original game).
  473.  - Scrolling of game field was "poor" if not running at highest speed.
  474.    This has been changed now!  I finally found the way to fix it!
  475.    If not set at highest speed or half speed, it is still a bumpy ride, but
  476.    smoother now.  Only highest and exact half speed seem to be perfect now.
  477.    Murphy himself does not move that smooth, but that is also because we now
  478.    need 16 different pictures of him moving, and they are just not available.
  479.    The soft scrolling is done pixel-wise, and Murphy (and all other moving or
  480.    falling objects) moves with 2 pixels each time:  The result is that he
  481.    moves two pixels but the screen just 1 pixel, and the next frame another
  482.    pixel, which (net) causes Murphy to blur.  I cannot do anything about it!
  483.  - A bug has been fixed with horizontal scrolling: some VGA cards like the
  484.    Matrox Millennium were affected by this bug.  Just in case this bug fix now
  485.    makes problems with VGA cards that used to run, I introduced the command
  486.    line parameter 'H' (for Horizontal) to force the original Supaplex timing.
  487.  - Added an extra SpeedFix key: instant fastest speed with the gray "divide"-
  488.    key, which is also the "/" (slash) key on the white US(!) keyboard.
  489.  - I made the SpeedFix speed auto-detect routine faster, which measures the
  490.    original playing speed when the very first game or demo is played.
  491.  - The code has been optimized in several places and I am pretty sure that I
  492.    did not introduce new bugs, but one can never know for sure ...
  493.    Please e-mail me if you find any bugs, or even if you think you found one!
  494.  - Besides changing this document to show the enhancements, several new parts
  495.    have been added: The layout of several Supaplex and Speedfix files, a
  496.    complete list of original protection codes, the video memory layout, and
  497.    instructions for using the edges in levels properly.
  498. v6.2 -> v6.3  (Herman Perk)
  499.  - If a demo was started from the menu and Ctrl-F12 was pressed during that
  500.    demo, the current level was marked 'done' if the end was reached.  Fixed.
  501.    (Bug reported by Yonatan Rozenshein from Israel)
  502.  - Loading saved games also "restored" saved interrupt vectors, which are
  503.    there to release the interrupts when the SpeedFix returns to DOS ...
  504.    If those SAV files were saved on a different computer or configuration,
  505.    the computer will crash while returning to DOS.  This has been fixed by
  506.    skipping those saved vectors.  The SAV file format has not been changed.
  507.    (By the way:  I can not explain the SAV file format without describing a
  508.    lot of internal Supaplex variables, so I will not spill any time for it.)
  509.  - Restarting a level sometimes did not show Murphy's movements correctly in
  510.    the beginning: "Multiple" Murphies could appear.  This was again a bug due
  511.    to a variable that was not re-initialized if a level started:  Much the
  512.    same as the Red Disk bug before.  Fixed.  (Vague bug reports by several.)
  513.    This happened when Murphy was killed inside a port, where he was drawn on
  514.    screen in two parts.  Restarting the level, this "split" was still active,
  515.    but only in two initial directions: going up or left into a space sprite.
  516.    I also found out why only up and left etc. and fixed the problem there too.
  517.  - The joystick was always scanned, even if the keyboard was chosen in the
  518.    controls screen.  Users had to disconnect their joysticks to play:  Fixed.
  519.    (Frans Meulenbroeks and Yonatan Rozenshein among many bug-reporters.)
  520.  - The speed-escape Alt-SysReq has been changed to Alt-X, because Windows
  521.    interfered with this Alt-SysReq key-sequence.  (For Yonatan Rozenshein.)
  522.  - Demo's were affected by the debug speed keys 1-9 and 0.  Now these keys
  523.    are disabled during a demo. (For Min-Soo.)
  524.  - Starting a demo recording would not automatically reset the debug speed-
  525.    keys to 1, and did not automatically issue a "q" to exit any debug d and m.
  526.    Now they do. (Also for Min-Soo.)
  527.  - The Hall-Of-Fame entry did not include the time of the finishing level.
  528.    Now the Hall-Of-Fame entry equals the real total time.  New total times
  529.    are now accurate.  (Bug reported by Richard Sharland from South Africa.)
  530.  - Once BIN displayed left in the panel, to show what kind of file is playing,
  531.    anything else, like level number or .SP, did never appear anymore, with
  532.    one exception: if an .SP demo was started with the F11 key, everything
  533.    was returned to normal, until BIN reappeared again.  This bug was because
  534.    of a not properly handled variable in new version 6.2 code, to handle the
  535.    10 original old-style demo's.  Fixed.  (Reported by Kim Min-Soo, Korea.)
  536.  - If the debug R-key was pressed during a demo, the level of that demo was
  537.    restarted, but the demo continued to play, without restarting.  Fixed.
  538.    Now a demo "rewinds" too with the debug R key.  (By and for Kim Min-Soo.)
  539.  - If the debug R-key, '='-key or '-'-key were pressed, the accumulated player
  540.    time was not updated to show how much time the user spent in a level.
  541.    Now these keys update the player time (under normal conditions, of course).
  542.  - If the debug '='-key or '-'-key were pressed during a demo or an SP file,
  543.    the current level pointer changed.  Fixed.  No more hidden level changes.
  544.  - There were more problems with the debug R-, '='- and '-'-keys:  After a
  545.    running demo was taken over with Ctrl-F12, old-style demo's failed to
  546.    restart, new style demo's and the F11 demo would, but there were strange
  547.    things going on.  Also if you wanted to record a demo from that demo then.
  548.    I hope I made everything working consequently for all those situations.
  549.  - If a Red Disk was released, and before its explosion, the debug R key was
  550.    pressed to restart the level, that explosion still happened in the
  551.    restarted level.  This was still a remains of the original Red Disk bug, of
  552.    which yet another variable was not re-initialized.  Fixed.  (Kim Min-Soo.)
  553.  - If a Red Disk was released, and before the explosion of it, the game-
  554.    situation was saved with the Ctrl-W key, that Red Disk did not explode
  555.    when that "savegame" was loaded with the Ctrl-L.  I erroneously initialized
  556.    in version 6.2 the same variable that originally caused the Red Disk bug.
  557.    Fixed.  In the loaded game the Disk now explodes, but with a small visual
  558.    "error":  That temporary Red Disk does not show on screen.
  559.  - If a Red Disk was released, it could be swallowed again and still explode.
  560.    This is a cheat, which is considered forbidden.  Now this Red Disk cannot
  561.    be eaten anymore, but since this changes the game itself somehow, I made
  562.    this cheat accessible again with a new command line switch T or t.
  563.    (This cheat was reported by Tom Geelen, a long time ago.  A fix at last.)
  564.  - New command line parameter added: T, which enables the now by default
  565.    disabled Red Disk cheat trick for "backward compatibility".
  566.  - New recorded demo's are now named differently: iiSjjj$k.SP for standard
  567.    recordings, and iiS---$k.SP for recordings from SP files, where ii stands
  568.    for the active level set, jjj for the active level number and k for the
  569.    known demo number as in the original DEMOk.B?? (=F-key minus 1).
  570.    For the original level set, this xx becomes '00', as known from Maarten's
  571.    solutions, and because the real '00' is a different legal set (reserved
  572.    for instance for the working set in SupaShow in compatible mode), this
  573.    original '00' becomes '--'.  {I am aware that this is neither logical nor
  574.    consequent, but it was Maarten, who decided to name the original demo's
  575.    '00S???-?.SP', not me ...  Well, this scheme can also be interpreted as a
  576.    confirmation of my reservation of the real set '00' for scratch purposes.}
  577.    Note that the file names differ from the 'official' solutions only by
  578.    the $ (dollar sign), opposed to Maarten's '-' (minus sign), and can be
  579.    addressed all-at-once by the wildcard structure "??S???$?.SP" for copying
  580.    or renaming or anything else anyone want to do with all his/her demo's.
  581.    Note also that loaded SP files (see command line option ":filename.ext")
  582.    can also result in a recorded demo, but there can be 10*101 different
  583.    demo names generated: 10 for the Ctrl-Function keys, and the 101 for all
  584.    possible active level sets when the SP was started with the F12 key:
  585.    The active level set (which can be changed in the menu by clicking on the
  586.    disk 1<->2 symbol at the bottom) is here also included in the name.
  587.    (Idea for this enhancement by Frans Meulenbroeks.)
  588.  - New command line parameter added: O (the letter, not the digit zero), which
  589.    forces the old demo names for recording demo's.  Because the new demo names
  590.    prevent instant replay with an Fn-key of just recorded demo's , I made this
  591.    original way of recording still possible.
  592.  - Automatic addition of a prepared signature, BUT ONLY if the recording
  593.    succeeded and the level was successful (Exit reached with the Infotrons).
  594.    The signature has to be a special text file with the name: MYSPSIG.TXT
  595.    SPFIX63 uses the text of that file until the first terminator byte (FF hex)
  596.    or until the end if no terminator is available, or until the 511th byte if
  597.    the file is longer than 511 bytes.  Then it adds any missing terminator.
  598.    This legalizes ANY text according to the definition of the SP signature.
  599.    This new feature also works if the old demo names are forced with the 'O'.
  600.    If you don't want it, just delete MYSPSIG.TXT from the Supaplex directory.
  601.  - A sample of MYSPSIG.TXT is included in the SPFIX63 package, which MUST be
  602.    replaced by your own signature, or MUST be deleted if this automatic
  603.    signature addition is not wanted.  Use Maarten's SPSIG to strip unwanted
  604.    signatures from demo's.
  605.  - I have included also a small program (TESTSIG.EXE) to check how your text
  606.    will look like, when the SpeedFix appends it:  If the text is too long,
  607.    you can see what is left of it as a signature and where it is clipped.
  608.    TESTSIG has no parameters and it always uses MYSPSIG.TXT.
  609.    Just type 'testsig' and you'll see what the SpeedFix does with MYSPSIG.TXT.
  610.    If you want the signature separately stored into a file, you can redirect
  611.    the screen output to a file, like in:  TESTSIG > MYSPSIG.SIG  and then use
  612.    it to append manually to a demo, like in:  COPY /B MYDEMO.SP + MYSPSIG.SIG
  613.  - "Remarks about Supaplex game field calculations and resulting tricks" and
  614.    "SpeedFix command line parameter overview" added to this doc.
  615.  
  616.  * Ideas for future enhancements (JUST IDEAS!):
  617.    - Make it possible to instant replay the new SPFIX63 demo's with Alt-Fn.
  618.    - Fix the EGA panel problem if running with VGA cards.  The EGA emulation
  619.      on VGA cards needs some extra programming for this split-screen function
  620.      to work properly.
  621.      (I did some tests already but until now without any success.)
  622.    - Level verification at load time: the first 1440 bytes may only contain
  623.      hex values from 00h to 28h, and there are also some easy criteria for
  624.      several other bytes.  A bad level would not be loaded.  This would make
  625.      it possible to use the "@" parameter with 'wilder' wildcards and search
  626.      for level and demo files without ".SP" extension, without having to wait
  627.      for and abort illegal files (*.com, *.exe, *.bat).
  628.    - Use the video frame frequency in calculating the demo times, for honesty.
  629.    - Who knows what I can think of next.
  630.  
  631.  * Known but unfixed problems:
  632.    - There still seems to be a problem with the PLAYER.LST file: it sometimes
  633.      is destroyed.  Reason yet unknown but this was also in the original game.
  634.      It did not happen to me for a long time.  Not repeatable: hard to find.
  635.      Maybe this bug has been fixed already?  Please notify me when it happens!
  636.    - There are sometimes some more screen "glitches" during the game, which is
  637.      an original Supaplex "bug".
  638.      (Especially during unforeseen disk-accesses like when SmartDrive writes
  639.      or reads something to/from disk without Supaplex asking for it.)
  640.    - Some problems with Matrox video cards still exist: moving to the left
  641.      during the first few seconds and shaking in the right half of the game
  642.      field still makes problems!  (The left half shakes to the right, while
  643.      the right half shakes to the left because otherwise we would see trash
  644.      from outside the game field on the edges.
  645.      Vertical shaking makes no problem: all black outside.)
  646.    - Murphy blurs during the soft-scroll movements.  This cannot be changed
  647.      because of missing pictures, since Murphy moves 2 pixels in MOVING.DAT.
  648.      It only may be improved a little by calculating Murphy to move per pixel,
  649.      but his background would blur then, and it takes a lot more programming!
  650.    - There is always one more bug.
  651.  
  652. Herman.
  653.  
  654. ==============================================================================
  655.  
  656.         +-------------------------------------------------------------+
  657.         | HOW TO DEFINE SUPAPLEX SPEED, AND WHAT IS THE CORRECT SPEED |
  658.         +-------------------------------------------------------------+
  659.  
  660. I took my 286/10 for the Supaplex speed reference.  I use the standard demo
  661. which is started from the menu with the F2 key, and check the panel time at
  662. the end of that demo. (The panel clock always seems to run correctly.)
  663. My speed reference is 2 minutes and 9 (+/-1) seconds for that demo.
  664. On my Pentium 133 this time was exactly half of this: 1 minute 4(5) seconds.
  665. Until now I do not have a definitive answer from Robin Heydon how fast
  666. Supaplex is supposed to run, except that the slower speed "feels right".
  667.  
  668. Does anyone object?  Please correct me if I take the wrong speed reference!
  669.  
  670. Several selected statements from Robin Heydon to me:
  671. ...
  672. >>Well the game should run at 60Hz.  But on a PC it would run at 70Hz, due
  673. to the video graphics hardware.  So it would run quicker than the original
  674. Amiga Version.  Or though, not so quick that it makes it unplayable.<<
  675. ...
  676. >>I have tried your version on this machine and it does 2min 10.  BUT I have
  677. not tried an original version.  I don't have one, and no way of getting one.<<
  678. (Note by Herman Perk: this is about original packaged Supaplex, not the ZIP!)
  679. >>However, it does "Feel" right to me, and that's what is important in all
  680. games.  Anyway, go and release it.  It should be excellent.  I've certainly
  681. created a little interest on this side of the Atlantic.<<
  682.  
  683. ------------------------------------------------------------------------------
  684.  
  685.                      +----------------------------------+
  686.                      | SUPAPLEX SPEED-FIX: INTRODUCTION |
  687.                      +----------------------------------+
  688.  
  689. On modern machines the original SUPAPLEX.EXE runs too fast.
  690. This let me search for a fixed version.  There wasn't any around, so I had to
  691. fix it myself, so my then 5 year old son could play Supaplex on my Pentium.
  692. There were several problems to overcome (see HISTORY DETAILS below).
  693.  
  694. The speed fixed file SPFIXnn.EXE replaces the original SUPAPLEX.EXE.
  695. The other necessary game files (the whole game) can be found in the Internet.
  696. Any feedback is welcome, see my (E-mail) address below.
  697.  
  698. All my SpeedFix versions are completely based on the original Supaplex code,
  699. and all of them can be used as complete substitute of the original EXE file,
  700. solving the speed problem on fast machines, but also running on 'slow'
  701. machines in the original speed.
  702. I do not intend to unnecessarily change any of the original code.
  703. I did however remove the protection routine after I saw what it actually did,
  704. and some code that was not even referenced at all: dead stuff, small leftovers
  705. of early tests by Robin Heydon.
  706. I have made some additions to make life easier for several persons.
  707. I let Maarten Egmond make some additions for the same reasons.
  708.  
  709.   Have fun and spread the game,
  710.   Herman Perk.  <- made in Holland and always will be Dutch.
  711.  
  712. ------------------------------------------------------------------------------
  713.  
  714.                +---------------------------------------------+
  715.                | SUPAPLEX SPEED-FIX: INSIDE INFO AND HISTORY |
  716.                +---------------------------------------------+
  717.  
  718. INSIDE INFORMATION ABOUT WHY THE GAME RUNS TOO FAST:
  719.  
  720.   The game speed depends on the video frame frequency (vertical scan rate) in
  721.   the 300*200 mode.  Supaplex calculates changes in the game field, it updates
  722.   the screen and it waits for a new frame to start.
  723.   On slow machines those varying calculations last beyond the, say, first
  724.   synchronization pulse, and Supaplex was created to react that way.
  725.   On fast machines however, those calculations are ready before that same
  726.   pulse shows up, and waiting for a pulse now is waiting for the wrong pulse:
  727.   one pulse too early.  The game speed is then exactly twice the original
  728.   speed, depending on when those calculations are ready: before, close to, or
  729.   after that first pulse.  I expect on very few computers that the speed is
  730.   neither the original speed, nor the exact double speed.  Those computers
  731.   must be matching the video sync pulses very closely.
  732.  
  733. HISTORY DETAILS:
  734.  
  735. - The original EXE file is packed (=blocks of the same byte are squeezed).
  736.   My disassembler could not unpack this EXE file, so I had to do it myself.
  737.   I created an unpacked EXE file first, and I used many tricks to do so.
  738.   I then created a disassembly, which did cost me some time too, before the
  739.   reassembled code ran even after shifting code around.  I did this shifting
  740.   for testing the quality of the disassembly.  By this time my goals were not
  741.   to just try and patch the original EXE file, but to reassemble the whole
  742.   after changing the disassembly, since patching a packed EXE file can be very
  743.   tricky!
  744.  
  745.   Then the biggest problem arose: where in the world did I have to add delay!
  746.   The problem was, that whatever I tried, everything looked fine until the
  747.   screen scrolled horizontally.  It double shifted during a scroll.
  748.   So where was that scroll routine?  I found 3 of those, but not the one I
  749.   was looking for: the horizontal screen movement when Murphy walked.
  750.  
  751.   I expected that I had to go through a lot of code, and cried for help in the
  752.   Internet: no reply.  At last I found THE routine, which does actually not
  753.   scroll at all: it just changes screen pointers even if Murphy does not move.
  754.   (I rejected this place as a candidate before, since I was searching for a
  755.   scroll only routine and here my breakpoint in the debugger went bezerk.)
  756.  
  757.   The rest was done in less than half an hour, and several hours for testing.
  758.   I released this version as my first SpeedFix through Maarten (Elmer).
  759.  
  760.   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  761.  
  762. - During my search, I found strange things.  Keys that were tested, but were
  763.   disabled by a zero byte.  This byte cannot be set by Supaplex itself.
  764.   I added a method to set it and played with the extra keys.
  765.   This second version I E-mailed to Maarten and I warned him for bugs.
  766.  
  767. - I already found out, that the Ctrl-function keys should enable the demo
  768.   recording routines, but only on a few occasions I was able to create a
  769.   working demo file, and I had many crashing 'too many opened files' errors.
  770.   There they were: over 3 megabytes of lost clusters, all looked like the
  771.   beginning and completed demo files.  Now I knew why it was not recording
  772.   properly, and after a quick look it was clear what the problem was.
  773.   As long as those keys are pressed, it reopened the file each time the keys
  774.   are found to be pressed.  With a high auto repeat rate of Supaplex itself,
  775.   and the wrong timing of when the message 'RECORDING DEMO0' appears on
  776.   screen, it cannot be used reliably.  I fixed that bug by closing the file
  777.   first if it is opened, and then open the file again.
  778. - By this time the 'RECORDING DEMO0' message never appeared on screen, so
  779.   this was fixed too by just moving one instruction.
  780. - Now it always showed DEMO0 for all demo's.  I changed it by adding one
  781.   instruction, and this SUPAPLEX.EXE was released as SpeedFix 3.
  782.  
  783.   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  784.  
  785. - During my experiments with new levels, and Maarten's SPEDIT, I was annoyed
  786.   by the fact that I needed to rename files every time, and together with
  787.   Maarten I developed a few command line options for easy level access.
  788.   With the command line option ! and two digits you can choose now from 101
  789.   level sets.  See below for details.
  790. - I had a big problem if files LEVELS.D* and LEVEL.L* of the requested group
  791.   did not exist:  The computer would hang in a loop of "INSERT DISK 2" and
  792.   "INSERT DISK 1" screens, and the only escape was the reset button.  I fixed
  793.   this problem by adding code for aborting these screens with the ESC key.
  794. - I added display of the SpeedFix info and the video frequency in the
  795.   statistics screen if the debug mode is active.
  796. - I changed the debug keys '-' and '=' to show the proper level names now,
  797.   so in debug mode you can change levels properly in the game itself.
  798. - Spedit shells to Supaplex with Ctrl-A.  If the Ctrl key is held until
  799.   big Murphy starts to show up, the release of that Ctrl key is never seen
  800.   by DOS: this information is swallowed by Supaplex.
  801.   This goes for all Ctrl, Alt, Shift, NumLock, CapsLock etc. keys.
  802.   DOS reacts upon return as if that Ctrl-key is still pressed, until that
  803.   same Ctrl key is hit again.
  804.   It always is very annoying when the keyboard does not react normal.
  805.   I fixed this by waiting for all such keys to be released just before
  806.   Supaplex takes complete control of the keyboard.  This is an endless loop
  807.   without time-out, so if anyone has problems, please contact me!
  808. - I know why Robin's slow-down code has problems with the demo's: he wanted
  809.   Supaplex to react quickly upon key-press in his slowest mode.
  810.   This means that he has to look at the keyboard more often than under normal
  811.   conditions.  This keyboard routine also takes the next demo step...
  812.   I did not 'debug' this.
  813. - The result is released as SpeedFix 4.
  814.  
  815.   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  816.  
  817. - Maarten Egmond contacted me about making some additions to the SpeedFix,
  818.   in order to play his new demo format *.SPD files.  After discussing this,
  819.   we came to the conclusion, that there was no need to create a new SPD format
  820.   (where the level would have been glued after the demo information), but
  821.   just extending the existing SP specifications would do even better.
  822.  
  823.   This is, where I thought, that there was no need for SpeedFix additions,
  824.   and I demonstrated Maarten with a special (unreleased) version of my
  825.   SupaShow, that it was possible to play the level and show the demo of a
  826.   SP file using the SPFIX4.  All the high level language program had to do,
  827.   is creating a set of LEVELS.D00, LEVEL.L00 and DEMO0.B00.
  828.   LEVELS.D00 would have been nothing more than 111 copies of the level part
  829.   of the SP file.  DEMO0.B00 would have been the demo part of the SP file,
  830.   and LEVEL.L00 would have been very easy to create from the level part.
  831.   This set 00 was either to be reserved as special set, or backed up before,
  832.   and restored after starting the special set, created from the SP file.
  833.  
  834.   Since Maarten did not wanted to go that way, and since he offered to make
  835.   the SpeedFix changes himself, and since I don't claim to be any creator
  836.   of the game, and since I think that Maarten was very well capable of
  837.   doing the job, I let Maarten struggle with my SPFIX4.ASM disassembly file.
  838.   (Another reason: I had no time for that right away.)
  839.  
  840. ------------------------------------------------------------------------------
  841.  
  842.                      +-------------------------------+
  843.                      | INSTUCTIONS FOR USE, AND MORE |
  844.                      +-------------------------------+
  845.  
  846. Starting with SpeedFix v4, the speed fixed SUPAPLEX.EXE executable is called
  847. SPFIXnn.EXE, where nn is the current version number, in stead of SUPAPLEX.EXE.
  848. (Now the fixed file can be recognized from the outside too.)
  849. Just copy the SPFIXnn.EXE into your existing Supaplex directory and type
  850. SPFIXnn in stead of SUPAPLEX to start the game.
  851. (I leave it up to you to copy SPFIXnn.EXE over the old SUPAPLEX.EXE, or not.)
  852.  
  853. You need all the other files from the original game too, which can be found
  854. on the Supaplex WebPages (see top).  Just download the big ZIP file called
  855. SUPAPLEX.ZIP (if you don't have it yet).
  856.  
  857. Before version 6.2: Make sure you backup the original files DEMO?.BIN, and
  858. replace them by the new demo's which are in the NEWDEMOS.ZIP file included in
  859. this package, or the demo's will not work properly.  This is obsolete now.
  860.  
  861. If you use SPEDIT 3.0 or higher, remember to change SPEDIT.CFG to shell to
  862. SPFIXnn in stead of SUPAPLEX.EXE.
  863.  
  864. If you use SupaShow, remember to change SUPASHOW.INI to shell to the correct
  865. SPFIXnn version (or to SUPAPLEX.EXE if you want it the hard way).
  866.  
  867. Now the main thing to get it working is just to change to your Supaplex
  868. directory, and run SPFIXnn.EXE.  You should see the normal Supaplex intro
  869. screen coming up, and then the code screen.  No code will be asked.  In stead,
  870. the current SpeedFix version number will be shown.  Press any key here to
  871. start the game.  The rest works just like in the original game.
  872.  
  873. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  874.  
  875. Advanced users (or if you want to do more with the game):
  876.  
  877. If the initial screen with names appear, including the text "SPEED FIX (n) BY
  878. HERMAN PERK" (or similar), and Supaplex is waiting for a key, press the
  879. ScrollLock key to enable the debug features.
  880. For the standard game: press any other key.
  881.  
  882. Up to version 6.0 this and a command line parameter were the only places where
  883. this debug mode could be switched on.
  884.  
  885. Version 6.0 introduced an extra key to switch the debug mode from within the
  886. game: Ctrl-ScrollLock = on, Alt-ScrollLock = off.
  887.  
  888. During the game there are extra debug keys to play with, but be aware that
  889. this is not without bugs.  It was not meant for us to use!  Use at own risk!
  890.  
  891. ------------------------------------------------------------------------------
  892.  
  893.                  +----------------------------------+
  894.                  | SPEEDFIX COMMAND LINE PARAMETERS |
  895.                  +----------------------------------+
  896.  
  897. (The original game Supaplex does NOT interpret any command line parameters.
  898. I introduced the use of the first few of these parameters in SpeedFix 4.)
  899.  
  900. All command line parameters can be used together in any combination and order.
  901. Some parameters exclude each other mutually like the # and the & options.
  902. I did not want to make an intelligent command line parser, so please excuse
  903. the way these options are implemented.
  904.  
  905. Note that "SPFIXnn" should be replaced by the actual executable of this
  906. version (e.g. SPFIX4, or SPFIX63).  This nn is simply an abbreviation for
  907. the version number.
  908.  
  909.  
  910. First a command line example to show what it is all about:
  911.  
  912.   SPFIX63 !01 # /3 d
  913.  
  914. Which means:
  915. Start SpeedFix with level files *.?01, force cheat mode (do not use the files
  916. PLAYER.L01 and HALLFAME.L01 and enable all levels), start level 3 immediately
  917. and in debug mode (so demo files DEMO0.B01,...,DEMO9.B01 can be created, etc.)
  918. Spaces between parameters are not needed (except after a file name).
  919.  
  920.  
  921. Description of all defined parameters:
  922.  
  923.  
  924.   SPFIXnn *z   or   SPFIXnn *
  925.   ==========        =========
  926. where z=0,1,2,...,10 is a SpeedFix delay number as in:   SPFIXnn *5
  927.  
  928. If the SpeedFix does not find the speed properly, you can force any speed
  929. within the SpeedFix range. *0 (or just *) is the fastest Supaplex speed.
  930. With *10 Supaplex runs the slowest, *5 is for computers that run exactly with
  931. double original speed (most computers I know).  This option fixes the speed
  932. at the start of Supaplex, in stead of automatically find the right speed and
  933. then fix it.  Even if the * option is used, the SpeedFix keys are always
  934. active.  See also the statistics screen in debug mode for checking this value.
  935.  
  936.  
  937.   SPFIXnn !y
  938.   ==========
  939. where y is 00..99 is a level set number as in:  SPFIXnn !23
  940.  
  941. The first 10 sets can be addressed with a single digit: !5 equals !05 etc.
  942. Ever since new levels can be created, there is a need for handling those
  943. levels.  All files belonging to the original set of 111 levels are:
  944. LEVELS.DAT, LEVEL.LST, PLAYER.LST, HALLFAME.LST, DEMO0.BIN, ..., DEMO9.BIN.
  945. With this option 100 total new sets can be used by Supaplex, without renaming
  946. the original files.
  947. The file names of those new sets are different in the extensions only:
  948. LEVELS.D00, LEVEL.L00, PLAYER.L00, HALLFAME.L00, DEMO0.B00, ..., DEMO9.B00,
  949. etc. up to LEVELS.D99, LEVEL.L99, ..., DEMO9.B99.
  950. This allows 100 extra sets of 111 levels each, plus the original set making
  951. a total of 101 times 111 levels.
  952. A complete new set can be renamed or copied with following wildcard file name:
  953. *.?00 for the complete set 00,   and *.?57 for complete set 57 etc.
  954. Remember that PLAYER.L00,...,PLAYER.L99 and HALLFAME.L00,...,HALLFAME.L99 are
  955. all hidden, like PLAYER.LST and HALLFAME.LST.
  956. If option !y is not used, the original set is used.
  957. Only LEVELS.D?? and LEVEL.L?? must exist for a set to work.
  958. PLAYER.L?? and HALLFAME.L?? are created without names and privileges, if those
  959. files do not exist.
  960.  
  961.  
  962.   SPFIXnn /x
  963.   ==========
  964. where x=1,2,3,...,111 is a level number as in:   SPFIXnn /78
  965.  
  966. Maarten wrote SPEDIT, a level editor.  He already implemented a call to
  967. Supaplex in order to test the level under construction.
  968. With this option SPEDIT can instruct Supaplex to enter a level without going
  969. through the menu.  If '/' is seen on the command line, only the first picture
  970. of Supaplex is displayed (the opening curtain and author screen are skipped.
  971. If no legal level number is entered immediately after the '/' then the nearest
  972. level to this illegal number starts. (200 will start 111, 0 will start 1)
  973.  
  974.  
  975.   SPFIXnn &w
  976.   ==========
  977. where w=1,2,3,...,20 is a player number as in:   SPFIXnn &2
  978.  
  979. This starts Supaplex with the player of choice already active, so this
  980. player does not have to be selected by pressing the player up and down buttons
  981. in the menu.  His ranking is also selected.
  982. Did you already know, that clicking on the player's name shows his ranking,
  983. so you do not have to scroll through the player AND ranking?
  984.  
  985.  
  986.   SPFIXnn #
  987.   =========
  988. Force all levels playable as if those are all skipped.  This was necessary for
  989. SPEDIT too.  With this option the player list and the hall of fame list are
  990. never affected: Supaplex does not change the files PLAYER.LST and HALLFAME.LST
  991. The player name is '(FORCED)' and cannot be changed or deleted.
  992. This is a good test mode.
  993.  
  994.  
  995.   SPFIXnn S
  996.   =========
  997. New in SPFIX62:  The original Supaplex has (deactivated) code to shake the
  998. screen during all explosions.  I thought this was too much, so now the default
  999. is that the screen shakes only when Murphy explodes.  This 'S' or 's' lets the
  1000. screen shake on all explosions.  See also the 'N' for no shake at all.
  1001.  
  1002.  
  1003.   SPFIXnn N
  1004.   =========
  1005. New in SPFIX62:  The original Supaplex has (deactivated) code to shake the
  1006. screen during all explosions.  I thought this was too much, so now the default
  1007. is that the screen shakes only when Murphy explodes.  This 'N' or 'n' disables
  1008. also that shaking (like the old Supaplex).  See also the 'S' for always shake.
  1009.  
  1010.  
  1011.   SPFIXnn D
  1012.   =========
  1013. Force debug mode.  This 'D' can be 'd' too, so you don't need the shift key.
  1014. Since the '/x' option skips the screen where you can press the ScrollLock key
  1015. for 'debug mode on', I implemented this option as command line parameter too.
  1016. Debug mode will enable you to record demo's (to show to your friends, or as
  1017. help to explain someone how to solve a level), and use some more features.
  1018. See "COMPLETE LIST OF SUPAPLEX KEYS" below for what extra keys (features) you
  1019. can use in debug mode.
  1020. SPFIX60 and above have an extra possibility to switch between normal and debug
  1021. mode: see Ctrl-ScrollLock and Alt-ScrollLock in the complete key list below.
  1022.  
  1023.  
  1024.   SPFIXnn M
  1025.   =========
  1026. New in SPFIX62: The debug m key for moving the game field allowed the field
  1027. to scroll beyond the edges.  This is now clipped by default, and this 'M' or
  1028. 'm' can be used to get the old non-clipping m-mode back, but now improved:
  1029. The problem with the sudden jump on the left edge has been fixed.
  1030. See for this debug m key under "EXTRA DEBUG KEYS IN THE GAME ..." below.
  1031. (Check also the extra SPFIX62-keys  Ins,Home,PgUp - Del,End,PgDn  below!)
  1032.  
  1033.  
  1034.   SPFIXnn C
  1035.   =========
  1036. New in SPFIX62:  The SpeedFix doesn't need LEVEL.L?? anymore!  If that file is
  1037. available, it is used.  If it is missing, the file LEVELS.D?? is used and the
  1038. missing information is extracted from it.  Nothing is written by default, but
  1039. this 'C' or 'c' tells the SpeedFix to create the LEVEL.L?? file in that case.
  1040. If LEVEL.L?? is present, nothing will happen, so if you want to make a new
  1041. file, DELETE the old file first before starting the SpeedFix with this 'C'.
  1042. The missing file is then created, when the SpeedFix investigates that level
  1043. set to display level names etc. in the menu.  To re-create all new LEVEL.L??
  1044. files: delete all LEVEL.L?? before starting the SpeedFix, and scroll through
  1045. the level sets in the menu by keeping the Floppy 1<->2 symbol near the bottom
  1046. of the menu screen pressed, until all level set names were displayed in the
  1047. message line.  That's all.  (If you don't use the "#" option, all missing
  1048. hidden PLAYER.L?? and HALLFAME.L?? are initialized at the same time.)
  1049.  
  1050.  
  1051.   SPFIXnn L
  1052.   =========
  1053. New in SPFIX62: Start the SpeedFix with the saved game (if available).
  1054. Be aware that SPFIX62+ introduces different saved games for each level set!
  1055. (See also the 'W' and '!y' options.)
  1056.  
  1057.  
  1058.   SPFIXnn W
  1059.   =========
  1060. New in SPFIX62: Use only SAVEGAME.SAV as saved game, otherwise SAVEGAME.S??
  1061. is used, where ?? is either AV,00,..,99 depending on which level set is active
  1062. when the snapshot is made (with the "write game" key "W" during the game), AND
  1063. when it is loaded again!
  1064.  
  1065.  
  1066.   SPFIXnn F
  1067.   =========
  1068. New in SPFIX62: Clicking with the mouse on the floppy symbol "1<->2" in the
  1069. menu now changes the level set (default):  All available LEVELS.D?? are
  1070. "scrolling" through the message line, the original first, then 00,01,..,99,
  1071. wrapping back to the original.  With the Shift key held down, this order is
  1072. inverted.  If the Alt key is pressed while clicking on the floppy symbol, the
  1073. original (but enhanced) floppy routines are executed, as in the old days ...
  1074. This 'F' or 'f' parameter just inverts the function of the Alt key here.
  1075.  
  1076.  
  1077.   SPFIXnn E          (Before version 6.2:  SPFIXnn EGA)
  1078.   =========
  1079. Since the VGA/EGA mode is tested, set and used by Supaplex before the keyboard
  1080. routines are installed, I could only show the EGA mode through a command line
  1081. parameter without affecting the style of the program too much.
  1082. This EGA mode shows Supaplex using the standard 16 colors only, and not
  1083. changing the video palettes for better colors.  Fading is not possible.
  1084. The Supaplex screen in this mode is calculated with a different length than
  1085. with VGA.  There is a problem with the location of the bottom panel in the
  1086. game, because this EGA mode is not meant to run on VGA, without precautions.
  1087. This option is only to show what unused potential is in this game, you
  1088. probably don't want to use it a second time after seeing it...
  1089. (I changed the EGA into just E, because I did not see any reason to leave it
  1090. the way it was, and I could remove my old code to check for this whole EGA.)
  1091.  
  1092.  
  1093.   SPFIXnn H
  1094.   =========
  1095. A bug has been fixed with Horizontal movements, so I think that now more new
  1096. video cards are working properly, like the Matrox Millennium which I used to
  1097. fix this bug.  Especially VGA cards where shifted pictures (with a horizontal
  1098. difference of half a sprite) were flashing during those horizontal movements.
  1099. This 'H' or 'h' forces the original Supaplex timing, just in case the bug-fix
  1100. makes problems now with originally working VGA cards (which I do not expect!).
  1101. If you need to use this parameter PLEASE tell me about it!!!
  1102.  
  1103.  
  1104.   SPFIXnn R
  1105.   =========
  1106. I provided a command line option "R" or "r" in version 6.2 to refresh the
  1107. video memory when the game returns to the menu.  I did not make this refresh
  1108. option default because it increases the time to return to the menu, especially
  1109. when the game runs from floppy disk: the file MOVING.DAT is reloaded.  This
  1110. parameter is actually only needed when you are experimenting with walking on
  1111. and beyond the top or bottom edges, which is not allowed anyway.  For more
  1112. about such experiments see the section "ABOUT THE GAME FIELD EDGES" below.
  1113.  
  1114.  
  1115.   SPFIXnn O
  1116.   =========
  1117. I provided a command line option "O" or "o" in version 6.3 to be able to use
  1118. the original demo names when recording demo's.  With the new demo names for
  1119. recording, instant replay with the appropriate function key in the menu is not
  1120. possible anymore.  Maybe in the next SpeedFix version I might implement a way
  1121. to instant replay of the recorded demo's with new names.
  1122.  
  1123.  
  1124.   SPFIXnn T
  1125.   =========
  1126. This command line option "T" or "t" in version 6.3 enables an old Supaplex
  1127. bug, which I fixed:  Eat a just released Red Disk, which will explode anyway,
  1128. but you carry one extra Red Disk.  Repeating this trick, you will never run
  1129. out of Red Disks.  This trick is officially declared to be an unallowed cheat.
  1130. Without this command line parameter, this cheat is not possible anymore.
  1131. Because here I changed the game itself a little by disabling this cheat, I
  1132. created this option to still use this cheat, or at least demonstrate it.
  1133.  
  1134.  
  1135.   SPFIXnn :filename.ext
  1136.   =====================
  1137. where filename.ext is the name of a single-level-file:    SPFIXnn :MYLEVEL.SP
  1138. or, on a different drive in a subdirectory:    SPFIXnn :D:\HERE\IS\MYLEVEL.SP
  1139.  
  1140. Maarten wrote SPEDIT, a Supaplex level editor.
  1141. SPEDIT can create single-level-files, which normally have the extension SP.
  1142. With SPEDIT version 3.2, Maarten introduced an extra option for these so
  1143. called SP-files: a demo (created with SPFIX3 or higher) can be attached to
  1144. the level, and still it is an SP-file (called: extended SP file).
  1145. This option starts the SP file demo (if a demo is attached), or starts the
  1146. level itself (if no demo is attached).
  1147. The Supaplex menu shows the current level set (chosen with the !-option),
  1148. which is indeed active.  All other command line options can be used too.
  1149. You will not find the SP level in the Supaplex menu.
  1150. Back in the menu, you can restart the demo with the F11-key, or (re-)start
  1151. the SP-level with the F12-key.
  1152. With the SpeedFix v5.0 and upwards, the demo's that Supaplex records, are
  1153. also extended SP files (i.e. you can record a demo, say DEMO3.BIN, and run it
  1154. with SPFIXnn :DEMO3.BIN).
  1155.  
  1156.  
  1157.   SPFIXnn @ :filename.ext
  1158.   =======================
  1159. The "@" can only be used together with the colon option (see above).
  1160. The file used with the colon option must contain a demo.  This option plays
  1161. the demo at "lightning" speed, without any delays.  On a fast 486, a demo that
  1162. takes 5 minutes at default speed, will now be played in only a few seconds.
  1163. Further, the program will exit immediately after playing, and state whether
  1164. the demo failed or succeeded (to reach the exit with enough Infotrons
  1165. collected).  This is handy to check demo's fast.
  1166. (Maarten uses it to check entries to the Honored Solutions list very quickly)
  1167.  
  1168. The resulting screen text afterward is redirectable to a file (version 6.2+).
  1169. (Which means that without it, every single file needs to be checked manually,
  1170. because the result text could then not be put in a file for evaluation later.)
  1171. Speedfix version 6.2+ allows no levels without demo's to load with the "@"
  1172. option anymore, because it would prevent complete unattended bulk demo checks
  1173. with the use of batch files:  The ESC key would have to be pressed to exit.
  1174. (Only the original 10 old-style demo files are recognized and evaluated, and
  1175. all other old-style demo's are rejected as "file too short" by SpeedFix 6.2+.)
  1176.  
  1177. Such a DOS batch file could look like in this two-line example:
  1178.  
  1179.        echo SPFIX63 demo results: > spresult.txt
  1180.        for %%a in (*.sp demo?.b??) do call spfix63 @ :%%a >> spresult.txt
  1181.  
  1182.   (If this second line is typed in as command on the DOS command line,
  1183.   both "%%a" must change into "%a": Each with only 1 percent sign.)
  1184.   The first line kills any existing old result file with the single ">".
  1185.   The line with 'for' can be changed if the SP files are located in
  1186.   subdirectories.  Example for files in subdir1, subdir2 and more:
  1187.  
  1188.        for %%a in (subdir1\*.sp subdir2\*.sp d:\even\more\subdirs\*.sp) do ...
  1189.  
  1190.   A more intelligent structure is of course possible, and also a possibility
  1191.   of aborting the batch can be built in ...
  1192.  
  1193.   An example of such a resulting file (in our case spresult.txt) with all
  1194.   different expected results could be:
  1195.  
  1196.        SPFIX63 demo results:
  1197.        Demo successful: 03S087.SP
  1198.        Demo failed:     NEWDEMO1.SP
  1199.        SP without demo: A_LEVEL.SP                  (meaning: level only)
  1200.        !! File < Level: OLDDEMO.SP                  (meaning: file too short)
  1201.        !! File >> Demo: LEVELS.SP                   (meaning: file too long)
  1202.        Demo successful: DEMO0.BIN                   (original short demo!)
  1203.  
  1204.   3 other possible error messages are from unexpected errors, where level
  1205.   results in stead of demo results appear, which could only occur if there
  1206.   is a bug in my code, or from an error in the command line, which would not
  1207.   be not fault:
  1208.  
  1209.        "@"-ERROR: Level(?) successful: UNKNOWN.SP
  1210.        "@"-ERROR: Level(?) failed:     ERRORS.SP
  1211.        "@"-ERROR: Bad or missing ":filename.ext"!
  1212.  
  1213. ------------------------------------------------------------------------------
  1214.  
  1215.              +------------------------------------------+
  1216.              | SPEEDFIX COMMAND LINE PARAMETER OVERVIEW |
  1217.              +------------------------------------------+
  1218.  
  1219.      !nn        Force level SET number at start (nn=0...99), else original set
  1220.      /nnn       Force LEVEL number at start    (nnn=1...111)
  1221.      &nn        Force PLAYER number at start    (nn=1...20)
  1222.      *nn        Force SpeedFix SPEED at start   (nn=0...10, or empty(=0=fast))
  1223.       #         Force all levels skipped and no score updates: test mode
  1224.      A a        (not used, but reserved by "EGA" mode)
  1225.      B b        (not used yet)
  1226.      C c        If deleted, Create LEVEL.L?? file out of info from LEVELS.D??
  1227.      D d        Force Debug mode at start: needed to record demo's etc.
  1228.      E e        Force (buggy) EGA mode on VGA hardware
  1229.      F f        Force original Floppy 1<->2 symbol function (Invert Alt key)
  1230.      G g        (not used, but reserved by "EGA" mode)
  1231.      H h        Force original Supaplex Horizontal smooth-scroll timing
  1232.      I i        (not used yet)
  1233.      J j        (not used yet)
  1234.      K k        (not used yet)
  1235.      L l        Load and play the available saved game at start
  1236.      M m        View beyond the game field edges with the debug M key options
  1237.      N n        Never shake the screen during explosions (See also "S")
  1238.      O o        Record using Original demo names DEMO?.B?? (not ??S???$?.SP)
  1239.      P p        (not used yet)
  1240.      Q q        (not used yet)
  1241.      R r        Refresh video memory after each game: reload MOVING.DAT
  1242.      S s        Shake the screen during every explosion (See also "N")
  1243.      T t        Allow the use of the original infinite Red Disk (ch)eat Trick
  1244.      U u        (not used yet)
  1245.      V v        (not used yet)
  1246.      W w        Force Writing only one SAVEGAME.SAV (else use SAVEGAME.S??)
  1247.      X x        (not used yet)
  1248.      Y y        (not used yet)
  1249.      Z z        (not used yet)
  1250.  :filename.ext  Use SP-file to play at start and from menu with F11 and F12
  1251. @:filename.ext  Lightning speed SP-demo test, exits to DOS with message
  1252.  
  1253. ------------------------------------------------------------------------------
  1254.  
  1255.                    +--------------------------------+
  1256.                    | COMPLETE LIST OF SUPAPLEX KEYS |
  1257.                    +--------------------------------+
  1258.  
  1259. Following is a COMPLETE list of keys, that are checked by Supaplex.
  1260. Since Supaplex tests the keyboard scan codes only, it is impossible to refer
  1261. to national keyboard layouts.  All keys are as located on the US keyboard.
  1262. BE AWARE that all keys can have a HIGH AUTO REPEAT RATE on fast machines,
  1263. except for the 'p' and the NumLock pause keys (and all keys used in the
  1264. protection code, which I threw away.)  This time I did something about the
  1265. debug function keys F1, F2 and F3.  They really could do without fast repeat.
  1266. The mouse can only be used in the menu and controls screens.  See also below.
  1267. Watch out: the mouse buttons are active in the game, and can destroy your
  1268. effort!
  1269.  
  1270.          +------------------------------------------------------+
  1271.          | ONLY IN THE PROTECTION CODE ENTRY (I THREW IT AWAY): |
  1272.          +------------------------------------------------------+
  1273.  
  1274. 0,1,2,..,9 = (not on the keypad!) Digits to enter, so the (unpatched) game
  1275.              did not always say:      DOS ERROR:  Access Denied.
  1276.  
  1277. BackSpace  = Correction key.
  1278.  
  1279. Enter      = Usual Enter, and hope that the entered three digits were correct,
  1280.              unless you have a patched game.
  1281.  
  1282.            +--------------------------------------------------+
  1283.            | THE 'DEBUG-ON' KEY I ADDED (AUTHOR SCREEN ONLY): |
  1284.            +--------------------------------------------------+
  1285.  
  1286. ScrollLock = Switch on the debug mode.  This ONLY works in the author screen!
  1287.              This key is not available in my first SpeedFix release.
  1288.  
  1289.                    +-----------------------------------+
  1290.                    | THE STANDARD KEY SET IN THE MENU: |
  1291.                    | Several game keys have a visual   |
  1292.                    | effect in the Controls screen too.|
  1293.                    +-----------------------------------+
  1294.  
  1295. ESC        = Leave Supaplex: back to DOS
  1296.              Leave Controls, Gfx Tutor, Statistics etc. when in those screens.
  1297.              The right mouse button in the menu: Leave Supaplex: back to DOS
  1298.  
  1299. Alt-SysReq = Back to DOS.  As if ESC key is pressed in the game AND the menu.
  1300.              From SPFIX63: THIS KEY COMBINATION HAS BEEN CHANGED TO Alt-X !!!
  1301.  
  1302. Alt-X      = NEW IN SPFIX63! Used to be Alt-SysReq, but because Windows uses
  1303.              that combination too for its own purpose, I changed it to Alt-X.
  1304.              What it does? See Alt-SysReq above.
  1305.  
  1306. a,b,..,z   = Entering a new player name: needed for the name. (US keyboard!)
  1307.  
  1308. -          = Entering a new player name: dash can be used in the name. (US!)
  1309.                                          (This is not the keypad '-'!)
  1310.  
  1311. Space      = Press the OK button, even if the cursor is somewhere else.
  1312.              Leave Gfx Tutor, Statistics etc. when in those screens.
  1313.              Entering a new player name: Space can be used in the name.
  1314.  
  1315. BackSpace  = Entering a new player name: Correction key.
  1316.  
  1317. Enter      = Press button under cursor, but only if no mouse driver is loaded.
  1318.              Leave Gfx Tutor, Statistics etc. when in those screens.
  1319.              The left mouse button in the menu: Press button under cursor.
  1320.              Entering a new player name: Enter (as usual).
  1321.  
  1322. Arrow keys = If no mouse driver is installed: move cursor in that direction.
  1323.              The keypad digits 8 (up), 4 (left), 6 (right) and 2 (down) are
  1324.              functional too.  This is not influenced by the state of NumLock.
  1325.              The mouse takes over, but only in the menu and the controls
  1326.              screen: nowhere else, although both mouse buttons function as
  1327.              Enter/ESC/Space key in several other screens, like Gfx Tutor,
  1328.              Controls, Statistics and other screens with that blue background.
  1329.  
  1330. FunctionKey= Start DEMO: its 'file number' is the function key number -1.
  1331.              Those demo files are DEMO0.BIN through DEMO9.BIN for the original
  1332.              level set, and DEMO0.B00..DEMO0.B99 through DEMO9.B00..DEMO9.B99
  1333.              for the additional level sets, when such a level set is chosen.
  1334.              If any of those files are missing or really bad, then none of the
  1335.              following demo files with higher numbers are ever loaded by
  1336.              Supaplex, and therefore cannot be started.
  1337.              In that case just fill the gap by copying any good demo file to
  1338.              the missing/bad file.
  1339.              As with SpeedFix 6.3 the names of the demo's, which the player
  1340.              records himself, cannot be started with these keys anymore,
  1341.              unless the command line option 'O' was used when the demo's are
  1342.              recorded, or when those new demo's are renamed to the original
  1343.              names (DEMO0.BIN etc.), or by loading those SP files with the
  1344.              command line option ":filename.ext".
  1345.  
  1346. left mouse button  = in the menu: Press button under cursor.
  1347.  
  1348. right mouse button = in the menu: Leave Supaplex: back to DOS
  1349.  
  1350.                    +---------------------------------------+
  1351.                    | EXTRA MENU KEYS MAARTEN EGMOND ADDED: |
  1352.                    +---------------------------------------+
  1353.  
  1354. F11        = restart the demo, attached to the single-level-file, specified
  1355.              on the command line (colon option "SPFIXnn :file.sp").  This key
  1356.              only works in the main menu screen.
  1357.  
  1358. F12        = (re-)start the level of the single-level-file, specified on the
  1359.              command line.  This key only works in the main menu screen.
  1360.  
  1361.                         +--------------------------+
  1362.                         | EXTRA MENU KEYS I ADDED: |
  1363.                         +--------------------------+
  1364.  
  1365. Shift      and clicking on the floppy 1<->2 symbol: change level sets in
  1366.            descending order.  Without Shift the order is ascending.
  1367.            Changing level sets from the menu is introduced in SPFIX62.
  1368.  
  1369. Alt        and clicking on the floppy 1<->2 symbol: do the old floppy stuff:
  1370.            = load the LEVELS.DAT etc. files from a different floppy.
  1371.            This used to be the default without Alt key before SPFIX62, but
  1372.            without improvements like drive letters up to F.
  1373.            See also the command line option 'F'.
  1374.  
  1375.                      +-----------------------------------+
  1376.                      | THE STANDARD KEY SET IN THE GAME: |
  1377.                      +-----------------------------------+
  1378.  
  1379. ESC        = Quit play (give up).
  1380.              The left mouse button functions as ESC key during the game:
  1381.              do not touch the mouse and don't drop it while playing!
  1382.              This is changed in SPFIX62: it is now the RIGHT mouse button,
  1383.              which is now the same ESC mouse button as in the menu!
  1384.  
  1385. Alt-SysReq = Back to DOS.  As if ESC key is pressed in the game AND the menu.
  1386.              Any blue text screen has to be closed separately though.
  1387.              From SPFIX62: these blue screens are closed too, and the exit to
  1388.              DOS is faster and more reliable.
  1389.              From SPFIX63: THIS KEY COMBINATION HAS BEEN CHANGED TO Alt-X !!!
  1390.  
  1391. Alt-X      = NEW IN SPFIX63! Used to be Alt-SysReq, but because Windows uses
  1392.              that combination too for its own purpose, I changed it to Alt-X.
  1393.              What it does? See Alt-SysReq above.
  1394.  
  1395. Space      = Pressed together with arrow keys: do not move, but 'eat' the
  1396.              object in the chosen direction.
  1397.              Pressed alone for a few seconds: release a Red Disk.
  1398.  
  1399. Enter      = Toggle bottom panel on/off. (Display more of game field.)
  1400.              Before SPFIX54: If no mouse driver was loaded: KILL MURPHY!
  1401.  
  1402. Arrow keys = Move Murphy into the chosen direction.
  1403.              The keypad digits 8 (up), 4 (left), 6 (right) and 2 (down) are
  1404.              functional too.  This is not influenced by the state of NumLock.
  1405.              The mouse is without function in the game, except for the left
  1406.              button, which acts as ESC.
  1407.              In debug mode, after pressing the 'm': move game field that way.
  1408.  
  1409. j          = Recalibrate joystick on the fly.
  1410.  
  1411. p          = Pause on/off.  This is independent from the NumLock pause.
  1412.  
  1413. NumLock    = Pause on/off.  During this pause you can type in "cant sto".
  1414.              Type in those 4 characters, 1 space and 3 characters only:
  1415.              the pause AND the debug mode both end, without pressing NumLock.
  1416.              Remember that these keys refer to the US keyboard layout.
  1417.  
  1418. Pause      = (This key is not checked by Supaplex or any SpeedFix.
  1419.              DOS may still make its own pause with this key ...)
  1420.  
  1421. RIGHT Shift= Show in the bottom panel how many Red Disks Murphy has left.
  1422.  
  1423. left mouse button  = Before SPFIX62:  Kill Murphy!  From SPFIX62: no function.
  1424.                      Do not touch the mouse and don't drop it while playing!
  1425.  
  1426. right mouse button = Before SPFIX62: no function.  From SPFIX62:  Kill Murphy!
  1427.                      Do not touch the mouse and don't drop it while playing!
  1428.                      Now it is the same button as in the menu.
  1429.  
  1430.                   +-----------------------------------------+
  1431.                   | THE SPEED-FIX KEYS I ADDED (GAME ONLY): |
  1432.                   +-----------------------------------------+
  1433. (These 4 keys do their job everywhere in Supaplex, but the result is only seen
  1434. in the game.)
  1435.  
  1436. gray +     = Speed up stepwise to the original speed. (see also gray '-')
  1437.  
  1438. gray -     = Slow down stepwise, independent from the 1..9,0 keys: see below.
  1439.              The debug 'd' command key will show a black-white flickering.
  1440.              This means that the CPU does active waiting in the black periods.
  1441.              Slowing down with these SpeedFix keys does NOT affect the
  1442.              demo's. (The debug speed keys 0..9 do affect the demo's!)
  1443.  
  1444. gray * (x) = Re-adjust speed automatically.  This is default at the start of
  1445.              Supaplex, unless the command line option *... is used (Ver.4+).
  1446.              Version 5.x and higher only adjust once, and remember the setting
  1447.              for this * key.  This is why after each fresh start of the Speed-
  1448.              Fix, the very first moment of the first game is slow: Measuring.
  1449.  
  1450. gray / (:) = Fastest playing speed.  This key is the same as the white slash
  1451.              key ('/') on the (US) keyboard.
  1452.              (This key is not available in SpeedFixes before version 6.2).
  1453.  
  1454. SpeedFix version 4 and up display additional information in the statistics
  1455. screen if the debug mode is on.  The normally dashed line shows delay info
  1456. of the SpeedFix keys and the video frame frequency.
  1457. Example of this line:     -------- <DLY:05> ------- <071HZ> --------
  1458. DLY:00 refers to the original Supaplex speed (fastest).  DLY:10 is slowest.
  1459. DLY:05 is the speed for computers that originally run exactly double speed.
  1460. The video frame frequency information in this example shows 71 Hz, or 71
  1461. frames per second.  This frequency is measured and displayed each time the
  1462. statistics screen is called: you will notice a 1 second measuring delay.
  1463.  
  1464.                      +----------------------------------+
  1465.                      | KEYS I ADDED IN 6.0 (GAME ONLY): |
  1466.                      +----------------------------------+
  1467.  
  1468. Ctrl-W     = Write game situation: make a snapshot which can be loaded with
  1469.              Ctrl-L later.  This makes it possible to proceed with a partly
  1470.              solved level, beginning with the situation at the time the
  1471.              snapshot was written.
  1472.              The snapshot file name is fixed to SAVEGAME.S??, where the "??"
  1473.              depends on the active level set.  Any previous snapshot with the
  1474.              same name is always overwritten and thus gone forever!
  1475.              The lower right corner of the panel will flash "WR" if there
  1476.              were no problems, otherwise it will flash "XX".
  1477.              Ctrl-W does not affect anything: If you finish a level or a demo
  1478.              making snapshots with Ctrl-W, that level counted the normal way,
  1479.              and demo recording/playback is not aborted:  The game situation
  1480.              is written as if no recording or playback was running.
  1481.              (Before SpeedFix version 6.2 there was only one saved game for
  1482.              all level sets possible and was named "SUPAPLEX.SAV".  These old
  1483.              files can be renamed to any of the 101 different "SAVEGAME.S??".)
  1484.              See also the command line options "W" and "L" above.
  1485.  
  1486. Ctrl-L     = Load the snapshot file, written with Ctrl-W.
  1487.              The lower right corner of the panel will flash "LD" if there
  1488.              were no problems, otherwise it will flash "XX".
  1489.              "File does not yet exist" is an example of such a problem.
  1490.              It is not possible to complete a level by using this "cheat"
  1491.              method: If you want to officially finish a level, you have to
  1492.              play it from scratch, without using this snapshot Ctrl-L option!
  1493.              See also the command line options "W" and "L" above.
  1494.  
  1495. Ctrl-ScrollLock = Enable Debug mode during the game.
  1496.                   The lower right corner of the panel will flash "DB".
  1497.  
  1498. Alt-ScrollLock  = Disable Debug mode during the game.  See Debug keys below.
  1499.  
  1500. Ctrl-F12   = Stop demo playback: you take over.  You can finish that demo.
  1501.              (This is the same key that also stops demo recording: see below.)
  1502.  
  1503.            +-----------------------------------------------------+
  1504.            | EXTRA DEBUG KEYS IN THE GAME (US KEYBOARD LAYOUT!): |
  1505.            +-----------------------------------------------------+
  1506.  
  1507. Ctrl FunctionKey    = (Re-)Start recording DEMOx (x=Function key number-1).
  1508.                       Remember that the demo files count from 0 and the
  1509.                       function keys from 1.  Therefore the -1 here.
  1510.                       You can't change the speed of the game when you are
  1511.                       recording a demo.  Only F1 through F10 can be used.
  1512.  
  1513.                       WARNING: THE ORIGINAL CODE LEAVES LOST CLUSTERS ON THE
  1514.                       HARD DISK: do not wait pressing these keys until the
  1515.                       message RECORDING DEMO0 appears since by then it has
  1516.                       reopened the same file without closing it.  This doesn't
  1517.                       destroy data, but you fill your hard drive with trash
  1518.                       if you do not remove those lost clusters.  The resulting
  1519.                       DEMO file is actually inside one of those lost clusters.
  1520.  
  1521.                       I fixed this bug in SpeedFix version 3.
  1522.                       You can now restart the demo recording as much as you
  1523.                       want, since the previous file is now closed first.
  1524.                       Furthermore the RECORDING DEMOx message is put on screen
  1525.                       immediately now, and not with the second open as in the
  1526.                       original code, and it now shows the proper file name.
  1527.  
  1528.                       Maarten Egmond changed the format of the created demo's
  1529.                       to include the level itself. (SpeedFix ver.5 and up)
  1530.                       See also remark at FunctionKey= above.
  1531.  
  1532.                       NEW in version 6.3:  The names of the resulting files
  1533.                       are only DEMOx.B?? when the command like option 'O' is
  1534.                       used.  With no 'O' parameter, new file names are used
  1535.                       to store these recorded demo's: xxSyyy$z.SP, where xx
  1536.                       is the active level number 00-99 (the original level set
  1537.                       becomes '00' here, and because 00 is a different set,
  1538.                       those original '00' demo's are renamed to '--').  And
  1539.                       yyy is the active level number ('---' if the level was
  1540.                       started with the F12 key), and z is the function key
  1541.                       number minus 1, as in the original demo names.
  1542.                       The demo's with new names cannot be replayed instantly:
  1543.                       They can be loaded and viewed with the command line
  1544.                       option ":filename.ext".
  1545.  
  1546.                       Also NEW in version 6.3:  If the file "MYSPSIG.TXT"
  1547.                       exists in the Supaplex directory, the first 511 bytes
  1548.                       (or all of the text when less than 511 bytes) in this
  1549.                       file are used to append it after a successful(!) demo.
  1550.                       SpeedFix automatically adds a terminator byte (FF hex).
  1551.                       If Murphy failed to complete the level, no signature
  1552.                       is appended.  Use Maarten's SPSIG.EXE in this case if a
  1553.                       signature is really wanted (like when showing a trick).
  1554.                       (Using my SupaShow, bad or good demo's are easily found
  1555.                       by looking whether a signature is appended or not.)
  1556.  
  1557. 1,2,3,4,5,6,7,8,9,0 = (not on the keypad!) slow down: 1=normal 0=slowest.
  1558.                       This however does not slow down the timing of the DEMOs:
  1559.                       The demo runs in normal speed, but the screen reacts in
  1560.                       low speed.  Poor Murphy ...
  1561.                       Use the 1 to get back to normal speed, and choose speed
  1562.                       with the SpeedFix keys for the demo's to run properly
  1563.                       in lower speed than normal.
  1564.                       From Version 5.3:  During demo recording this is forced
  1565.                       to 1 and ignored until end of recording.
  1566.                       From Version 6.3:  During demo playback this is forced
  1567.                       to 1 and ignored until end of playback.
  1568.  
  1569. NumLock  = see NumLock above for ending the debug mode with 'cant sto'.
  1570.  
  1571. Keypad 5 = Return to Murphy's position in the screen move mode (see 'm' key).
  1572.  
  1573. r = Restart the active level, without going through the menu.
  1574.     From SpeedFix 6.3:  This key also rewinds running demo's to the start.
  1575.  
  1576. m = Move the game field, not Murphy.  q = Quit this function.
  1577.     The arrow keys move the field into the chosen direction.  The Keypad 5
  1578.     returns the screen to Murphy's position, but the mode stays until 'q'.
  1579.     This command has been improved in SPFIX62:
  1580.     - The screen jumped on the left border: fixed, but now only the game field
  1581.       can be seen by default.  Command line parameter "M" or "m" allows also
  1582.       to look outside of the game field (as before SPFIX62), but without jump.
  1583.     - 6 extra keys for immediately show 6 different parts of the game field.
  1584.       See those new keys below: Ins, Home, PgUp, Del, End, PgDn.
  1585.     - Using this during a demo playback, the screen movement was affected by
  1586.       Murphy's movements.  Not anymore!  (This was just annoying.)
  1587.       Keeping keypad 5 pressed, Murphy is followed without leaving the m mode.
  1588.     From Ver 5.3: This key is ignored during demo recording.
  1589.     From Ver 6.3: This key is reset with q when demo recording starts.
  1590.  
  1591. d = White background.  q = quit (My guess: this shows how much time the CPU
  1592.     needs for its Supaplex calculations.  Darker parts show calculation time.)
  1593.     From Ver 5.3: This key is ignored during demo recording.
  1594.     From Ver 6.3: This key is reset with q when demo recording starts.
  1595.  
  1596. q = Quit from m and d modes.
  1597.  
  1598. s = Remove all Snik Snaks| When something moves, and is removed, the screen
  1599. c = Remove all RAM-Chips | will show strange objects.  If hardware is removed,
  1600. z = Remove all Zonks     | the field edges -especially the bottom edge- do
  1601. b = Remove all Bases     | very strange things with the Supaplex objects.
  1602. h = Remove all Hardware  | I did not introduce these bugs!  (see batch below)
  1603.                          | SPFIX62+ now completely removes the Snik Snaks and
  1604.                          | keeps the "Fancy" hardware and RAM chips!
  1605.  
  1606. - = Goto screen of previous level (not the keypad '-'.  See also '='-key)
  1607.  
  1608. = = Goto screen of next level  (-,= before SpeedFix 4: no level name update.)
  1609.     ('+' is the shifted '=' key on the US keyboard, so we deal with + and -)
  1610.  
  1611. F1= Toggle gravity on/off
  1612. F2= Prevent Zonks from falling: off/on/off. (Press twice for on, once for off)
  1613.     From SPFIX62:  Just toggle this on/off:  no pressing twice anymore.
  1614. F3= Toggle 'freeze Snik Snaks and Electrons' on/off
  1615.     (These 3 keys reflect all properties that special ports can change.  Those
  1616.     special ports were thought to only affect gravity, until September 1997)
  1617.  
  1618. right mouse button = From SPFIX62: Kill Murphy!        Before SPFIX62:
  1619.                      "normalize" Hardware and RAM chips: "Fancy" stuff changes
  1620.                      to dull stuff.  Actually this happens with almost all
  1621.                      debug keys which change things.  Supaplex just repaints
  1622.                      the screen from memory, which is already "normalized" for
  1623.                      fast game reactions, so it does not always have to go
  1624.                      through all different Hardware and RAM-chip stuff.
  1625.  
  1626. left mouse button  = Before SPFIX62: Kill Murphy!      From SPFIX62:
  1627.                      Toggle normalized Hardware and RAM chips to fancy stuff
  1628.                      and back.  The debug keys which change things now do not
  1629.                      normalize fancy stuff anymore!
  1630.  
  1631.                   +---------------------------------------+
  1632.                   | EXTRA DEBUG KEY MAARTEN EGMOND ADDED: |
  1633.                   +---------------------------------------+
  1634.  
  1635. Ctrl-F12   = Stop demo recording.  This will close the demo file that is being
  1636.              recorded.  The game will continue as if nothing happened.  This
  1637.              key will only work when a game is being recorded.  If you press
  1638.              this key in the main menu it will be regarded as a normal F12.
  1639.              (This is the same key that also stops demo playback: see above)
  1640.  
  1641.                         +---------------------------+
  1642.                         | EXTRA DEBUG KEYS I ADDED: |
  1643.                         +---------------------------+
  1644.  
  1645. Alt-ScrollLock  = Switch Debug mode off during the game.
  1646.                   The lower right corner of the panel will flash "--".
  1647.                   If any of the "d" or "m" keys were used, an automatic "q"
  1648.                   is invoked. (If you don't want to leave those d and m modes,
  1649.                   you can also press NumLock followed by the "cant sto".)
  1650.  
  1651. Ins Home PgUp   = During the "Move the game field" mode (see m key) it seemed
  1652. Del End  PgDn     convenient to me to show a specific part of the game field
  1653.                   with an easy procedure.  The arrangement of these six keys
  1654.                   on the keyboard is the same as the corresponding part of
  1655.                   the game field.  Home is on top in the middle, and so on.
  1656.                   As long as you don't use a notebook, you don't have to
  1657.                   remember which key shows which part of the game field.
  1658.                   Those 6 field parts just overlap (if the panel is switched
  1659.                   off): The whole game field can be inspected extremely fast.
  1660.  
  1661. ------------------------------------------------------------------------------
  1662.  
  1663.                       +-------------------------------+
  1664.                       | ABOUT SPEEDFIX DELAY FACTORS: |
  1665.                       +-------------------------------+
  1666.  
  1667. The original Supaplex runs at "maximum" speed on each machine.  At the time
  1668. Supaplex was programmed, it ran at only one speed on all machines (except on
  1669. those very slow machines where calculation time was not acceptable).
  1670. The SpeedFix allows 11 different speeds, of which one is the only original
  1671. Supaplex speed from the old days, and one is the (original) maximum speed of
  1672. today's original Supaplex.
  1673.  
  1674. Let us number the 11 different speeds from 0 to 10, where 0 is maximum speed,
  1675. and let us call those numbers "SpeedFix values".
  1676. These numbers are somehow related to the amount of extra delays that the
  1677. SpeedFix inserts in-between the many separate Supaplex video frames:
  1678.  
  1679. As also written somewhere above, Supaplex takes some time for its own internal
  1680. calculations, which used to last over 1/70th of a second for each new frame,
  1681. but on present day machines this takes less than 1/70th of a second.
  1682.  
  1683. After those calculations are ready, Supaplex just sits and waits for the first
  1684. occurrence of a video frame synchronization pulse, which come each 1/70th of a
  1685. second.
  1686.  
  1687. Let us now forget about the calculations and just notice that in the old days
  1688. it took 2 delays (of 1/70th of a second) for each new Supaplex frame, and now
  1689. it takes 1 delay (of 1/70th of a second) for each new Supaplex frame on fast
  1690. machines. (Original Supaplex!), which makes the game exactly twice as fast.
  1691. In other words:  Originally it took 1/35th of a second per Supaplex frame,
  1692. and now, with fast machines, it takes 1/70th of a second per frame.
  1693.  
  1694. The SpeedFix introduces extra (discrete) delays: it waits for extra video-
  1695. frame synchronization pulses (the 70 Hz pulses), and the amount of extra
  1696. delays is (for each of the SpeedFix values 0..10):
  1697.  
  1698.    0,   1/5, 1/4, 1/3, 1/2,   1,   2,   3,   4,   5,   6
  1699.  
  1700. (The fractional amounts of delays are created by inserting one delay every
  1701. so many calculation cycles, and taking the mean delay over a large enough
  1702. time interval.)
  1703.  
  1704. The multiplication factor for the playing time can be calculated from these
  1705. extra(!) delays.  The original Supaplex standard playing time from the old
  1706. days, multiplied with such a factor equals the true playing time now.
  1707.  
  1708. For slow machines these can only be (depending on the SpeedFix value 0..10):
  1709.  
  1710.    1, 11/10, 9/8, 7/6, 5/4, 3/2, 4/2, 5/2, 6/2, 7/2, 8/2
  1711.  
  1712. Time multiplication factors for fast machines (for "normalized" playing time):
  1713.  
  1714.  1/2,  6/10, 5/8, 4/6, 3/4, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2
  1715.  
  1716. Example calculation for slow machines for SpeedFix value 7:
  1717.  
  1718.   Supaplex waits on slow machines for 2 delays per frame of its own.
  1719.   We put in an extra 3 (from SpeedFix value 7) and we get 5 delays in total.
  1720.   This 5 divided by the 2 of the original game from the old days makes 5/2,
  1721.   which means that Supaplex waits 5/2 times the original time, which means
  1722.   also that the playing time is prolonged to 5/2 times the original time,
  1723.   which is calculated by counting frames of 1/35th of a second each.
  1724.  
  1725. The same calculation example for the present fast machines:
  1726.  
  1727.   Supaplex waits on fast machines for 1 delay per frame of its own.
  1728.   We put in an extra 3 (from SpeedFix value 7) and we get 4 delays in total.
  1729.   This 4 divided by the 2 of the original game from the old days makes 4/2,
  1730.   which means that Supaplex waits 4/2 times the original time, which means
  1731.   also that the playing time is prolonged to 4/2 times the original time,
  1732.   which is also calculated by counting frames of 1/35th of a second each.
  1733.  
  1734. Note: The "@" command line option tells the SpeedFix never to wait for any
  1735.       of those video synchronization pulses.  Not even those waits from the
  1736.       original Supaplex are executed:  The speed depends on calculations only.
  1737.  
  1738. The original VGA standard "frame rate" at the Supaplex screen resolution of
  1739. 320 * 200 dots (16 colors) is 70Hz (= 70 frames per second).
  1740. In some notebooks this 70Hz is reduced to 60Hz, which makes things even more
  1741. complicated ...  The SpeedFix does not correct for this non-standard rate.
  1742.  
  1743. What is worse: Present day turbo video cards may have this low resolution
  1744. badly implemented, which even can make it impossible to play Supaplex.
  1745. (Neglected because everyone cries for higher speeds and higher resolutions...)
  1746. Example: Several Matrox video cards, ...
  1747.  
  1748. How does the automatic SpeedFix speed-adaptation work?
  1749. ======================================================
  1750. The SpeedFix uses the system clock (which Supaplex had speeded up to 50 Hz) to
  1751. measure time intervals, and adapts the number of calculation cycles per time
  1752. interval to the standardized expected amount:  7 cycles per 1/5th of a second.
  1753. If the SpeedFix value ends up as 5, which means that exactly one extra delay
  1754. was needed, we deal with a fast computer.  If the SpeedFix value ends up as 0,
  1755. which means that no extra delays are allowed, we have a slow computer at hand.
  1756. I forced nearby SpeedFix values to 0 or 5:  1 becomes 0, and 4 or 6 become 5.
  1757. In-between values have also popped up, at the video frame rate of 60 Hz ...
  1758.  
  1759. This machine dependent SpeedFix value is stored somehow in each recorded demo,
  1760. together with the SpeedFix value of the slowest recording speed.  From these
  1761. two values, together with the information in the demo itself, we calculate the
  1762. total playing time of the demo.  I know, that slowing down for a short moment
  1763. during a demo recording, and then speeding up again, results in unrealistic
  1764. and "unfair" long recording times, but that's life:  Just don't slow down...
  1765.  
  1766. ------------------------------------------------------------------------------
  1767.  
  1768.      +------------------------------------------------------------------+
  1769.      | HOW TO SWITCH ON THE DEBUG MODE WITH THE ORIGINAL SUPAPLEX CODE: |
  1770.      +------------------------------------------------------------------+
  1771.  
  1772. The ORIGINAL Supaplex version can be switched into the debug mode with the
  1773. following batch job (which needs the DOS program DEBUG.COM or DEBUG.EXE).
  1774. (All "cracked" original Supaplex versions are considered "original" too.)
  1775. This batch can be extracted from this file by deleting everything except the
  1776. following 10 lines, and save it as SUP.BAT into the Supaplex directory:
  1777.  
  1778. @echo off
  1779. echo g33 > supaplex.deb
  1780. echo t >> supaplex.deb
  1781. echo g103 >> supaplex.deb
  1782. echo t >> supaplex.deb
  1783. echo ecs:a040 1 >> supaplex.deb
  1784. echo g >> supaplex.deb
  1785. echo q >> supaplex.deb
  1786. debug supaplex.exe < supaplex.deb
  1787. del supaplex.deb
  1788.  
  1789.  
  1790. NOTE: This batch is NOT to be used with any of my SpeedFix versions!
  1791.       SEE ALSO MY WARNING ABOUT THE 'RECORDING DEMO' BUG! (Ctrl-FunctionKeys)
  1792.  
  1793. I use this batch job to compare the behavior of my recompiled version with
  1794. the original code.  I did never see any differences yet except for the
  1795. improvements I made.
  1796.  
  1797. If the text "CODE: xyz" shows, there are three more ASCII characters on
  1798. screen, just behind the text "ENTER: ???".  These are, if converted to digits,
  1799. the code to enter: Space=0, !=1, "=2, #=3, $=4, %=5, &=6, '=7, (=8, )=9.
  1800. If the protection has been removed by a patch, this can be ignored.
  1801.  
  1802. ------------------------------------------------------------------------------
  1803.  
  1804.        +------------------------------------------------------------+
  1805.        | HOW TO FORCE THE EGA MODE WITH THE ORIGINAL SUPAPLEX CODE: |
  1806.        +------------------------------------------------------------+
  1807.  
  1808. With one additional line, the above batch job can also force the video mode
  1809. on VGA cards to run as if it runs with an EGA card, and with debug mode on.
  1810. The behavior and the colors of Supaplex are totally different now.
  1811. Different code is used in the program, and the standard 16 colors are used in
  1812. stead of using the VGA palettes for nicer colors.
  1813.  
  1814. @echo off
  1815. echo g33 > supaplex.deb
  1816. echo t >> supaplex.deb
  1817. echo g103 >> supaplex.deb
  1818. echo t >> supaplex.deb
  1819. echo ecs:5378 0 >> supaplex.deb
  1820. echo ecs:a040 1 >> supaplex.deb
  1821. echo g >> supaplex.deb
  1822. echo q >> supaplex.deb
  1823. debug supaplex.exe < supaplex.deb
  1824. del supaplex.deb
  1825.  
  1826.  
  1827. NOTE: This batch is NOT to be used with any of my SpeedFix versions!
  1828.       I included a command line switch to force it on in my SpeedFix (v4+):
  1829.       use the command line parameter EGA (capitalized in v4 only) as in:
  1830.       SPFIXnn EGA
  1831.  
  1832. On VGA there is a quirk in location of the panel.
  1833. I did not test it with an original EGA card, so I do not know if it is a bug.
  1834. (VGA cards need a different approach when using EGA code, which may be why.)
  1835.  
  1836. The EGA mode is switched on with the line:    echo ecs:5378 0 >> supaplex.deb
  1837. The debug mode is switched on with the line:  echo ecs:a040 1 >> supaplex.deb
  1838. The lines with g33,t,g103,t are to persuade Supaplex to unpack itself.
  1839. Supaplex has to be unpacked, since the debug byte is inside of a packed block.
  1840.  
  1841. ------------------------------------------------------------------------------
  1842.  
  1843.        +-------------------------------------------------------------+
  1844.        | EXTRA INFO ABOUT THE ORIGINAL SUPAPLEX CODE (FOR INSIDERS): |
  1845.        +-------------------------------------------------------------+
  1846.  
  1847. I found two different protection patches of the original Supaplex game:
  1848.  
  1849. 1- If any number can be entered, and the game starts anyway, the described 3
  1850.    debug-mode ASCII characters can be ignored, but they are visible anyway.
  1851.    This was a single or double byte patch, which both ignore the result of
  1852.    the entered code, but still runs all of the protection code:
  1853.  
  1854.    The most common patch is the single byte patch (also my original):
  1855.  
  1856.                   edit: SUPAPLEX.EXE
  1857.                   search: 3B 0E 34 DE 75 06 C6 06
  1858.                   change: -- -- -- -- -- 00 -- --      (-- = leave as it is)
  1859.  
  1860.    (This patch changes a conditional JUMP to jump to the next instruction,
  1861.    and therefore this jump is disabled: it does nothing.)
  1862.  
  1863.    I found the following text for the two byte patch in the Internet:
  1864.  
  1865.    (Quote:)       edit: SUPAPLEX.EXE
  1866.                   search: 3B 0E 34 DE 75 06 C6 06
  1867.                   change: -- -- -- -- 90 90 -- --      (-- = leave as it is)
  1868.  
  1869.    (This patch changes the same conditional JUMP into NOP's, which do nothing)
  1870.  
  1871. 2- If the screen with author names is immediately followed by the menu,
  1872.    without waiting for a code, then Supaplex has been patched differently,
  1873.    and all of the remarks about 3 debug-mode ASCII characters can be ignored,
  1874.    since those will never appear on screen.
  1875.  
  1876.    This was a 3 byte patch, which bypassed the complete protection:
  1877.  
  1878.    I found this text somewhere else in the Internet too:
  1879.  
  1880.    (Quote:)       Crack for SUPAPLEX by Satch.
  1881.                   File: SUPAPLEX.EXE
  1882.                   Search for  : E8 E9 05 E8 98 87
  1883.                   Replace with: -- -- -- 90 90 90      (-- = leave as it is)
  1884.  
  1885.    (This patch changes the CALL to the protection routine into NOP's.)
  1886.  
  1887. Maarten wrote in his FAQ on his Supaplex pages, that there is another patch,
  1888. which waits for just a single "any key" to proceed to the menu.
  1889. I have never seen any other reference to that patch.
  1890. (It wouldn't start on my computer, because I don't seem to have an "any" key.)
  1891.  
  1892. These texts were my verification for the reconstruction of the original
  1893. protected code, that I made before I knew these texts.  Why I wanted to
  1894. reconstruct the protected code?  I wanted an original disassembly, and
  1895. sometimes such patches change the behavior of the program somehow.
  1896.  
  1897. (In 1998 this reconstruction has been verified: The SUPAPLEX.EXE from the
  1898. official Supaplex version on CD is byte for byte identical!  Only the
  1899. installation program has changed and a TSR program has been added to run
  1900. Supaplex from CD.  There is also a manual in PDF format, but it uses a
  1901. special keycaps font (PIXymbols.command) which is not included on CD!
  1902. The printed result of that manual looks a bit weird with the font-substitute
  1903. that the many different Adobe Acrobat Readers on that CD choose instead.)
  1904.  
  1905. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1906.  
  1907. Together with the two byte patch text I found following text too: (Quote:)
  1908.  
  1909.       Edit the savefile with a HexEditor (it's a hidden file!) and edit this
  1910.       after your name (as entered when you first created a character in the
  1911.       game) enter a few 01 hex characters , ascii code 1 a small face (white)
  1912.       and this counts as one more completed level.  Do this up till about 111
  1913.       or as far as you like !
  1914.  
  1915. The referred savefile is PLAYER.LST, and everyone with a little bit of
  1916. experience already did this automatically without ever reading this text.
  1917.  
  1918. There is also a utility on Maarten's pages to make these changes to this file.
  1919.  
  1920. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1921.  
  1922.                    +------------------------------------+
  1923.                    | COMPLETE LIST OF PROTECTION CODES: |
  1924.                    +------------------------------------+
  1925.  
  1926. These codes are only needed to start the original unpatched, protected game.
  1927. (Don't think that I typed this code table ...  I'm not that kind of crazy!)
  1928.  
  1929. 000 864   063 303   126 766   189 205   252 668   315 107   378 570   441 009
  1930. 001 465   064 928   127 367   190 830   253 269   316 732   379 171   442 634
  1931. 002 066   065 529   128 992   191 431   254 894   317 333   380 796   443 235
  1932. 003 691   066 130   129 593   192 032   255 495   318 958   381 397   444 860
  1933. 004 292   067 755   130 194   193 657   256 096   319 559   382 511   445 461
  1934. 005 917   068 356   131 819   194 258   257 721   320 160   383 623   446 062
  1935. 006 518   069 981   132 420   195 883   258 322   321 785   384 224   447 687
  1936. 007 119   070 582   133 021   196 484   259 947   322 386   385 849   448 288
  1937. 008 744   071 183   134 646   197 085   260 548   323 505   386 450   449 913
  1938. 009 345   072 808   135 247   198 710   261 149   324 612   387 051   450 514
  1939. 010 970   073 409   136 872   199 311   262 774   325 213   388 676   451 115
  1940. 011 571   074 010   137 473   200 936   263 375   326 838   389 277   452 740
  1941. 012 172   075 635   138 074   201 537   264 500   327 439   390 902   453 341
  1942. 013 797   076 236   139 699   202 138   265 601   328 040   391 503   454 966
  1943. 014 398   077 861   140 300   203 763   266 202   329 665   392 104   455 567
  1944. 015 511   078 462   141 925   204 364   267 827   330 266   393 729   456 168
  1945. 016 624   079 063   142 526   205 989   268 428   331 891   394 330   457 793
  1946. 017 225   080 688   143 127   206 590   269 029   332 492   395 955   458 394
  1947. 018 850   081 289   144 752   207 191   270 654   333 093   396 556   459 509
  1948. 019 451   082 914   145 353   208 816   271 255   334 718   397 157   460 620
  1949. 020 052   083 515   146 978   209 417   272 880   335 319   398 782   461 221
  1950. 021 677   084 116   147 579   210 018   273 481   336 944   399 383   462 846
  1951. 022 278   085 741   148 180   211 643   274 082   337 545   400 504   463 447
  1952. 023 903   086 342   149 805   212 244   275 707   338 146   401 609   464 048
  1953. 024 504   087 967   150 406   213 869   276 308   339 771   402 210   465 673
  1954. 025 105   088 568   151 007   214 470   277 933   340 372   403 835   466 274
  1955. 026 730   089 169   152 632   215 071   278 534   341 997   404 436   467 899
  1956. 027 331   090 794   153 233   216 696   279 135   342 598   405 037   468 500
  1957. 028 956   091 395   154 858   217 297   280 760   343 199   406 662   469 101
  1958. 029 557   092 510   155 459   218 922   281 361   344 824   407 263   470 726
  1959. 030 158   093 621   156 060   219 523   282 986   345 425   408 888   471 327
  1960. 031 783   094 222   157 685   220 124   283 587   346 026   409 489   472 952
  1961. 032 384   095 847   158 286   221 749   284 188   347 651   410 090   473 553
  1962. 033 504   096 448   159 911   222 350   285 813   348 252   411 715   474 154
  1963. 034 610   097 049   160 512   223 975   286 414   349 877   412 316   475 779
  1964. 035 211   098 674   161 113   224 576   287 015   350 478   413 941   476 380
  1965. 036 836   099 275   162 738   225 177   288 640   351 079   414 542   477 502
  1966. 037 437   100 900   163 339   226 802   289 241   352 704   415 143   478 606
  1967. 038 038   101 501   164 964   227 403   290 866   353 305   416 768   479 207
  1968. 039 663   102 102   165 565   228 004   291 467   354 930   417 369   480 832
  1969. 040 264   103 727   166 166   229 629   292 068   355 531   418 994   481 433
  1970. 041 889   104 328   167 791   230 230   293 693   356 132   419 595   482 034
  1971. 042 490   105 953   168 392   231 855   294 294   357 757   420 196   483 659
  1972. 043 091   106 554   169 508   232 456   295 919   358 358   421 821   484 260
  1973. 044 716   107 155   170 618   233 057   296 520   359 983   422 422   485 885
  1974. 045 317   108 780   171 219   234 682   297 121   360 584   423 023   486 486
  1975. 046 942   109 381   172 844   235 283   298 746   361 185   424 648   487 087
  1976. 047 543   110 503   173 445   236 908   299 347   362 810   425 249   488 712
  1977. 048 144   111 607   174 046   237 509   300 972   363 411   426 874   489 313
  1978. 049 769   112 208   175 671   238 110   301 573   364 012   427 475   490 938
  1979. 050 370   113 833   176 272   239 735   302 174   365 637   428 076   491 539
  1980. 051 995   114 434   177 897   240 336   303 799   366 238   429 701   492 140
  1981. 052 596   115 035   178 498   241 961   304 400   367 863   430 302   493 765
  1982. 053 197   116 660   179 099   242 562   305 001   368 464   431 927   494 366
  1983. 054 822   117 261   180 724   243 163   306 626   369 065   432 528   495 991
  1984. 055 423   118 886   181 325   244 788   307 227   370 690   433 129   496 592
  1985. 056 024   119 487   182 950   245 389   308 852   371 291   434 754   497 193
  1986. 057 649   120 088   183 551   246 507   309 453   372 916   435 355   498 818
  1987. 058 250   121 713   184 152   247 615   310 054   373 517   436 980   499 419
  1988. 059 875   122 314   185 777   248 216   311 679   374 118   437 581
  1989. 060 476   123 939   186 378   249 841   312 280   375 743   438 182
  1990. 061 077   124 540   187 501   250 442   313 905   376 344   439 807
  1991. 062 702   125 141   188 604   251 043   314 506   377 969   440 408
  1992.  
  1993. ------------------------------------------------------------------------------
  1994.  
  1995.         +-------------------------------------------------------+
  1996.         | INFO FOR PEOPLE WHO WANT TO MAKE PORTABLE DEMO FILES: |
  1997.         +-------------------------------------------------------+
  1998.  
  1999. First of all: SEE MY WARNING above with the Ctrl-FunctionKeys:
  2000.               USE MY SPEED-FIX VERSION 3 (or higher) FOR RECORDING!
  2001.               USE SPEED-FIX VERSION 6.1 (or higher) FOR NEVER-FAIL RECORDING!
  2002.               (Never-fail: the demo always plays back as it was recorded!)
  2003.  
  2004. Note that there are roughly two types of demo's:
  2005. 1) Original Supaplex demo format,
  2006. 2) .SP format, used for SpeedFix 5.0 and higher, and SPEDIT v3.0 and higher.
  2007.  
  2008. The two formats are not compatible (you can't play demo's made with the
  2009. SpeedFix v5.0 or higher with the original Supaplex version and vice versa),
  2010. but they can be converted quite easily: The "new" format simply has the
  2011. actual level prepended, and the rest is pretty much the same as the old
  2012. format.  Since the old demo's don't have the level prepended, they rely on the
  2013. first byte (so it's the 1537th byte in the new format) which states the level
  2014. number to be used when playing the demo.  Obviously, the new format is very
  2015. much preferred, since you don't need the correct level set for it: any loose
  2016. .SP file will work.
  2017.  
  2018. Also note that from SpeedFix v5.3, the level byte (the 1537th byte in the .SP
  2019. file) is actually increased by 128.  This is to note that it's recorded with
  2020. at least version 5.3.  To get the correct level number (which is probably
  2021. useless, since it's not used in the demo, and probably has to be changed for
  2022. the old demo format anyway) you should ignore the highest bit (that is, you
  2023. should subtract 128 if the value is higher than 128).
  2024.  
  2025. From SpeedFix version 6.2 the 10 original demo files are recognized and are
  2026. the only exceptions on the above rules: they can be used with the SpeedFix!
  2027. (I introduced this because I sometimes want to check with the original game,
  2028. and the 10 demo's were just not compatible with the other EXE file.)
  2029.  
  2030. ------------------------------------------------------------------------------
  2031.  
  2032.                      +-----------------------------+
  2033.                      | SUPAPLEX FILE ARCHITECTURE: |
  2034.                      +-----------------------------+
  2035.  
  2036. The LEVELS.D?? (LEVELS.DAT) architecture:
  2037. ========================================
  2038.  
  2039. - 111 single levels of 1536 bytes each, totaling 111 * 1536 = 170496 bytes.
  2040.   These levels are just glued together.  See the "single level architecture".
  2041.   The original Supaplex uses only LEVELS.DAT.  Additionally, for the SpeedFix,
  2042.   the ?? is a number from 00 to 99, for easy access to different level-sets.
  2043.  
  2044. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2045.  
  2046. The single level architecture as used in LEVELS.D??, *.SP and DEMO?.B??:
  2047. =======================================================================
  2048.  
  2049. Bytes - Description
  2050. -----   ----------------------------------------------------------------------
  2051.  1440 - The level itself (width * height = 60 * 24 = 1440)
  2052.         (See also below: "The level elements in the 1440 byte level")
  2053.  
  2054.     4 - unused (I found nothing in the program yet that uses these bytes!)
  2055.  
  2056.     1 - Initial gravitation: 1=on, anything else (0) = off
  2057.  
  2058.     1 - 20h = unused ASCII space character in the original SUPAPLEX.EXE and
  2059.         all SpeedFix versions up to v5.2.    Used from versions 5.3 and up as:
  2060.         20h + SpeedFix version number in hex format: v5.3 -> 73h, v6.2 -> 82h.
  2061.  
  2062.    23 - Level title in uppercase ASCII, stuffed with dashes ("-").
  2063.  
  2064.     1 - Initial "Freeze Zonks": 2=on, anything else (0) = off.  (1=off too!)
  2065.  
  2066.     1 - Number of Infotrons needed. 0 means that Supaplex will count the total
  2067.         amount of Infotrons in the level, and use the low byte of that number.
  2068.         (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
  2069.  
  2070.     1 - Number of special ("gravity") port entries below.  Maximum 10 allowed!
  2071.  
  2072.    60 - Data-base of properties of up to 10 special ports, 6 bytes per port.
  2073.     Each of those 10 entries is formatted as:
  2074.  
  2075.         [hi],[lo],[gravity],[freeze Zonks],[freeze enemies],[unused]
  2076.  
  2077.         where:
  2078.  
  2079.         [hi],[lo]       : high and low byte of the location of a special port.
  2080.                           If (x,y) are the coordinates of a port in the field
  2081.                           and (0,0) is the top-left corner, the 16 bit value
  2082.                           here calculates as 2*(x+(y*60)).  This is twice of
  2083.                           what you may have expected: Supaplex works with a
  2084.                           game field in memory, which is 2 bytes per sprite.
  2085.  
  2086.         [gravity]       : 1 = turn on, anything else (0) = turn off
  2087.  
  2088.         [freeze Zonks]  : 2 = turn on, anything else (0) = turn off  (1=off!)
  2089.  
  2090.         [freeze enemies]: 1 = turn on, anything else (0) = turn off
  2091.  
  2092.         [unused]        : doesn't matter: is ignored.
  2093.  
  2094.     4 - Unused in the original SUPAPLEX.EXE and SpeedFix versions up to v5.1.
  2095.         Used by SpeedFix versions (5.2 and higher) to store some vital demo
  2096.         information.  (Version 5.2 used only the last 2 bytes.)
  2097.         Maarten and I will not disclose the exact use of these bytes, because
  2098.         it would make it easier to cheat with demo times for his Hall-Of-Fame.
  2099.  
  2100.  
  2101. Note that since the SpeedFix has been used, there have been a few changes:
  2102. The last 4 bytes are used now, and the '20h' byte is used for the version
  2103. number.  Also note that it may be possible to use the last 4 bytes for a
  2104. gravity port, but that you shouldn't use it (you can't with SPEDIT) since it's
  2105. already used in the SpeedFix.
  2106.  
  2107. Supaplex knows only how to display the ASCII characters 20h through 5Fh, which
  2108. only are: { !"#$%&'()*+,-./013456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_}
  2109. but only those characters within and without the {} here.
  2110. This limits the level name to upper case, but all the other characters of this
  2111. list can be used too.  Maarten's SPEDIT doesn't accept the whole list (yet).
  2112.  
  2113. If Murphy passes a special port, the Number Of Special Ports at the end of
  2114. the level is used as counter of how many data-base entries are to be checked.
  2115. Is the address of an entry equals Murphy's location (inside the port), then
  2116. the three properties are updated: Gravity, Freeze Zonks and Freeze enemies.
  2117. This way of handling the special ports means that:
  2118. - entries that are not pointing to a special port are ignored,
  2119. - unused data-base entries are ignored,
  2120. - special ports without database entries behave just like a normal port.
  2121. - when the port is blown up, nothing will happen if Murphy walks where the
  2122.   port used to be: without passing a special port, nothing happens.
  2123.  
  2124. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2125.  
  2126. The level elements in the 1440 byte level:
  2127. =========================================
  2128.  
  2129. The game field counts 24 lines of 60 sprites each, and these sprites are coded
  2130. byte-wise, making the level size 60 * 24 = 1440 bytes.  The level is stored
  2131. the same way as you read this document: Starting from the left, top line
  2132. first, then the next line, starting from the left, and so on.  The last
  2133. byte is the rightmost bottom corner.
  2134. Here are the sprite-code bytes (hex byte value, decimal byte value, sprite):
  2135.  
  2136.   00h =  0     Space
  2137.   01h =  1     Zonk
  2138.   02h =  2     Base
  2139.   03h =  3     Murphy
  2140.   04h =  4     Infotron
  2141.   05h =  5     RAM chip (pins on all 4 sides, standard shape)        ("Dull")
  2142.   06h =  6     Hardware (gray dented pyramid, standard shape)        ("Dull")
  2143.   07h =  7     Exit
  2144.   08h =  8     Utility Disk, Orange
  2145.   09h =  9     Port left to right
  2146.   0Ah = 10     Port up to down
  2147.   0Bh = 11     Port right to left
  2148.   0Ch = 12     Port down to up
  2149.   0Dh = 13     Special port left to right (changing gravity etc.)
  2150.   0Eh = 14     Special port up to down    (changing gravity etc.)
  2151.   0Fh = 15     Special port right to left (changing gravity etc.)
  2152.   10h = 16     Special port down to up    (changing gravity etc.)
  2153.   11h = 17     Snik Snak (initially pointing upward)
  2154.   12h = 18     Utility Disk, Yellow
  2155.   13h = 19     Terminal for exploding yellow disk
  2156.   14h = 20     Utility Disk, Red
  2157.   15h = 21     Port vertical, bi-directional
  2158.   16h = 22     Port horizontal, bi-directional
  2159.   17h = 23     Port horizontal + vertical (cross)
  2160.   18h = 24     Electron (initially pointing upward)
  2161.   19h = 25     Bug
  2162.  
  2163.   1Ah = 26     RAM chip (horizontal left ("pin 1"))                  ("Fancy")
  2164.   1Bh = 27     RAM chip (horizontal right)                           ("Fancy")
  2165.   1Ch = 28     Hardware (radial blue circular cap + colored shapes)  ("Fancy")
  2166.   1Dh = 29     Hardware (green signal lamp)                          ("Fancy")
  2167.   1Eh = 30     Hardware (blue signal lamp)                           ("Fancy")
  2168.   1Fh = 31     Hardware (red signal lamp)                            ("Fancy")
  2169.   20h = 32     Hardware (yellow/black diagonal stripes)              ("Fancy")
  2170.   21h = 33     Hardware (yellow resistor + blue + red shapes)        ("Fancy")
  2171.   22h = 34     Hardware (horizontal red capacitor + smd shape)       ("Fancy")
  2172.   23h = 35     Hardware (red + yellow + blue horizontal resistors)   ("Fancy")
  2173.   24h = 36     Hardware (3 red vertical resistors)                   ("Fancy")
  2174.   25h = 37     Hardware (3 yellow horizontal resistors)              ("Fancy")
  2175.   26h = 38     RAM chip (vertical top ("pin 1"))                     ("Fancy")
  2176.   27h = 39     RAM chip (vertical bottom)                            ("Fancy")
  2177.  
  2178.   28h = 40     Invisible wall
  2179.  
  2180.   29h = 41 and above:  Unused.  Displayed trash.  Invisible since version 6.0.
  2181.  
  2182. Supaplex scans the level from the beginning to find Murphy, and activates the
  2183. first available Murphy.  If there are more Murphies in the level, the leftmost
  2184. of the topmost Murphies is therefore the lucky one, but the other Murphies
  2185. must be protected because when the program sees any attacked Murphy, it does
  2186. not check if it is the active Murphy, which causes all Murphies to die.
  2187. (My level "TRIVIAL" was also the first level to use this as a feature, but
  2188. because of the problems with SPEDIT, it was only released after my "SUICIDE".)
  2189.  
  2190. In order not to test too many different byte-values, Supaplex changes the
  2191. "Fancy" stuff to "Dull" stuff internally before the game starts.
  2192. (During the game, each sprite is checked for all different possibilities,
  2193. and many decisions have to be made this way.  Supaplex does not use the faster
  2194. and more intelligent method of "indexing", which would make these changes from
  2195. "Fancy" to "Dull" unnecessary.  I think that maybe the programmer decided for
  2196. his way in an early stage of the game-design , where the amount of different
  2197. sprites did not justify the use of "indexing".)
  2198.  
  2199. In the "normalized" or "Dull" game field, code 1Fh is used for explosions.
  2200. This is why in previous versions of the SpeedFix explosions sometimes showed
  2201. or flashed as red signal lamps in debug mode.
  2202.  
  2203. The invisible wall was not known to the programmers.  Experimenting with
  2204. "illegal" bytes, I found this wall and designed the two levels "TRIVIAL?" and
  2205. "SURFIN'" with it.  Maarten's SPEDIT (2.0 at that time) automatically changed
  2206. this wall to some hardware, destroying those levels.  I told Maarten about
  2207. this wall and asked him to change his SPEDIT to not destroy that wall anymore.
  2208. At first he protested, saying that you never know what might happen using it,
  2209. but the result is: We now have this invisible wall "officially", and his
  2210. SPEDIT 2.0 was updated to 3.x to include this wall.
  2211.  
  2212. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2213.  
  2214. The LEVEL.L?? (LEVELS.LST) architecture:
  2215. =======================================
  2216.  
  2217. The LEVELS.D?? must be accompanied by their own LEVEL.L?? (LEVEL.LST) files,
  2218. which is only used for speeding up the loading of the game (from floppy disk).
  2219.  
  2220. - 111 lines of 27 bytes of level information plus a 1-byte line-terminator,
  2221.   totaling 111 * (27 + 1) = 3108 bytes.
  2222.   Each of these entries MUST be exactly 28 characters long:
  2223.  
  2224.     3 - ASCII digits level number ("001" up to "111")
  2225.  
  2226.     1 - ASCII space character (" " or 20h)
  2227.  
  2228.    23 - Level name in uppercase ASCII, including the "-" stuffing.
  2229.  
  2230.     1 - ASCII line-feed character (0Ah), without carriage-return character!
  2231.  
  2232.  
  2233. Example:     "055 -- THIS IS MY LEVEL ---" + <Line-Feed>
  2234.  
  2235. All information in this file is also available in the LEVELS.D??, so why
  2236. should any missing LEVEL.L?? prevent Supaplex from starting the game?
  2237. From SpeedFix version 6.2 these files became optional:  If it exists, it is
  2238. used as before, otherwise the information is extracted from LEVELS.D??.
  2239. When the command line parameter "C" or "c" was used, the missing LEVEL.L?? is
  2240. then created from that reconstruction. (It does not overwrite existing files.)
  2241.  
  2242. The original LEVEL.LST differs from the reconstructed file, because of the
  2243. separator in the name of level 042 "LITTLE?PLEASURE":  space versus dash.
  2244.  
  2245. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2246.  
  2247. The original Supaplex DEMO?.BIN architecture:
  2248. ============================================
  2249.  
  2250. These files as described here can only be used with the original Supaplex and
  2251. SpeedFix V4 and below, but this original demo format is exactly the demo part
  2252. of the new DEMO?.B?? and *.SP files (with the exception of the highest bit of
  2253. the very first byte)!  The 10 original demo's from the original game are the
  2254. only old-style demo's that now also work again with SpeedFix 6.2 and above.
  2255.  
  2256.  
  2257. - Level number byte of the level to be used with the demo.
  2258.   Legal values are hex 01h to 6Fh (=111 decimal). (New format: hex 81h to EFh)
  2259.   This is an important byte of the original Supaplex demo's because it tells
  2260.   which level to load with the demo.
  2261.  
  2262. - Any amount of demo bytes up to a maximum of 64008 bytes, of which each byte
  2263.   carries the information which key was pressed and how long the key was
  2264.   pressed, counted in Supaplex time units of 1/35th second (at normal speed).
  2265.   These time units are determined by the video frame frequency (and affected
  2266.   by the speed setting of the SpeedFix keys).  The time units are a multiple
  2267.   of the official 70 Hz video-frame-frequency tics.  Some notebooks use 60 Hz.
  2268.   Each demo byte is splitted into a high nibble and a low nibble:
  2269.  
  2270.   -- High nibble: Time-unit repeat count minus 1 for low nibble command key.
  2271.                   This is the information from which the total demo duration
  2272.                   is calculated, corrected with the (stored) SpeedFix setting.
  2273.                   At normalized speed, these time units are 1/35th of a second
  2274.                   each.  Example:  If this nibble shows 9, it means 9+1=10
  2275.                   time units for the command key in the lower nibble.
  2276.  
  2277.   -- Low nibble:  Command key, equivalent with the keyboard game keys:
  2278.                   0 = just wait: no key pressed
  2279.                   1 = cursor up
  2280.                   2 = cursor left
  2281.                   3 = cursor down
  2282.                   4 = cursor right
  2283.                   5 = space + cursor up
  2284.                   6 = space + cursor left
  2285.                   7 = space + cursor down
  2286.                   8 = space + cursor right
  2287.                   9 = space only
  2288.                   A = (not used)
  2289.                   B = (not used)
  2290.                   C = (not used)
  2291.                   D = (not used)
  2292.                   E = (not used)
  2293.                   F = (not used! / low nibble of the end-of-demo byte)
  2294.  
  2295. - hex FFh byte, meaning: end of demo.
  2296.  
  2297.  
  2298. The maximum demo file length is 1+64008+1=64010 bytes, which is an arbitrary
  2299. amount set by Robin Heydon (which could have been 65514 bytes maximum only).
  2300.  
  2301. This maximum total demo length of 64010 bytes has been reduced in the SpeedFix
  2302. versions 5 and up to 48650 bytes because the same space is needed for all 10
  2303. demo levels of 1536 bytes each.  (48650+10*1536=64010)  See also just below.
  2304.  
  2305. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2306.  
  2307. The *.SP and new-style DEMO?.B?? architecture:
  2308. =============================================
  2309.  
  2310. - A single level of 1536 bytes, according to the architecture description.
  2311.   If there is no demo attached to an .SP-file, the file ends here.
  2312.   In case there is a demo attached (*.SP with demo or new-style DEMO?.B??),
  2313.   5 bytes of this level are used to carry important information for the demo
  2314.   itself, for the recording speed, for the demo validation and to recognize
  2315.   the SpeedFix version used to record that demo (to be able to tell which
  2316.   of that other information is available and which were not yet stored!
  2317.   SpeedFix V5.0 used only 3 of those 5 bytes).
  2318.   (These 5 bytes are ignored by the game and overwritten with new information
  2319.   with each new demo recording, so it is safe to ignore the changes if any
  2320.   demo is removed from this level for placing it in a LEVELS.D?? file.)
  2321.  
  2322. - A complete demo as described in the original DEMO?.BIN architecture.
  2323.   In order to know that the demo was accompanied by valid extra information,
  2324.   stored inside the attached single level, Maarten changed the unused highest
  2325.   bit of the first byte from 0 to 1 (hex 81h to EFh).  Because the level is
  2326.   now attached, this first byte lost its original function completely.
  2327.   In case there is no signature appended, the file ends with the hex FFh byte
  2328.   from the original demo architecture (see above: end of demo).
  2329.  
  2330. - Any text of up to 511 bytes long: the demo signature introduced by Maarten
  2331.   in October 1996, and the only restriction is, that it contains no ASCII 255
  2332.   (FF hex) byte, since that byte is used to signify the end of the signature.
  2333.   This signature is meant for comments, the name of person that played the
  2334.   demo, and anything else anyone can think of.
  2335.  
  2336. - FF hex byte, meaning: end of signature text and also end of file.  This byte
  2337.   is defined as the last byte of the signature, totaling 512 bytes maximum.
  2338.  
  2339.  
  2340. The maximum new-style demo length is 1536 + 48650 + 512 = 50698 bytes.
  2341. (This 48650 is the total amount of reserved space for all 10 demo's, which is
  2342. just an arbitrary amount set by Robin Heydon in the first place, and changed
  2343. by Maarten as he stored the 10 demo levels in the same reserved space (Ver.5))
  2344.  
  2345. Up till now there is only 1 level (level 62 of level set 03, "Waiting for
  2346. Godot") which needs a (VERY MUCH!) larger space for a finishing demo than is
  2347. available, even if the original absolute maximum of 65514 bytes could be used.
  2348. ("Now" is January 1999.)
  2349.  
  2350. Maarten's program SPSIG manages the signature: adds a text-file as signature
  2351. to SP files, strips signatures from SP files and shows SP file signatures.
  2352.  
  2353. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2354.  
  2355. The PLAYER.L?? (PLAYER.LST) architecture:
  2356. ========================================
  2357.  
  2358. This file contains the results of all 20 possible players.
  2359.  
  2360. This is a hidden file, which can be revealed with "attrib -h PLAYER.L??".
  2361. (Don't bother to hide it again: this is done automatically by Supaplex.)
  2362. If this file is missing, Supaplex creates an empty new file, where all 20
  2363. names are initialized as "--------", and all other bytes are 0.
  2364.  
  2365. This file has 20 entries of 128 bytes each.  Each entry is:
  2366.  
  2367.   8 - Player name in upper case ASCII  (empty name = "--------")
  2368.   1 - end-of-name terminator: must be 0!
  2369.   3 - Total time played until now:
  2370.       - 1 byte: hours   (hex)
  2371.       - 1 byte: minutes (hex)
  2372.       - 1 byte: seconds (hex)
  2373. 111 - Result for each level: 1 byte per level: 0=unplayed, 1=played, 2=skipped
  2374.   3 - unused (=0)
  2375.   1 - Ignored, but written by Supaplex as:
  2376.       Pointer to the first unplayed level, or if all levels are "done",
  2377.       to the first skipped level.  If all are played, this byte becomes 71h.
  2378.   1 - unused (=0)
  2379.  
  2380. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2381.  
  2382. The HALLFAME.L?? (HALLFAME.LST) architecture:
  2383. ============================================
  2384.  
  2385. This file shows the results of the 3 best players who finished all 111 levels.
  2386.  
  2387. This is a hidden file, which can be revealed with "attrib -h HALLFAME.L??".
  2388. (Don't bother to hide it again: this is done automatically by Supaplex.)
  2389. If this file is missing, Supaplex creates an empty new file, where all 3 names
  2390. are initialized as ASCII spaces and all other bytes are 0.
  2391.  
  2392. This file has 3 entries of 12 bytes each.  Each entry is:
  2393.  
  2394.   8 - Player name in upper case ASCII  (empty name = "        ")
  2395.   1 - end-of-name terminator: must be 0!
  2396.   3 - Total time played for all 111 levels:
  2397.       - 1 byte: hours   (hex)
  2398.       - 1 byte: minutes (hex)
  2399.       - 1 byte: seconds (hex)
  2400.  
  2401. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2402.  
  2403. The SUPAPLEX.CFG architecture:
  2404. =============================
  2405.  
  2406. This file contains the options, as chosen in the 'controls' screen.
  2407. It is always only 4 bytes long, in readable LOWER CASE(!) ASCII, and is only
  2408. written when leaving the 'controls' screen (just before panning to the menu).
  2409. The bytes are:
  2410.  
  2411.   1 - "i" = Internal speaker                  (=default)
  2412.       "s" = Samples (+ Internal speaker)
  2413.       "a" = Adlib
  2414.       "b" = Sound Blaster (+ Adlib)
  2415.       "r" = Roland
  2416.       "c" = Combined (Roland + Sound Blaster)
  2417.       (Any other value = default "i", but without loading the sound driver.
  2418.        Entering and leaving the 'controls' screen without changing anything,
  2419.        will then result in a "b" in this file, which could lead to a crash!
  2420.        This bug has been fixed in SPFIX62 to load the speaker driver too.)
  2421.  
  2422.   1 - "k" = keyboard                          (=default)
  2423.       "j" = joystick
  2424.       (Any other value = default "k")
  2425.  
  2426.   1 - "n" = music off                         (=default)
  2427.       "m" = music on
  2428.       (Any other value = default "n")
  2429.  
  2430.   1 - "y" = FX off (FX=sound effects)         (=default)
  2431.       "x" = FX on
  2432.       (Any other value = default "y")
  2433.  
  2434. If Supaplex crashes after you made bad changes in the 'controls' screen,
  2435. just delete this file and the Supaplex internal defaults "ikny" are used.
  2436.  
  2437. Any bytes attached with an editor (like Return/Line-Feed) are ignored.
  2438. Missing bytes (if the file is too short) result in defaults for those bytes.
  2439.  
  2440. Each of these 4 bytes has its own meaning and is not recognized if the correct
  2441. value is on the wrong place: "rjmx" works, but "xmjr" defaults to "ikny".
  2442.  
  2443. From SPFIX62, this file is not checked for the "i", "k", "n" and "y" anymore
  2444. because those were defaults anyway.  Any 'illegal' byte , which now also
  2445. includes those "i", "k", "n" and "y", forces the default choice for that byte.
  2446. (The file is still written with those "i", "k", "n" and "y".)
  2447.  
  2448. ------------------------------------------------------------------------------
  2449.  
  2450.                       +--------------------------+
  2451.                       | MAP OF THE VIDEO MEMORY: |
  2452.                       +--------------------------+
  2453.  
  2454.  
  2455. If the debug M key is used to move the field in stead of Murphy, we see a lot
  2456. of strange things outside the game field.  (SpeedFix version 6.2 and above
  2457. need the command line option 'M' to view beyond the game field borders!)
  2458.  
  2459. The video memory is used as follows (Use a fixed pitch font to view this!):
  2460.  
  2461. The 65536 bytes video RAM is divided in lines of 976 pixels horizontally,
  2462. which means 976/8=122 bytes, making 537 lines plus 22 extra bytes in total.
  2463. In 320*200 video mode, each picture line is written twice, which means that
  2464. there are 400 horizontal lines on screen and each line is divided in 320 dots,
  2465. just in case you want to count them.
  2466. Following graphic shows picture lines, and not these doubled screen lines.
  2467.  
  2468. |       40       |2 |       40      |       40      |
  2469. |                |  |               |               | <-bytes: 8 pixels/byte
  2470. |   |               |            |  |          | |  |          2 bytes/sprite
  2471. | 2 |     40        |            |2 |          |1|2 |        (16 lines/sprite)
  2472.  
  2473. +----------------+--+---------------+---------------+   0000=top left (black)
  2474. | Panel at 0000  |**|               |               |        panel byte
  2475. |  (24 lines)    |**|               |               |
  2476. +---+------------+--+   Second part |   Third part  |
  2477. |* *|  First part   | of MOVING.DAT | of MOVING.DAT |        * = unused
  2478. |* *| of MOVING.DAT |  (162 lines)  |  (162 lines)  |
  2479. |* *|  (138 lines)  |               |               |
  2480. |* *|               |               |               |
  2481. +-+-+------------+--+------------+--+----------+-+--+   4D35=top left visible
  2482. |C|C|            |               |             | |TT|   game field corner byte
  2483. |C|C| (16 lines) |               |Title screen   |TT|
  2484. +-+-+ - -        |  Menu screen  |Game-end copy| |TT|   T=left side of Title1
  2485. |*|              |               |Blue screens   |TT|     screen remains.
  2486. |*|              |  (200 lines)  |GFX screen   | |TT|     (See location below)
  2487. |*|              |               |Controls scrn  |TT|     Otherwise unused.
  2488. |*|              |               |             | |TT|
  2489. | |              +---------------+-------------+-+  |   C=Menu cursor patch to
  2490. |*|                                            |* **|     restore the screen
  2491. |*|      Game field (60-2*1/2 sprites)         |* **|     moving the cursor
  2492. |*|      =============================         |* **|
  2493. |*|      (Game field = 368 lines high,    FC90 |* **|   FC90=last visible game
  2494. |*|       because edges are 8 lines)          \|* **|        field byte
  2495. +-+--------------------------------------------+* **+<--FC91-FFFF = unused:
  2496. |***************************************************|<--7 empty lines
  2497. |********+------------------------------------------+
  2498. +--------+  <- FFFF end of video memory: 1 short line of 22 bytes (11 sprites)
  2499.  
  2500. | |                                            | |  |
  2501. |1|                    118                     |1|2 | <-bytes: 8 pixels/byte
  2502. |                                                |  |          2 bytes/sprite
  2503. | Virtual game field width=120 bytes=60 sprites  |  |        (16 lines/sprite)
  2504.  
  2505. A Supaplex sprite is 16*16 pixels, which means 2 bytes wide and 16 lines high.
  2506. The virtual game field measures 60*24 sprites but the real game field is
  2507. 2 * 1/2 sprite less in both directions because the edges are half-sized only.
  2508. Horizontally those missing halves are reserved (but unused), but vertically
  2509. those missing 2*8 lines are not reserved and cause problems when Murphy walks
  2510. on those edges:  The MOVING.DAT pictures in video RAM are overwritten then
  2511. because Murphy is always updated full size on screen.
  2512.  
  2513. Hexadecimal addresses (for insiders):
  2514.  
  2515. 0000 = Panel start address: must be here for the "split-screen" option.
  2516. 4D34 = Game field start address, starting with 1 invisible (unused) byte.
  2517. 4D34 = Buffer for menu cursor screen patch, destroyed by cursor graphics.
  2518. 4D5C = Menu screen start address (top middle of game field)
  2519. 4D84 = Special screens start address (Title (=BIG Murphy),GFX,Controls etc.)
  2520. 4DAC = Title1 screen start address (before and during opening of the curtain)
  2521. 4DD4 = Title2 screen start address (after curtain opened, with all names)
  2522.  
  2523. FC91h-FFFFh unused: 3 bytes on the last line + 7 lines + 22 bytes: 879 bytes
  2524. The 22 bytes cause the shift of 11 sprites from the field above/below.
  2525. The 7 lines account for the black stripe between those two game fields.
  2526. Note: The first line of the panel is a black line in the panel-graphics.
  2527.  
  2528. The menu cursor overwrites the menu graphics and therefore the part of the
  2529. menu graphics that is "destroyed" that way, is remembered at the beginning
  2530. of the game field.  (The left part of the last copy shows there.)
  2531.  
  2532. The locations of the author screens (where the "curtain" opens) look a bit
  2533. strange, but with a different drawing those have logical positions too (as
  2534. if the authors planned extra panning, which is not possible because the
  2535. palette colors differ too much).
  2536.  
  2537.                                                           Same menu screen
  2538.                                           +---------------+---------------+--
  2539. +--//---+---------------+--------------++---------------+---------------+ |
  2540. |       |               |              || |             | |             | |
  2541. |       |               | Title screen  |               |               | |
  2542. |       |  Menu screen  | Game-end copy|| Title1 screen | Title2 screen | |
  2543. |       |               | Blue screens  |(without names)|  (with names) | |
  2544. |       |               | GFX screen   || |             | |             | |
  2545. |       |               | Controls scrn |               |               | |
  2546. |       |               |              || |             | +- - - - - - -|-+--
  2547. |       +---------------+--------------++-+-------------+---------------+
  2548. |                                      |U |
  2549. |                                      |N |          Same game field:
  2550. |          Game field                  |U | Vertical shift of 1 screen line
  2551. |                                      |S |
  2552. |                                      |E +----------------------------------
  2553. +--//----------------------------------+D
  2554.  
  2555. The "trash" in the unused area is thus also caused by the Title1 screen, and
  2556. from SpeedFix version 6.2 also by the extra copy of the viewing window before
  2557. the game pans back to the menu.  (This is done to remove the screen "glitch".)
  2558.  
  2559. ------------------------------------------------------------------------------
  2560.  
  2561.                      +-----------------------------+
  2562.                      | ABOUT THE GAME FIELD EDGES: |
  2563.                      +-----------------------------+
  2564.  
  2565. The game field edges (where Murphy is not supposed to walk on) are included in
  2566. the level, which makes the actual playable level-size only 58 * 22 sprites.
  2567. These edges are always substituted by Supaplex to show special edge sprites,
  2568. which make it possible in experimental levels to hide sprites there.
  2569. (My level "EXIT?" was the first level to use this as a feature.)
  2570.  
  2571. For speed reasons, Supaplex does no border-checking, so everything may happen
  2572. when Murphy (or other moving stuff) enters those edges.  Because of the way
  2573. the level is stored in memory, it is possible to walk out of the field on one
  2574. side entering the field at the opposite side, but shifted one line.  (This
  2575. only applies to the left and right field edges, not the top and bottom edges.)
  2576. (I introduced this as a feature in my son's level "KRUEMMELKRAM", and my level
  2577. "OVERFLOW" was exclusively designed to show what can be done with it.)
  2578.  
  2579. If level designers want to let Utility Disks explode on the edges (as my son
  2580. wanted in "KRUEMMELKRAM"), they have to be careful not to put any explosives
  2581. in the top left corner, one sprite below that, and 8 sprites in the top edge
  2582. on the far right side.    Explosions extend outside the game field and destroy
  2583. some internal variables like the file name LEVELS.D?? and the pointer to the
  2584. active level...  The menu will show the wrong level and it is impossible to do
  2585. anything but exit Supaplex.  I showed those forbidden sprites in the level
  2586. "KRUEMMELKRAM" as RED signal lamps.  Although I fixed the problem in SPFIX62
  2587. (with a small buffer zone), those 10 sprites may not be used for explosions in
  2588. new levels because of those problems in the original game! (Compatibility!)
  2589.  
  2590. If Murphy walks into any of the 8 sprites in the top edge on the far left, he
  2591. is beamed to undefined places because the internal look-up table of screen-
  2592. coordinates, which is used for the fast placement of Murphy on screen, was
  2593. overwritten by an overlapping scratch buffer for fading calculations.
  2594. This screen coordinate table is defined at load-time and never refreshed.
  2595. (Fading is this optical effect of slowly making the screen dark or bright.)
  2596. I also fixed this in SPFIX62 by correctly sizing that scratch buffer.
  2597. It was an unimportant bug, but it was a bug anyway, therefore I fixed it.
  2598.  
  2599. Rules for level designers for safely using edges:
  2600. ================================================
  2601.  
  2602. - The left and right edges, without the corners, are safe for Murphy to exit,
  2603.   but the sprite just underneath the top left corner is not safe for any
  2604.   explosion, including Snik Snaks, Electrons or Murphy when he gets killed!
  2605.   For a demonstration of using left and right edges: See my level "OVERFLOW".
  2606.  
  2607. - No explosions are allowed in the top left and top right, as described above.
  2608.   (See the RED signal lamps in my son's level "KRUEMMELKRAM".)
  2609.  
  2610. - Almost anything may be hidden in all edges, as long as Murphy cannot remove
  2611.   it from the top or bottom edge (or destroy it by an explosion!), because:
  2612.  
  2613. - Murphy may not be allowed to walk on or outside the top or bottom edges!
  2614.  
  2615.   Even those 2 edges have side-effects.  Just try entering the 20th edge field
  2616.   to the right of the top left corner, or the 8th edge field to the left of
  2617.   the bottom right corner:  The master of Murphy's image is mutilated: Either
  2618.   the top of his head is missing or he has a black belt when he is not moving,
  2619.   or when he is pushing a Disk.  And Murphy did not even walk outside of the
  2620.   whole game field this time ...
  2621.   This is caused by the fact that the top and bottom edges are really half-
  2622.   sized on screen, but Murphy is painted full-size into the MOVING.DAT area.
  2623.  
  2624.   (Exception of items which you may put on the top or bottom edges: Terminals!
  2625.   You can activate all terminals by hitting one of them.  This first terminal
  2626.   you hit, is completely painted on screen.  This also applies to the top and
  2627.   bottom edges, with the side-effect that the MOVING.DAT area is mutilated,
  2628.   the same way as described above, where Murphy enters the edges...)
  2629.  
  2630.   Murphy will really leave the memory image of the game field, with unknown
  2631.   side-effects!  There are three different aspects to observe.  Remember that
  2632.   the video memory is the graphical image of the real game field in memory:
  2633.  
  2634.  1: - Video memory (What is actually visible):
  2635.   This mutilation of Murphy is caused by the destruction of the video memory
  2636.   contents.  The panel and all the moving sprites from the file MOVING.DAT
  2637.   (which includes the not-moving Murphy during the game) are stored there.
  2638.   Murphy popping up in the panel with such "experiments" is another example of
  2639.   this aspect:    Although Murphy is somewhere else, his ghost is in the panel.
  2640.   Time to restart Supaplex, because MOVING.DAT is only copied to the video-
  2641.   memory once.    (The panel is refreshed all the time so this doesn't matter.)
  2642.   (I provided a command line option "R" or "r" in version 6.2 to refresh
  2643.   MOVING.DAT in the video memory when the game returns to the menu.  I did not
  2644.   make this refresh option default because it increases the time to return to
  2645.   the menu, especially when the game runs from floppy disk, and it is actually
  2646.   only needed after such experiments.  Besides that, it only refreshes the
  2647.   video memory, but more could have happened ...)
  2648.  
  2649.  2: - Location coordinates (Table of video memory locations):
  2650.   The now fixed top left corner (see above) was a special example of destroyed
  2651.   coordinates, but Murphy can walk outside of the memory copy of the game-
  2652.   field, which also means outside of that coordinate table.  There are no
  2653.   valid coordinates defined there and so he can pop up everywhere and nowhere,
  2654.   at random.
  2655.   The panel is a preferred place since it is situated at the start of the
  2656.   video-memory, which is hit when such invalid coordinates are near 0.
  2657.   Nothing is destroyed because of those missing random coordinates alone
  2658.   (except for the video memory contents), but:
  2659.  
  2660.  3: - Working memory (The actual game field that matters):
  2661.   The main aspect is what happens with the real game field in memory:
  2662.   When Murphy exits the top edge and moves around beyond the top edge near a
  2663.   certain point, he cannot come back or the screen turns white or worse.
  2664.   The table with the keyboard compare values or the byte with the debug E-key
  2665.   flag has been destroyed.  Other things may happen too...
  2666.   This is problematic because much of that stuff is only defined at load-time
  2667.   and is NEVER refreshed.  The worst thing what theoretically can happen, is
  2668.   that the only way-out could be a cold boot.  Time to RESTART SUPAPLEX!
  2669.  
  2670.   (The bottom edge is not that problematic, because Murphy cannot destroy too
  2671.   much over there, at least not that I know of.)
  2672.  
  2673.   An easy way to experiment with this: start any level in debug mode and
  2674.   remove most stuff with the debug keys "C", "Z", "S" and "H" ...
  2675.  
  2676.   Through the bottom edge you can also find some Infotrons, and also an Exit.
  2677.   This is not because of what is in video memory (and what can be seen with
  2678.   the debug M key), but because the working memory accidentally has some
  2679.   RAM locations outside of the game field filled with "appropriate" values.
  2680.   Kim Min-Soo released a level (07S062: "Hidden track") which exploits this,
  2681.   but I cannot guarantee (although I'll try), that this level will be solvable
  2682.   in new SpeedFix versions, because the outside of the game field can change!
  2683.   Be careful:  This level may not be seen as a "standard" level, and all
  2684.   warnings above about not using top and bottom edges still apply!
  2685.  
  2686. ------------------------------------------------------------------------------
  2687.  
  2688.   +----------------------------------------------------------------------+
  2689.   | REMARKS ABOUT SUPAPLEX GAME FIELD CALCULATIONS AND RESULTING TRICKS: |
  2690.   +----------------------------------------------------------------------+
  2691.  
  2692. (This list is certainly not a complete list of strange Supaplex behavior...)
  2693.  
  2694. Supaplex re-calculates the whole game field each frame, which happens each
  2695. 1/35th of a second at normalized speed (or 1/70th of a second in high speed).
  2696. Supaplex scans the frame from top-left to bottom-right, line by line, and
  2697. remembers the location and type of each moving object in the field, without
  2698. changing anything in the game field yet.
  2699.  
  2700. The type of the object determines the animation procedure-to-call for it.
  2701. These moving objects are Snik Snaks, Electrons, Zonks, Infotrons, Orange
  2702. Disks, Murphy, Explosions, and all different pushing Murphies with Zonks,
  2703. Orange Disks and Yellow Disks.
  2704.  
  2705. After this scan, this memorized table of locations and procedures-to-call is
  2706. executed, item for item, in the same order of the scan.
  2707.  
  2708. By first scanning and moving afterward, none of the movements are influenced
  2709. by any other movement-calculations in the same time frame.
  2710.  
  2711. This way of delayed calculating also leads to imperfections, which we can use
  2712. as special tricks.
  2713.  
  2714. Examples of tricks due to delayed calculations:
  2715. ==============================================
  2716.  
  2717. Murphy is found next to a Zonk, and starts pushing against it.  At the same
  2718. time the Zonk does not know about that fact (because of the buffering), and
  2719. decides to fall in a space beneath it.  The two of these movements together
  2720. result in the Zonk-cloning trick (together with the fact that the Zonk-
  2721. movement calculations don't stop where they should.)
  2722.  
  2723. Exactly the same happens with Orange Disks, with the exception, that the
  2724. falling Disk cannot fall any further if the top part has been pushed away,
  2725. because the calculations are slightly different.  The net result is, that we
  2726. have some remains of a falling Orange Disk in the space below, which can be
  2727. either invisible or visible, depending on how far that Disk fell, or when
  2728. Murphy started pushing against it.  These remains are known as the deadly
  2729. invisible wall, which is not recognized later by a next scan as moving object,
  2730. and hence works as (deadly) obstacle.
  2731.  
  2732. These delayed calculations are also responsible for the well known trick of
  2733. Murphy moving sideways from the middle of a pile of three Zonks:  Both middle
  2734. and top Zonk fall in the direction of where Murphy was before.  What happens
  2735. here is that during a scan, the field where Murphy moved from, is recognized
  2736. as space, and the top Zonk cannot fall down, so it decides to slide into that
  2737. space.  During the same scan, the middle Zonk sees the space too, and decides
  2738. to slide off from the bottom Zonk.  Now both Zonks already started to slide,
  2739. and cannot change their minds to do something else now.  The result is known.
  2740. This trick can also be explained by the way Zonks reserve space to fall into.
  2741.  
  2742. Examples of a few other imperfections:
  2743. =====================================
  2744.  
  2745. Explosion clouds can remove part of a falling object, or remove a reservation
  2746. of the space below a falling object.  Those objects cannot fall any further,
  2747. and are not seen as a normal object anymore, because something is missing.
  2748. This explains why sometimes complete (or parts of) Zonks and Infotrons "hang
  2749. in the air", and cannot be moved or eaten.
  2750.  
  2751. Sliding of a Zonk or Infotron implies, that the first movement is sideways,
  2752. and then downward a few frames later.  Because this empty space below is not
  2753. reserved, Murphy can enter that unreserved space below without being killed,
  2754. or an object can be pushed into that empty space, before the downward movement
  2755. starts.  The sliding Zonk/Infotron will hang frozen, partly rotated, above
  2756. that now occupied space, until that space is emptied again.
  2757. Anything falling onto such a partly moved Zonk/Infotron does not see an
  2758. ordinary Zonk/Infotron, and will not slide off from such an obstacle.
  2759. This can be very helpful to reserve a passage for later, or to prevent a pile
  2760. of objects from falling.
  2761.  
  2762. When Murphy pushes against an object, the scan calculations check if there is
  2763. an empty space on the other side of that pushed object.
  2764. This empty space immediately changes its status to "reserved", but the pushing
  2765. movement itself is delayed on purpose.  Murphy may decide to stop pushing,
  2766. which then releases the space on the other side of that pushed object.
  2767. This space-reservation results in the trick, where Murphy can change the
  2768. movement of Snik Snaks and Electrons just by pushing against an object, and
  2769. then abort this push.
  2770.  
  2771. More examples of "strange calculations":
  2772. =======================================
  2773.  
  2774. Such a half-pushed Zonk does not explode, if it is pushed this way underneath
  2775. a falling Orange Disk ...  (This is a Supaplex bug, which I will never "fix".)
  2776.  
  2777. The first frame after a Zonk (etc.) decides to move, only the status of that
  2778. Zonk (etc.) has changed, without performing a real movement.  The space-
  2779. reservation for the movement starts one frame after this status change.
  2780. Here we have the explanation of several other tricks:
  2781.  
  2782. Murphy can catch Zonks and Infotrons by moving quickly from underneath it and
  2783. back again, because the field underneath these objects stay empty for one
  2784. frame after they found the space beneath them to fall into.
  2785. Murphy's reactions are faster, and can immediately re-occupy that field,
  2786. before that space is reserved by the Zonk (etc.) which would kill Murphy.
  2787. Now the Zonk (etc.) sees that space occupied again and cannot enter that
  2788. space where Murphy moves into, and also fails to kill Murphy.
  2789. Because that falling Zonk (etc.) initiated its movements already, Murphy
  2790. cannot do this trick twice, because the next scan will let both the Zonk and
  2791. Murphy occupy the same space, killing Murphy.
  2792.  
  2793. Any Zonk or Infotron immediately above such a Zonk, which changed its status,
  2794. does not see a normal resting Zonk beneath it, and therefore will not slide
  2795. off.  And because they also see no empty space beneath them, they did not
  2796. start falling either, which makes them pushable or eatable.
  2797.  
  2798. A Red Disk, released underneath a Zonk or Orange Disk, lets those objects
  2799. pass right "through" it, and occupy temporarily the same space.
  2800. If we initiated the descent of a Zonk in a Zonk pile before that Red Disk
  2801. release, we can destroy more Zonks than otherwise, because the resulting
  2802. explosion cloud will happen to include more Zonks.  (Lauterkranz trick.)
  2803.  
  2804. If a Zonk needs to fall faster because of a time-critical maneuver, its
  2805. fall can be initiated on beforehand by creating an empty space underneath it.
  2806. We must use this trick in the level "Romancing The Stones!" (Level 01S011)
  2807. in the top-right side of that level:  Murphy holds a mixed pile of Zonks and
  2808. Infotrons, eats a base sideways from underneath another Zonk, immediately
  2809. passes underneath that Zonk and as soon as this Zonk fell, pushes it into the
  2810. falling pile, to be able to eat all Infotrons from that pile.  The timing for
  2811. pushing the Zonk into that pile is so critical, that it is impossible to push
  2812. the Zonk into the pile at the desired place, without speeding up the fall of
  2813. that Zonk first.  (Alexei Boreisho was the first person to officially solve
  2814. that particular level, which was considered impossible at that time and was
  2815. therefore almost deleted from that level set.)
  2816.  
  2817. If a Red Disk is eaten, Supaplex does not test if it has just been released.
  2818. This leads to the forbidden Red Disk cheat (by Tom Geelen), which I 'fixed' in
  2819. version 6.3, but because it changes the game itself, I made it possible to
  2820. enable this cheat again with an extra command line switch "T".
  2821.  
  2822. ------------------------------------------------------------------------------
  2823. ------------------------------------------------------------------------------
  2824.  
  2825. ------------------------------------------------------------------------------
  2826. DISCLAIMER: We cannot be held responsible in any form for any damage etc. that
  2827. might occur using software and knowledge presented by us.  Use at own risk.
  2828. ------------------------------------------------------------------------------
  2829.  
  2830. If you still have any questions, please take a look at the Supaplex WebPages
  2831. (http://www.elmerproductions.com/sp) or contact us directly.
  2832. We can be reached via email (preferred) or normal mail at:
  2833.  
  2834. Normal mail:                   E-mail:
  2835.  
  2836. Herman Perk                    Compuserve ID:   100327,467
  2837. Spessartstrasse 15             INTERNET E-MAIL: 100327.467@compuserve.com
  2838. D-14197 Berlin                              or: Herman_Perk@compuserve.com
  2839. Germany                                         (which are actually the same)
  2840.  
  2841. Maarten Egmond                 INTERNET: http://www.elmerproductions.com
  2842.