Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

AdministrationAnimalsArtBiologyBooksBotanicsBusinessCars
ChemistryComputersComunicationsConstructionEcologyEconomyEducationElectronics
EngineeringEntertainmentFinancialFishingGamesGeographyGrammarHealth
HistoryHuman-resourcesLegislationLiteratureManagementsManualsMarketingMathematic
MedicinesMovieMusicNutritionPersonalitiesPhysicPoliticalPsychology
RecipesSociologySoftwareSportsTechnicalTourismVarious

SUPAPLEX SPEED-FIX Version 6.2

computers



+ Font mai mare | - Font mai mic



+-------- ----- ------ ----- ----- ------------+

Version | SUPAPLEX SPEED-FIX, FOR ALL COMPUTERS, FAST AND SLOW! |

6.2 | WITH MANY EXTRA FEATURES LIKE DEMO RECORDING |

+-------- ----- ------ ----- ----- ------------+



PLEASE READ THESE FIRST FEW LINES CAREFULLY.

IT IS NECESSARY FOR CORRECT OPERATION OF THE SPEEDFIX.

THANK YOU.

This program is a highly improved 'replacement' for the executable file

SUPAPLEX.EXE only: all other files from the original Supaplex package are

necessary for the game to run, but are not included here.

The complete original (unimproved) Supaplex package SUPAPLEX.ZIP can be

downloaded from the Supaplex website (see below)!

Use of this program is at your own risk. We are using this program all the

time, and have never had any damage, so your computer will probably not be

damaged, but don't come crying to us when it is

First 'install' the original Supaplex package if this is not already done,

and keep that SUPAPLEX.ZIP somewhere safe: Don't delete it: You may need it.

Do NOT use the Install program of that package: just create a subdirectory

and unzip that package into that subdirectory. You're ready to run Supaplex.

(If you already played Supaplex, you may want to backup the Supaplex directory

before using this program. Make sure you also backup your personal scores

files, which are hidden files. Use 'ATTRIB -h *.*' to reveal them.)

This EXE file is totally backward compatible with the original SUPAPLEX.EXE:

Many bugs have been fixed, and many features have been added without changing

the game! (The 'new' demo's from the SpeedFixes before version 6.2 are not

needed anymore: They can still be used, but they don't work with the original

SUPAPLEX.EXE. Now the original game can also be used and without drawbacks.)

The best way to play Supaplex is using plain DOS, not any Win95 DOS box, and

not the DOS from the Win95 shut-down menu! Use the F8 key at boot time!

If the mouse does not react, you may want to install a DOS mouse driver.

(A mouse is not needed at all because it only works in the menu screen.)

It is possible to use the (full screen) Win95 DOS box, but to prevent the

jerky movements, you must change the properties of that DOS box. Win95 wants

to do many things in the background which must be prevented! No guarantee!

Make sure you visit the Supaplex website at: https://www.stack.nl/~ep/sp/

to find all about Supaplex. If you can't find it there, take a look at

https://huizen.dds.nl/~ep/ to find out if those pages have moved.

-------- ----- ------ -------- ----- ------ ------------

+----- ----- ----------+

| FIRST INTRODUCTION |

+----- ----- ----------+

This file contains lots of information about the original Supaplex, and also

information about the SpeedFix. If you are interested, read it all, if not,

just read the changes below (if you are upgrading from a previous version) or

all about the instructions for use and the commandline parameters (if you are

new to using the SpeedFix).

If you are not smarter after reading it, you might be one of the authors of

Supaplex yourself.

Except for the following version history at versions v5.x, almost all 'I's and

'me's etc. refer to me: Herman Perk.

To Philip Jespersen: thanks for your support, and for the game itself.

To Robin Heydon: thanks for the PC version of the game.

To Hilde Anita Hopen: thanks for spreading the game through the internet.

To Herman Perk: thanks for making the first SpeedFixes. <Maarten>

To Maarten (Elmer) Egmond: thanks for writing SPEDIT, a Supaplex level editor.

and for making all SpeedFix 5 additions.

To Digital Integration: thanks for not making problems.

To Sergei Sinicyn: thanks for showing me some problems and solutions.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SUPAPLEX

You are Murphy, bug hunter extraordinaire, exploring deep inside a crazy

computer. The only way out of each brain-teasing level is to collect the

infotrons and this is where the fun begins! Snik Snaks must be avoided at all

costsand falling Zonks will trap the unwaryexploding discs, electrons

and ports add up to the coolest action game around!

(Quote from the original manual)

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

+-------- ----- ------ ----- ----- ----+

| FULL VERSION HISTORY OF CHANGES AND ADDITIONS |

+-------- ----- ------ ----- ----- ----+

History v1,v2,v3,v4 (Herman Perk):

- see SUPAPLEX SPEED-FIX: INSIDE INFO AND HISTORY below.

Changes from v4 to v5 (Maarten Egmond):

- Added a little check routine to avoid loading demo files that are

too large for the segment.

- Command line option EGA (Capitalized) changed to EGA (any CaSe).

- :file.sp option added to cmdline options.

- Pressing F11 in the menu will replay the demo and F12 will play the level.

- In stead of ---DEMO LEVEL--- as level name of a demo, the real level name

appears in the panel.

- : option will activate (FORCED) player.

- Added a credit line on the title screen for my work

v5 -> v5.1 (Maarten Egmond)

- fixed a small bug in demo-loading routine, which would crash if a file

was being loaded that was too big (larger than about 45000 bytes).

Usually, this error would not occur (or you'd have to run the SpeedFix

with a wrong :file.sp file, or maybe record a *very* long demo?)

v5.1 -> v5.2 (Maarten Egmond)

- Fixed a bug in the demo-loading routine. If a demo was wrong, spfix51

would return to DOS without clearing the screen (and possible waiting for

a keypress), so it appeared if the machine hung.

- Fixed demo format (again). Random events (like 'bugs') would still be

randomized after recording a demo. So recording a good solution of any

level with important random effects (e.g. level 9) would always result in

a wrong demo. The random number used at recording-start is now saved to

the demo, and restored when it's being played, so these random effects

will always be the same in the demo (the demo always looks the same).

Demo's recorded by v5.2 are compatible with v5.0 and v5.1, and vice versa.

(That means, they can be played, but can give true random events in stead

of recorded random events).

(Technical:) To accomplish this I've used the last two bytes of the 1536

byte level. These two bytes were (according to my expierience) not used

by anything else.

v5.2 -> v5.3 (Maarten Egmond)

- Fixed pan back to menu after playing a level at startup (using colon

parameter). It would flash up the screen. Now it correctly pans back.

- Fixed demo bug: playing a demo by pressing the 'demo' button in the menu,

or a random demo started after a while would not run correctly most of the

time.

- Added 'DEMO SUCCESS', 'DEMO FAILED', 'LEVEL SUCCESS' and 'LEVEL FAILED'

messages so you can easily see if the level was ended successfully (i.e.

though the exit, with enough infotrons collected).

- Added '@' commandline option. Must be used together with the colon option,

and a demo. This will replay the demo at VERY high speed, and quit Supaplex

right after the end of it. One of the above 'DEMO SUCCESS' or 'DEMO FAILED'

messages will be shown. This is handy to check large amounts of demo files

to see if they run correctly. (You can test your own solutions with this

option too).

- Changed cheatmode ('#' option) to set all levels to SKIPPED in stead of

DONE. This way, you can keep track of which levels you have done properly

in one Supaplex session.

- Timing problem at demo recording (which has been in the original Supaplex

too) solved. Sometimes, when recording a demo, Murphy would walk very close

to danger (i.e. sniksnak, falling zonk, etc.), but still pass it. Then,

when replaying the demo, the level failed. This has been fixed. All demo's

should now run exactly as recorded. (If not, email me).

- While recording a demo, no debug keys may be used, you can still change

the speed with the gray keys. This is to enable 'us' to see the REAL

playing time, in stead of the time the demo takes at default speed. So if

you're really good, you can record your demo at the highest speed, and set

a new record easier. Demo's will still be played at the current speed,

regardless of how they were recorded.

- Ctrl-F12 will stop demo recording, and lets you play on.

- The system time will have changed after Supaplex has been run (was also

in the original Supaplex). This is normal Supaplex behaviour, and will

cause the time in your computer to change. Time will be reset to proper

time after a reboot. To keep the correct time without rebooting, you can

use the TIMEFIX.EXE program from Elmer Productions (see the Supaplex

webpage) to fix it. If you use it, run like this: TIMEFIX 50 0 SPFIX53.EXE

and it should set the correct time after exiting the SpeedFix. You can

add your favorite commandline options to the back.

- You can now only start demo recording when the speed-autodetect routine

is done. (Just wait about a second after starting a level for the first

time).

- Cleaned up this documentation to make it easier for new users.

- When playing an .SP file yourself (by using the colon option and/or by

pressing F12 in the menu) the currently selected level would be set to

'solved' when you correctly solved the level. This is now fixed. No matter

how you end the .SP level play, it will never interfere with the normal

playing.

- Now when playing an .SP file, the level number displayed on the screen

will always be .SP in stead of just 'sometimes'

- Renamed this readme document to SPFIXnn.DOC, which helps it being

identified as a SpeedFix document easily.

v5.3 -> v5.4 (Maarten Egmond)

- Removed timebug - apparently, the gray * key was not correctly tested to

change the slowest demospeed. This would not affect game/demoplay, but

compromise the accuracy of the timing (duration) of the demo.

- Level names are finally shown correctly all the time (also when playing

demo's and .SP files)

- Fixed bug: If a demo would run when a player was selected, the time it

took would be added to the player's playing time.

- Removed bug that would cause ENTER to blow up murphy in the game when

no mouse driver was active, in stead of just switching panel on/off.

- Built in system time correction. It's accurate up to 0.05% of normal

system time. No need to use TIMEFIX.EXE anymore, this is much better.

(If you still use TIMEFIX, it will make the time wrong, since SPFIX54.EXE

lets the system timer run at (almost) 18.2 Hz itsself).

v5.4 -> v6.0 (Herman Perk)

Thanks to Maarten many extra features were added and he also created

most of the 'savegame' code, which he never released due to hard-to-find

bugs. Furthermore there still were annoying bugs to fix, so time for 6.0.

- 'savegame' code enabled and debugged, so it is possible now to save a

game situation. See Ctrl-W and Ctrl-L in the key list below for details.

(Looking through that code I found game options that were never used:

Ports that can freeze Zonks and/or SnikSnaks&Electrons, and that same

Zonk-freeze option can be set at game-start, like gravitation.)

- Option added to switch Debug mode on and off during a game.

See Ctrl-ScrollLock and Alt-ScrollLock in the key list below for details.

- Demo recording still contained bugs that could make a recorded demo fail.

- One problem was to let the recording always start at exactly the same

frame (frame=1/35th of a second), seen from the play-back point of view.

- Another problem was the exact timing of the BUG sprites: those bugs fired

one frame too early in the playback of the recorded demo, which also

could make a good demo fail. These problems have been solved at last

(If there are stil problems: PLEASE (e-)mail and send any bad demo to us!)

- If there was no DEMO0.B?? (or any of the DEMO?.B??) and waiting in the menu

started a random demo, the SpeedFix would crash! This also happend if any

standard demo was forced to start by clicking 'Demo' in the menu etc.

This bug has been removed. This was the most annoying bug: crash after wait

- If such a random demo (DEMO?.B??) contained BUG-sprites, those demos could

not finish: the stored start position of such demo was not fetched, which

caused the bugs to react different each time the demo was started randomly.

This has been fixed.

- The Ctrl-F12 key now also stops a demo PLAYBACK, so you can take over.

I just thought it was a logical and handy thing to do.

- Screen 'glitches' caused by writing menu text to the play field have been

removed. There were some, especially in Debug mode using the white - and =

keys to change levels during the game. Stuff needed to be updated, but in

those update routines also menu text was written to screen. This is fixed.

If there were any other such occasions, those cannot happen anymore.

- All sprites beyond the invisible wall are now invisible too.

I changed this because due to a Supaplex bug (which we don't want to fix),

Infotrons and Zonks can change into fixed objects that just won't fall.

These objects cannot be reproduced if a saved game is loaded again (if the

complete video memory is not saved too). Those objects became strange

looking random blobs and that is why I made those invisible.

If someone objects to this, I can easily change that back.

Just try and see the difference between this and an older version SpeedFix

especially with the debug 's' key (remove all Snik-Snaks).

(The invisible wall was not designed into Supaplex! It accidentally

happened to be there without the programmer knowing about it.)

- I recently found out that there are notebooks with LCD displays that do not

use the official VGA frame frequency 70Hz, but 60Hz instead. There goes

another standard. (Thanks Compaq!) Nothing fixed here: that's life.

v6.0 -> v6.1 (Herman Perk)

- Oops, forgot about Maarten's checksum. The demo recording BUG-bug was fixed

but in cases that that fix had to do someting (sometimes), the checksum was

wrong. The demo was perfect but Maarten rejected it for his Hall Of Fame.

Actually, those rejected demo's proved, that my BUG-bug fix works!

Now also the checksum will be ok, and recording must be always perfect.

- The savegame option (Ctrl-W and Ctrl-L) can now be safely used during a

recording: the recording is ended properly now when Ctrl-L is pressed,

and also recording 'scars' in the saved game are ignored now with Ctrl-L.

- After loading a saved game, now the random number is randomized, which

means that each time the game is loaded, the bug-sprites fire differently.

In 6.0 those bugs always reacted in the same manner.

- At last!: There was an original Supaplex problem with the Red disk release.

If Murphy was killed DURING a red disk release, he could NEVER release

another red disk, not even in other levels, until Supaplex was completely

restarted. This has been fixed.

- After loading a saved game, the actual level could not be skipped. Fixed.

- Changed our text in the author screen a little: extra line of text.

v6.1 -> v6.2 (Herman Perk)

While everyone was playing with version 6.1, I spend some time to improve

the SpeedFix a lot. Here is the list of changes/improvements:

- Command line parameter collisions (spfix61 /n !m :fname first loaded the

game without demo, and after you exited that game it played the demo of

it. When that demo finished, the /n !m did their job).

Now the demo is played first, then the /n !m start that level and the level

pointer in the menu points to that level afterward.

A major change was needed in Maarten's SP file control routines, where

several minor bugs (which were 'corrected' in his code) were removed too.

This change was tricky, but now the code is much simpler.

- If command line had just : or @: strange things happened: A filename was

recognized, but rejected after changing a byte in the SPFIX data space

- The level pointer was reset to level 1 by starting a game with F12. Fixed.

- I changed the name of the saved game from 'SUPAPLEX.SAV' to 'SAVEGAME.S??'

which prevents possible wildcards problems with DOS file manipulations.

Each level set has its own unique saved game now, but the old way of having

only one saved game for all level sets can be forced with the new command

line option 'W', to always use 'SAVEGAME.SAV' in stead of 'SAVEGAME.S??'.

(If you have an old 'SUPAPLEX.SAV' that you still want to use, you can

rename it to any of the 101 different possible 'SAVEGAME.S??' at will.)

- The saved game does not use the saved debug mode information anymore, so

if you saved in normal mode, and are in debug mode when loading the saved

game, you now stay in debug mode (vice versa). This prevents surprises.

- The panel on/off status after loading a saved game was bad: The panel was

(in)visible as before but the viewing window was taken from the saved game.

That panel on/off info from the saved game is now ignored.

- If a saved game was loaded during a first-time run of an ':SP_file', the

player name appeared as 'WIBBLE??'. Fixed to show the initial name.

- If a saved game was loaded during a demo run, the last demo input 'key' was

not deleted, which sometimes moved Murphy from his saved location. Fixed.

- Changing from debug mode to normal mode didn't issue Q and 1 which entered

the normal mode without resetting debug options M, D, 2,,9,0. Fixed.

The Q and 1 commands are now also issued when a game exits, and after

loading a saved game.

- Debug S-command did not remove Snik Snaks properly. Fixed.

- Explosions in the top corners of the game field edge destroyed internal

variables. (This happened with experimental levels only.) Fixed.

- If Murphy went into the top left 8 edge fields of the game border, he was

beamed away to unknown places. This could only happen in levels where

Murphy was allowed to walk on edges. Fixed because it was a bug anyway.

- Maarten removed by accident the 'restore video mode' (SPFIX54) when the

game was aborted due to an error. (This was already fixed in SPFIX60.)

He corrected for it by staying in the game after a demo-file load error.

The behaviour was unpredictable: Restored to exit after such error.

- In debug mode an explosion cloud showed as red signal lamps and Sergei

Sinicyn from Russia showed me that this was because of a mouse button bug.

This original bug was also responsible for the fact that Murphy was killed

by the Enter key if no mouse driver was loaded. The mouse button reactions

(during the game-play only!) are now exchanged and Maarten's bugfix of that

'kill Murphy by Enter' is removed because it is not needed anymore. This

exchange of button reactions is no problem since their reactions during the

game are annoying and were of no value anyway.

Now also the right mouse button is the ESC key in the game too, not only

in the menu, so actually I think it is better this way. (More consequent,)

- The 'abort Supaplex on error' exit did not restore the int 24h vector and

did not switch off running music: A DOS boot could have been needed. Fixed.

- This 'abort Supaplex on error' exit could have passed errorlevel 0 to DOS.

In case of 0 it passes an errorlevel 255 to DOS now. (For batch 'freaks'.)

- SP-demo files longer than 50698 bytes are now rejected as legal demo's.

This number includes 1536 bytes for the level, 48650 bytes for the maximum

demo length (with the terminating 0FFh) and 512 bytes for the signature.

This filters out many problems when using wildcards with the now enhanced

command line option '@' to test demo's at warp speed (see below).

- The debug M command now reacts on the gray 6-key block as a 'Goto'.

Their relative positions on the keyboard indicate which field part to show:

Ins,Home,PgUp = Go to the top of the level: left,middle,right

Del,End ,PgDn = Go to the bottom of the level: left,middle,right

- Loading a saved game now blacks the screen and fades in. This became

necessary because it loads the 'dull' game field, updates the panel,

restores 'fancy' stuff, which all would flash around the screen for a few

moments. I think it looks better this way, and it gives an extra short

pause during the fade-in, when immediate reaction to the saved game is

needed, so you can rearrange your fingers on the keyboard in anticipation

of the game.

I made the screen dark without fading, so it doesn't take extra time.

- Supaplex had disabled code to 'shake the screen during an explosion', which

is now enabled. Because it sometimes was too much shaking now, I enabled

this feature (by default) only if Murphy dies.

For changing this default, two new command line parameters have been

introduced: 'S' or 's' if the screen should Shake on every explosion, and

'N' or 'n' if the screen may Never shake, as in the original game.

Too bad that this shaking still makes problems on the Matrox Millennium.

(Sergei Sinicyn showed me a way to optimize code here, but because of my

many command line switches, I could not use much of his optimized code.)

- Moving to the left when the debug M-command was active, the game field

jumped when the left edge was reached. Now you cannot go beyond the field

edges anymore so the outside of the game field cannot be viewed.

To chane this default setting, another command line parameter 'M' or 'm'

has been introduced to be able to look beyond the field edges again, but

this time without the described jump.

- The debug M key was affected by Murphy's demo moves during a demo run.

This was not a logical M key reaction. Now it does not follow Murphy.

- The Alt-SysReq key now exits faster and more reliable.

This makes some sense of this key combination and more attractive to use.

- Maarten's result text of the '@' command line option is now redirectable to

a file, which allows unattended demo file checking with file-output to be

evaluated later after all demos have been tested.

In order to use this feature, it was necessary to change the original idea

a little: If there is no demo attached or no (or bad) ':file' parameter

used, the program now exits immediately with an appropriate message.

Only demo's can play now if the '@' command line option is used.

The message now also includes the file name from the ':' parameter, even

when a (bad) demo file is shorter than a level or larger than 65535 bytes.

For even extra speed, fading has been disabled and the exit is done now

without removing the panel first. See below for more details.

- LEVEL.L?? (LEVEL.LST) is now optional and not mandatory. This means that

it is not needed anymore. SPFIX62 tries LEVEL.L?? first in case some extra

speed is needed (the game runs from floppy disk), and, if it does not exist,

the information from LEVELS.D?? is used. A new command line parameter 'C'

or 'c' will tell SPFIX62 to create LEVELS.L?? in case it does not exist.

(If it is not needed, it is not necessary to create it by default, and

like this Supaplex can still be played from write-protected disks.)

Yes, I noticed the difference between the original LEVELS.DAT and the new

created LEVELS.DAT: The original has a dash in the level name of level 042

between 'LITTLE' and 'PLEASURE'. LEVELS.DAT has a space in that name.

- If the 4 byte long SUPAPLEX.CFG had as first byte anything else than

'i', 's', 'a', 'b', 'r' or 'c', Supaplex did not load any sound driver

as it should, and looking at the 'controls' screen it showed as if 's' was

active, and going back to the menu without changing anything, 'b' was put

here in this CFG file. This could lead to a crash if this choice was bad.

Now the code has been simplified to test only non-default values, otherwise

a default is forced for any non-default byte. This fixed this 'bug'.

The file is now also closed after a read error, to free the handle.

- Clicking on the 'floppy 1<->2' in the menu was a useless thing to do.

I changed this into changing level sets! All existing LEVELS.D?? are

presented one by one in the message line, in ascending order.

Doing the same with the shift key pressed, they show in descsending order.

- Clicking this 'floppy 1<->2' with the Alt key pressed, the old but improved

floppy stuff is activated: It now also accepts drive letters up to F

(without showing this in the screen text). After ESC-exit, the default

drive is restored now as it was before pushing the disk button in the menu.

If a drive was chosen where no Supaplex files were found, it now does not

abort the whole program anymore, but still there has to be any formatted

medium in the drive to be able to escape, but at least not to DOS anymore.

In case someone does not want to hold the Alt key, I introduced the command

line parameter 'F', which only inverts the Alt-key influence here.

- It has been possible to change 'normalized' Hardware and RAM-chips back to

the original 'fancy' stuff, so saved games do not look dull anymore.

(The size of a saved game is increased with the 1536 bytes for that.)

Furthermore, all debug keys where something is removed, now leave that

'fancy' stuff intact too, and prevent the level to successfully end with

an update of the level pointer (and the time doesn't count either).

- The now left mouse button used to turn 'fancy' stuff to 'dull' stuff.

It now toggles between 'fancy' and 'dull'. The 'normalize' or 'change to

dull' routine affected the (initial) movements of Snik-Snaks and Electrons,

because it was meant to be called at game-start only. This has been fixed.

- The autorepeat of the Enter key for switching the panel on and off has been

drastically slowed down, and it now immediately reacts after each new Enter

key press.

- The autorepeat of the debug keys F1,F2 and F3 was too fast: you never knew

when gravity was on or off etc. This has been changed to key-actions

without autorepeat. The F2 key has also been changed to on-off-on-off.

- I finally managed to do something about that screen 'glitch' that appeared

when the game successfully ended (or when demo's were aborted), just before

panning to the menu. This 'glitch' was only observed when Murphy was on

the right side of the game field, and was caused by overwriting the viewing

window. The game field is used by panning to the menu etc. as follows:

The viewing window is copied to the top right of the game field, (even

extending beyond the normal game field, which accounts for the trash which

is visible with the debug M key), then the screen jumps to that new

window, then the menu is copied to the middle of the top of the game field,

and finally the panning begins. See the section 'Map of the video memory'.

Fix: If the viewing window is completely outside the far left viewing area,

(otherwise we would introduce the same problem over there again,) a

preliminary copy to the top left and jump to that copy is done first now.

From there the rest is as it was: The original copy is done etc.

(Sergei Sinicyn also did good work on this 'glitch', but his solution did

not work at all on the Matrox Millenium VGA card! Sorry Sergei!)

- At the start of each game, Murphy changes very little. The pictures of

the not-moving Murphy in FIXED.DAT and MOVING.DAT are slightly different:

The game field is initially painted with FIXED.DAT, and as soon as the game

runs, only Murphy's picture from MOVING.DAT is used.

Now the field is initialized too with Murphy's picture from MOVING.DAT.

- The menu messages 'demo failed', 'game successful' etc. are now updated

before the menu appears, which means that you don't have to wait until

the panning or fading has been completed to see those messages.

(The SpeedFix version info on top in the author screen now appears faster

too, but I left the names on the bottom as they were, because before those

names appear, no key to proceed to the menu is accepted by Supaplex.)

- Short original demo's were opened, but never closed after rejection:

The error 'Too many open files' followed. Fixed, but also:

- The original old-style demo's are recognized now and can be used again:

The NEWDEMOS.ZIP is now obsolete, so the original Supaplex can be used too

without problems. (NEWDEMOS.ZIP cannot be used with the original game!)

Also SPFIX62 :DEMOn.BIN works. Any original DEMO?.BIN will show BIN in

stead of .SP in the panel. Any mix of new and old demo's can be used, and

the new demo's will always show .SP in the panel, as before.

The original DEMO?.BIN files are recognized by their length and the first

4 bytes. (Knowing this, you can fool the SpeedFix, but that's life.)

The old demo's need the original LEVELS.DAT file (with the original name!)

to play, even if the demo's are renamed and thus activated for a different

level set (like DEMO?.B01). This way you can have the original demo's

running with all different level sets by copying the demo's.

If the order of the demofiles is changed by renaming (like DEMO6.BIN

becomes DEMO2.BIN etc.) the demo's still work (as in the original game).

- Scrolling of game field was 'poor' if not running at highest speed.

This has been changed now! I finally found the way to fix it!

If not set at highest speed or half speed, it is still a bumpy ride, but

smoother now. Only highest and exact half speed seem to be perfect now.

Murphy himself does not move that smooth, but that is also because we now

need 16 different pictures of him moving, and they are just not available.

The soft scrolling is done pixel-wise, and Murphy (and all other moving or

falling objects) moves with 2 pixels each time: The result is that he

moves two pixels but the screen just 1 pixel, and the next frame another

pixel, which netto causes Murphy to blurr. I cannot do anything about it!

- A bug has been fixed with horizontal scrolling: some VGA cards like the

Matrox Millennium were affected by this bug. Just in case this bugfix now

makes problems with VGA cards that used to run, I introduced the command-

line parameter 'H' (for Horizontal) to force the original Supaplex timing.

- Added an extra SpeedFix key: instant fastest speed with the grey 'divide'-

key, which is also the '/' (slash) key on the white US(!) keyboard.

- I made the SpeedFix speed-autodetect routine faster, which measures the

original playing speed when the very first game or demo is played.

- The code has been optimized in several places and I am pretty sure that I

did not introduce new bugs, but one can never know for sure

Please e-mail me if you find any bugs, or even if you think you found one!

- Besides changing this document to show the enhancements, several new parts

have been added: The layout of several Supaplex and Speedfix files, a

complete list of original protection codes, the video memory layout, and

instructions for using the edges in levels properly.

* Ideas for future enhancements (JUST IDEAS!):

- Fix the EGA panel problem if running with VGA cards. The EGA emulation

on VGA cards needs some extra programming for this split-screen function

to work properly.

(I did some tests already but until now without any success.)

- Level verification at load time: the first 1440 bytes may only contain

hex values from 00h to 28h, and there are also some easy criteria for

several other bytes. A bad level would not be loaded. This would make it

possible to use the '@' parameter with 'wilder' wildcards and search for

level and demo files without '.SP' extension, without having to wait for

and abort illegal files (*.com, *.exe, *.bat).

- Use the video frame frequency in calculating the demo times, for honesty.

- Who knows what I can think of next.

* Known but unfixed problems:

- There still seems to be a problem with the PLAYER.LST file: it sometimes

is destroyed. Reason yet unknown but this was also in the original game.

It did not happen to me for a long time. Not repeatable: hard to find.

Maybe this bug has been fixed already? Please notify me when it happens!

- There are sometimes some more screen 'glitches' during the game, which is

an original Supaplex 'bug'.

(Especially during unforseen disk-accesses like when SmartDrive writes

or reads something to/from disk without Supaplex asking for it.)

- Some problems with Matrox video cards still exist: moving to the left

during the first few seconds and shaking in the right half of the game

field still makes problems! (The left half shakes to the right, while

the right half shakes to the left because otherwise we would see trash

from outside the game field on the edges.

Vertical shaking makes no problem: all black outside.)

- Murphy blurres during the soft-scroll movements. This cannot be changed

because of missing pictures, since Murphy moves 2 pixels in MOVING.DAT.

It only may be improved a little by calculating Murphy to move per pixel,

but his background would blurr then, and it takes a lot more programming!

- There is always one more bug.

Herman.

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

+-------- ----- ------ ----- ----- --------- ----- ----+

| HOW TO DEFINE SUPAPLEX SPEED, AND WHAT IS THE CORRECT SPEED |

+-------- ----- ------ ----- ----- --------- ----- ----+

I took my 286/10 for the Supaplex speed reference. I use the standard demo

which is started from the menu with the F2 key, and check the panel time at

the end of that demo. (The panel clock always seems to run correctly.)

My speed reference is 2 minutes and 9 (+/-1) seconds for that demo.

On my Pentium 133 this time was exactly half of this: 1 minute 4(5) seconds.

Until now I do not have a definitive answer from Robin Heydon how fast

Supaplex is supposed to run.

Does anyone object? Please correct me if I take the wrong speed reference!

Several selected statements from Robin Heydon to me:

>>Well the game should run at 60Hz. But on a PC it would run at 70Hz, due

to the video graphics hardware. So it would run quicker than the original

Amiga Version. Or though, not so quick that it makes it unplayable.<<

>>I have tried your version on this machine and it does 2min 10. BUT I have

not tried an original version. I don't have one, and no way of getting one.<<

(Note by Herman Perk: this is about original packaged Supaplex, not the ZIP!)

>>However, it does 'Feel' right to me, and that's what is important in all

games. Anyway, go and release it. It should be excellent. I've certainly

created a little interrest on this side of the Atlantic.<<

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ -+

| SUPAPLEX SPEED-FIX: INTRODUCTION |

+-------- ----- ------ -+

On modern machines the original SUPAPLEX.EXE runs too fast.

This let me search for a fixed version. There wasn't any around, so I had to

fix it myself, so my then 5 year old son could play Supaplex on my new Pentium.

There were several problems to overcome (see HISTORY DETAILS below).

The speed fixed file SPFIXnn.EXE is meant to replace the original SUPAPLEX.EXE.

The other necessary game files (the whole game) can be found in the Internet.

Any feedback is welcome, see my (E-mail) address below.

All my SpeedFix versions are completely based on the original Supaplex code,

and all of them can be used as complete substitute of the original EXE file,

solving the speed problem on fast machines, but also running on 'slow'

machines in the original speed.

I do not intend to unnecessarily change any of the original code.

I did however remove the protection routine after I saw what it actually did,

and some code that was not even referenced at all: dead stuff, small leftovers

of early tests by Robin Heydon.

I have made some additions to make life easier for several persons.

I let Maarten Egmond make some additions for the same reasons.

Have fun and spread the game,

Herman Perk. <- made in Holland and always will be Dutch.

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ ------------+

| SUPAPLEX SPEED-FIX: INSIDE INFO AND HISTORY |

+-------- ----- ------ ------------+

INSIDE INFORMATION ABOUT WHY THE GAME RUNS TOO FAST:

The game speed depends on the video frame frequency (vertical scan rate) in

the 300*200 mode. Supaplex calculates changes in the game field, it updates

the screen and it waits for a new frame to start.

On slow machines those varying calculations last beyond the, say, first

synchronization pulse, and Supaplex was created to react that way.

On fast machines however, those calculations are ready before that same

pulse shows up, and waiting for a pulse now is waiting for the wrong pulse:

one pulse too early. The game speed is then exactly twice the original

speed, depending on when those calculations are ready: before, close to, or

after that first pulse. I expect on very few computers that the speed is

neither the original speed, nor the exact double speed. Those computers

must be matching the video sync pulses very closely.

HISTORY DETAILS:

- The original EXE file is packed (=blocks of the same byte are squeezed).

My disassembler could not unpack this EXE file, so I had to do it myself.

I created an unpacked EXE file first, and I used many tricks to do so.

I then created a disassembly, which costed me some time too, before the

reassembled code ran even after shifting code around. I did this shifting

for testing the quality of the disassembly. By this time my goals were not

to just try and patch the original EXE file, but to reassemble the whole

after changing the disassemby, since patching a packed EXE file can be very

tricky!

Then the biggest problem arose: where in the world did I have to add delay!

The problem was, that whatever I tried, everything looked fine until the

screen scrolled horizontally. It double shifted during a scroll.

So where was that scroll routine? I found 3 of those, but not the one I

was looking for: the horizontal screen movement when Murphy walked.

I expected that I had to go through a lot of code, and cried for help in the

Internet: no reply. At last I found THE routine, which does actually not

scroll at all: it just changes screen pointers even if Murphy does not move.

(I rejected this place as a candidate before, since I was searching for a

scroll only routine and here my breakpoint in the debugger went bezerk.)

The rest was done in less than half an hour, and several hours for testing.

I released this version as my first SpeedFix through Maarten (Elmer).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- During my search, I found strange things. Keys that were tested, but were

disabled by a zero byte. This byte cannot be set by Supaplex itself.

I added a method to set it and played with the extra keys.

This second version I E-mailed to Maarten and I warned him for bugs.

- I already found out, that the Ctrl-function keys should enable the demo

recording routines, but only on a few occasions I was able to create a

working demo file, and I had many crashing 'too many opened files' errors.

There they were: over 3 megabytes of lost clusters, all looked like the

beginning and completed demo files. Now I knew why it was not recording

properly, and after a quick look it was clear what the problem was.

As long as those keys are pressed, it reopened the file each time the keys

are found to be pressed. With a high auto repeat rate of Supaplex itself,

and the wrong timing of when the message 'RECORDING DEMO0' appears on

screen, it cannot be used reliably. I fixed that bug by closing the file

first if it is opened, and then open the file again.

- By this time the 'RECORDING DEMO0' message never appeared on screen, so

this was fixed too by just moving one instruction.

- Now it always showed DEMO0 for all demos. I changed it by adding one

instruction, and this SUPAPLEX.EXE was released as SpeedFix 3.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- During my experiments with new levels, and Maarten's SPEDIT, I was annoyed

by the fact that I needed to rename files every time, and together with

Maarten I developed a few command line options for easy level access.

With the command line option ! and two digits you can choose now from 101

level sets. See below for details.

- I had a big problem if files LEVELS.D* and LEVEL.L* of the requested group

did not exist: The computer would hang in a loop of 'INSERT DISK 2' and

'INSERT DISK 1' screens, and the only escape was the reset button. I fixed

this problem by adding code for aborting these screens with the ESC key.

- I added display of the SpeedFix info and the video frequency in the

statistics screen if the debug mode is active.

- I changed the debug keys '-' and '=' to show the proper level names now,

so in debug mode you can change levels properly in the game itself.

- Spedit shells to Supaplex with Ctrl-A. If the Ctrl key is held until

big Murphy starts to show up, the release of that Ctrl key is never seen

by DOS: this information is swallowed by Supaplex.

This goes for all Ctrl, Alt, Shift, NumLock, CapsLock etc. keys.

DOS reacts upon return as if that Ctrl-key is still pressed, until that

same Ctrl key is hit again.

It always is is very annoying when the keyboard does not react normal.

I fixed this by waiting for all such keys to be released just before

Supaplex takes complete control of the keyboard. This is an endless loop

without time-out, so if anyone has problems, please contact me!

- I know why Robin's slow-down code has problems with the demo's: he wanted

Supaplex to react quickly upon key-press in his slowest mode.

This means that he has to look at the keyboard more often than under normal

conditions. This keyboard routine also takes the next demo step

I did not 'debug' this.

- The result is released as SpeedFix 4.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- Maarten Egmond contacted me about making some additions to the SpeedFix,

in order to play his new demo format *.SPD files. After discussing this,

we came to the conclusion, that there was no need to create a new SPD format

(where the level would have been glued after the demo information), but

just extending the existing SP specifications would do even better.

This is, where I thought, that there was no need for SpeedFix additions,

and I demonstrated Maarten with a special (unreleased) version of my

SupaShow, that it was possible to play the level and show the demo of a

SP file using the SPFIX4. All the high level language program had to do,

is creating a set of LEVELS.D00, LEVEL.L00 and DEMO0.B00.

LEVELS.D00 would have been nothing more than 111 copies of the level part

of the SP file. DEMO0.B00 would have been the demo part of the SP file,

and LEVEL.L00 would have been very easy to create from the level part.

This set 00 was either to be reserved as special set, or backed up before,

and restored after starting the special set, created from the SP file.

Since Maarten did not wanted to go that way, and since he offered to make

the SpeedFix changes himself, and since I don't claim to be any creator

of the game, and since I think that Maarten was very well capable of

doing the job, I let Maarten struggle with my SPFIX4.ASM disassembly file.

(Another reason: I had no time for that right away.)

-------- ----- ------ -------- ----- ------ ------------

+----- ----- --------- ----- -------+

| INSTUCTIONS FOR USE, AND MORE |

+----- ----- --------- ----- -------+

Starting with SpeedFix v4, the speed fixed SUPAPLEX.EXE executable is called

SPFIXnn.EXE, where nn is the current version number, in stead of SUPAPLEX.EXE.

(Now the fixed file can be recognized from the outside too.)

Just copy the SPFIXnn.EXE into your existing Supaplex directory and type

SPFIXnn in stead of SUPAPLEX to start the game.

(I leave it up to you to copy SPFIXnn.EXE over the old SUPAPLEX.EXE, or not.)

You need all the other files from the original game too, which can be found

on the Supaplex webpage (see top). Just download the big ZIPfile called

SUPAPLEX.ZIP (if you don't have it yet).

Make sure you backup the original files DEMO?.BIN, and replace them by the

new demo's which are in the NEWDEMOS.ZIP file included in this package, or

the demo's will not work properly.

If you use SPEDIT 3.0 or higher, remember to change SPEDIT.CFG to shell to

SPFIXnn in stead of SUPAPLEX.EXE.

If you use SUPASHOW, remember to change SUPASHOW.INI to shell to the correct

SPFIXnn version (or to SUPAPLEX.EXE if you want it the hard way).

Now the main thing to get it working is just to change to your Supaplex

directory, and run SPFIXnn.EXE. You should see the normal Supaplex intro

screen coming up, and then the code screen. No code will be asked. In stead,

the current SpeedFix version number will be shown. Press any key here to

start the game. The rest works just like in the original game.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Advanced users (or if you want to do more with the game):

If the initial screen with names appear, including the text 'SPEED FIX (n) BY

HERMAN PERK' (or similar), and Supaplex is waiting for a key, press the

ScrollLock key to enable the debug features.

For the standard game: press any other key.

Up to version 6.0 this and a command line parameter were the only places where

this debug mode could be switched on.

Version 6.0 introduced an extra key to switch the debug mode from within the

game: Ctrl-ScrollLock = on, Alt-ScrollLock = off.

During the game there are extra debug keys to play with, but be aware that

this is not without bugs. It was not meant for us to use! Use at own risk!

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ -+

| SUPAPLEX COMMAND LINE PARAMETERS |

+-------- ----- ------ -+

All command line parameters can be used together in any combination and order.

Some parameters exclude each other mutually like the # and the & options.

I did not want to make an intelligent command line parser, so please excuse

the way these options are implemented.

Note that 'SPFIXnn' should be replaced by the actual executable of this

version (e.g. SPFIX4, or SPFIX62). nn is simply an abbreviation for the

version number.

First a command line example to show what it is all about:

SPFIX62 !01 # /3 d

Which means:

Start Supaplex with level files *.?01, force cheat mode (do not use the files

PLAYER.L01 and HALLFAME.L01 and enable all levels), start level 3 immediately

and in debug mode (so demo files DEMO0.B01,,DEMO9.B01 can be created, etc.)

Spaces between parameters are not needed (except after a file name).

Description of all possible parameters:

SPFIXnn *z or SPFIXnn *

== ==== ==== == ==== ===

where z=0,1,2,,10 is a SpeedFix delay number as in: SPFIXnn *5

If the SpeedFix does not find the speed properly, you can force any speed

within the SpeedFix range. *0 (or just *) is the fastest Supaplex speed.

With *10 Supaplex runs the slowest, *5 is for computers that run exactly with

double the original speed (most computers I know). This option fixes the speed

at the start of Supaplex, in stead of automatically find the right speed and

then fix it. Even if the * option is used, the SpeedFix keys are always

active. See also the statistics screen in debug mode for checking this value.

SPFIXnn !y

== ==== ====

where y is 00..99 is a level group number as in: SPFIXnn !23

The first 10 groups can be addressed with a single digit: !5 equals !05 etc.

Ever since new levels can be created, there is a need for handling those

levels. All files belonging to the original set of 111 levels are:

LEVELS.DAT, LEVEL.LST, PLAYER.LST, HALLFAME.LST, DEMO0.BIN, , DEMO9.BIN.

With this option 100 total new sets can be used by Supaplex, without renaming

the original files.

The file names of those new sets are different in the extentions only:

LEVELS.D00, LEVEL.L00, PLAYER.L00, HALLFAME.L00, DEMO0.B00, , DEMO9.B00,

etc. up to LEVELS.D99, LEVEL.L99, , DEMO9.B99.

This allows 100 extra sets of 111 levels each, plus the original set making

a total of 101 times 111 levels.

A comlete new set can be renamed or copied with following wildcard file name:

*.?00 for the complete set 00, and *.?57 for complete set 57 etc.

Remember that PLAYER.L00,,PLAYER.L99 and HALLFAME.L00,,HALLFAME.L99 are

all hidden, like PLAYER.LST and HALLFAME.LST.

If option !y is not used, the original set is used.

Only LEVELS.D?? and LEVEL.L?? must exist for a set to work.

PLAYER.L?? and HALLFAME.L?? are created without names and privileges, if those

files do not exist.

SPFIXnn /x

== ==== ====

where x=1,2,3,,111 is a level number as in: SPFIXnn /78

Maarten wrote SPEDIT, a level editor. He already implemented a call to

Supaplex in order to test the level under construction.

With this option SPEDIT can instruct Supaplex to enter a level without going

through the menu. If '/' is seen on the command line, only the first picture

of Supaplex is displayed (the opening curtain and author screen are skipped.

If no legal level number is entered immediately after the '/' then the nearest

level to this illegal number starts. (200 will start 111, 0 will start 1)

SPFIXnn &w

== ==== ====

where w=1,2,3,,20 is a player number as in: SPFIXnn &2

This starts Supaplex with the player of choice already active, so this

player does not have to be selected by pressing the player up and down buttons

in the menu. His ranking is also selected.

Did you already know, that clicking on the player's name shows his ranking,

so you do not have to scroll through the player AND ranking?

SPFIXnn #

== ==== ===

Force all levels playable as if those are all skipped. This was necessary for

SPEDIT too. With this option the player list and the hall of fame list are

never affected: Supaplex does not change the files PLAYER.LST and HALLFAME.LST

The player name is '(FORCED)' and cannot be changed or deleted.

This is a good test mode.

SPFIXnn S

== ==== ===

New in SPFIX62: The original Supaplex has (deactivated) code to shake the

screen during all explosions. I thought this was too much, so now the default

is that the screen shakes only when Murphy explodes. This 'S' or 's' lets the

screen shake on all explosions. See also the 'N' for no shake at all.

SPFIXnn N

== ==== ===

New in SPFIX62: The original Supaplex has (deactivated) code to shake the

screen during all explosions. I thought this was too much, so now the default

is that the screen shakes only when Murphy explodes. This 'N' or 'n' disables

also that shaking (like the old Supaplex). See also the 'S' for always shake.

SPFIXnn D

== ==== ===

Force debug mode on. This 'D' can be 'd' too, so you don't need the shift key.

Since the '/x' option skips the screen where you can press the ScrollLock key

for 'debug mode on', I implemented this option as command line parameter too.

Debug mode will enable you to record demo's (to show to your friends, or as

help to explain someone how to solve a level), and use some more features.

See 'COMPLETE LIST OF SUPAPLEX KEYS' below for what extra keys (features) you

can use in debug mode.

SPFIX60 and above have an extra possibility to switch between normal and debug

mode: see Ctrl-ScrollLock and Alt-ScrollLock in the complete keylist below.

SPFIXnn M

== ==== ===

New in SPFIX62: The debug m key for moving the game field allowed the field

to scroll beyond the edges. This is now clipped by default, and this 'M' or

'm' can be used to get the old non-clipping m-mode back, but now improved:

The problem with the sudden jump on the left edge has been fixed.

See for this debug m key under 'EXTRA DEBUG KEYS IN THE GAME ' below.

(Check also the extra SPFIX62-keys Ins,Home,PgUp - Del,End,PgDn below!)

SPFIXnn C

== ==== ===

New in SPFIX62: The SpeedFix doesn't need LEVEL.L?? anymore! If that file is

available, it is used. If it is missing, the file LEVELS.D?? is used and the

missing information is extracted from it. Nothing is written by default, but

this 'C' or 'c' tells the SpeedFix to create the LEVEL.L?? file in that case.

(If LEVEL.L?? is present, nothing will happen, so if you want to make a new

file, delete the old file first before starting the SpeedFix with this 'C'.)

SPFIXnn L

== ==== ===

New in SPFIX62: Start the SpeedFix with the saved game (if available).

Be aware that SPFIX62 introduces different saved games for each level set!

(See also the 'W' and '!y' options.)

SPFIXnn W

== ==== ===

New in SPFIX62: Use only SAVEGAME.SAV as saved game, otherwise SAVEGAME.S??

is used, where ?? is either AV,00,..,99 depending on which level set is active

when the snapshot is made (with the 'write game' key 'W' during the game), AND

when it is loaded again!

SPFIXnn F

== ==== ===

New in SPFIX62: Clicking with the mouse on the floppy symbol '1<->2' in the

menu now changes the level set (default): All available LEVELS.D?? are

'scrolling' through the message line, the original first, then 00,01,..,99,

wrapping back to the original. With the Shift key held down, this order is

inverted. If the Alt key is pressed while clicking on the floppy symbol, the

original (but enhanced) floppy routines are executed, as in the old days

This 'F' or 'f' parameter just inverts the function of the Alt key here.

SPFIXnn E (Before version 6.2: SPFIXnn EGA)

== ==== ===

Since the VGA/EGA mode is tested, set and used by Supaplex before the keyboard

routines are installed, I could only show the EGA mode through a command line

parameter without affecting the style of the program too much.

This EGA mode shows Supaplex using the standard 16 colors only, and not

changing the video palettes for better colors. Fading is not possible.

The Supaplex screen in this mode is calculated with a different length than

with VGA. There is a problem with the location of the bottom panel in the

game, because this EGA mode is not meant to run on VGA, without precautions.

This option is only to show what unused potential is in this game, you

probably don't want to use it a second time after seeing it

(I changed the EGA into just E, because I did not see any reason to leave it

the way it was, and I could remove my old code to theck for this whole EGA.)

SPFIXnn H

== ==== ===

A bug has been fixed with Horizontal movements, so I think that now more new

video cards are working properly, like the Matrox Millennium which I used to

fix this bug. Especially VGA cards where shifted pictures (with a horizontal

difference of half a sprite) were flashing during those horizontal movements.

This 'H' or 'h' forces the original Supaplex timing, just in case the bug-fix

makes problems now with originally working VGA cards (which I do not expect!).

If you need to use this parameter PLEASE tell me about it!!!

SPFIXnn R

== ==== ===

I provided a command-line option 'R' or 'r' in version 6.2 to refresh the

video memory when the game returns to the menu. I did not make this refresh

option default because it increases the time to return to the menu, especially

when the game runs from floppy disk: the file MOVING.DAT is reloaded. This

parameter is actually only needed when you are experimenting with walking on

and beyond the top or bottom edges, which is not allowed anyway. For more

about such experiments see the section 'ABOUT THE GAME FIELD EDGES' below.

SPFIXnn :filename.ext

== ==== ==== ==== ==== ===

where filename.ext is the name of a single-level-file: SPFIXnn :MYLEVEL.SP

or, on a different drive in a subdirectory: SPFIXnn :D:HEREISMYLEVEL.SP

Maarten wrote SPEDIT, a Supaplex level editor.

SPEDIT can create single-level-files, which normally have the extention SP.

With SPEDIT version 3.2, Maarten introduced an extra option for these so

called SP-files: a demo (created with SPFIX3 or higher) can be attached to

the level, and still it is an SP-file (called: extended SP file).

This option starts the SP file demo (if a demo is attached), or starts the

level itself (if no demo is attached).

The Supaplex menu shows the current level set (chosen with the !-option),

which is indeed active. All other command line options can be used too.

You will not find the SP level in the Supaplex menu.

Back in the menu, you can restart the demo with the F11-key, or (re-)start

the SP-level with the F12-key.

With the SpeedFix v5.0 and upwards, the demos that supaplex records, are

also extended SP files (i.e. you can record a demo, say DEMO3.BIN, and run it

with SPFIXnn :DEMO3.BIN).

SPFIXnn @ :filename.ext

== ==== ==== ==== ==== =====

The '@' can only be used together with the colon option (see above).

The file used with the colon option must contain a demo. This option will play

the demo at 'lightning' speed, without any delays. On a fast 486, a demo that

takes 5 minutes at default speed, will now be played in only a few seconds.

Further, the program will exit immediately after playing, and state whether

the demo failed or succeeded (to reach the exit with enough infotrons

collected). This is handy to check demo's fast.

(Maarten uses it to check entries to the Honoured Solutions list very quickly)

The resulting screen text afterward is redirectable to a file (version 6.2+).

(Which means that without it, every single file needs to be checked manually,

because the result text could then not be put in a file for evaluation later.)

Speedfix version 6.2+ allows no levels without demo's to load with the '@'

option anymore, because it would prevent complete unattended bulk demo checks

with the use of batch files: The ESC key would have to be pressed to exit.

(Only the original 10 old-style demo files are recognized and evaluated, and

all other old-style demo's are rejected as 'file too short' by SpeedFix 6.2+.)

Such a DOS batch file could look like in this two-line example:

echo SPFIX62 demo results: > spresult.txt

for %%a in (*.sp demo?.b??) do call spfix62 @ :%%a >> spresult.txt

(If this second line is typed in as command on the DOS command-line,

both '%%a' must change into '%a': Each with only 1 percent sign.)

The first line kills any existing old result file with the single '>'.

The line with 'for' can be changed if the SP files are located in

subdirectories. Example for files in subdir1, subdir2 and more:

for %%a in (subdir1*.sp subdir2*.sp d:evenmoresubdirs*.sp) do

A more intelligent structure is ofcourse possible, and also a possibility

of aborting the batch can be built in

An example of such a resulting file (in our case spresult.txt) with all

different expected results could be:

SPFIX62 demo results:

Demo successful: 03S087.SP

Demo failed: NEWDEMO1.SP

SP without demo: A_LEVEL.SP (meaning: level only)

!! File < Level: OLDDEMO.SP (meaning: file too short)

!! File >> Demo: LEVELS.SP (meaning: file too long)

Demo successful: DEMO0.BIN (original short demo!)

3 other possible error messages are from unexpected errors, where level

results in stead of demo results appear, which could only occur if there

is a bug in my code, or from an error in the command-line, which would not

be not fault:

'@'-ERROR: Level(?) successful: UNKNOWN.SP

'@'-ERROR: Level(?) failed: ERRORS.SP

'@'-ERROR: Bad or missing ':filename.ext'!

-------- ----- ------ -------- ----- ------ ------------

+----- ----- --------- ----- --------+

| COMPLETE LIST OF SUPAPLEX KEYS |

+----- ----- --------- ----- --------+

Following is a COMPLETE list of keys, that are checked by Supaplex.

Since Supaplex tests the keyboard scan codes only, it is impossible to refer

to national keyboard layouts. All keys are as located on the US keyboard.

BE AWARE that all keys can have a HIGH AUTO REPEAT RATE on fast machines,

except for the 'p' and the NumLock pause keys (and all keys used in the

protection code, which I threw away.) This time I did something about the

debug function keys F1, F2 and F3. They really could do without fast repeat.

The mouse can only be used in the menu and controls screens. See also below.

Watch out: the mouse buttons are active in the game, and can destroy your

effort!

+-------- ----- ------ ----- ----- -----------+

| ONLY IN THE PROTECTION CODE ENTRY (I THREW IT AWAY): |

+-------- ----- ------ ----- ----- -----------+

0,1,2,..,9 = (not on the keypad!) Digits to enter, so the (unpatched) game did

not always say: DOS ERROR: Access Denied.

BackSpace = Correction key.

Enter = Usual Enter, and hope that the entered three digits were correct,

unless you have a patched game.

+-------- ----- ------ ----- ----- -------+

| THE 'DEBUG-ON' KEY I ADDED (AUTHOR SCREEN ONLY): |

+-------- ----- ------ ----- ----- -------+

ScrollLock = Switch on the debug mode. This ONLY works in the author screen!

This key is not available in my first SpeedFix release.

+-------- ----- ------ --+

| THE STANDARD KEY SET IN THE MENU: |

| Several game keys have a visual |

| effect in the Controls screen too.|

+-------- ----- ------ --+

ESC = Leave Supaplex: back to DOS

Leave Controls, Gfx Tutor, Statistics etc. when in those screens.

The right mouse button in the menu: Leave Supaplex: back to DOS

Alt-SysReq = Back to DOS. As if ESC key is pressed in the game AND the menu.

a,b,..,z = Entering a new player name: needed for the name. (US keyboard!)

- = Entering a new player name: dash can be used in the name. (US!)

(This is not the keypad '-'!)

Space = Press the OK button, even if the cursor is somewhere else.

Leave Gfx Tutor, Statistics etc. when in those screens.

Entering a new player name: Space can be used in the name.

BackSpace = Entering a new player name: Correction key.

Enter = Press button under cursor, but only if no mouse driver is loaded.

Leave Gfx Tutor, Statistics etc. when in those screens.

The left mouse button in the menu: Press button under cursor.

Entering a new player name: Enter (as usual).

Arrow keys = If no mouse driver is installed: move cursor in that direction.

The keypad digits 8 (up), 4 (left), 6 (right) and 2 (down) are

functional too. This is not influenced by the state of NumLock.

The mouse takes over, but only in the menu and the controls

screen: nowhere else, although both mouse buttons function as

Enter/ESC/Space key in several other screens, like Gfx Tutor,

Controls, Statistics and other screens with that blue background.

FunctionKey= Start DEMO: its 'file number' is the function key number -1.

Those demo files are DEMO0.BIN through DEMO9.BIN.

If any of those files are missing or really bad, then none of the

following demo files with higher numbers are ever loaded by

Supaplex, and therefore cannot be started.

In that case just fill the gap by copying any good demo file to

the missing/bad file.

left mouse button = in the menu: Press button under cursor.

right mouse button = in the menu: Leave Supaplex: back to DOS

+-------- ----- ------ ------+

| EXTRA MENU KEYS MAARTEN EGMOND ADDED: |

+-------- ----- ------ ------+

F11 = restart the demo, attached to the single-level-file, specified

on the command line (colon option 'SPFIXnn :file.sp'). This key

only works in the main menu screen.

F12 = (re-)start the level of the single-level-file, specified on the

command line. This key only works in the main menu screen.

+----- ----- ----- ----- ------+

| EXTRA MENU KEYS I ADDED: |

+----- ----- ----- ----- ------+

Shift and clicking on the floppy 1<->2 symbol: change level sets in

descending order. Without Shift the order is ascending.

Changing level sets from the menu is introduced in SPFIX62.

Alt and clicking on the floppy 1<->2 symbol: do the old floppy stuff:

= load the LEVELS.DAT etc. files from a different floppy.

This used to be the default without Alt key before SPFIX62, but

without improvements like drive letters up to F.

See also the command line option 'F'.

+-------- ----- ------ --+

| THE STANDARD KEY SET IN THE GAME: |

+-------- ----- ------ --+

ESC = Quit play (give up).

The left mouse button functions as ESC key during the game:

do not touch the mouse and don't drop it while playing!

This is changed in SPFIX62: it is now the RIGHT mouse button,

which is now the same ESC mouse button as in the menu!

Alt-SysReq = Back to DOS. As if ESC key is pressed in the game AND the menu.

Any blue text screen has to be closed separately though.

From SPFIX62: these blue screens are closed too, and the exit to

DOS is faster and more reliable.

Space = Pressed together with arrow keys: do not move, but 'eat' the

object in the chosen direction.

Pressed alone for a few seconds: release a red disk.

Enter = Toggle bottom panel on/off. (Display more of game field.)

Before SPFIX54: If no mouse driver was loaded: KILL MURPHY!

Arrow keys = Move Murphy into the chosen direction.

The keypad digits 8 (up), 4 (left), 6 (right) and 2 (down) are

functional too. This is not influenced by the state of NumLock.

The mouse is without function in the game, except for the left

button, which acts as ESC.

In debug mode, after pressing the 'm': move game field that way.

j = Recalibrate joystick on the fly.

p = Pause on/off. This is independant from the NumLock pause.

NumLock = Pause on/off. During this pause you can type in 'cant sto'.

Type in those 4 characters, 1 space and 3 characters only:

the pause AND the debug mode both end, without pressing NumLock.

Remember that these keys refer to the US keyboard layout.

Pause = (This key is not checked by Supaplex or any SpeedFix.

DOS may still make its own pause with this key )

RIGHT Shift= Show in the bottom panel how many red disks Murphy has left.

left mouse button = Before SPFIX62: Kill Murphy! From SPFIX62: no function.

Do not touch the mouse and don't drop it while playing!

right mouse button = Before SPFIX62: no function. From SPFIX62: Kill Murphy!

Do not touch the mouse and don't drop it while playing!

Now it is the same button as in the menu.

+-------- ----- ------ --------+

| THE SPEED-FIX KEYS I ADDED (GAME ONLY): |

+-------- ----- ------ --------+

(These 4 keys do their job everywhere in Supaplex, but the result is only seen

in the game.)

grey + = Speed up stepwise to the original speed. (see also grey '-')

grey - = Slow down stepwise, independant from the 1..9,0 keys: see below.

The debug 'd' command key will show a black-white flickering.

This means that the CPU does active waiting in the black periods.

Slowing down with these SpeedFix keys does NOT affect the

demo's. (The debug speed keys 0..9 do affect the demo's!)

grey * (x) = Re-adjust speed automatically. This is default at the start of

Supaplex, unless the command line option * is used (Ver.4+).

Version 5.x and higher only adjust once, and remember the setting

for this * key. This is why after each fresh start of the Speed-

Fix, the very first moment of the first game is slow: Measuring.

grey / (:) = Fastest playing speed. This key is the same as the white slash

key ('/') on the (US) keyboard.

(This key is not available in SpeedFixes before version 6.2).

SpeedFix version 4 and up display additional information in the statistics

screen if the debug mode is on. The normally dashed line shows delay info

of the SpeedFix keys and the video frame frequency.

Example of this line: -------- <DLY:05> ------- <071HZ> --------

DLY:00 refers to the original supaplex speed (fastest). DLY:10 is slowest.

DLY:05 is the speed for computers that originally run exactly double speed.

The video frame frequency information in this example shows 71 Hz, or 71

frames per second. This frequency is measured and displayed each time the

statistics screen is called: you will notice a 1 second measuring delay.

+-------- ----- ------ -+

| KEYS I ADDED IN 6.0 (GAME ONLY): |

+-------- ----- ------ -+

Ctrl-W = Write game situation: make a snapshot which can be loaded with

Ctrl-L later. This makes it possible to proceed with a partly

solved level, beginning with the situation at the time the

snapshot was written.

The snapshot file name is fixed to SAVEGAME.S??, where the '??'

depends on the active level set. Any previous snapshot with the

same name is always overwritten and thus gone forever!

The lower right corner of the panel will flash 'WR' if there

were no problems, otherwise it will flash 'XX'.

Ctrl-W does not affect anything: If you finish a level or a demo

making snapshots with Ctrl-W, that level counted the normal way,

and demo recording/playback is not aborted: The game situation

is written as if no recording or playback was running.

(Before SpeedFix version 6.2 there was only one saved game for

all level sets possible and was named 'SUPAPLEX.SAV'. These old

files can be renamed to any of the 101 different 'SAVEGAME.S??'.)

See also the command line options 'W' and 'L' above.

Ctrl-L = Load the snapshot file, written with Ctrl-W.

The lower right corner of the panel will flash 'LD' if there

were no problems, otherwise it will flash 'XX'.

'File does not yet exist' is an example of such a problem.

It is not possible to complete a level by using this 'cheat'

method: If you want to officially finish a level, you have to

play it from scratch, without using this snapshot Ctrl-L option!

See also the command line options 'W' and 'L' above.

Ctrl-ScrollLock = Switch Debug mode on during the game.

The lower right corner of the panel will flash 'DB'.

Alt-ScrollLock = Switch Debug mode off during the game. See Debug keys below.

Ctrl-F12 = Stop demo playback: you take over. You can finish that demo.

(This is the same key that also stops demo recording: see below.)

+-------- ----- ------ ----- ----- ----------+

| EXTRA DEBUG KEYS IN THE GAME (US KEYBOARD LAYOUT!): |

+-------- ----- ------ ----- ----- ----------+

Ctrl FunctionKey = (Re-)Start recording DEMOx (x=Function key number-1).

Remember that the demo files count from 0 and the

function keys from 1. Therefore the -1 here.

You can't change the speed of the game when you are

recording a demo. Only F1 through F10 can be used.

WARNING: THE ORIGINAL CODE LEAVES LOST CLUSTERS ON THE

HARD DISK: do not wait pressing these keys until the

message RECORDING DEMO0 appears since by then it has

reopened the same file without closing it. This does not

destroy data, but you fill your hard drive with trash

if you do not remove those lost clusters. The resulting

DEMO file is actually inside one of those lost clusters.

I fixed this bug in SpeedFix version 3.

You can now restart the demo recording as much as you

want, since the previous file is now closed first.

Furthermore the RECORDING DEMOx message is put on screen

immediately now, and not with the second open as in the

original code, and it now shows the proper file name.

Maarten Egmond changed the format of the created demo's

to include the level itself. (SpeedFix ver.5 and up)

See also remark at FunctionKey= above.

1,2,3,4,5,6,7,8,9,0 = (not on the keypad!) slow down: 1=normal 0=slowest.

This however does not slow down the timing of the DEMOs:

The demo runs in normal speed, but the screen reacts in

low speed. Poor Murphy

Use the 1 to get back to normal speed, and choose speed

with the SpeedFix keys for the demo's to run properly

in lower speed than normal.

NumLock = see NumLock above for ending the debug mode with 'cant sto'.

Keypad 5 = Return to Murphys position in the screen move mode (see 'm' key).

r = Restart the active level, without going through the menu.

m = Move the game field, not Murphy. q = Quit this function.

The arrow keys move the field into the chosen direction. The Keypad 5

retuns the screen to Murphy's position, but the mode stays until 'q'.

This command has been improved in SPFIX62:

- The screen jumped on the left border: fixed, but now only the game field

can be seen by default. Command line parameter 'M' or 'm' allows also

to look outside of the game field (as before SPFIX62), but without jump.

- 6 extra keys for immediately show 6 different parts of the game field.

See those new keys below: Ins, Home, PgUp, Del, End, PgDn.

- Using this during a demo playback, the screen movement was affected by

Murphy's movements. Not anymore! (This was just annoying.)

Keeping keypad 5 pressed, Murphy is followed without leaving the m mode.

d = White background. q = quit (My guess: this shows how much time the CPU

needs for its Supaplex calculations. Darker parts show calculation time.)

q = Quit from m and d modes.

s = Remove all Snik-Snaks| When something moves, and is removed, the screen

c = Remove all RAM-Chips | will show strange objects. If hardware is removed,

z = Remove all Zonks | the field edges -especially the bottom edge- do

b = Remove all Bases | very strange things with the Supaplex objects.

h = Remove all Hardware | I did not introduce these bugs! (see batch below)

| SPFIX62 now completely removes the Snik-Snaks and

| keeps the 'Fancy' hardware and RAM chips!

- = Goto screen of previous level (not the keypad '-'. See also '='-key)

= = Goto screen of next level (-,= before SpeedFix 4: no level name update.)

('+' is the shifted '=' key on the US keyboard, so we deal with + and -)

F1= Toggle gravity on/off

F2= Prevent Zonks from falling: off/on/off. (Press twice for on, once for off)

From SPFIX62: Just toggle this on/off: no pressing twice anymore.

F3= Toggle 'freeze Snik-Snaks and Electrons' on/off

(These 3 keys reflect all properties that special ports can change. Those

special ports were thought to only affect gravity, until september 1997)

right mouse button = From SPFIX62: Kill Murphy! Before SPFIX62:

'normalize' Hardware and RAM chips: 'Fancy' stuff changes

to dull stuff. Actually this happens with almost all

debug keys which change things. Supaplex just repaints

the screen from memory, which is already 'normalized' for

fast game reactions, so it does not always have to go

through all different Hardware and RAM-chip stuff.

left mouse button = Before SPFIX62: Kill Murphy! From SPFIX62:

Toggle normalized Hardware and RAM chips to fancy stuff

and back. The debug keys which change things now do not

normalize fancy stuff anymore!

+-------- ----- ------ ------+

| EXTRA DEBUG KEY MAARTEN EGMOND ADDED: |

+-------- ----- ------ ------+

Ctrl-F12 = Stop demo recording. This will close the demo file that is being

recorded. The game will continue as if nothing happened. This

key will only work when a game is being recorded. If you press

this key in the main menu it will be regarded as a normal F12.

(This is the same key that also stops demo playback: see above)

+----- ----- ----- ----- -------+

| EXTRA DEBUG KEYS I ADDED: |

+----- ----- ----- ----- -------+

Alt-ScrollLock = Switch Debug mode off during the game.

The lower right corner of the panel will flash '--'.

If any of the 'd' or 'm' keys were used, an automatic 'q'

is invoked. (If you don't want to leave those d and m modes,

you can also press NumLock followed by the 'cant sto'.)

Ins Home PgUp = During the 'Move the game field' mode (see m key) it seemed

Del End PgDn convenient to me to show a specific part of the game field

with an easy procedure. The arrangement of these six keys

on the keyboard is the same as the corresponding part of

the game field. Home is on top in the middle, and so on.

As long as you don't use a notebook, you don't have to

remember which key shows which part of the game field.

Those 6 field parts just overlap (if the panel is switched

off): The whole game field can be inspected extremely fast.

-------- ----- ------ -------- ----- ------ ------------

+----- ----- --------- ----- -------+

| ABOUT SPEEDFIX DELAY FACTORS: |

+----- ----- --------- ----- -------+

The original Supaplex runs at 'maximum' speed on each machine. At the time

Supaplex was programmed, it ran at only one speed on all machines (except on

those very slow machines where calculation time was not acceptable).

The SpeedFix allows 11 different speeds, of which one is the only original

Supalex speed from the old days, and one is the (original) maximum speed of

today's original Supaplex.

Let us number the 11 different speeds from 0 to 10, where 0 is maximum speed,

and let us call those numbers 'SpeedFix values'.

These numbers are somehow related to the amount of extra delays that the

SpeedFix inserts inbetween the many separate Supaplex video frames:

As also written somewhere above, Supaplex takes some time for its own internal

calculations, which used to last over 1/70th of a second for each new frame,

but on present day machines this takes less than 1/70th of a second.

After those calculations are ready, Supaplex just sits and waits for the first

occurence of a video frame synchronization pulse, which come each 1/70th of a

second.

Let us now forget about the calculations and just notice that in the old days

it took 2 delays (of 1/70th of a second) for each new Supaplex frame, and now

it takes 1 delay (of 1/70th of a second) for each new Supaplex frame on fast

machines. (Original Supaplex!), which makes the game exactly twice as fast.

The SpeedFix introduces extra (discrete) delays: it waits for extra video-

frame synchronization pulses (the 70 Hz pulses), and the amount of extra

delays is (for each of the SpeedFix values 0..10):

0, 1/5, 1/4, 1/3, 1/2, 1, 2, 3, 4, 5, 6

(The fractional amounts of delays are created by inserting one delay every

so many calculation cycles, and taking the mean delay over a large enough

time interval.)

The multiplication factor for the playing time can be calculated from these

extra(!) delays. The original Supaplex standard playing time from the old

days, multiplied with such a factor equals the true playing time now.

For slow machines these can only be (depending on the SpeedFix value 0..10):

1, 11/10, 9/8, 7/6, 5/4, 3/2, 4/2, 5/2, 6/2, 7/2, 8/2

For fast machines:

1/2, 6/10, 5/8, 4/6, 3/4, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2

Example calculation for slow machines for SpeedFix value 7:

Supaplex waits on slow machines for 2 delays per frame of its own.

We put in an extra 3 (from SpeedFix value 7) and we get 5 delays in total.

This 5 divided by the 2 of the original game from the old days makes 5/2,

which means that Supaplex waits 5/2 times the original time, which means

also that the playing time is prolonged to 5/2 times the original time.

The same calculation example for the present fast machines:

Supaplex waits on fast machines for 1 delay per frame of its own.

We put in an extra 3 (from SpeedFix value 7) and we get 4 delays in total.

This 4 divided by the 2 of the original game from the old days makes 4/2,

which means that Supaplex waits 4/2 times the original time, which means

also that the playing time is prolonged to 4/2 times the original time.

Note: The '@' command line option tells the SpeedFix never to wait for any

of those video synchronization pulses. Not even those waits from the

original Supaplex are executed: The speed depends on calculations only.

The original VGA standard 'frame rate' at the Supaplex screen resolution of

320 * 200 dots (16 colors) is 70Hz (= 70 frames per second).

In some notebooks this 70Hz is reduced to 60Hz, which makes things even more

complicated The SpeedFix does not correct for this.

What is worse: Present day turbo video cards may have this low resolution

badly implemented, which even can make it impossible to play Supaplex.

(Neglected because everyone cries for higher speeds and higher resolutions)

Example: Several Matrox video cards,

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ -------- ----- ------ +

| HOW TO SWITCH ON THE DEBUG MODE WITH THE ORIGINAL SUPAPLEX CODE: |

+-------- ----- ------ -------- ----- ------ +

The ORIGINAL Supaplex version can be switched into the debug mode with the

following batch job (which needs the DOS program DEBUG.COM or DEBUG.EXE).

This batch can be extracted from this file by deleting everyting except the

following 10 lines, and save it as SUP.BAT into the Supaplex directory:

@echo off

echo g33 > supaplex.deb

echo t >> supaplex.deb

echo g103 >> supaplex.deb

echo t >> supaplex.deb

echo ecs:a040 1 >> supaplex.deb

echo g >> supaplex.deb

echo q >> supaplex.deb

debug supaplex.exe < supaplex.deb

del supaplex.deb

NOTE: This batch is NOT to be used with any of my SpeedFix versions!

SEE ALSO MY WARNING ABOUT THE 'RECORDING DEMO' BUG! (Ctrl-FunctionKeys)

I use this batch job to compare the behaviour of my recompiled version with

the original code. I did never see any differences yet except for the

improvements I made.

If the text 'CODE: xyz' shows, there are three more ASCII characters on

screen, just behind the text 'ENTER: ???'. These are, if converted to digits,

the code to enter: Space=0, !=1, '=2, #=3, $=4, %=5, &=6, '=7, (=8, )=9.

If the protection has been removed by a patch, this can be ignored.

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ ----- ----- ----- ----- -------+

| HOW TO FORCE THE EGA MODE WITH THE ORIGINAL SUPAPLEX CODE: |

+-------- ----- ------ ----- ----- ----- ----- -------+

With one additional line, the above batch job can also force the video mode

on VGA cards to run as if it runs with an EGA card, and with debug mode on.

The behaviour and the colors of Supaplex are totally different now.

Different code is used in the program, and the standard 16 colors are used in

stead of using the VGA palettes for nicer colors.

@echo off

echo g33 > supaplex.deb

echo t >> supaplex.deb

echo g103 >> supaplex.deb

echo t >> supaplex.deb

echo ecs:5378 0 >> supaplex.deb

echo ecs:a040 1 >> supaplex.deb

echo g >> supaplex.deb

echo q >> supaplex.deb

debug supaplex.exe < supaplex.deb

del supaplex.deb

NOTE: This batch is NOT to be used with any of my SpeedFix versions!

I included a command line switch to force it on in my SpeedFix (v4+):

use the command line parameter EGA (capitalized in v4 only) as in:

SPFIXnn EGA

On VGA there is a quirk in location of the panel.

I did not test it with an original EGA card, so I do not know if it is a bug.

(VGA cards need a different approach when using EGA code, which may be why.)

The EGA mode is switched on with the line: echo ecs:5378 0 >> supaplex.deb

The debug mode is switched on with the line: echo ecs:a040 1 >> supaplex.deb

The lines with g33,t,g103,t are to persuade Supaplex to unpack itself.

Supaplex has to be unpacked, since the debug byte is inside of a packed block.

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ ----- ----- --------- ----- ----+

| EXTRA INFO ABOUT THE ORIGINAL SUPAPLEX CODE (FOR INSIDERS): |

+-------- ----- ------ ----- ----- --------- ----- ----+

I found two different protection patches of the original Supaplex game:

1- If any number can be entered, and the game starts anyway, the described 3

debug-mode ASCII characters can be ignored, but they are visible anyway.

This was a single or double byte patch, which both ignore the result of

the entered code, but still runs all of the protection code:

The most common patch is the single byte patch (also my original):

edit: SUPAPLEX.EXE

search: 3B 0E 34 DE 75 06 C6 06

change: -- -- -- -- -- 00 -- -- (-- = leave as it is)

(This patch changes a conditional JUMP to jump to the next instruction,

and therefore this jump is disabled: it does nothing.)

I found the following text for the two byte patch in the Internet:

(Quote:) edit: SUPAPLEX.EXE

search: 3B 0E 34 DE 75 06 C6 06

change: -- -- -- -- 90 90 -- -- (-- = leave as it is)

(This patch changes the same conditional JUMP into NOP's, which do nothing)

2- If the screen with author names is immediately followed by the menu,

without waiting for a code, then Supaplex has been patched differently,

and all of the remarks about 3 debug-mode ASCII characters can be ignored,

since those will never appear on screen.

This was a 3 byte patch, which bypassed the complete protection:

I found this text somewhere else in the Internet too:

(Quote:) Crack for SUPAPLEX by Satch.

File: SUPAPLEX.EXE

Search for : E8 E9 05 E8 98 87

Replace with: -- -- -- 90 90 90 (-- = leave as it is)

(This patch changes the CALL to the protection routine into NOP's.)

Maarten wrote in his FAQ on his Supaplex pages, that there is another patch,

which waits for just a single 'any key' to proceed to the menu.

I have never seen any other references to that patch.

These texts were my verification for the reconstruction of the original

protected code, that I made before I knew these texts. Why I wanted to

reconstruct the protected code? I wanted an original disassembly, and

sometimes such patches change the behaviour of the program somehow.

(In 1998 this reconstruction has been verified: The SUPAPLEX.EXE from the

official Supaplex version on CD is byte for byte identical! Only the

installation program has changed and a TSR program has been added to run

Supaplex from CD. There is also a manual in PDF format, but it uses a

special keycaps font (PIXymbols.command) which is not included on CD!

The printed result of that manual looks a bit weird with the font-substitute

that the many different Adobe Acrobat Readers on that CD choose instead.)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Together with the two byte patch text I found following text too: (Quote:)

Edit the savefile with a HexEditor (it's a hidden file!) and edit this

after your name (as entered when you first created a character in the

game) enter a few 01 hex characters , ascii code 1 a small face (white)

and this counts as one more completed level. Do this up till about 111

or as far as you like !

The referred savefile is PLAYER.LST, and everyone with a little bit of

experience already did this automatically without ever reading this text.

There is also a utility on Maarten's pages to make these changes to this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

+-------- ----- ------ ---+

| COMPLETE LIST OF PROTECTION CODES: |

+-------- ----- ------ ---+

These codes are only needed to start the original unpatched, protected game.

(Don't think that I typed this code table I'm not that kind of crazy!)

000 864 063 303 126 766 189 205 252 668 315 107 378 570 441 009

001 465 064 928 127 367 190 830 253 269 316 732 379 171 442 634

002 066 065 529 128 992 191 431 254 894 317 333 380 796 443 235

003 691 066 130 129 593 192 032 255 495 318 958 381 397 444 860

004 292 067 755 130 194 193 657 256 096 319 559 382 511 445 461

005 917 068 356 131 819 194 258 257 721 320 160 383 623 446 062

006 518 069 981 132 420 195 883 258 322 321 785 384 224 447 687

007 119 070 582 133 021 196 484 259 947 322 386 385 849 448 288

008 744 071 183 134 646 197 085 260 548 323 505 386 450 449 913

009 345 072 808 135 247 198 710 261 149 324 612 387 051 450 514

010 970 073 409 136 872 199 311 262 774 325 213 388 676 451 115

011 571 074 010 137 473 200 936 263 375 326 838 389 277 452 740

012 172 075 635 138 074 201 537 264 500 327 439 390 902 453 341

013 797 076 236 139 699 202 138 265 601 328 040 391 503 454 966

014 398 077 861 140 300 203 763 266 202 329 665 392 104 455 567

015 511 078 462 141 925 204 364 267 827 330 266 393 729 456 168

016 624 079 063 142 526 205 989 268 428 331 891 394 330 457 793

017 225 080 688 143 127 206 590 269 029 332 492 395 955 458 394

018 850 081 289 144 752 207 191 270 654 333 093 396 556 459 509

019 451 082 914 145 353 208 816 271 255 334 718 397 157 460 620

020 052 083 515 146 978 209 417 272 880 335 319 398 782 461 221

021 677 084 116 147 579 210 018 273 481 336 944 399 383 462 846

022 278 085 741 148 180 211 643 274 082 337 545 400 504 463 447

023 903 086 342 149 805 212 244 275 707 338 146 401 609 464 048

024 504 087 967 150 406 213 869 276 308 339 771 402 210 465 673

025 105 088 568 151 007 214 470 277 933 340 372 403 835 466 274

026 730 089 169 152 632 215 071 278 534 341 997 404 436 467 899

027 331 090 794 153 233 216 696 279 135 342 598 405 037 468 500

028 956 091 395 154 858 217 297 280 760 343 199 406 662 469 101

029 557 092 510 155 459 218 922 281 361 344 824 407 263 470 726

030 158 093 621 156 060 219 523 282 986 345 425 408 888 471 327

031 783 094 222 157 685 220 124 283 587 346 026 409 489 472 952

032 384 095 847 158 286 221 749 284 188 347 651 410 090 473 553

033 504 096 448 159 911 222 350 285 813 348 252 411 715 474 154

034 610 097 049 160 512 223 975 286 414 349 877 412 316 475 779

035 211 098 674 161 113 224 576 287 015 350 478 413 941 476 380

036 836 099 275 162 738 225 177 288 640 351 079 414 542 477 502

037 437 100 900 163 339 226 802 289 241 352 704 415 143 478 606

038 038 101 501 164 964 227 403 290 866 353 305 416 768 479 207

039 663 102 102 165 565 228 004 291 467 354 930 417 369 480 832

040 264 103 727 166 166 229 629 292 068 355 531 418 994 481 433

041 889 104 328 167 791 230 230 293 693 356 132 419 595 482 034

042 490 105 953 168 392 231 855 294 294 357 757 420 196 483 659

043 091 106 554 169 508 232 456 295 919 358 358 421 821 484 260

044 716 107 155 170 618 233 057 296 520 359 983 422 422 485 885

045 317 108 780 171 219 234 682 297 121 360 584 423 023 486 486

046 942 109 381 172 844 235 283 298 746 361 185 424 648 487 087

047 543 110 503 173 445 236 908 299 347 362 810 425 249 488 712

048 144 111 607 174 046 237 509 300 972 363 411 426 874 489 313

049 769 112 208 175 671 238 110 301 573 364 012 427 475 490 938

050 370 113 833 176 272 239 735 302 174 365 637 428 076 491 539

051 995 114 434 177 897 240 336 303 799 366 238 429 701 492 140

052 596 115 035 178 498 241 961 304 400 367 863 430 302 493 765

053 197 116 660 179 099 242 562 305 001 368 464 431 927 494 366

054 822 117 261 180 724 243 163 306 626 369 065 432 528 495 991

055 423 118 886 181 325 244 788 307 227 370 690 433 129 496 592

056 024 119 487 182 950 245 389 308 852 371 291 434 754 497 193

057 649 120 088 183 551 246 507 309 453 372 916 435 355 498 818

058 250 121 713 184 152 247 615 310 054 373 517 436 980 499 419

059 875 122 314 185 777 248 216 311 679 374 118 437 581

060 476 123 939 186 378 249 841 312 280 375 743 438 182

061 077 124 540 187 501 250 442 313 905 376 344 439 807

062 702 125 141 188 604 251 043 314 506 377 969 440 408

-------- ----- ------ -------- ----- ------ ------------

+-------- ----- ------ ----- ----- ------------+

| INFO FOR PEOPLE WHO WANT TO MAKE PORTABLE DEMO FILES: |

+-------- ----- ------ ----- ----- ------------+

First of all: SEE MY WARNING above with the Ctrl-FunctionKeys:

USE MY SPEED-FIX VERSION 3 (or higher) FOR RECORDING!

USE SPEED-FIX VERSION 6.1 (or higher) FOR NEVER-FAIL RECORDING!

(Never-fail: the demo always plays back as it was recorded!)

Note that there are roughly two types of demo's:

1) Original Supaplex demo format

2) .SP format, used for SpeedFix 5.0 and higher, and SPEdit v3.0 and higher.

The two formats are not compatible (you can't play demo's made with the

SpeedFix v5.0 or higher with the original Supaplex version and vice versa),

but they can be converted quite easily: The 'new' format simply has the

actual level prepended, and the rest is pretty much the same as the old

format. Since the old demo's don't have the level prepended, they rely on the

first byte (so it's the 1537th byte in the new format) which states the level

number to be used when playing the demo. Obviously, the new format is very

much preferred, since you don't need the correct levelset for it: any loose

.SP file will work.

Also note that from SpeedFix v5.3, the level byte (the 1537th byte in the .SP

file) is actually increased by 128. This is to note that it's recorded with

at least version 5.3. To get the correct level number (which is probably

useless, since it's not used in the demo, and probably has to be changed for

the old demo format anyway) you should ignore the highest bit (that is, you

should substract 128 if the value is higher than 128).

From SpeedFix version 6.2 the 10 original demo files are recognized and are

the only exceptions on the above rules: they can be used with the SpeedFix!

(I introduced this because I sometimes want to check with the original game,

and the 10 demo's were just not compatible with the other EXE file.)

-------- ----- ------ -------- ----- ------ ------------

+----- ----- --------- ----- -----+

| SUPAPLEX FILE ARCHITECTURE: |

+----- ----- --------- ----- -----+

The LEVELS.D?? (LEVELS.DAT) architecture:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==

- 111 single levels of 1536 bytes each, totalling 111 * 1536 = 170496 bytes.

These levels are just glued together. See 'single level architecture' below.

The original Supaplex uses only LEVELS.DAT. Additionally, for the SpeedFix,

the ?? is a number from 00 to 99, for easy access to different level-sets.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The single level architecture as used in LEVELS.D??, *.SP and DEMO?.B??:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== =====

Bytes - Description

----- -------- ----- ------ -------- ----- ------ ----

1440 - The level itself (width * height = 60 * 24 = 1440)

(See also below: 'The level elements in the 1440 byte level')

4 - unused (I found nothing in the program yet that uses these bytes!1)

1 - Initial gravitation: 1=on, anything else (0) = off

1 - 20h = unused ASCII space character in the original SUPAPLEX.EXE and

all SpeedFix versions up to v5.2. Used from versions 5.3 and up as:

20h + SpeedFix version number in hex format: v5.3 -> 73h, v6.2 -> 82h.

23 - Level title in uppercase ASCII, stuffed with dashes ('-').

1 - Initial 'Freeze Zonks': 2=on, anything else (0) = off. (1=off too!)

1 - Number of infotrons needed. 0 means that Supaplex will count the total

amount of infotrons in the level, and use the low byte of that number.

(A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)

1 - Number of special ('gravity') port entries below. Maximum 10 allowed!

60 - Data-base of properties of up to 10 special ports, 6 bytes per port.

Each of those 10 entries is formatted as:

[hi],[lo],[gravity],[freeze zonks],[freeze enemies],[unused]

where:

[hi],[lo] : high and low byte of the location of a special port.

If (x,y) are the coordinates of a port in the field

and (0,0) is the top-left corner, the 16 bit value

here calculates as 2*(x+(y*60)). This is twice of

what you may have expected: Supaplex works with a

game field in memory, which is 2 bytes per sprite.

[gravity] : 1 = turn on, anything else (0) = turn off

[freeze zonks] : 2 = turn on, anything else (0) = turn off (1=off!)

[freeze enemies]: 1 = turn on, anything else (0) = turn off

[unused] : doesn't matter: is ignored.

4 - Unused in the original SUPAPLEX.EXE and SpeedFix versions up to v5.1.

Used by SpeedFix versions (5.2 and higher) to store some vital demo

information. (Version 5.2 used only the last 2 bytes.)

Maarten and I will not disclose the exact use of these bytes, because

it would make it easier to cheat with demo times for his Hall-Of-Fame.

Note that since the SpeedFix has been used, there have been a few changes:

The last 4 bytes are used now, and the '20h' byte is used for the version

number. Also note that it may be possible to use the last 4 bytes for a

gravity port, but that you shouldn't use it (you can't with SPEDIT) since its

already used in the SpeedFix.

Supaplex knows only how to display the ASCII characters 20h through 5Fh, which

only are:

but only those characters within and without the here.

This limits the level name to upper case, but all the other characters of this

list can be used too. Maarten's SPEDIT doesn't accept the whole list (yet).

If Murphy passes a special port, the Number Of Special Ports at the end of

the level is used as counter of how many data-base entries are to be checked.

Is the address of an entry equals Murphy's location (inside the port), then

the three properties are updated: Gravity, Freeze Zonks and Freeze enemies.

This way of handling the special ports means that:

- entries that are not pointing to a special port are ignored,

- unused data-base entries are ignored,

- special ports without database entries behave just like a normal port.

- when the port is blown up, nothing will happen if Murphy walks where the

port used to be: without passing a special port, nothing happens.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The level elements in the 1440 byte level:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ===

The game field counts 24 lines of 60 sprites each, and these sprites are coded

byte-wise, making the level size 60 * 24 = 1440 bytes. The level is stored

the same way as you read this document: Starting from the left, top line

first, then the next line, starting from the left, and so on. The last

byte is the rightmost bottom corner.

Here are the sprite-code bytes (hex byte value, decimal byte value, sprite):

00h = 0 Space

01h = 1 Zonk

02h = 2 Base

03h = 3 Murphy

04h = 4 Infotron

05h = 5 RAM chip (pins on all 4 sides, standard shape) ('Dull')

06h = 6 Hardware (gray dented pyramid, standard shape) ('Dull')

07h = 7 Exit

08h = 8 Utility disk, orange

09h = 9 Port left to right

0Ah = 10 Port up to down

0Bh = 11 Port right to left

0Ch = 12 Port down to up

0Dh = 13 Special port left to right (changing gravity etc.)

0Eh = 14 Special port up to down (changing gravity etc.)

0Fh = 15 Special port right to left (changing gravity etc.)

10h = 16 Special port down to up (changing gravity etc.)

11h = 17 Snik Snak (initially pointing upward)

12h = 18 Utility disk, yellow

13h = 19 Terminal for exploding yellow disk

14h = 20 Utility disk, red

15h = 21 Port vertical, bidirectional

16h = 22 Port horizontal, bidirectional

17h = 23 Port horizontal + vertical (cross)

18h = 24 Electron (initially pointing upward)

19h = 25 Bug

1Ah = 26 RAM chip (horizontal left ('pin 1')) ('Fancy')

1Bh = 27 RAM chip (horizontal right) ('Fancy')

1Ch = 28 Hardware (radial blue circular cap + coloured shapes) ('Fancy')

1Dh = 29 Hardware (green signal lamp) ('Fancy')

1Eh = 30 Hardware (blue signal lamp) ('Fancy')

1Fh = 31 Hardware (red signal lamp) ('Fancy')

20h = 32 Hardware (yellow/black diagonal stripes) ('Fancy')

21h = 33 Hardware (yellow resistor + blue + red shapes) ('Fancy')

22h = 34 Hardware (horizontal red capacitor + smd shape) ('Fancy')

23h = 35 Hardware (red + yellow + blue horizontal resistors) ('Fancy')

24h = 36 Hardware (3 red vertical resistors) ('Fancy')

25h = 37 Hardware (3 yellow horizontal resistors) ('Fancy')

26h = 38 RAM chip (vertical top ('pin 1')) ('Fancy')

27h = 39 RAM chip (vertical bottom) ('Fancy')

28h = 40 Invisible wall

29h = 41 and above: Unused. Displayed trash. Invisible since version 6.0.

Supaplex scans the level from the beginning to find Murphy, and activates the

first available Murphy. If there are more Murphy's in the level, the leftmost

of the topmost Murphy's is therefore the lucky one, but the other Murphy's

must be protected because when the program sees any attacked Murphy, it does

not check if it is the active Murphy, which causes all Murphy's to die.

(My level 'TRIVIAL' was also the first level to use this as a feature, but

because of the problems with SPEDIT, it was only released after my 'SUICIDE'.)

In order not to test too many different byte-values, Supaplex changes the

'Fancy' stuff to 'Dull' stuff internally before the game starts.

(During the game, each sprite is checked for all different possibilities,

and many decisions have to be made this way. Supaplex does not use the faster

and more intelligent method of 'indexing', which would make these changes from

'Fancy' to 'Dull' unnecessary. I think that maybe the programmer decided for

his way in an early stage of the game-design , where the amount of different

sprites did not justify the use of 'indexing'.)

In the 'normalized' or 'Dull' game field, code 1Fh is used for explosions.

This is why in previous versions of the SpeedFix explosions sometimes showed

or flashed as red signal lamps in debug mode.

The invisible wall was not known to the programmers. Experimenting with

'illegal' bytes, I found this wall and designed the two levels 'TRIVIAL?' and

'SURFIN'' with it. Maarten's SPEDIT (2.0 at that time) automatically changed

this wall to some hardware, destroying those levels. I told Maarten about

this wall and asked him to change his SPEDIT to not destroy that wall anymore.

At first he protested, saying that you never know what might happen using it,

but the result is: We now have this invisible wall 'officially', and his

SPEDIT 2.0 was updated to 3.x to include this wall.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The LEVEL.L?? (LEVELS.LST) architecture:

== ==== ==== ==== ==== ==== ==== ==== ==== =====

The LEVELS.D?? must be accompanied by their own LEVEL.L?? (LEVEL.LST) files,

which is only used for speeding up the loading of the game (from floppy disk).

- 111 lines of 27 bytes of level information plus a 1-byte line-terminator,

totalling 111 * (27 + 1) = 3108 bytes.

Each of these entries MUST be exactly 28 characters long:

3 - ASCII digits level number ('001' up to '111')

1 - ASCII space character (' ' or 20h)

23 - Levelname in uppercase ASCII, including the '-' stuffing.

1 - ASCII line-feed character (0Ah), without carriage-return character!

Example: '055 -- THIS IS MY LEVEL ---' + <Line-Feed>

All information in this file is also available in the LEVELS.D??, so why

should any missing LEVEL.L?? prevent Supaplex from starting the game?

From SpeedFix version 6.2 these files became optional: If it exists, it is

used as before, otherwise the information is extracted from LEVELS.D??.

When the command line parameter 'C' or 'c' was used, the missing LEVEL.L?? is

then created from that reconstruction. (It does not overwrite existing files.)

The original LEVEL.LST differs from the reconstruceted file, because of the

separator in the name of level 042 'LITTLE?PLEASURE': space versus dash.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The original Supaplex DEMO?.BIN architecture:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==

These files as described here can only be used with the original Supaplex and

SpeedFix V4 and below, but this original demo format is exactly the demo part

of the new DEMO?.B?? and *.SP files (with the exception of the highest bit of

the very first byte)! The 10 original demo's from the original game are the

only old-style demo's that now also work again with SpeedFix 6.2 and above.

- Level number byte of the level to be used with the demo.

Legal values are hex 01h to 6Fh (=111 decimal). (New format: hex 81h to EFh)

This is an important byte of the original Supaplex demo's because it tells

which level to load with the demo.

- Any amount of demo bytes up to a maximum of 64008 bytes,of which each byte

carries the information which key was pressed and how long the key was

pressed, counted in Supaplex time units.

These time units are determined by the video frame frequency (and affected

by the speed setting of the SpeedFix keys). The time units are a multiple

of the official 70 Hz video-frame-freuency tics. (Some notebooks use 60 Hz.)

Each demo byte is splitted into a high nibble and a low nibble:

-- High nibble: Time-unit repeat count minus 1 for low nibble command key.

This is the information from which the total demo duration

is calculated, corrected with the (stored) SpeedFix setting.

-- Low nibble: Command key, equivalent with the keyboard game keys:

0 = just wait: no key pressed

1 = cursor up

2 = cursor left

3 = cursor down

4 = cursor right

5 = space + cursor up

6 = space + cursor left

7 = space + cursor down

8 = space + cursor right

9 = space only

A = (not used)

B = (not used)

C = (not used)

D = (not used)

E = (not used)

F = (not used! / low nibble of the end-of-demo byte)

- hex FFh byte, meaning: end of demo.

The maximum demo file length is 1+64008+1=64010 bytes, which is an arbitrary

amount set by Robin Heydon (which could have been 65514 bytes maximum only).

This maximum total demo length of 64010 bytes has been reduced in the SpeedFix

versions 5 and up to 48650 bytes because the same space is needed for all 10

demo levels of 1536 bytes each. (48650+10*1536=64010) See also just below.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The *.SP and new-style DEMO?.B?? architecture:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ===

- A single level of 1536 bytes, according to the architecture description.

If there is no demo attached to an .SP-file, the file ends here.

In case there is a demo attached (*.SP with demo or new-style DEMO?.B??),

5 bytes of this level are used to carry important information for the demo

itself, for the recoding speed, for the demo validation and to recognize

the SpeedFix version used to record that demo (to be able to tell which

of that other information is available and which were not yet stored!

SpeedFix V5.0 used only 3 of those 5 bytes).

(These 5 bytes are ignored by the game and overwritten with new information

with each new demo recording, so it is safe to ignore the changes if any

demo is removed from this level for placing it in a LEVELS.D?? file.)

- A complete demo as described in the original DEMO?.BIN architecture.

In order to know that the demo was accompanied by valid extra information,

stored inside the attached single level, Maarten changed the unused highest

bit of the first byte from 0 to 1 (hex 81h to EFh). Because the level is

now attached, this first byte lost its original function completely.

In case there is no signature appended, the file ends with the hex FFh byte

from the original demo architecture (see above: end of demo).

- Any text of up to 511 bytes long: the demo signature introduced by Maarten

in october 1996, and the only restriction is, that it contains no ASCII 255

(FF hex) byte, since that byte is used to signify the end of the signature.

This signature is meant for comments, the name of person that played the

demo, and anything else anyone can think of.

- FF hex byte, meaning: end of signature text and also end of file. This byte

is defined as the last byte of the signature, totalling 512 bytes maximum.

The maximum new-style demo length is 1536 + 48650 + 512 = 50698 bytes.

(This 48650 is the total amount of reserved space for all 10 demo's, which is

just an arbitrary amount set by Robin Heydon in the first place, and changed

by Maarten as he stored the 10 demo levels in the same reserved space (Ver.5))

Up till now there is only 1 level (level 62 of level set 03, 'Waiting for

Godot') which needs a (VERY MUCH!) larger space for a finishing demo than is

available, even if the original absolute maximum of 65514 bytes could be used.

('Now' is july 1998.)

Maarten's program SPSIG manages the signature: adds a text-file as signature

to SP files, strips signatures from SP files and shows SP file signatures.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The PLAYER.L?? (PLAYER.LST) architecture:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==

This file contains the results of all 20 possible players.

This is a hidden file, which can be revealed with 'attrib -h PLAYER.L??'.

(Don't bother to hide it again: this is done automatically by Supaplex.)

If this file is missing, Supaplex creates an empty new file, where all 20

names are initialized as '--------', and all other bytes are 0.

This file has 20 entries of 128 bytes each. Each entry is:

8 - Player name in upper case ASCII (empty name = '--------')

1 - end-of-name terminator: must be 0!

3 - Total time played until now:

- 1 byte: hours (hex)

- 1 byte: minutes (hex)

- 1 byte: seconds (hex)

111 - Result for each level: 1 byte per level: 0=unplayed, 1=played, 2=skipped

3 - unused (=0)

1 - Ignored, but written by Supaplex as:

Pointer to the first unplayed level, or if all levels are 'done',

to the first skipped level. If all are played, this byte becomes 71h.

1 - unused (=0)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The HALLFAME.L?? (HALLFAME.LST) architecture:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==

This file shows the results of the 3 best players who finished all 111 levels.

This is a hidden file, which can be revealed with 'attrib -h HALLFAME.L??'.

(Don't bother to hide it again: this is done automatically by Supaplex.)

If this file is missing, Supaplex creates an empty new file, where all 3 names

are initialized as ASCII spaces and all other bytes are 0.

This file has 3 entries of 12 bytes each. Each entry is:

8 - Player name in upper case ASCII (empty name = ' ')

1 - end-of-name terminator: must be 0!

3 - Total time played for all 111 levels:

- 1 byte: hours (hex)

- 1 byte: minutes (hex)

- 1 byte: seconds (hex)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The SUPAPLEX.CFG architecture:

== ==== ==== ==== ==== ==== ==== ===

This file contains the options, as chosen in the 'controls' screen.

It is always only 4 bytes long, in readable LOWER CASE(!) ASCII, and is only

written when leaving the 'controls' screen (just before panning to the menu).

The bytes are:

1 - 'i' = Internal speaker (=default)

's' = Samples (+ Internal speaker)

'a' = Adlib

'b' = Sound Blaster (+ Adlib)

'r' = Roland

'c' = Combined (Roland + Sound Blaster)

(Any other value = default 'i', but without loading the sound driver.

Entering and leaving the 'controls' screen without changing anything,

will then result in a 'b' in this file, which could lead to a crash!

This bug has been fixed in SPFIX62 to load the speaker driver too.)

1 - 'k' = keyboard (=default)

'j' = joystick

(Any other value = default 'k')

1 - 'n' = music off (=default)

'm' = music on

(Any other value = default 'n')

1 - 'y' = FX off (FX=sound effects) (=default)

'x' = FX on

(Any other value = default 'y')

If Supaplex crashes after you made bad changes in the 'controls' screen,

just delete this file and the Supaplex internal defaults 'ikny' are used.

Any bytes attached with an editor (like Return/Line-Feed) are ignored.

Missing bytes (if the file is too short) result in defaults for those bytes.

Each of these 4 bytes has its own meaning and is not recognized if the correct

value is on the wrong place: 'rjmx' works, but 'xmjr' defaults to 'ikny'.

From SPFIX62, this file is not checked for the 'i', 'k', 'n' and 'y' anymore

because those were defaults anyway. Any 'illegal' byte , which now also

includes those 'i', 'k', 'n' and 'y', forces the default choice for that byte.

(The file is still written with those 'i', 'k', 'n' and 'y'.)

-------- ----- ------ -------- ----- ------ ------------

+----- ----- ----- ----- ------+

| MAP OF THE VIDEO MEMORY: |

+----- ----- ----- ----- ------+

If the debug M key is used to move the field in stead of Murphy, we see a lot

of strange things outside the game field. (SpeedFix version 6.2 and above

need the command line option 'M' to view beyond the borders!)

The video memory is used as follows (Use a fixed pitch font to view this!):

The 65536 bytes video RAM is divided in lines of 976 pixels horizontally,

which means 976/8=122 bytes, making 537 lines plus 22 extra bytes in total.

In 320*200 video mode, each picture line is written twice, which means that

there are 400 horizontal lines on screen and each line is divided in 320 dots,

just in case you want to count them. Following graphic shows picture lines.

| 40 |2 | 40 | 40 |

| | | | | <-bytes: 8 pixels/byte

| | | | | | | | 2 bytes/sprite

| 2 | 40 | |2 | |1|2 | (16 lines/sprite)

+----- ----- ------+--+----- ----- -----+----- ----- -----+ 0000=top left (black)

| Panel at 0000 |**| | | panel byte

| (24 lines) |**| | |

+---+------------+--+ Second part | Third part |

|* *| First part | of MOVING.DAT | of MOVING.DAT | * = unused

|* *| of MOVING.DAT | (162 lines) | (162 lines) |

|* *| (138 lines) | | |

|* *| | | |

+-+-+------------+--+------------+--+----------+-+--+ 4D35=top left visible

|C|C| | | | |TT| game field corner byte

|C|C| (16 lines) | |Title screen |TT|

+-+-+ - - | Menu screen |Game-end copy| |TT| T=left side of Title1

|*| | |Blue screens |TT| screen remains.

|*| | (200 lines) |GFX screen | |TT| (See location below)

|*| | |Controls scrn |TT| Otherwise unused.

|*| | | | |TT|

| | +----- ----- -----+-------------+-+ | C=Menu cursor patch to

|*| |* **| restore the screen

|*| Game field (60-2*1/2 sprites) |* **| moving the cursor

|*| == ==== ==== ==== ==== ==== ==== === |* **|

|*| (Game field = 368 lines high, FC90 |* **| FC90=last visible game

|*| because edges are 8 lines) |* **| field byte

+-+-------- ----- ------ -----------+* **+<--FC91-FFFF = unused:

| ** ** ** ** ** ** *********|<--7 empty lines

|********+-------- ----- ------ ---------+

+--------+ <- FFFF end of video memory: 1 short line of 22 bytes (11 sprites)

| | | | |

|1| 118 |1|2 | <-bytes: 8 pixels/byte

| | | 2 bytes/sprite

| Virtual game field width=120 bytes=60 sprites | | (16 lines/sprite)

A Supaplex sprite is 16*16 pixels, which means 2 bytes wide and 16 lines high.

The virtual game field measures 60*24 sprites but the real game field is

2 * 1/2 sprite less in both directions because the edges are half-sized only.

Horizontally those missing halves are reserved (but unused), but vertically

those missing 2*8 lines are not reserved and cause problems when Murphy walks

on those edges: The MOVING.DAT pictures in video RAM are overwritten then

because Murphy is always updated full size on screen.

Hexadecimal addresses (for insiders):

0000 = Panel start address: must be here for the 'split-screen' option.

4D34 = Game field start address, starting with 1 invisible (unused) byte.

4D34 = Buffer for menu cursor screen patch, destroyed by cursor graphics.

4D5C = Menu screen start address (top middle of game field)

4D84 = Special screens start address (Title (=BIG Murphy),GFX,Controls etc.)

4DAC = Title1 screen start address (before and during opening of the curtain)

4DD4 = Title2 screen start address (after curtain opened, with all names)

FC91h-FFFFh unused: 3 bytes on the last line + 7 lines + 22 bytes: 879 bytes

The 22 bytes cause the shift of 11 sprites from the field above/below.

The 7 lines account for the black stripe between those two game fields.

Note: The first line of the panel is a black line in the graphic.

The menu cursor overwrites the menu graphics and therfore the part of the

menu graphics that is 'destroyed' that way, is remembered at the beginning

of the game field. (The left part of the last copy shows there.)

The locations of the author screens (where the 'curtain' opens) look a bit

strange, but with a different drawing those have logical positions too (as

if the authors planned extra panning, which is not possible because the

palette colors differ too much).

Same menu screen

+----- ----- -----+----- ----- -----+--

+--//---+----- ----- -----+----- ----- ----++----- ----- -----+----- ----- -----+ |

| | | || | | | | |

| | | Title screen | | | |

| | Menu screen | Game-end copy|| Title1 screen | Title2 screen | |

| | | Blue screens |(without names)| (with names) | |

| | | GFX screen || | | | | |

| | | Controls scrn | | | |

| | | || | | +- - - - - - -|-+--

| +----- ----- -----+----- ----- ----++-+-------------+----- ----- -----+

| |U |

| |N | Same game field:

| Game field |U | Vertical shift of 1 screen line

| |S |

| |E +-------- ----- ------ -

+--//-------- ----- ------ -+D

The 'trash' in the unused area is thus also caused by the Title1 screen, and

from SpeedFix version 6.2 also by the extra copy of the viewing window before

the game pans back to the menu. (This is done to remove the screen 'glitch'.)

-------- ----- ------ -------- ----- ------ ------------

+----- ----- --------- ----- -----+

| ABOUT THE GAME FIELD EDGES: |

+----- ----- --------- ----- -----+

The game field edges (where Murphy is not supposed to walk on) are included in

the level, which makes the actual playable level-size only 58 * 22 sprites.

These edges are always substituted by Supaplex to show special edge sprites,

which make it possible in experimental levels to hide sprites there.

(My level 'EXIT?' was the first level to use this as a feature.)

For speed reasons, Supaplex does no border-checking, so everything may happen

when Murphy (or other moving stuff) enters those edges. Because of the way

the level is stored in memory, it is possible to walk out of the field on one

side entering the field at the opposit side, but shifted one line. (This only

applies to the left and right field edges, not the top and bottom edges.)

(I introduced this as a feature in my son's level 'KRUEMMELKRAM', and my level

'OVERFLOW' was exclusively designed to show what can be done with it.)

If level designers want to let utility disks explode on the edges (as my son

wanted in 'KRUEMMELKRAM'), they have to be careful not to put any explosives

in the top left corner, one sprite below that, and 8 sprites in the top edge

on the far right side. Explosions extend outside the game field and destroy

some internal variables like the file name LEVELS.D?? and the pointer to the

active level The menu will show the wrong level and it is impossible to do

anything but exit Supaplex. I showed those forbidden sprites in the level

'KRUEMMELKRAM' as RED signal lamps. Although I fixed the problem in SPFIX62

(with a small buffer zone), those 10 sprites may not be used for explosions in

new levels because of those problems in the original game! (Compatibility!)

If Murphy walks into any of the 8 sprites in the top edge on the far left, he

is beamed to undefined places because the internal look-up table of screen-

coordinates, which is used for the fast placement of Murphy on screen, was

overwritten by an overlapping scratch buffer for fading calculations.

This screen coordinate table is defined at load-time and never refreshed.

(Fading is this optical effect of slowly make the screen dark or bright.)

I also fixed this in SPFIX62 by correctly sizing that scratch buffer.

It was an unimportant bug, but it was a bug anyway, therefore I fixed it.

Rules for level designers for safely using edges:

== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==

- The left and right edges, without the corners, are safe for Murphy to exit,

but the sprite just underneath the top left corner is not safe for any

explosion, including Snik Snaks, Electrons or Murphy when he gets killed!

(For a demonstation of this: See my level 'OVERFLOW'.)

- No explosions are allowed in the top left and top right, as described above.

(See the red signal lamps in my son's level 'KRUEMMELKRAM'.)

- Anything may be hidden in all edges, as long as Murphy cannot remove it from

the top or bottom edge (or destroy it by an explosion!), because:

- Murphy may not be allowed to walk outside the top or bottom edges!

Even those 2 edges have side-effects. Just try entering the 20st edge field

to the right of the top left corner, or the 8th edge field to the left of

the bottom right corner: The master of Murphy's image is mutilated: Either

the top of his head is missing or he has a black belt when he is not moving,

or when he is pushing a disk. And Murphy did not even walk outside of the

whole game field this time

(This is caused by the fact that the top and bottom edges are really half-

sized on screen, but Murphy is painted full-size into the MOVING.DAT area.)

He will really leave the memory image of the game field, with unknown side-

effects! There are three different aspects to observe. Remember that the

video memory is the graphical image of the real game field in memory:

1: - Video memory (What is actually visible):

This mutilation of Murphy is caused by the destruction of the video memory

contents. The panel and all the moving sprites from the file MOVING.DAT

(which includes the not-moving Murphy during the game) are stored there.

Murphy popping up in the panel with such 'experiments' is another example of

this aspect: Although Murphy is somewhere else, his ghost is in the panel.

Time to restart Supaplex, because MOVING.DAT is only copied to the video-

memory once. (The panel is refreshed all the time so this doesn't matter.)

(I provided a command-line option 'R' or 'r' in version 6.2 to refresh

MOVING.DAT in the video memory when the game returns to the menu. I did not

make this refresh option default because it increases the time to return to

the menu, especially when the game runs from floppy disk, and it is actually

only needed after such experiments. Besides that, it only refreshes the

video memory, but more could have happened )

2: - Location coordinates (Table of video memory locations):

The now fixed top left corner (see above) was a special example of destroyed

coordinates, but Murphy can walk outside of the memory copy of the game-

field, which also means outside of that coordinate table. There are no

valid coordinates defined there and so he can pop up everywhere and nowhere, at random.

The panel is a preferred place since it is situated at the start of the

video-memory, which is hit when such invalid coordinatess are near 0.

Nothing is destroyed because of those missing random coordinates alone

(except for the video memory contents), but:

3: - Working memory (The actual game field that matters):

The main aspect is what happens with the real game field in memory:

When Murphy exits the top edge and moves around beyond the top edge near a

certain point, he cannot come back or the screen turns white or worse.

The table with the keyboard compare values or the byte with the debug E-key

flag has been destroyed. Other things may happen too

This is problematic because much of that stuff is only defined at load-time

and is NEVER refreshed. The worst thing what theoretically can happen, is

that the only way-out could be a cold boot. Time to RESTART SUPAPLEX!

(The bottom edge is not that problematic, because Murphy cannot destroy too

much over there, at least not that I know of.)

An easy way to experiment with this: start any level in debug mode and

remove most stuff with the debug keys 'C', 'Z', 'S' and 'H'

-------- ----- ------ -------- ----- ------ ------------

-------- ----- ------ -------- ----- ------ ------------

-------- ----- ------ -------- ----- ------ ------------

DISCLAIMER: We cannot be held responsible in any form for any damage etc. that

might occur using software and knowledge presented by us. Use at own risk.

-------- ----- ------ -------- ----- ------ ------------

If you have any questions, please take a look at the Supaplex webpages

(https://www.stack.nl/~ep/sp/ If it's not working, maybe it's moved. Check

https://huizen.dds.nl/~ep/ for current location) or contact us directly. We can

be reached via email (preferred) or normal mail at:

Normal mail: Email:

Herman Perk Compuserve ID: 100327,467

Spessartstrasse 15 INTERNET E-MAIL: 100327.467@compuserve.com

D-14197 Berlin or: Herman_Perk@compuserve.com

Germany (which are actually the same)

Maarten Egmond INTERNET E-MAIL: ep@dds.nl

Schoutstraat 24

NL-5663 EZ GELDROP

The Netherlands



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 4449
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved