From: nathan@inmos.co.uk (Nathan Sidwell)
Newsgroups: fj.mail-lists.x-window
Subject: xmris V3.00 available
Date: 8 Jan 93 14:35:37 GMT
Distribution: fj
Organization: Workstation Div., Supermicro Systems Group, Sony Corporation

Date: Fri, 8 Jan 93 13:48:54 GMT
Message-Id: <1993Jan8.134855.6479@wraxall.inmos.co.uk>
Newsgroups: comp.windows.x

Xmris version 3.00 is now available. It has been posted to alt.sources as
comp.sources.x is unavailable at the moment.
If you can't get alt.sources, or any of its archives, you may obtain
it from me by email with a subject 
"xmris request". A reply line may be in the mail to change
the default reply, if you know that doesn't work. Ie

reply nathan@inmos.co.uk

Xmris is a video game, here is the changes file.

CHANGES FROM V2.00 to V3.00 (in no particular order)

> > > (F A N F A R E) < < <
> > >      N O W      < < <
> > >       I N       < < <
> > >   C O L O U R   < < <

Colour was fun! As I only have a b&w display and bitmap can only do
1 plane bitmaps, it was out with the squared paper and crayons. And
then trips down the corridor to see if the colours look alright. All
the sprite colours are user definable, so you can change them to suit
your taste. Thanks are due to Stefan, for having the patience to change
his colour sprites when I changed the formats (see -msit for details).

Again, Imakefile and Makefile.std have changed, you'll need
to do the right thing AND read the compilation file, because the
compilation procedure has changed.

Doesn't require memmove anymore.

Now uses the Xtoolkit to do the initialize stuff. This means you
get all the normal toolkit options. The control structure has been
turned inside out, so there is only one control loop. This uses a
recursive function definition, so looks really weird (but is still
ANSI conformant). Maybe I should turn this into a big switch.

The -mris and -msit flags select different sprites.

The -swap flag creates better looking inverse screens.

The -scores option and Xmris.scores resource have changed to -dir and
Xmris.Dir, and now points to a containing directory, rather than a file.
The score file names are locked into the source. The score file format
has changed slightly. You can pipe the old score file through
convert_score into xmris.score and then delete the old score file. You
may _not_ want to do this, because the game difficulty has changed, and
you might like to start the scores again from scratch. Note the different
name, players using their own copy of the old xmris will then complain
that the score file has vanished, and you'll be able to get them to use
the new version.

Option -scores now prints out the high score tables.

Option -visual <visual_class> selects a non default visual.

Option -private allocates a private colormap.

Option -colors shows how the colours are allocated.

Option -distinct <n> limits the colormap entries used.

Nearly all options have an equivalent X resource.

There are three high score tables, all time best, best of the day and
personal best. Greg (G.J.) Boyes <BOYES@BNR.CA> had some suggestions in
this area. The name is now picked up from getpwuid, not environoment
var 'USER'. Your score is only put in the all time high scores, if it
is above a compile time threshold  (to save newbies permanent
embarrassment). The score table also shows the game play time (it does
not include the recap screen, and other delays). The personal best scores
are either put in the score directory, or the users home directory.

Scoring is scaled by the speed of the game. The game tries to determine
how fast it is running, in order to not miss interrupts, and uses this
dilation to scale the scores. This gives some measure of fairness when
running the game on hardware which is too slow. You also get elapsed times.

Correctly works as a setuid program with servers which perform user
verification (such as openwindows).

There is a compile time flag to select two types of file locking, the
default is to use lockf(3), but, as Daniel Edward Lovinger <del+@cmu.edu>
has pointed out, some distributed file systems (AFS in his instance)
don't support it (NFS is ok). I've also discovered that, for some
unknown reason, my lock deamon rpc.locd grows its heap unendingly,
for each lock-unlock pair. Its not fun when your lockd heap takes up
10MB! This appears to be a bug in SunOS 4.1 its gone in 4.1.1.
Rather than say, that's not my fault, (which it isn't), you can say
you haven't got lockf, and a simple locking scheme is used which
uses open(O_CREAT | O_EXCL), to create a lock file in the score directory.
For this to work xmris must have create access rights to the directory
(which is why you might want to make it a setuid program).

You can use the pause key to cycle round the demo screens.

You can use the throw key to skip game information screens
and game pauses.

The player has a nap, when paused, and get excited when a screen
is finished.

The ball is bigger. Its easier to see when you're holding it.
It also gets monsters, if they pass going round a corner.

Keyboard control is tightened up a bit, and you always get the
cherry bonus, if you don't stop.

The extra monster gets homesick after a while.

Apples cannot clump together on the initial layout, they've also
turned into 'active sprites' so they don't get stuck on ledges
incorrectly. They also don't gratuitously align on the board matrix
when falling. The xtra and drones only eat apples when they've
got to the same place, rather than about 1/2 a cell away.

I got a load of information from Ramon Dominguez <ramon@orion.convex.com>.
I've put in some of his findings, but not others. Mainly the ball
return time is deterministic and the xtra letter selection is different.
Also the drone apples are 'ghosts' for a short while. And diamonds
have been added.

The timer interrupt has been changed. It retriggers the interrupt
in the signal handler, provided the game was waiting on it. This gives
more accurate timing, and prevents the game going super-fast when trying
to catch up.

Doesn't define the cursor, and can now generate all sprite reflections
from one image (at the expense of startup time). Also the different
monochrome and color sprites are compressed into one set of planes.

Some other bits and bobbles have been fixed. Namely some asserts were
triggered, and these have been fixed.

README is derived from xmris.man, so can't get out of sync.

HP/UX machines work despite pretending to be both BSD and SYSV.

POSIX signal handling added.

The ANSI/K&R stuff has been altered a bit. I also now (correctly)
use #if __STDC__, rather than #ifdef __STDC__.