Ultris: The Ultimate Tetris
Version 2.05

(C) 1992 David Pritchard

Requires: EGA or VGA
Supports: 2 and 3 button Microsoft-compatible mice, AdLib (or compatible)
          sound card, 2 player simultaneous Tetris & Columns (regular,
  co-operative, and competitive).


LICENSE

You may use Ultris provided that you follow these conditions:

1) All of the following files must be included:
README.COM
SETUP.EXE
ULTRIS.DAT
ULTRIS.DOC
ULTRIS.EXE
ULTRIS.ICO
ULTRIS1.DAT
2) None of these files may be modified.
3) You may distribute Ultris, provided that you distribute the .ZIP
   file exactly as you received it, and as long as no charge over $5
   is made.

Please, distribute Ultris! Let everyone know about it! If you like this
game, and would like to see future updates, send $15 to:

David Pritchard
99 Woodmount Ave.
Toronto, Ontario, Canada
M4C 3Y3

Include any suggestions/comments. You can reach me on the following Toronto
BBSes: Stained Glass Window, Artsy Fartsy, and Super Sonic. Sorry, I don't
have the cash for BIX, Canada Remote Systems, or anything like that. Anyway,
I don't even have my own modem!
If you received the source code with this without my express permission,
then what you have is an illegal copy. Delete it IMMEDIATELY. If you have
received the source code directly from myself, you may not make copies of it
for use by anyone other than the person or group that was allowed permission to
use it. You may not modify the code unless given permission by the author. You
may not distribute modified code under any circumstances.



SETUP


Ultris will automatically detect your hardware when you run it. Should its
auto-detection be incorrect, and the game not run, run the SETUP.EXE program,
which will let you configure Ultris from a menu.
Should you wish to do so, you can modify the ULTRIS.INI file manually.
For more detail, see Appendix A: ULTRIS.INI.



RUNNING THE GAME


To run the game, just run ULTRIS.EXE (for details on command-line parameters,
see Appendix B: Command line parameters). You should see, for 1.5 seconds, what
Ultris has detected as your configuration. Then, the program will show two
title screens, and it will then enter the game.
If you do not have Ultris set up for a mouse, or if Ultris does not
detect a mouse, the left player will be using the keyboard, and the right player
will be using the keypad. If Ultris detects a mouse, the left player will be
using the keypad, and the right player will be using the mouse. This can be
changed either via SETUP.EXE or ULTRIS.INI.



KEYS


The keys for the Keyboard are:

    Raise Level
      
    Rotate   �� U    I    O ��   Rotate / PgUp
                 Rotate   ��Ŀ 
         Move   �� J � K    L ��   Move

                     M    ,    . ��   Drop Brick
                                 
                           Speed up Brick

Space bar is the general action key, including pausing, starting, etc.

The keys for the Keypad are:

    Raise Level
      
    Rotate   �� 7    8    9 ��   Rotate / PgUp
                 Rotate   ��Ŀ 
         Move   �� 4 � 5    6 ��   Move

                     1    2    3 ��   Drop Brick
                                 
                           Speed up Brick

Enter is the general action key.

Escape brings up the Control Panel, which allows you to change the
volume settings or quit.
For mouse, see the online help.



HOW TO PLAY ULTRIS


Your goal in Ultris is to make solid horizontal lines. To do so, you must move
and rotate the bricks until a line is made. When a line is made, it will
disappear, and everything above it will drop down. Every ten lines you make,
the level will go up, and the speed will increase.
You gain points for the speed you play each brick. So, by dropping a
brick to the bottom, it will have been played faster, and you will gain extra
points. You will also gain points for the more lines you make at once. For
example, if you make four lines at once, you get more than four times the points
earned when you get one line.
Also, you can see the next piece you'll get in the NEXT section. This
can enable you to plan your future moves.



HOW TO PLAY VERTRIS


Vertris is even easier to learn than Ultris. Your goal in Vertris is to make a
line of three or more in a row of the same colour. This line can be in any
direction: horizontal, vertical, or diagonal. When you make a line, it
disappears, and everything above it drops down to fill the space made.
In Vertris, the rotate button changes the order of the colours in the
falling column. The bottom-most colour moves to the top, and the other colours
fall down (or vice versa, depending on which rotate you use).
There's more to Vertris than you might think, though...



COMPETITIVE GAMEPLAY


When you play Ultris in competitive mode, the two players are playing head-on-
head. Speed is essential. When one player makes two or more lines, an equal
number of lines will be inserted at the bottom of the other player's well��with
a few gaps in them, of course.
When you play Vertris in competitive mode, the main difference is that
when one player makes a column, the column re-appears on the other player's
side. Each piece of the column has the same horizontal position, but the
vertical position could be anywhere in the filled well. The colour is changed
randomly as well. Everything above is moved up.
In competitive mode, when one player pauses, both pause, as it would be
unfair for one player to be able to play while the other is absent. Also, when
one player dies, both games end. The winner is the player who has managed to
stay alive, while the loser is the player who died. It's still quite possible
for the losing player to have a higher score than the winning player.



CO-OPERATIVE GAMEPLAY


In co-operative mode, you will see not only your brick, but a half-image of the
other player's brick. To really do well, you have to work together and try to
help each other (i.e. Yelling at the other player for taking the only place
where your piece could fit will not help. Instead, let them see how much the
game wrecks up because of this. Then you can just say "I told you so!").
Your brick cannot move through the other player's brick unless you drop
it.
Co-operative mode generally works like competitive mode, apart from the
general gameplay. Pausing will occur for both players. Both games end at the
same time.
A note on points: The player who makes the line will get the points!
So, due credit will be given to the player who does the most work��or takes
advantage of the best opportunities...(but if you really want to do well, you
still have to co-operate and get even further!)



DISAPPEARING/APPEARING BRICKS


This option allows for bricks to appear or disappear randomly in the well.
The position of appearing bricks is not entirely random: the bricks won't appear
very far above the top brick in the well.
If you're in co-operative mode, a combination of the choices of the two
players will be used. For example, if both players choose SOME APPEARING BRICKS,
you'll get the same amount of appearing bricks as usual. If only one chooses
SOME APPEARING BRICKS, you'll get half as many bricks as is normal for SOME
APPEARING BRICKS.



SCORING


OK, here are the official point values:

1) Ultris lines:  Tetris: 260 points; Triple: 152 points; Double: 80 points;
   Single: 32 points.
2) Vertris lines: 2 to the power of (lines+3). If you get lots, you get LOTS of
   points. Note that this is per cycle: if you get two lines, and that results
   in making another line, you get 48, not 64.
3) If next is not used, there is a 1 in 10 chance that you'll get a bonus point
   each time you drop a brick, and each of the line values are worth 10% more.
   If the indicator is not used, there is a 1 in 5 chance, and line values are
   worth 20% more. If both, there's a 1 in 2 chance, and line values are worth
   30% more.
4) Point value of the brick drop is equal to 10 - time    where time is the
   amount of time it took you to make your move. On a faster level, you'll
   probably make your move faster, and then get more points.
5) You get ten points for every brick that appears or disappears.
6) You pass a level every 10 lines in Ultris, and every 15 lines in Vertris.



POSSIBLE FUTURE ADDITIONS


1) Pilltris: a Dr. Mario clone (hopefully in the next version).
2) Better high scoring system (definitely next version).
3) Full help system (definitely next version).
4) More brick sets.
5) Background music.
6) Roland SCC-1, LAPC-I, MT-32 sound card support.
7) Super VGA support.
8) Joystick support.
9) Original variations on Tetris.

A number of people have suggested adding an over-the-modem version of Ultris,
but as I don't even have my own modem, this will have to wait a while...



Well, that's about it. The appendixes are all we have after this. Have fun!



APPENDIX A: ULTRIS.INI


Ultris.Ini is organized like a Windows .Ini file. There are headings, enclosed
in brackets ([ ]), and settings under each heading. Ultris will ignore anything
it doesn't recognize in the .Ini file. If a heading or setting is missing,
Ultris will auto-detect it. The text parser is not case sensitive.
This appendix will list each section, the settings in each section, and
what each setting can be set to. 

[Video]
Driver=           This can be set to VGA, EGA, or Detect.

[Audio]
Driver=           This can be set to AdLib, Internal, or Detect.
Volume=           This must be set to a number between 0 and 100.

[High Scores]
Left Player=      This is the left player high score file.
Right Player=     This is the right player high score file.

[Devices]
Left Device=      This can be set to Keyboard, Keypad, Mouse, Mouse2, or Mouse3.
Right Device=     This can be set to Keyboard, Keypad, Mouse, Mouse2, or Mouse3.

With the devices, note that Mouse is equivalent to detecting the mouse
type, while Mouse2 will use a two-button mouse and Mouse3 will use a three-
button mouse.



APPENDIX B: COMMAND LINE PARAMETERS


None of the command line parameters are case sensitive.

/ADLIB       Use AdLib
/EGA         Use EGA
/INTERNAL    Use Internal speaker
/LDEVICE=xxx Set left device (where xxx=Mouse, Keyboard, Keypad, Mouse2, or
             Mouse3)
/LSCORE=xxx  Set left score file (where xxx=filename)
/RDEVICE=xxx Set right device (where xxx=Mouse, Keyboard, Keypad, Mouse2, or
             Mouse3)
/RSCORE=xxx  Set right score file (where xxx=filename)
/VGA         Use VGA
/VOLUME=xxx  Set volume (where xxx=percentage from 0 to 100).



APPENDIX C: RELEASE HISTORY


ALPHA Tetris/2 1.0: Working during August, September 1990
1) One player only (with two wells, though).
2) Exits to DOS when your game ends.
3) No high scores.
4) EGA/VGA support.
5) Keyboard only.
6) No AdLib.
7) No documentation.

ALPHA dTetris (double Tetris) 1.0: Working during March, April 1991
1) Name changed.
2) Two player regular play.
3) High scores.
4) EGA/VGA support.
5) No AdLib.
6) No documentation.
7) Keyboard and keypad only; not swappable.
8) Only "DAVID PRITCHARD" screen.
9) Cheap interface.

BETA Ultris 1.0: Working during May, June 1991
1) Name changed (too many people though it was "David Tetris").
2) No mouse support.
3) "Ultris   The Ultimate Tetris" screen added.
4) AdLib sound effects added.
5) Title screens sped up by Jonathan Shekter.

Ultris 1.0:     July 17, 1992

1) Competitive and regular gameplay.
2) AdLib sound effects.
3) EGA/VGA support.
4) 2/3 button mouse support.
5) Minimal documentation.

Ultris 1.1: July 23, 1992

1) Bug fix for competitive play (if one player made lines high up, the
   lines would appear high up on the other player's well).
2) Lines inserted in other player's well in competitive mode now can
   contain more than one gap.
3) Revised documentation.
4) Improved README.COM: Home/End supported; no blink when PgUp used at
   top screen or PgDn used at bottom screen.
5) Icon for Windows (ULTRIS.ICO).
6) Co-operative game play.
7) Bug fix for high score filename qualification: wouldn't work well
   with path names over 9 characters long.
8) Bug fix for certain partially incompatible mouse drivers.

Ultris 1.2: July 31, 1992

1) Bug fix for cooperative play (if more than one line was made at a
   time, remnants were left on other player's side).
2) Bug fix for cooperative play (if players were on different levels,
   bricks would be in different colours).
3) Improved overall interface: button-oriented selection; easy to use
   with mouse.
4) Bug fix for high scores (scores were reset when game was run again).
5) Bug fix for mouse drivers with sensitivity settings.

Ultris 2.0: August 27, 1992

1) Bug fix for new interface (when game ends, cursor messes up; if one
   player is in high score mode and other player gets a high score,
   buttons disappear).
2) Vertris: a Columns clone is added (Normal/Competitive/Cooperative)
3) Indicator (showing where brick will drop) added.
4) Control Panel replaces DO YOU WANT TO QUIT (Y/N)? for exiting. F1
   and F2 no longer control volume.
5) Showing next brick becomes optional.
6) Disappearing/appearing bricks
7) I actually remembered to exclude the debugging info this time! The
   .EXE file size was about 38K larger when it was in...

Ultris 2.01: August 28, 1992

1) Bug fix for documentation: showed incorrect version number.
2) Bug fix for mouse with new keyboard interface (mouse would not work
   if a key was being held).
3) Bug fix for co-operative play with dis-appearing/appearing bricks.

Version 2.05: September 23, 1992

1) Bug fix for new keyboard interface (sluggish, irregular response).
2) Improved WAIT FOR OTHER PLAYER SCREEN: actually tells you what to do.
3) Faster README screen redraws.
4) Improved high-score screen.
5) Bug fix for high scores (if directory name contained a period, game
   would generate error).
6) Bug fix for title screens (screen cleared to yellow at end).
7) Checks that all files are present.



APPENDIX D: WINDOWS


If you want to use this with Windows, remember the following:

1) DON'T RUN IT IN A WINDOW!!! Sure, go ahead and try now, and you'll
   see why I'm saying this. First, the colours are totally messed up
   (Windows reverses light and dark grey). Second, Windows can't keep up
   with Ultris' demands for system resources (Ultris needs to be called
   18.2 times per second or so), so it's impossible to play.

2) Ultris requires enough memory to be able to load the .EXE file,
   and then each of the .DAT files (although neither is in memory
   simultaneously). If you don't care about the title screens, you can
   forget about leaving memory for loading the .DAT files.

3) Don't be surprised if it takes longer to start up from Windows. The
   game plays (generally) the same, but the start-up is slower.

4) There's an icon file (ULTRIS.ICO) available for you.

5) Windows 3.1 users with a sound card: try loading Media Player (or
   whatever music player you use) and starting to play a song before
   running Ultris. Make sure you run Ultris with the /INTERNAL switch.
   Ignore the error Windows gives you, and then you have background
   music with Ultris! Needless to say, this is not a good method for it.
   Maybe (with enough interest) in a future release? Besides, you're
   stuck with the horrible sound effects.

If you want equal performance as under DOS, you'll have to run in Standard mode
(which doesn't affect performance at all). In 386 Enhanced mode, you might want
to modify the TrapTimerPorts switch in your SYSTEM.INI file in the [386Enh]
section. This will enable Ultris to run a little more smoothly, but it'll mess
up any communications programs that you might be running. See the README.WRI
file, section 8.3 (at least with Windows 3.1) for more information.



APPENDIX E: NETWORKS


SysOps:
For high scoring, you can change the path for the high score file.
Should you wish to allow each user to have their own high score file, you can
do this (either with the .INI file, SETUP.EXE, or command-line parameters).
If you specify NUL as the high score file name, Ultris just won't write
a high score file, so if you don't want the high scores saved, here's your
solution (Of course, it's neater if you just make Ultris.Hgh Read-Only).
Running multiple copies of Ultris with one central high score file will
(generally) work, but you'll run into problems if a player spends too much time
at the ENTER YOUR NAME screen. Nothing (hopefully) fatal, but just to be safe...
to reset the high scores, delete the high score file (ULTRIS.HGH).



ABOUT THE AUTHOR


I'm a 14-year old grade 10 student at Danforth Collegiate & Technical
Instititute. I make games like this in the summer, but I'll only make little
touch-ups during the year; I have a high average I intend to maintain...
Jonathan Shekter is a grade 11 student at DCTI. He wrote the fast title
screen loader (mine worked but was a lot slower; and the file size was bigger)
in assembly language.
Everything else in this program was written first in Turbo C++ 2.0,
and, as released, compiled under Turbo C++ 3.0 (added some in-line assembly,
instead of pseudo-assembly).

Thanks to everyone who contributed suggestions for Ultris. Anyone else?