
===============================================================================
====                         XPilot Change Log                             ====
===============================================================================

This is a summary of changes of release 3.4.0 compared to release 3.3.1:

Ronny Arild added a server option -/+lockOtherTeam.
-lockOtherTeam makes gameplay same as before (and is default).
+lockOtherTeam makes sure a player can't lock on players from
other teams when he's dead himself (except when all his others
teammates are dead too).

The directory layout has been reorganised to support recursive imake builds.
Read the file README(.msub) in the toplevel directory for the new instructions
on how to build XPilot.  If imake is given the option -DMY_CONFIG, it
will include the file My.config after Local.config; this is probably
only useful if you really don't want to change Local.config.

Bugfix preventing server crashes by Jim Patterson and John Graves:
	Here's a patch to a small bug found in Xpilot 3.3.0.  The code where
	a refuel operation is performed uses the player's id as the index
	into the fuel array.  The fix is to use pl->fs as the index into
	the fuel array.  This bug was found by turning on 24 robots on a
	random world and waiting for one of the high numbered robots to refuel.
	On OSF/1 this caused a segmentation fault.

Circumvent Imake problems caused by different implementation of MakeMakeSubdirs
by defining our own implementation (stolen from the X11R6 config files).
Bug report and suggested fix by Andreas Sinderman.

Michael Gruber supplied a patch for a new ship shape keyword:
	Using the keywords
		leftRearGun  (short: LR)
		rightRearGun (short: RR)
	you can specify additional rear gun positions in your ship shape
	in exactly the same way as with leftGun (short: LG) and
	rightGun (short: RG) for the forward guns.
	The same restrictions on position and number of guns apply.
	If you have an even number of rear gun items the rear shots
	are distributed among left and right rear gun positions.
	If you have an odd number of rear gun items one rear shot is
	fired from the usual rear position and the others are distributed.
	Recommended modifier is Z3 as is for additional forward guns.

Mark Boyns submitted a patch for map decorations:
	Map decorations:
	----------------

	New decoration map symbols: t y g h b

	     /| |\
	    /t| |y\
	    --+-+--
	      |b|
	    --+-+--
	    \g| |h/
	     \| |/

	Note that these symbols correspond to the wall symbols: q w a s x

	     /| |\
	    /q| |w\
	    --+-+--
	      |x|
	    --+-+--
	    \a| |s/
	     \| |/

	New client decoration options:

	    -showDecor       (Also in Config menu)
	    -decorColor      (Also in Config menu)
	    -decorRadarColor
	    -filledDecor     (Also in Config menu)

	And I added this one for fun:

	    -wallRadarColor

Mark Boyns submitted a patch for macro expansion in map and default files:
	Map macros:
	-----------

	New `define' and `expand' map keywords.
	A macro is defined using:

	    define: macroName \multiline: EndOfMacro
	    macroContents1
	    macroContents2
		  .
		  .
		  .
	    macroContentsN
	    EndOfMacro

	A macro is expanded using:

	    expand: macroName

	Macros can be defined in maps and defaults files.  In the future it
	would be useful if the defaults file contained a set of standard macros
	that could be used by all maps.  A defaults bounce example would be:

	    define: LotsOfBounce \multiline: EndOfMacro
	    maxshieldedwallbouncespeed:          60
	    maxunshieldedwallbouncespeed:        60
	    maxshieldedplayerwallbounceangle:    180
	    maxunshieldedplayerwallbounceangle:  180
	    playerwallbouncebrakefactor:         0.8
	    EndOfMacro

	Then a map could simply use:

	    expand: LotsOfBounce

	to add wall bounce.

The grandprix.map was changed by Bert Gijsbers & Mark Boyns
to have no cannons, different wall bouncing options
and lots of map decorations for road striping and finish line.

A new version of Blood's Music was added with changes by TIMID and DR.DEATH.
The new map file is called blood-music2.map.  The primary purpose
if this new version is to illustrate the new map decorations.

Mark Boyns provided a bugfix for drawing map decorations in ERASE mode.

Mark Boyns provided a bugfix for compressed maps.

David N. Gardner reported a bug for emergency shields in shieldless maps:
	When playing xpilot with a map such a Blood's Music which
	does not support normal shields, I can obtain normal 
	shields by the following process:
	  1.  Enter the game and pick up an emergency shield.
	  2.  Return to my home base.  Land and pause.
	  3.  Thats it.  When I unpause I can hit space or
	      caps lock to use the normal shields.
	Note that you will have normal shields until you hit
	the 'g' key.
This bug is fixed now.

Changes for VMS by the new XPilot-for-VMS-guru Jens Koerber!

The new ball movement code as made by Bretton Wade.
The code was submitted in context diff format by Mark Boyns.
Here is a an excerpt from a post in rec.games.computer.xpilot
by Bretton Wade dated 27 Jun 1995:
	If I'm not mistaken (not having looked very closely at the code
	because I wasn't sure what it was trying to do), the original move_ball
	routine was trying to model a Hook's law spring, but squared the
	deformation term, which would lead to exagerated behavior as the spring
	stretched too far. Not really a divide by zero, but effectively producing
	large numbers.
	When I coded up the spring myself, I found that I could recreate the
	effect by using a VERY strong spring. This can be defeated, however, by
	damping. Specifically, If you compute the critical damping factor, then
	you could have the cable always be the correct length. This makes me
	wonder how to decide when the cable snaps.
	I chose a relatively strong spring, and a small damping factor, to make
	for a nice realistic bounce when you grab at the treasure. It also gives a
	fairley close approximation to the "normal" feel of the treasure.
	I modeled the cable as having zero mass, or at least insignificant mass as
	compared to the ship and ball. This greatly simplifies the math, and leads
	to the conclusion that there will be no change in velocity when the cable
	breaks. You can check this by integrating the momentum along the cable,
	and the ship or ball.
	If you assume that the cable snaps in the middle, then half of the
	potential energy goes to each object attached. However, as you said, the
	total momentum of the system cannot change. Because the weight of the
	cable is small, the vast majority of the potential energy will become
	heat. I've had two physicists verify this for me, and they both worked
	really hard on the problem because they found it interesting.
The old ball movement code is still available if you add -DORIGINAL_BALL to
the compilation flags.

Mark Boyns submitted an improvement for the playing of a sound when
a player drops a ball.  Now only a sound is played when a ball is dropped,
not whenever the player pressed the drop-ball key.

The MOTD can now be saved to a file name "xpilot.motd".

Three new client options for map decoration:
    -outlineDecor: Draws only the outline of the map decoration.
    -texturedDecor: Draws the map decoration filled with a texture pattern.
    -decorTextureFile: Specify a XPM format pixmap file to load the decor texture from.

Some of the lesser quality maps were removed to save on space.

Mark Boyns provided a -frameBuffer option to specify which framebuffer device
to use for the SPARC_CMAP_HACK.

More changes from Jens Koerber for VMS.

Small improvements to the joystick support under Linux provided
by Richard Goerwitz.

Fixed a bug which caused a server crash if a tractored tank was destroyed.

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

This is a summary of changes of release 3.3.1 compared to release 3.3.0:

For security reasons the location of the server MOTD file is no
longer a command line option.  The only way to specify its
location is during compilation.  By default it is the file
"servermotd" in the LIBDIR.

The communications protocol between client and server used
for changing game options at runtime has been revised and
made much more secure.  Privileged commands can only be
issued on the same computer the server is running on.
It is no longer possible to change server options over the Internet.

No more points are awarded for shooting cannons if the player
has a score of more than 100 points.

xp-replay can now save parts of a recording file to new smaller
files in the same XPR format.  This was done to facilitate
editing of recording files for WWW purposes.

Silk contributed another texture.  It's called volcanic and
uses the standard colors for maxColors is 8.

xp-replay now automatically recognizes if an input file
is in compressed or gzipped format.  If this is the case
then it automatically starts "compress -d" or "gzip -d".

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

This is a summary of changes of release 3.3.0 compared to release 3.2.9:

Now players don't get points anymore for shooting targets owned
by teams which are either empty or dead.
Otherwise if the target destroyed was not the last target less
points are awarded depending upon the total number of targets
for that team and the number of targets remaining.

The following options can now also be modified while the server is running:
         shotsWallBounce, ballsWallBounce, minesWallBounce, itemsWallBounce,
         missilesWallBounce, sparksWallBounce, debrisWallBounce,
         maxObjectWallBounceSpeed, maxShieldedWallBounceSpeed,
         maxUnshieldedWallBounceSpeed, maxShieldedPlayerWallBounceAngle,
         maxUnshieldedPlayerWallBounceAngle, playerWallBounceBrakeFactor,
         objectWallBounceBrakeFactor, objectWallBounceLifeFactor,
         wallBounceFuelDrainMult, wallBounceDestroyItemProb,
         targetKillTeam, targetTeamCollision, edgeBounce, movingItemProb,
         dropItemOnKillProb, detonateItemOnKillProb,
         destroyItemInCollisionProb, itemConcentratorRadius.

Fixed two bugs for ERASE mode.
The first ERASE bug had a small chance to occur when the player was ECMed.
In this case the one half of the colorbuffers could remain blue,
causing the screen to remain in a flashing state.
The second ERASE bug was for dashed lines, which sometimes weren't
erased completely.

Moved the talk messages from the bottom right to the top left.
This increases their readibility as they are now closer to the radar.
To accommodate this some meters have been moved from the top left
to the top right of the screen.
Talk messages now have a little more memory allocated to prevent
them from scrolling of the screen too soon.

Changed the updating of keyboard changes to the server to consume
slightly less packets.  Keyboard changes are still sent immediately,
but no longer does the client expect the server to acknowledge
a change in the very first frame after transmission.

Steven Singer added recording and playback of games:
        The client now can record games or parts of games into a file.
        A new utility program provides a graphical user interface to
        playback these record files.
        The client has two new options to control recording:
        1) -keyToggleRecord to turn recording on and off.
            The default value for this key is KP_5, meaning the 5 on
            the numerical keypad.
        2) -recordFile to specify the output file for the recordings.
            By default no value for this option is defined, so
            that it is not possible to accidentally turn on recording
            and find your disk quota exceeded.  Be warned that record files
            can quickly become very large.
        The utility program to playback recordings is called xp-replay.
        Its use should be straightforward, but there is a
        manual page for it in the man6 subdirectory.

Added a bugfix by Ralf Berger to fix the beeping when talking
in paused mode, at least for DEC-Alpha.

A serious bug was triggered when a player got 8 tanks.  Fixed.

Mark Boyns reported that not all tanks were removed when a race ends.
This turned out to be a more serious bug (for race mode only).  Fixed.

Internal changes to tanks and item damage.

Trailing whitespaces on player nicknames is now stripped.
This in order to prevent people from using very similar nicknames.

Steven Singer provided code to have filled walls.
The client has a new option -filledWorld to turn it on.
Note that this requires a *fast* graphics system.

A new client option -wallColor has been added to specify
which color to use for wall drawing or filling.

In cooperation with Steven Singer code was added to make it
possible for the client to display textured walls.
Images in the XPM format can either be included at compile time
or loaded on startup of the client.  The following client
options are provided to control which texture is used:
    -texturedWalls
        If true then the walls are filled with a texture pattern.
    -wallTextureFile
        The filename of a XPM format pixmap for the wall texture.
    -texturePath
        An optional search path for XPM texture files.
        This is a list of one or more directories separated by colons.
        The default value for this option is the subdirectory textures
        in the xpilot lib directory.
Three textures are provided in the xpilot/lib/textures directory:
    metalite.xpm
        a test texture made by Aleksi "MetaLite" Suhonen, which
        works OK with the default -maxColors value 4.
    rock4.xpm
        a demo texture needing a -maxColors of 8.
    moon.xpm
        the most beautiful texture sofar made by Silk.
        But it needs a -maxColors value of 16 and the xpilot colors
        must be explicitly set to the colors needed by this texture.
        For instance, one could use a shell script like this:
	    #!/bin/sh
	    xpilot -texturedWalls True \
		-wallTexture moon.xpm \
		-color15 \#A5A5A5A5A5A5 \
		-color14 \#BCBCBCBCBCBC \
		-color13 \#898989898989 \
		-color12 \#5A5A5A5A5A5A \
		-maxColors 16 $@

A new client option -sparkColors lets you specify which colors
to use for spark and debris particles.  This option was needed
to free colors for use with XPM textures having many colors.

The values for -hudColor and -wallColor can now be changed while
the client is running by means of the CONFIG menu.

Evmorfopoulos Dimitris supplied a fix for a typo in the Linux joystick support.

The XPilot client no longer saves the maxFPS value to the .xpilotrc.
If you have a maxFPS value in your .xpilotrc file then it is likely that
its value is too low, causing lag effects.  Better remove the maxFPS value
from your .xpilotrc, or set it to something innocent, like 18 or 20.

Tom De Pauw provided a patch to improve audio support for DEC AudioFile:
	The attached patch to xpilot-3.2.9/src/afaudio.c skips a possible
	sound header in Sun or Inverted Sun format. Most (all?) of the
	sounds for use with xpilot come with a header. When used with
	DEC AudioFile, this header was considered as part of the sound.
	It would produce an audible click at the start of each sound.

Tassos Bassoukos provided a patch for a hudLockColor client option:
	which allows the user to set the color of the lock on the HUD,
	if it is not a team member.

The client manual page has been extensively updated and corrected.

Fixed a bug for owner-only commands.  Now owner-only commands
can only be issued from the computer the server is running on.

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

This is a summary of changes of release 3.2.9 compared to release 3.2.8:

Bugfix for a misplaced new cannon explosion sound.
New sounds should be placed at the end of the sounds list!

Set EXTENSIONLIB to nothing in the Imakefile in the hope
that this will prevent users to try to link with libXext.a.

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

This is a summary of changes of release 3.2.8 compared to release 3.2.7:

Fixed a bug for no-shield mode with each player getting one emergency shield.
When a player would turn on emergency shields before the initial shields
expired this would cause the emergency shields to become unusable when
the initial shields did expire.

Jeffrey C. Gealow provided us with a patch to avoid some distracting
compiler warnings.

The client and server now both check on startup that all of their
source files are compiled for the same version.
If they find that one source file is compiled for an older or newer
version they print a message telling which file was incorrectly
compiled and then exit.

Dimitris Evmorfopoulos added a patch to let the client control the
maximum number of frames that are sent to the client by the server:
        I have been getting frustrated lately with the amount of servers that
        run at 18 fps or more, when my personal line cannot take more than
        14 fps.  So I decided to do something about it.  What you get below
        is a patch that gives the clients the freedom to choose their own
        frame rate anywhere between the servers rate and the half of that.
        Any client can have any rate, and the server will take it.
        Also, the rates can be changed at run time through the menus.
The patch adds a new option to the client called -maxFPS, and some code
to the server to handle the client requests for a lower framerate.

Some changes to the client PACK interface to have it allocate a new socket
for each PACK command it sends to the server.  This is supposed to make it
more reliably WRT the replies it says is getting from the server.

Fixed a bug which caused lasers to be deadly even though
the allowPlayerKillings option was set to true.

Now when players (or robots, or tanks) leave their explosions
are not removed from the world.  Done on request of ...

Bugfix for owner-only commands to the server.  Some piece of memory
was accidentily used twice and overwritten the second time.

Change ECM effects so that missiles cannot be redirected to team mates
if team immunity is on, and so that robots cannot be programmed to
seek team mates if team immunity is on.

Kris Van Hees supplied a patch to fix one problem for IBM 3090 mainframes
and to add a sound for cannon explosions.

The default value for all the item probabilities has now changed
from 0 to 1e-9 (or equivalently 0.000000001).

The robot code added to 3.2.7 had a verious serious bug.
When a robot wanted to drop a mine while not having enough fuel
the server would send the robot a message which caused the robot
to hang the server!  Oops!  *blush*

The following options can now also be modified while the server is running:
	itemProbMult, maxItemDensity, itemEnergyPackProb, itemTankProb, 
	itemECMProb, itemMineProb, itemMissileProb, itemCloakProb, 
	itemSensorProb, itemWideangleProb, itemRearshotProb, 
	itemAfterburnerProb, itemTransporterProb, itemLaserProb, 
	itemEmergencyThrustProb, itemTractorBeamProb, itemAutopilotProb, 
	itemEmergencyShieldProb.

Changes to enable people who have old buggy HP C compilers to continue
using robots in their maps. :)  The initialization of strings to global
string pointers have been changed to assignments of strings to character
arrays.  At the expense of some extra memory usage, but oh well, memory
is cheap nowadays.

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

This is a summary of changes of release 3.2.7 compared to release 3.2.6:

Made sure tanks are never moved to their homebase since
tanks don't have one.

Don't drop shields when ending a hoverpause.

Changed the internals of the item handling  and initial item values.

Improved the choosing of a team for players who didn't specify a team.
    If there is none or only one team with playing (i.e. non-paused)
    players the player will be assigned to a randomly chosen empty team.
    If there is more than one team with playing players,
    the player will be assigned randomly to a team which
    has the least number of playing players.
    If all non-empty teams are full, the player is assigned
    to a randomly chosen available team.
    Note:  Team zero is not part of this algorithm since that
    team is reserved for the robots.

Bugfix pointed out by Mark Boyns for race mode where the server would
crash if there were released tanks in the air after game reset.  

Yves-Henri Berne pointed out a bug with detonating mines.
When a mine was reprogrammed with an ECM, the player who originally placed
the mine could still detonate the mine with the "keyDetonateMines" key.
This has now been changed so that only the player who reprogrammed the
mine with an ECM can now detonate the mine.

A bugfix for displaying destroyed targets on screen.
Sometimes a target was displayed with a diagonal cross through it
even though the target was actually destroyed already.
The bug was reported by several people, but it was extremely hard to solve.

If a player picks up an emergency shield item in a map where shields are
not allowed and the emergency shield item picked up is the first
emergency shield item the player has then the emergency shield item
is activated immediately.

Talk messages are now transmitted sooner and a little more reliably
to the server.

Simple addition to make robots use emergency shields if they have them.

A new client option -shipShapeFile, which can hold several shipshape
definitions.  From the "xpilot -help" entry:
	If this resource is defined and it refers to an existing file
	then shipshapes can be referenced to by their name.
	For instance if you define shipShapeFile to be
	/home/myself/.shipshapes and this file contains one or more
	shipshapes then you can select the shipshape by starting xpilot as:
		xpilot -shipShape myshipshapename
	Where "myshipshapename" should be the "name:" or "NM:" of
	one of the shipshapes defined in /home/myself/.shipshapes.
	Each shipshape definition should be defined on only one line.
	Note that XPilot assumes a shipshape to be a definition of
	a shipshape when it contains at least one left parenthesis.
	This means that shipshapenames may not contain one.

Fixed a bug which caused player weapons not to detonate
when a player was killed and detonateItemOnKillProb was
bigger than zero when the player in question had
the nuclear modifier turned on, but didn't have enough
mines or missiles to make one nuclear mine or missile.

X4 mines on 3.2.6 servers were each as powerful as a single X1 mine.
Bug pointed out by Anthony Ignacio.  The same bug was the case for missiles.

Changed the resulting behavior of keyDetonateMines to only
detonate the mine owned by the detonating player which is
closest to that player.

Fixed a tough to find bug which has caused servers to hang when:
   - one or more players were playing.
   - a new player entered.
   - one of the already playing players locked on the newly entered player.
   - the newly entered player left.
   - the player who locked on the last left player presses either
     KEY_LOCK_NEXT or KEY_LOCK_PREV.

This change is only interesting for programmers who want to add
new types of robots to XPilot:
	The interface between the robot code and the rest of
	the server has been minimized and strictly defined.
	Now there is a robot manager which manages different
	robot types and calls robot type specific functions
	when a robot needs to do something, like calculating
	its next movements.  The time required to program the
	interface of a completely new robot type is now estimated
	to be less than 5 minutes.  Of course filling in the actual
	robot implementation code will require a little more work... ;-)
	Different types of robots can co-exist in the same server
	without problems.  This means that it is now possible to
	let different robot types fight against eachother
	to see which one plays better, etc.  The details of
	this new interface are accurately described in robot.h.
	One of the new robot type functions accepts messages from
	players.  This could be used to give commands to robots.

Some work has been done to improve the run-time configurability of
the server.  Still only a fraction of the options are run-time configurable,
but the number is increasing.  Now the following options can be changed
while the server is running:
	fireRepeatRate, robotsTalk, robotsLeave, robotLeaveLife,
	robotLeaveScore, robotLeaveRatio, shotsGravity, idleRun, noQuit,
	reset, teamAssign, teamImmunity, emcsReprogramMines, targetSync,
	treasureKillTeam, treasureCollisionDestroys, treasureCollisionMayKill,
	playersOnRadar, missilesOnRadar, minesOnRadar, nukesOnRadar,
	treasuresOnRadar, distinguishMissiles, shieldedItemPickup,
	shieldedMining, laserIsStunGun, nukeMinSmarts, nukeMinMines,
	nukeClusterDamage, mineFuseTime, rogueHeatProb, rogueMineProb,
	initialFuel, initialTanks, initialECMs, initialMines,
	initialMissiles, initialCloaks, initialSensors, initialWideangles,
	initialRearshots, initialAfterburners, initialTransporters,
	initialLasers, initialEmergencyThrusts, initialTractorBeams,
	initialAutopilots, initialEmergencyShields,
	friction, checkpointRadius,

There is a new compile time constant for the server PLOCKSERVER.
	When this is part of the compiler flags the plock(2) system call
	will be used to lock the xpilots server into memory, i.e. to
	inhibit paging/swapping.
	This probably only makes sense in conjunction with
	raising the priority of the server a little, which
	is equivalent to reducing the nice value a few points.
	Note that both require special system privileges.
	Sofar this feature has only been tested on HP-UX.

Fixed a bug which caused lasers to be deadly even though
the allowPlayerKillings option was set to true.

Fixed unpausing of paused players in limited lives mode.  Now paused
players can unpause correctly if nobody has died yet.

Yves-Henri Berne pointed out that it was impossible to shut down a server
which was still waiting for the first player to show up.  Fixed.

Mark Boyns pointed out it was impossible to fire lasers if the itemLaserProb
was zero and players got their lasers from initialLasers.  Fixed.

Jeffrey C. Gealow pointed out that the default item probabilities
were a factor 10 too high.  Dunno how that came to be.  They
are now restored to a factor 10 lower.
NOTE: The default value for Frames Per Second (aka. fps) has been
lowered from 18 to 14.  This is to enable Internet games and to
give inexperienced XPiloteers a better chance to survive their first
steps in globe.map.  It is also helpful for slower/cheaper displays.

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

This is a summary of changes of release 3.2.6 compared to release 3.2.5:

The Makefile.std is changed to allow the client and server to be build
in parallel.  Either on the same machine if it is a multi-processor computer,
or on two different computers in the same network.
This can be done by the following two command lines:
    make -f Makefile.std architecture TARGETS=xpilots
    make -f Makefile.std architecture TARGETS=xpilot
Where architecture is the operating system being used.

Ben Jackson pointed out two bugs regarding mini missiles.
For mini missiles the effect of a hit was much too weak compared
to the effect of a non-minified missile.  For nuclear cluster
mini missiles the effect was even worse.  Ben provided a patch
to cure both problems.

Note for XPilot hackers only: the number of different objects have been
reduced by merging all different item object types into one.  This makes
it possible to add new types to XPilot.  Previously this wasn't because
all bitfields in a 32-bit unsigned long were already in use.

Steve Marsden added user controllable mine detonation:
    Xpilot has had mines for a long time, and they have evolved over time,
    but they have always been effectively "drop/throw and forget" weapons
    (except when someone else re-programs them).  This patch now allows
    the user some control over them once they have left the player:
    by pressing the key denoted by "keyDetonateMines" (the equal key by
    default), you will cause all of your dropped/thrown mines to explode
    at this very instant!  The ones which you still have "in your pocket"
    do not explode, but all the rest do.  This may be useful when you think
    someone is lurking close to some of your mines but not close enough to
    set them off.

Ben Jackson pointed out a bug with initialTractorBeams:
    I found a nasty bug while playing on a map I made to practice using
    tractor beams.  Given a map where you start with n (>0) tractor items,
    if you die (doesn't matter how) while using a tractor/ pressor beam,
    and don't hit the tractor/pressor keys after you're ressurected, you
    will still be using them when you next come into range of your locked
    player.
    As it turns out, this is because the main loop uses `pl->used &= pl->have'
    to limit your used bits.  If you *start* with the item, though (eg set
    initialTractors to >0) it will never get cleared.  So of course this bug
    extends to all items (shields, if you can manage to die with them on),
    emergency thrust, hover, etc.

Joshua Yelon contributed a patch (some changes were made to the patch):
    This patch corrects a severe deficiency in the xpilot scoring system - 
    you don't get any points for shoving somebody into a wall (say, with
    a tractor beam).
    This patch works like this:
	- whenever you 'shove' somebody, a record of the shove
	  is made in the player record.  The following information
	  is recorded:
	    - who did the shoving,
	    - time of the shove.
	  the following things count as shoves:
	    - pushing with a pressor or tractor
	    - pushing back on somebody else's tractor/pressor,
	    - hitting somebody with mine debris,
	    - hitting somebody with an ECM.
	- if you hit a wall, a check is made to see if somebody
	  shoved you within the last 20 frames.  If so, all players
	  who shoved you share credit for your death equally.
	  If not, you lose the usual amount of credit for slamming
	  the wall on your own.

A bug described by Christian Engstler and Russ Glaeser has now been fixed.
The bug manifested itself when a player tried to connect to a ball by turning
on his connector and then crashing with the ball while still in the process
of connecting.  The ball would reappear in its treasure, but for a very short
moment the ball and the connecting player would be pushed away from or pulled
towards eachother.  This could result in the player smashing into a wall and
the ball dropping out of its treasure again.

A new server option was added to reset the world when the end of round
is reached in maps with limited lives like Tournament and Blood's Music.
At end of round  all mines, missiles, shots and explosions will be
removed from the world and all players including the winner(s)
will be transported back to their homebases.
The default value for this option is true.

Fixed several minor bugs with initial items.

Improved the visibility algorithms for edgewrap mode.
This fixes invisibility bugs for very small maps.
Now an arbitrarily small map can be used in edgewrap mode without problems.
Ironically these changes resulted in reduction of code and better
understandability.

Fixed a bug which could have caused corrupt connections and
messages like: "Unknown packet type.  Quit."

A change to prevent use of macros.

Fixed a bug for drawing transporter lines in ERASE mode.

Steven Singer improved race mode and added a -friction option:
    When a player completes a lap their lap time and best lap time are
    displayed in the messages section.

    Race mode can be played with or without limited lives mode. It can't
    mix with team mode (IMHO race mode goes best with limited lives).

    With unlimited lives, when the first person completes the race all other
    players are returned to their start position and the race reset.

    With limited lives, the race is reset when all players have finished
    the race or have died.

    Points are awarded to the player with the fastest lap (who needn't
    finish the race). Points are awarded to the winner of the race and,
    in limited lives mode, everyone else who crosses the line. The points
    awarded are (for N players) :
            Winning the race : 2N+10
            Fastest lap      : N+5
            Coming second    : N+5                Limited lives mode only
            Third place      : (N+5)/2                "        "
            Fourth place     : (N+5)/4                "        "
            Fifth place      : (N+5)/8                "        "
            etc.

    There are two server options controlling race mode :
            raceLaps         : how many laps you have to do to finish the race
            checkpointRadius : how close you have to go to checkpoint to
                                activate it.
            Defaults are 3 laps, and 6.0 blocks.

    I've also added another server option called friction. This causes players
    to gradually lose velocity (as if you hadn't guessed). The default is 0.0
    (no friction). Friction only affects players (actually anything that goes
    through the player code). I didn't want it to affect bullets, missiles,
    lasers etc.

    I've also provided a map - grandprix.map - which should test all the
    features in this patch.

    Suggestions for improvements (I'm not going to write these) :
            Continuous display of current lap and time.
            Countdown at start of race.
            Teach robots to race.

Steven also provided a new map to test all his new features.
This map is called grandprix.map and is now part of the XPilot distribution.

Small change in Makefile.std to add an alias "client" for "xpilot"
and an alias "server" for "xpilots".
This way one can compile only the client by saying:
    make -f Makefile.std architecture TARGETS=client
or:
    make -f Makefile.std architecture TARGETS=server
to make only the server.

Fix (hopefully) to play the START_SOUND when a player enters the game.
This was the case in 3.2.4, but in 3.2.5 only players which were already
in the game heard it, not the player which just entered the game.

Fix for drawing all of the visible map when in edgewrap mode.

Fix for displaying the round and checkpoint a player is at when
the game is over.  Now this info is reset and blank until the
player checks the first checkpoint again.

A few changes to make sure that a player structure which could have
been destroyed (for instance if it was a tank) is not accessed anymore.

Fix to correctly move paused players to their new homebase
on racemode game over.

When a player leaves mines are no longer made anonymous,
but removed instead, so that they won't hurt the team.

When all players are thrown out of the game because the
server is shutting down now all clients will get a message
which explains the reason of the shutdown.

A small race mode patch by Harvey Thompson:
    Here's a patch that I think will improve race mode.  We just play
    tested grandprix.map, with no-shields/one-shot/bouncy-walls/afterburners,
    which makes it a lot more interesting.
    In race mode, if you die you will be transported back to the last
    checkpoint you passed, or your base (start) if you've not passed any
    checkpoints yet.  At a checkpoint restart you will point in the direction
    of the next checkpoint.  I think this gives a reasonable time penalty
    without alienating the player if he's half way round the course from the
    rest of the bunch.

Updated TkXpInterface with the latest and greatest version 3.6.2.

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

This is a summary of changes of release 3.2.5 compared to release 3.2.4:

Fixed a bug which caused torpedoes (except for mini torpedoes) to have a
negative acceleration and to always return to the originator.

Harvey Thompson added the following improvements:
    - Removed the playerMinimumStartFuel server option
      and replaced it with initialFuel.  This has the advantage
      that the players initial fuel can be changed on the fly.
    - Don't display the target destroy messages for each target destroyed
      if the -teamTargetCollision option is false.  In this mode targets are
      usually used as base shields, and there will probably be many of them.
      In such maps (ninebases.map) these messages often swamped others.
    - A new server option called treasuresOnRadar option.
      By default it is set to false.  When enabled all balls appear
      as smallish dots on the radar (slightly larger than mines).
    - When a treasure is brought back to its own hoop by a player
      on the same team then the ball is replaced.
      The player scores 5 points for saving the ball.
    - now the initialFuel is distributed properly among extra fuel tanks.
      If there isn't enough room in the fuel tanks, left over initialFuel
      isn't given to the player.

Russ Glaeser added the following new code:
    This reworks the end-of-round bonus scheme and fixes a (very) minor
    bug with paused players.

    First the easy one.  Paused players no longer show up on radar.

    Now, the tougher one.  The end of round code now computes a kill
    ratio and gives a bonus based on this ratio.  The winning team gets
    this bonus, and the one player with the highest kill ratio gets a
    bonus also.  The 20 point bonus for winning a round is no longer
    given.  Here's how it works:

    Deaths(anything which causes you to lose a life) are tallied.  Also,
    any time a death is caused by another player(getting shot, letting
    your target or treasure be destroyed, getting clocked on the head with
    a treasure, etc) that player gets credit for a kill.  At the end of
    each round the program figures out who is the Deadliest Player.  The
    player with the highest kill ratio get a bonus based on their score
    vs. the average score and their kill ratio.  If there are more than
    one players with the same (highest) kill ratio then they share the
    Deadliest Player bonus.  After the Deadliest Player is computed and
    points for that are given then the winning team collects an
    end-of-round bonus using the same formula.  If you got the Deadliest
    Player bonus you DON'T get a Winning Team bonus, but the points you
    get are the same so it doesn't really matter(this just makes sure you
    don't get two bonuses at the end of a round).

    One problem with this is that it doesn't take into account the number
    of people on your team vs. the other teams. Perhaps sometime in the
    future someone(or I) can figure out a way to fix this.

Jyke Jokinen adds the following:
    What is it?
	This adds a new option for the server: 'targetSync'.
	Default is 'no' and then the action is the same as before.
	When the flag is on then the server will repair ALL the targets
	belonging to a team when the first one is repaired (update.c).
    Why?
	We (@modeemi.cs.tut.fi) think that the targets are a too easy way
	to kill a team.  And increasing targets did not help because they
	are repaired individually (you could wait for the first target to 
	reappear and then blow out it and kill the team again).  Now with
	this enhancement ALL the targets will appear and the player must
	destroy them all before the team is killed...

Now clients which don't have sound suppport are not getting any audio
information from servers which are compiled with sound support enabled.
Previously all clients got all the audio stuff in their packets from
sound servers even if they didn't have sound support whatsoever.
This unnecessarily made the network packets bigger and thereby increasing lag.
Since 3.2.5 clients which do want sound info must explicitly request this
from the server in order to get it.  This is done automatically if the
client has been compiled with sound support enabled.
For old clients connecting to a 3.2.5 server nothing has changed.

Added a new compile time conditional SERVER_SOUND.
This enables sound only in the server, not in the client.
Handy if you want to setup an Internet server for all your
friends who do like to have sound on their clients.

Patrick Kenny improved and added some new options to his Blood's Music map.

Now players having picked up an emergency shield item and having enabled
the emergency shield now can put their shields on even if in the rest of
the game shields are not allowed.  If you don't like this feature you can
turn it off by setting itemEmergencyShieldProb to 0.

A new map object is introduced.  Putting it in a map will determine
where items appear.  It is called an item concentrator.  (Have a better name?)
When one or more item concentrators are in a map then all items appear
only in an area around the item concentrators.  The area is a circle
with a radius determined by the new server option -itemConcentratorRadius.
If no item concentrators are defined in a map then items can popup anywhere
just like things used to be.
The map symbol for the item concentrator is the percentage symbol '%'.

Some changes to the transcendental functions in the hope
that this will speedup the server somewhat.

Tweaked the player explosion code so that the effect more resembles the
pre-3.2.4 versions.

The default value for the duration of emergency shield is reduced from
8 seconds to 4 seconds.

The range of a laser has been made slightly longer if the ship has only
one laser or three lasers.

Robots now use lasers also against players they are not at war with
provided that maxPlayerShots has been set to zero.  This makes them
for excellent sparring partners in maps like Zap! You're Dead
and Tournament style maps.

Now if the player a robot is at war with is not playing then the robot
will more behave as if it is not at war at all and try to find a new victim.
This was especially needed in tournament style games where the robot would
not should at anybody at all if its war victim was in game over mode.
But also robots being at war with a paused player would not do anything.

Lance <berc@src.dec.com> improved the AF audio support:
    The AF audio support in 3.2.4 doesn't work with the AF3, which has 
    been available for a couple of months.  I changes afaudio.c to:
	(a) work with AF3, the current release of AudioFile.
	(b) cache sound files (with entry and space limits) to improve
	    operation when the files are coming from a loaded NFS server.
	(c) add a bit (50msec) of latency to account for scheduling jitter 
	    and eliminate missed sounds.
	(d) play each sample at its own volume.
	(e) some minor code cleanups, etc.

Geert Van der Plas pointed out a nasty bug:
    Description of the Bug :
	When playing Tourmination we noticed that after some time
	the limited shots were gradually becoming more in number
	until you could fire all the time.
	A more exact analysis showed that the number of bullets
	increased after some cluster mines / missiles had been
	successfully thrown / fired.
    Probable explanation :
	Make_debris-code.
	The objects created in Make_debris don't have
	modifier information. Objects
	are created when a mine  explodes. These don't
	have the modifiers set. So when after some time
	these objects are deleted, they seem to be regular
	shots. The counter of shots of a player is reduced.
	This counter then drops below zero when no
	shots are living anymore, hence the growing 
	number of shots.

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

This is a summary of changes of release 3.2.4 compared to release 3.2.3:

New joystick support for Linux 1.0 by Eckard Kopatzki (eko@isar.muc.de).
Needs joystick-0.7 by Art Smith, Jeff Tranter, Carlos Puchol.
Which in turn requires Linux 1.0 or higher.

Joshua Yelon contributed code to improve server response when many players
are playing in the same game:
    I had an xpilots server running, and noticed that it would bog down
    (even on a sparc 10) if more than 8 or so people joined.  I wanted to
    support more people, but didn't have a bigger machine.  I speculated
    that the server probably spent a lot of time tracking debris
    particles, and I speculated that if I were to simply reduce the number
    of debris particles, the server would run faster (and therefore
    support more people).  A few preliminary tests strongly confirmed this
    hypothesis.
    I decided to study the debris code to see if I could reduce the number
    of debris particles WITHOUT significantly affecting the amount of
    recoil from mines and other explosions, and in general without
    affecting the "feel" of the game.  For example, I wanted to try
    reducing the number of particles while increasing their speed and mass
    to compensate.  Unfortunately, there was no one place in the code where
    I could make these adjustments --- the parameters were scattered all over
    the code, making tuning quite difficult.
    Hence the following patch --- it has the following effects:
	- It completely redesigns the code that creates debris (and
	  sparks).  The new code is set up to put all the parameters for
	  any given debris-source in one place.  Hopefully, you will agree
	  that the resulting code is cleaner and less confusing.
	- A few minor improvements to the explosions themselves have been
	  made --- for example, the particles no longer radiate outward from
	  center in 128 discrete directions, but rather travel outward in
	  completely random directions.
	- I have experimentally tuned the number of particles, reducing them
	  to 2/3 of what they used to be, and compensated by increasing the
	  radius of debris particles to 6 pixels (thereby making them more
	  likely to hit a ship).  This results in approximately a 30% CPU
	  reduction for xpilots on a typical map, but mines and explosions
	  feel about the same.
    You might want to double-check for yourselves that the 'feel' of
    explosions has not changed too much.  I tested it myself on the kinds
    of maps which I usually play, namely the spartan 'bloods music' style.
    Since I am not experienced with the 'feel' of the hectic
    cluster-and-nuke style maps, I wasn't able to verify that those maps
    still feel the same.  If you play that style, you might want to verify
    for yourselves that things haven't changed too much.
    In particular, look out for imploding cluster mines.  Those used to be
    implemented as two superimposed explosions.  I have simplified that to
    one explosion containing cluster shots of negative mass.  That may be
    too powerful, it may be necessary to reduce the mass of cluster shots
    or something like that.

Joshua Yelon mailed an old patch written by someone else:
    - dead people are black on the scorelist.
    - team scores are shown on the scorelist.
    - when you enter 'xpilot', and are at the prompt, you can
      specify which team to join as an argument to the 'j' command.

Improved the initial contact between the client and the server.
Now the client retries a couple of times to overcome incidental packet loss.

Changed the client option system to make it fully self-documenting
when doing: "xpilot -help".  Now for each option some helpful information
is displayed together with its default value and, if appropriate, the
range of possible values.

The key help list is now displayed by the same kind of browser as
the server MOTD.  This should improve the readability a lot.

Several small changes to:
    - resolve compilation problems with very strict ANSI C or C++ compilers.
    - resolve potential problems for systems for which a long integer
      is bigger than a normal integer.
    - resolve problems for compilers for which enumeration constants
      are smaller than an integer.

The one and only Blood's Music map from Patrick Kenny is now part of XPilot.
Patrick kindly permitted his map to be included.  Many people have played
this map a lot, but I fear that still more people have not had a chance to
play it yet.  It is a teammode map with 3 teams of 4 players each and each
team having one target and treasure to defend.  Shields are not allowed,
but most of the items are.

New is support for the HP audio server.  It doesn't really work well
due to (in my view) some audio misdesign by HP.  It is just there in the
hope that somebody succeeds in improving it.
This has been tested on a HP 715/75 running HP-UX 9.05 + PHKL_4174 + PHSS_3103.

Ship shapes now have two new keywords.
The first is the "name" keyword.  Abbreviated as "NM".
This can be used to give each ship its unique name.
The second new keyword is "author".  Abbreviated as "AU".
This can be used to add the name of the designer to the ship shape definition.

Jyke Jokinen added a bugfix for DEC Alphas.
The bug was that an int was initialised with LONG_MAX,
which becomes a negative value if it is truncated to an int.
This caused balls to become fixed to their treasure.

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

This is a summary of changes of release 3.2.3 compared to release 3.2.2:

Pete Ford contributed a patch to fix the problem when a ship equipped
with several missile racks will kill itself when firing a set of mini missiles.

The Makefile flag LINUX is changed to LINUX0 as recent 1.1*
versions of Linux seem to have resolved most of the incompatibilities.
Patch by Evmorfopoulos Dimitris.

Fixed a bug which caused clients to quit when a ship shape was used which
was defined by exactly 255 characters.

Harvey Thompson contributed several patches.  They add a few bugfixes
for the recent emergency shield and makes missile rack launches as
sensible as possible while keeping the mini spread ideas he introduced:
    - Fixed bug where shots and missiles fired from certain ship shapes
      caused instant death, depending on turning and thrust and fire points.
      Shots now have a very short owner immunity fuse.
    - With emergency shields engaged, lasers have no effects (such as stun,
      blindness or damage).
    - Bouncing into a wall doesn't cause any owned items to be lost.
    - Emergency shields/thrust not lost if not currently in use and you hit
      a player or wall.
    - Missile rack lauch code radically rewritten.  Missiles launch angle is
      calculated based on 66% of the offset from ship center, and 33% of the
      number of missiles lauched from that rack.
    - Each missile rack is now used in turn, not randomly chosen.

Harvey also added a huge comment explaining the history of aerial combat and
how missiles evolved.  Contrary to most code comments this one is pleasant
reading and likely to show up in more easily accessible places in the future.
I wish more people added comments like this instead of adding new options :-)

Patch from Nicholas Vargish that adds two options concerning the 
probability that a missile or mine will go rogue. The options are:
rogueHeatProb and rogueMineProb.

Harvey Thompson added these features:
    - New configuration variable; minVisibilityDistance.  This defines the
      minimum distance, in blocks, that you can see on the radar and compass.
      This is most useful in limitedVisibility mode.  It is equivalent to
      having the initial fuel/sensor configuration of a new player.
      The default value is zero, a sensible default is used (about 28.5).
    - New configuration variable; maxVisibilityDistance.  This specifies the
      maximum number of blocks you can ever see on the radar or with the
      compass, most useful in limitedVisibility mode.
      The default value is zero, which implies no limit.
    - Each sensor pack you own increases your sensor range by 25% (upto the
      maximum of course).

Harvey Thompson added still more changes:
    - After completing a talk message, the mouse pointer is now warped
      back to where it was originally.  Also had to fix a talk key repeat
      bug for this to work.
    - Show player being viewed on radar during a game wait/pause where
      you can watch other players.
    - Show invisible team members on radar even if they are not immune.
    - Show team members on radar even if playersOnRadar is false
      (constrained by visibility rules).
    - If somebody kills a team member they now get negative points
      instead of positive.  The killed team member still gets negative
      points (for getting in the way).  Bug reported by Mark Boyns.

Russ Glaeser (rglaeser@golden.cecer.army.mil) provided a patch to
correct the scoring for treasures:
    Sorry about changing my mind so soon, but this came to me in a flash
    this morning.  Really, the number of members on your team and the
    opposite team should also factor into how many points you get.
    Here's what I did:

    I figured out the total number of points the other team lost based on
    points-for-destroying-their-target*3, then I divided those points
    among the winning team as such

      let WTM = number of members on the winning team
	  LTM = number of members on the losing team
	  SCO = points you would have gotten for destroying their target
	  TSC = 3*SCO*LTM (total number of points the other team lost)
	  PORTION = TSC/(2*WTM+1)  **see note below**

    I divided TSC amongst the winning team like so:
      *) destroyer gets 3*PORTION and his/her other teammates get 2*PORTION.
      *) losing team members each lose 3*SCO

    All this sounds complicated, but it's not really.  It all means essentially
    that treasures are a zero-sum gain.  the same number of points are given
    the winning team as are subtracted from the losing team.  If you have lots
    of teammates you don't get as many points for destroying treasures, however
    if you don't have many teammates and destroy a treasure from a team with
    lots of people and points you could get upwards of 100 points for it.
    I think this is more fair than my other scheme and MUCH more fair than the
    current scheme.

    ** note
       This just divides the total score into pieces which I can give the
    winners.  It's rounded to the nearest whole number.  If you have 3
    teammates then there will be 7 pieces.  The destroyer will get 3 and
    his/her teammates will each get 2.  This gives a little 'bonus' for
    being the one to destroy the treasure, but still keeps treasures
    zero-sum.

    I hope all this makes sense.  I tested it pretty thouroughly, so I'm
    confident it's correct(knock on wood).

Steven Singer added mouse control:
    I've had to create a new packet type PKT_POINTER_MOVE, which is sent from
    the client to the server. It contains a signed integer which is the number
    of pixels the pointer moved horizontally.

    The server scales the pointer movement by pl->turnspeed /
    MAX_PLAYER_TURNSPEED, and adds it onto pl->turn_vel (actually subtracts it
    to get the sense correct).

    The top window has been made sensitive to MotionNotify, ButtonPress and
    ButtonRelease events.

    On receiving a MotionNotify event (and if pointer control is enabled), the
    client notes how far the pointer moved, and if non-zero it send a packet
    to the server, and warps the pointer back to the centre of the screen.

    ButtonPress and ButtonRelease events are mapped to keystrokes.

    Pointer control can be toggled via the key keyPointerControl with the
    default value KP_Enter (we're running out of keys).

    The button effects can be altered via pointerButton[1-5] each of which
    take a single argument which is the xpilot key name (like keyFireShot, the
    comparison is case insensitive and the initial `key' can be left out).
    The defaults are button1 - FireShot, button2 - Thrust, button3 - Shield.

    If the talk window is popped up, the pointer control is disabled. When the
    window is closed pointer control returns to whatever state it was in.

    During initialisation a blank cursor is created, and if pointer control
    is enabled this cursor is used in the top window. When pointer control is
    disabled or the talk window is up the default cursor is restored.

    To summarise the server/client changes :

	    I've created 1 new packet type (PKT_POINTER_MOVE = 73).

	    I've used 1 more key (keyPointerControl = KP_Enter).

	    I've created 6 more command line arguments/resources
	    (-keyPointerControl, -pointerButton1 .. -pointerButton5).

	    The new server can accept connections from old clients.

	    The new client can connect to the old server, but will generate
	    errors if pointer control is switched on.

    The important question is what does it play like, well, I've tried it at
    18 fps on a good NCD colour display, and it's not bad. The nice feature is
    the way you can turn slowly whilst tracking someone, but you can still
    turn quickly in a hurry without having to play with your turnspeed.

    On a jerky display it's not as good.

Fixed a bug which could cause a server crash when a rogue missile was fired.

Russ Glaeser contributed a patch to not let autopiloting ships change
direction if the ship has no velocity and there is no gravity.

Russ Glaeser contributed a patch which applied his treasure points scheme
also to targets.  Now the number of players on your team is taken into
account when you are given points for destroying another team's target.
He also fixed the messages, which were just a bit messed up (as he says).

Added a new option -targetRadarColor to the client.  By default it is set
to 4 which for color screens is defined to be green (same as hudColor).
This will draw all targets on the radar in green.
You can change this in two ways:
  1) give the -color4 option a different color value.
  2) give the -hudColor a different value like 2 which is the current blue.
Of course color 4 is only used if maxColors is 8 or 16.

Fixed a bug which caused own targets to be drawn in red instead of blue
if team wasn't explicitly set.

Harvey Thompson pointed out a few problems with the new mouse control stuff
for some of which he provided a patch:
    - Mousecontrol is not very smooth yet.
      Removed a factor 2 somewhere.
    - Added an option "pointerControl" to the cliebt to set the initial
      control.  This is only enabled when the mouse first moves into the
      xpilot game window, the mouse pointer will then disappear until the
      Key pad enter key is pressed.
    - During mouse pointer control, the mouse pointer is grabbed such that
      you can't go out of the drawing window.  This makes large mouse
      movements still work fairly well.
    - With mouse control, if you hit "talk" and then move the mouse,
      you couldn't know where the mouse is, and things went horribly
      odd (could't talk).  Fixed now.

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

This is a summary of changes of release 3.2.2 compared to release 3.2.1:

The maximum allowed (sub-)packet size limitation was removed.

Hendrik Harrison pointed out that some code handling shots and teamshots
wasn't used anymore, so we thankfully removed it.

Added a new option -hudColor to the client.  By default it is set to 4
and for color screens the color4 is now defined to be green.  This
will draw your HUD in green.  You can change this in two ways:
  1) give the -color4 option a different color value.
  2) give the -hudColor a different value like 2 which is the current blue.
Of course color 4 is only used if maxColors is set 8 or 16.
Score objects are now drawn in the hudColor color.

The right marking light is now drawn in green, if available.

Made an extension to the way the ship shape definition is transported
between client and server to allow for very large ship shape definitions.
The maximum allowed length of a ship shape definition is now 510 characters.

Harvey Thompson provided a patch to fix a bug with emergency thrust/shield.
When colliding with players or walls a currently used emergency
thrust/shield was finished immediately, which shouldn't be.

Relaxed the entering of players in a team game with limited lives mode.
Previously if any other player had already lost a life then this would put
a new player in waiting mode.  Now players are not put in waiting mode
if it is only a team member who has lost a life.

Fixed bug in fetching X resources which also limited ship shapes to 256 bytes.

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

This is a summary of changes of release 3.2.1 compared to release 3.2.0:

Mike Morrison provided two bugfixes for the new ship shape stuff.
One bug caused core dumps on AIX machines.  The other one prevented
use of the Right Light feature.

Pete Ford supplied a patch to fix the bug that caused lasers to fire
always from the right side of the ship.

Pete Ford supplied a patch to fix the bug that caused the server to
crash on some systems if a random heat seaker was fired.

The missile racks are now actually being used when firing missiles.
Note that this may cause you to shoot yourself if you have placed
your missile racks too close to the centre of the ship.

The maximum allowed packet size was set too small.  This caused
all kinds of problems when a ship shape definition was very large.

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

This is a summary of changes of release 3.2.0 compared to release 3.1.3:

Added a shipshape patch for robots.  Now all robots have their own `personal'
ship shape.  Patch provided by John E. Norlin <norlije@cujo.tc.cat.com>
A workaround has been added for a bug in HP's ANSI C compiler.

Added a new server option called maxMissilesPerPack which determines the
number of missiles given by picking up one missile item.
This was needed for no-shield maps were missiles are very strong weapons.

Made the "teamAssign" option default to true.  This helps users in
joining a team mode game.

Servers can now be shutdown from a crontab entry by a command line like:
xpilot -display NO_X -shutdown Shutting_down_message server

When getting the name of the computer now there is searched for a
xpilot host alias.  Patch provided by Jyke Jokinen.

Fixed drawing cloaked ships in ERASE mode.  Bug reported by Zack Evans
and fix pointed out by by Christian Brunschen.

Bugfix for teammode maps with only one team were that team would
remain dead forever until another team would enter the game.

Fix from Patrick Kenny for games teammode games with limited lives.
Players who just entered and are still waiting do not get points
subtracted or added when a target is destroyed.  This was extended
to include treasures too.

Players can now send a talk message to GOD which will be printed to the
LOGFILE.  Thanks to a patch from Patrick Kenny.

Fix for GetLocalHostName which was broken by a previous fix.

Pete Ford has come up with a new, more rational, ship-shape format.
It features:

    1. Keyword oriented system, to allow for more flexibility and future 
       extension.

    2. Additional gun sites allowed on ships; main gun is relocatable and up 
       to three extra gun sites are allowed on each side of the ship for wide 
       angle guns.

    3. Additional marking light positions allowed - up to three for each 
       color (red = left, blue = right as before).

    4. Alternative missile racks - positions where missiles launch from. Up 
       to four racks can be given, and mini missiles will launch from separate
       racks if available.

    5. Engine is relocatable, although it still fires along the x-axis of the 
       ship as defined.

    6. Compatibility with the 3.1 ship-shape format for exisiting 3.1 clients 
       joining '3.2' servers and 3.2 clients joining 3.1 servers.

    The new ship shape format is:

    xpilot*shipShape: (keyword: x1,y1 ...) (keyword: x1, y1) etc.

    Keywords can appear any number of times in the shape string; the 
    behaviour is dependent on the keyword.
    If a keyword is not given then a default will be applied: if the shape is 
    not defined then the default shape is used.
    Allowed keywords are:

    shape:  defines points for ship shape. Up to 16 points will be stored, 
            any more than 16 are ignored. Points should appear as x,y pairs, 
            each pair separated with at least one space character. 
            Multiple 'shape:' keywords have a cumulative effect; adding extra 
            points to the list, up to the limit of 16. There is no requirement
            to give the number of points to expect - this is worked out after
            the whole string is parsed.
            The existing restrictions on separation of points apply.
            If no 'shape:' keyword present then the contents of the string 
            will be ignored and the default ship used.

    mainGun: defines the firing position for the main gun. Only one x,y pair 
             is read; further 'mainGun:' keywords will be ignored.
             Default is the foremost point in the 'shape:' list.

    leftGun: defines a firing position for an additional left-side gun. Up to 
             three of these can be specified, any more will be ignored.
             The left-hand part of any wide-angle shots will be fired from
             these points if they exist.
             Default is to have no left guns: only a main gun.

    rightGun: defines a firing position for an additional left-side gun. Up to
              three of these can be specified, any more will be ignored.
              The left-hand part of any wide-angle shots will be fired from
              these points if they exist. There is no need for left and right
              guns to balance (or even be on the correct side of the ship!)
              Default is to have no right guns: only a main gun.

    leftLight: defines a position for the left (red) marking light. Up to 
               three of these can be given.
               Default is one light on the left-most point on the ship.

    rightLight: defines a position for the right (blue) marking light. Up to 
                three of these can be given.
                Default is one light on the right-most point on the ship.

    engine: defines the point from which the engine thrust originates. Only 
            one of these points will be defined; multiple 'engine:' keywords 
            will override previous positions.
            Default is on the ship x-axis at the rear-most x-value defined.

    missileRack: defines a missile launch point. More than one of these will
                 mean that missiles are launched from each rack in turn. This 
                 works best with mini missiles (especially torpedos).
                 Default is one rack at the main gun position.

    Because the ship shape string would become extremely long in the new
    format short aliases for the keywords in the shipshape string are
    provided.  The list of keywords together with their aliases is:

        Full version   Short Version   Meaning
        ------------   -------------   -------
        shape:         SH:             ship shape points
        mainGun:       MG:             Main gun position
        leftGun:       LG:             Left wide gun position(s)
        rightGun:      RG:             Right wide gun position(s)
        leftLight:     LL:             Left (red) light position(s)
        rightLight:    RL:             Right (blue) light positions(s)
        engine:        EN:             Engine thrust point
        missileRack:   MR:             Missile launch point(s)

    The points given for weapons, lights etc. need not be points defined in 
    the ship shape definition.

    Example:
    This is my latest version of my own ship-shape (called Enigma); note that 
    it should be read as one continuous string without line breaks.

    xpilot*shipShape: (shape: 15,0 -2,4 -8,13 0,13 0,14 -15,14 -12,3 -15,3 
    -15,-3 -12,-3 -15,-14 0,-14 0,-13 -8,-13 -2,-4) (missileRack: 0,14 0,-14) 
    (leftGun: 0,14 -5,14) (rightGun: 0,-14 -5,-14) (leftLight: -15,14 0,0) 
    (rightLight: -15,-14 0,0) (engine: -15,0)

    I've tried to make the format easy to extend; extensions can be added in 
    the parsing routines in math.c quite easily. Of course, the playing code 
    will have to be changed to accommodate any extension.
    My own ideas for improvement are to include a 'name:' string for the name 
    of the ship (possibly to allow selection from a set of shapes while 
    playing...) and positions for rear guns.

    Known Problems:

    1. At the moment, mini smart and heat missiles still spread from the
       missile racks, so the effect is lost a little. It is probably possible
       to determine whether spread is required, but I haven't done that yet.

    2. Wide angle guns all fire from additional gun positions if possible; 
       they probably should use the main gun more. Also they spread in the 
       same way as the existing program - of course setting Z3 on the weapons 
       mods will fire in parallel lines of shots; Z3 was could almost have 
       been designed for this patch!

    Thanks to those people who've made suggestions already (Bjoern & Bert).
    Any comments/suggestions/bugs/bug-fixes should be sent to me:

    p.s.ford@durham.ac.uk

    The latest improvements are:

    1. Code to restrict lights,guns etc. to within the ship-shape design.
       It's not perfect, but it tends to allow invalid positions rather than
       disallow valid ones. Thanks to Bert for a very nice diagram of the
       problem!

    Pete Ford (Enigma)

New ship shapes should obey a new size restriction.  This is because some
ship-shape-artists made ships very small to have a slight advantage in
manouvring in tight places.  Also, those small ships are a little less
easy to spot.  Therefore the following size restriction is now enforced:
the width and height of the ship added together should be at least 38.
To give everybody some time to convert their ships to the new format
and to adapt it to meet this restriction it is not enforced right away, but
rather a warning is printed that it will be enforced in a future version.

Harvey Thompson provided the following changes:

    - Fix a small bug in maptoppm, and also make walls blue and bases
      grey to appear more like the map does in real life.

    - Fix some install bugs in Imakefile.

    - The players radar will show up the current state of any targets.
      The target block will be cleared when it is destroyed and drawn
      in when created.  This is very useful on maps (such as ninebases.map)
      which use lots of passable targets as team shields for bases.

    - When you die, there is a chance that any remaining missiles and
      mines which are not thrown will detonate in close proximity to
      your dying ship.  The detonateItemOnKillProb (default 0.5) controls
      this chance.  This means that killing a well tooled player may
      be dangerous if you are too close.

    - Mine and missile pack objects are correctly acccounted.  That is
      when a player dies and throws one, and they only had say three
      missiles, the thrown pack contains only three missiles.

    - Player crashing into target causes damage depending on speed
      of impact (limited to quart damage).

    - New reprogram key (keyReprogram, defaults to leftquote ` key).
      This allows modifier banks to be reprogrammed with current settings.
      Simply hold the reprogram key with the desired modified bank key
      and your current settings are stored in that bank for later
      retrieval.

    - New compass lock bank keys (keyLoadLock1..4, defaults to 5..8 keys).
      These allow you to store the current compass lock into that key,
      simply hold down the reprogram key and the lock bank key.  The
      current compass lock is then stored and can be retreived at a later
      time (so long as that player does not quit).  Useful for keeping
      tabs on a team of players.

    - New KEYBOARD environment (or keyboard resource/option).  If
      set this defines another X11 display from which keyboard events
      are taken.  A blank window is drawn on that display.  This can
      be used to allow two players to fly one ship, a weapons man and
      a flyer.  I've tried this and its fairly interesting and hard.

      This change was actually done for some people who had a strange
      X terminal which generates key release events right after a key
      press event; making xpilot unplayable.  These people however had
      access to simple PC's (not good enough to play X pilot on) which
      could run X, the key events where then read from the PCs.

    - Corrections to team win condition.  Pplayers leaving can cause
      a game win, and indeed leave one team in game (who should win).

Fixed a bug which caused a player sometimes to be launched when
connecting to a moving ball.  The bug was that the ball's length
variable wasn't initialised upon connection.

Scott W. Adkins <sadkins@bigbird.cs.ohiou.edu> contributed
an emergency shield item patch:
    The following is the patch that implements the Emergency Shield item.
    Included are the modifications made to 25 source files (*.c, *.h), a 
    new bitmap, and also modifications to the xpilot manual page to reflect
    the new item and the usage key.
    Here is a quick description of it (which is taken from the man page):

      Gives you a limited amount of extra shield power, which prevents any
      fuel loss from shots, debris, player and wall collisions, missiles, 
      mines, etc.  While in use, the ship can smash into walls at any speed
      and angle without fear of being killed.  The extra shield capability
      is toggled on and off by a separate key and can thus be saved, with
      the remaining amount of extra shield power being saved for later use.
      Once toggled on, the extra shield power will take effect and be used
      only while the normal shields are up.  Best used when confronted with
      cluster mines and missles or deadly cannons.

   The default key to turn the emergency shield on or off is `g'.
   The server has the following new options:
       -initialEmergencyShields
       -itemEmergencyShieldProb
   The client has the following new option:
       -keyEmergencyShield

The maximum number of ship shape points has been increased from 16 to 24.

Updated the README.MAPS and README.MAPS2 files to reflect all of the
map and option changes of the past several versions.  These files
are now up to date!

Added a new README.SHIPS file which explains all of the current features
of the ship shapes and how to define them and what restrictions they
must meet.

Added a patch from Scott Stevens for ship and name drawing:
    1) increase the width returned by FIND_NAME_WIDTH to ensure the correct
    rectangle is erased (stopping the lines being drawn all over the place if
    someone's name ends in "f")
    2) if erase is set locked players are outlined in blue instead of being
    filled.
    3) if ship naming is off the so is base naming (not sure about this one,
    but I thought it was odd the original way).

Fixed bug for servermotd which caused coredumps on some systems.
Reported by Ben Jackson.

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

This is a summary of changes of release 3.1.3 compared to release 3.1.2:
Changes for Suns in socklib.c to solve unresolved references to
strerror and _res.

Fix for client crashes if:
 * initialEmergencyThrusts is non-zero
 * You have emergency thrust on
 * and you fly into a wall
The client ended up doing a divide by zero in the Paint_meter() function.
Patch provided by hakehoe@icaen.uiowa.edu (Heath A. Kehoe).

Cleaned up Handle_signal().  Notification by Harvey Thompson.

Removed Autopilot reset from Emergency_thrust resetting.
Notification by Harvey Thompson.

Fixes for ABS definition problems on DEC Alpha OSF/1 machines.
Patch provided by Franc,ois Pinard <pinard@iro.umontreal.ca>.

Fixed bugs causing lasers not to wrap edges.  Thanks to helpful
bugreports by Lars "Zaphod" Norder and Tony Plate.

Fixed bug causing config window to reappear after window resize.
Often reported.

Fixed bug in ERASE mode for drawing treasure team numbers.

Added patch from Jyke Jokinen to have team members show up on the radar
if teamImmunity is on.


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

This is a summary of changes of release 3.1.2 compared to release 3.1.1:

Fixed bug for unitialised killer variable in player-hits-mine situations.

Added improved security checks for owner-only commands based
upon IP address.  Owners of a server now can only issue owner-only
commands from the same host as the server is running on.  This is
done, because we got reports from server owners complaining about
users abusing the current simple scheme.  Homo homini lupus.

The name of the server owner (the person who started the server) is no
longer listed in status reports to improve security and privacy.

Extended the way sockets are made non-blocking by trying three different
possibilities depending upon which system include file constants are defined.
Now fcntl(O_NDELAY), fcntl(FNDELAY) and ioctl(FIONBIO) are all tried until
one of them succeeds.

Fix for kicking players and broken connections.  This used to terminate
the server.  Hopefully not anymore.

Everything regarding X windows is now not used if the display is set to NO_X.

Kicking players still terminated the server.  Now a real fix... ;/

Revision of the timer stuff.  Cleaned up sony_news hack and made system
calls restart on a SIGALRM signal by setting the flags to SA_RESTART.

Fixed a missing installation of the alarm catcher.  This could have caused
premature termination of the server if it couldn't resolve meta addresses.

Fix for the -playerMinimumStartFuel server option.  Some old leftover code
prevented this option from working correctly.

There was a BIG bad bug in Tank_handle_detach().  It copied one player
structure onto another thereby blurring the dynamic memory allocation.
This is likely the cause of the cloak bugs which have been reported for
a long time now.

Initial tanks caused players to get too much fuel.

The number of initial tanks is now properly range checked.

Fix for players unpausing in limited lives mode.

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

This is a summary of changes of release 3.1.1 compared to release 3.1.0:

Fixed bug for audioServer which tested for address of array instead
of testing for first byte of array.  Thanks to Shawn L. Baird (Scarrow).

Fixed bugs for ERASE mode for erasing weapon modifiers and mine names.
Reported by Jay Schmidgall.

Fixed bug for modifier banks which allowed players to use clusters even
if -allowClusters was False.  Thanks to Russ Glaeser.

Added some missing X resources for keys.  Like keyRepair and keyToggleImplosion.
Thanks to notification by Eric Matsui.

Fixed bug for ECMs destroying lasers.  They always destroyed everything.
Reported by Harvey Thompson.

Fixed bug for ECMs affecting mines.  Reported by Harvey Thompson.

Added a 'T' command to the character interface to set (or change) the team.
This is handy in case a user finds out with the Status command that his
current team is full (or contains only weak players ;).

Applied patch from Patrick Kenny to make the number of missiles per pack
a constant instead of an ordinary number.

The directed message feature was extended to print where the message
was directed to.  Partly based on a patch by Patrick Kenny.

Bugfix patch for TkXpInterface from Yves-Henri BERNE and Ramdane FERHATI.

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

This is a summary of changes of release 3.1.0 compared to release 3.0.7:

This release features lots of first class new features by Harvey Thompson
from SCO London.  He provided us with the biggest patch ever.  Not that we
like to merge big patches, but we do like first class new features :-).

A long time wish has been fulfilled with the addition of fullfeatured
wall bouncing.  Several new options control how and if players, shots,
items, debris bounce or not.

Due to the many and radical changes this version is not able to
communicate with older versions.  This was a difficult decision to take,
but it would have taken lots of extra work and much more code bloat
to do otherwise.

Now there is a new ChangeLog file which contains changes summaries
since release 3.0.4.

Support for DEC AudioFile sound format provided by Tom de Pauw.

Updated sounds file in the lib directory.  Many new sound events have
been added by Harvey Thompson.  Mark Boyns added more different sounds.
If you want to use sound with XPilot you must use this updated file.

Fix to not unpause paused players when their last target is destroyed
in targetKillTeam mode.  Bug reported by Ramdane Ferhati.

Server output is now always linebuffered, even over pipes or remote shells.

The preprocessor symbol _SONYNEWS_SOURCE has been changed into sony_news.

New server option -reportToMetaServer.  To specify if you want the server
to keep the meta server informed about your game.
Contributed by MAKOTO "Mark'n" Matsushita.

New item called EmergencyThrust.  Gives you 4 seconds of maxwarp speed.
You will need it badly to escape those modified full nuclear cluster mini
smart missiles chasing you at high speed :-).
Contributed by Harvey Thompson.

New item called AutoPilot.  Computer controlled stationary hanging in
the air everywhere you like, most likely near fuelstations :).
Contributed by Harvey Thompson.

New item called TractorPressorBeam.  To push or pull opponents towards
you or from you.  Robots also know how to use it :-)
Contributed by Harvey Thompson.

You can now specify the size of shots as they are drawn on your display.
When teammode is on then teamshots can be drawn in a different size for
easy recognition on monochrome displays.  Contributed by Harvey Thompson.

Players now have several options to change the behavior of weapon systems.
This is done with so called weapon modifiers.
The following weapon modifiers are available:

    N - To turn on nuclear mode on mines and missiles.
        So you can place a nuclear mine or throw a nuclear bomb.
        Or fire a nuclear smart missile, heat shot or torpedo.
        Nuclear mode takes 4 mines to make one nuclear mine
        and 7 missiles to make one nuclear missile.
        Full nuclear mode takes all the mines you have for one
        full nuclear mine with a minimum of 4 and all the missiles
        you have for one full nuclear missile with a minimum of 7.
        Contributed by Harvey Thompson.

    C - To toggle cluster mode on mines and missiles.
        Cluster explosions consist of shots instead of debris.
        Not for children.  Contributed by Harvey Thompson.

    I - Toggle implosion mode.  Explosions generated by mines and missiles
        implode when this modifier is active.  That is, players are pulled
        towards the centre of the explosion instead of being pushed away
        from it.  The great psychological effect is that opponents don't
        know anymore what they can expect from an approaching mine and
        therefore have much more difficulty to handle it.
        Inspired by a discussion in alt.games.xpilot.

    X - Set mini mode.  Firing a missile or mine results in a few mini
        missiles and mines.  Four mini levels are provided.  The first
        is the default non-mini mode.  Mini mode 2, 3 and 4 generate
        split weapons.  The mini projectile generates correspondingly less
        damage when it hits a player, but it has some other advantages.
        Contributed by Harvey Thompson.

    Z - Set spread angle.  When you drop, throw, launce some mini
        projectiles then the direction of the mini projectiles is
        influenced by this modifier.  It also influences wide angle
        shots and rear shots.  Four different spread levels are available.
        Contributed by Harvey Thompson.

    V - Set speed mode.  It decreases the speed of cluster shots
        in favor of increasing the life of the cluster shots.
        Four different speed levels are available.
        Contributed by Harvey Thompson.

    B - Set power mode.  Results in faster missiles which do
        correspondingly less damage.  Four power levels are available.
        Contributed by Harvey Thompson.

    L - Set laser mode.  Three choices are standard damage lasers, laser
	which acts as a stun gun (as outdated option laserIsStunGun did)
	or causes temporary blindness akin to ECMs.

New server option -allowClusters.  To allow or deny the cluster modifier.
Clusters are a bit heavy and not suitable for all playing styles.
Contributed by Harvey Thompson.

New server option -allowModifiers.  To allow or deny above modifiers,
except for cluster and nuke modifiers which are controlled by
their own -allow options.  The default value is Off.
Contributed by Harvey Thompson.

New server option -allowLaserModifiers.  To allow or deny laser modifiers.
Contributed by Harvey Thompson.

New client options to control how and when and if you want to
have all of your items displayed on your HUD.  For instance, you could
set to only display a particular item when the number of that item
changes.  Contributed by Harvey Thompson.

New client option to control whether you want to see any
messages or not.  Some slow displays could benefit from this.
Contributed by Harvey Thompson.

New server option -dump.  To print out a list of all of the server
options with their default values.  Handy if you want to make a new
lib/defaults file.  It also prints the values for some compile time
definitions like LIBDIR, MAPDIR etc.

New server option -minesOnRadar.  To specify if you want mines displayed
on the radar or not.  Contributed by Harvey Thompson.

New server option -nukesOnRadar.  To specify if you want nukes displayed
on the radar or not.  Nukes (including nuclear mines) can be displayed
in a particular pulsating way on the radar to distinguish them from
non-nuke projectiles.  Contributed by Harvey Thompson.

The server option maxMissilesPerNuke has been removed (temporarily?)
as it didn't fit with the new patches easily.  Maybe it is desirable
to have it back.

New server option nuclearClusterDamage.  This specifies how much damage
nuclear cluster debris does and reduces the number of debris by the same
amount.  Making this larger than 1.0 causes significant server improvement
when using nuclear cluster weapons; the most often used.  In order that
players can differentiate between normal shots/cluster and nuclear cluster
debris the latter flashes and changes size.  Contributed by Harvey Thompson.

New server option -playerMinimumStartFuel.  To specify if the minimum amount
of fuel a player gets when he restarts at his homebase after a fatal action.
Contributed by Harvey Thompson.

New server option -teamAssign.  To assign a player to a team if he hasn't
specified his team.  Contributed by Harvey Thompson.

New server option -teamImmunity.  It specifies whether team members are
immune to shots from team members or not.  Contributed by Harvey Thompson.

New end of game rules for team play with treasures.  When all playing
teams treasures apart from one are destroyed the game ends and balls
are reset.  Contributed by Harvey Thompson.

New server option -targetTeamCollision.  When this option is turned on
players belonging to the same team as the target can pass through
the target as if it was space.  This is a very nice idea I think.
There is a new map provided called teamfuzz4 to illustrate this idea.
Option and map are both contributed by Harvey Thompson.

New server option -treasureKillTeam.  Similar to targetKillTeam.
Contributed by Harvey Thompson.

New server option -treasureCollisionDestroys.  Specifies whether balls
are destroyed when a player hits it.  Contributed by Harvey Thompson.

New server option -treasureCollisionMayKill.  Specifies whether balls
kill unshielded players.  Contributed by Harvey Thompson.

New server option -shotsWallBounce.  Specifies whether shots bounce
from walls or not.  Can be fun, but be prepared to be shot by your
own bullets.  Together with clusters this may be nice too :-)

New server option -ballsWallBounce.  Specifies whether balls bounce
from walls or not.  Can be fun with balls because when a player looses
his connection with a ball the ball can be hard to find back.

New server option -minesWallBounce.  Specifies whether mines bounce
from walls or not.  Not sure if this is a nice option.

New server option -itemsWallBounce.  Specifies whether items bounce
from walls or not.  Great fun to chase that wide angle item you need
so badly, or that fuel item when you don't have fuel anymore, etc.

New server option -missilesWallBounce.  Specifies whether missiles bounce
from walls or not.  Makes missiles live almost forever.

New server option -sparksWallBounce.  Specifies whether sparks from
thrusting and bounce off walls or not.  Turning on this option causes
thrust to be "reactive", that is something like ground effect in real
physics.  Useful to slow you down even more before hitting a wall.
Contributed by Harvey Thompson.

New server option -debrisWallBounce.  Specifies whether debris from
explosions bounce off walls or not. Watch out for the combination of
this option and nuke exposions.  Too many fast moving and bouncing
objects can slow down the server for a long time.  You can tune this
with the -maxObjectWallBounceSpeed option.  Otherwise it is great fun.

New server option -maxObjectWallBounceSpeed.  Specifies the maximum
allowed speed for objects to bounce off walls.  Setting this below 50 is
recommended to avoid slowdowns of the server in case of big explosions.

New server option -maxShieldedWallBounceSpeed.  Specifies the maximum
allowed speed for shielded players to bounce off walls.

New server option -maxUnshieldedWallBounceSpeed.  Specifies the maximum
allowed speed for unshielded players to bounce off walls.  Nice to set
it high in tournament style maps.

New server option -maxShieldedWallBounceAngle.  Specifies the maximum
allowed angle for shielded players to land on walls.

New server option -maxUnshieldedWallBounceAngle.  Specifies the maximum
allowed angle for unshielded players to land on walls.  Nice to set
it high in tournament style maps.

New server option -playerWallBounceBrakeFactor.
Factor to slow down players when they hit the wall (between 0 and 1).
For instance, setting it to zero causes walls to immediately absorb
all speed of a player that touches it.  Setting it to one causes
players to keep all of their speed when they bounce.

New server option -objectWallBounceBrakeFactor.
Factor to slow down objects when they hit the wall (between 0 and 1).

New server option -objectWallBounceLifeFactor.
Factor to reduce the life of objects after bouncing (between 0 and 1).
This option allows you to reduce the life of bouncing objects if you
think that too many objects slow down the server.

New server option -wallBounceFuelDrainMult.
Multiplication factor for player wall bounce fuel cost.

New server option -wallBounceDestroyItemProb.
Factor probability of loosing one or more items from each set when a
player bounces of a wall.  Higher probabilities give greater chance
of loosing objects.  Contributed by Harvey Thompson.

Objects are now warped through wormholes if the wormhole has ever warped
a player before.  The object is warped to the same place as the player
has been warped to.

Being hit by debris from explosions now costs a little fuel depending upon
the speed and mass of the debris.  Being hit by fast and heavy debris
costs more fuel than being hit by slow and light debris.  If a player is in
the middle of a nuke explosion and sparksWallBounce is on then this could
cost him quite some fuel.  Not having enough fuel is fatal.

New key called keyLockNextClose.  To lock on the next closest player.
Default key is the down arrow.  Contributed by Harvey Thompson.

New key called keyToggleNuclear.  To toggle the nuclear weapon modifier.
Default key is 'n'.  Contributed by Harvey Thompson.

New key called keyToggleCluster.  To toggle the cluster weapon modifier.
Default key is 'c'.  Contributed by Harvey Thompson.

New key called keyToggleImplosion.  To toggle the cluster weapon modifier.
Default key is the 'i' (the ID default key is now 'u').

New key called keyToggleVelocity.  To toggle the velocity weapon modifier.
Default key is the 'v'.  Contributed by Harvey Thompson.

New key called keyToggleMini.  To toggle the mini weapon modifier.
Default key is the 'x'.  Contributed by Harvey Thompson.

New key called keyToggleSpread.  To toggle the spread weapon modifier.
Default key is the 'z'.  Contributed by Harvey Thompson.

New key called keyTogglePower.  To toggle the power weapon modifier.
Default key is the 'b'.  Contributed by Harvey Thompson.

New key called keyToggleLaser.  To toggle to laser type modifier.
Default key is the 'l' (the compass toggle default key is now `y').
Contributed by Harvey Thompson.

New key called keyToggleAutoPilot.  To toggle automatic pilot mode.
Default key is the 'h'.  Contributed by Harvey Thompson.

New key called keyEmergencyThrust.  To toggle emergency thrust mode.
Default key is the 'j'.  Contributed by Harvey Thompson.

New key called keyTractorBeam.  To activate the tractor beam in attract mode.
Default key is the ','.  Contributed by Harvey Thompson.

New key called keyPressorBeam.  To activate the tractor beam in repulse mode.
Default key is the '.'.  Contributed by Harvey Thompson.

New key called keyClearModifiers.  To clear all of the modifiers.
Default key is the 'k'.  Contributed by Harvey Thompson.

New keys called keyLoadModifiers1, keyLoadModifiers2, keyLoadModifiers3
and keyLoadModifiers4.  To load modifiers in bank 1, 2, 3 or 4.
Default keys are '1', '2', '3' and '4'.
Users can specify up to four modifier settings which affect all of
the modifiers available.  During active play these banks allow rapid
switching between different settings.
For advanced use you can combine this with another key like this:
         xpilot.keyLoadModifiers1:       1
         xpilot.modifierBank1:           NC V1 X4 Z2
         xpilot.keyDropMine:             Tab 1
to make the Tab key drop some modified mini nuclear cluster mines.
Many nice combinations using this technique are imaginable.
Contributed by Harvey Thompson.

New client resources xpilot.modifierBank1, xpilot.modifierBank2,
xpilot.modifierBank3 and xpilot.modifierBank4.  To specify what modifier
options the modifier banks should contain.  Contributed by Harvey Thompson.

New key called keyToggleOwnedItems.  To toggle display of owned items
on the HUD.  Contributed by Harvey Thompson.

New key called keyToggleMessages.  To toggle display of messages on
the screen.  Contributed by Harvey Thompson.

New client option -keyListFont.  To set the font to use in the key help
window.  This was needed because of the many keys which overflowed the
available screen space.  By setting this option to a small font this
problem is overcome to some extent.  What we really want is a multi-column
or multi-page key list.  Contributed by Harvey Thompson.

New client option -shieldDrawSolid.   Dunno what it does.
Contributed by Harvey Thompson.

There is now a new kind of pause mode called HoverPause.  You can pause
when you are in AutoPilot mode, but you don't get all of the immunity
of a normal paused player.  It is only meant as a temporary pause
to answer a phone or open a door for someone, etc.
Contributed by Harvey Thompson.

Shots are now transferred to the client much more efficiently.  They now
use the same compression algorithm as was used for debris.  This was
needed for the new cluster explosions and for players having dozens of
wide angle items.  Contributed by Harvey Thompson.

New client option -titleFlip.  To control if you want the titlebar
to flip between different titles.  Some window managers like twm seem
to have (performance?) problems with clients changing their titlebar.
Contributed by Harvey Thompson.

ECM works a little differently now.  Now it also affects mines.
Contributed by Harvey Thompson.

Talk messages can now be directed to a particular player or team.
To direct a message to a player prepend the player name and a
colon to the message.  To direct a message to a team prepend the
team number with a colon.  For instance, to talk to Smasher type
the following: "Smasher: Sharp move Smasher! :)".
You don't need to type the complete name and case is not important.
Note that this way of directing messages requires you to use
smilies with care as they contain a colon.
Contributed by Harvey Thompson.

Mines dropped by yourself or one of your teammembers are now
drawn with a hollow center to distinguish them from enemy mines.
Dunno if this is an improvement or not.
Contributed by Harvey Thompson.

Destroying targets from empty teams, or from teams whose members
are all in the game over state or paused, only gives as many points
as destroying a cannon would have given.

Thrusting now really costs a little fuel.

The client now tries better to contact servers on the local network
even if it can't get information about attached network interfaces.

The default value for the repair key has been changed from 'x' to 'f'.

The dollar sign is a new map symbol to force the direction of homebases.
Players starting on homebases that are adjacent to this symbol will
start with the front of their ship pointing to this dollar sign.
Except that the client does not draw it.

The shots of cannons are now moving at approximately the same speed
as player shots (they used to be much slower).  Cannons also fire
a little more often.  (Maybe this should be made optional?)

Smart missiles now try to avoid targets and treasures.

Servers now can have a motd which players can read while they are
connected to the server.  The client has a pager with scrollbars
for easy reading of the motd.  By default this server motd is displayed
as soon as the client has successfully joined a game.  This behavior
can be turned off by setting the -autoServerMotdPopup option to False.
Alternatively the client can ask for the server motd by selecting
the motd entry in the menu.
The default place to store the server motd is in LIBDIR/servermotd, but
this can be changed by the server option -motd.

The server now better handles games with more players and robots due
to improvements in the way player-object collisions are calculated.
However, due to the new wall collision routines which are slower
the server handles situations with lots of objects in the air slower.

A bugfix for initialCloaks thanks to Yves-Henri BERNE and Ramdane FERHATI.

Three new server options called initialAutopilots, initialEmergencyThrusts
and initialTractorBeams.

The number of initial items a player has when he starts on his homebase
can now be changed by the client, even when play already has begun.
This was done after effort by Kevin Pearcey and Ramdane FERHATI.

All of the server options with their current values can now be examined
by all clients.

A new server option called -distinguishMissiles.  If this option
is true (the default) then different types of missiles like smart,
heat or torpedo are drawn with different lengths.
Smart missiles have length 12, heat seakers have length 15 and
torpedoes have length 18.  Thanks to Tony Plate.
He also renamed "smarts" to "missiles" where applicable.



Users can now define their own ship shape with a few limitations.
The server has a new server option -allowShipShapes to enable
user-defined ship shapes (the default is to enable it).
The client has a new option called -shipShape <decription>.
Where description defines the edges of the ship.  When the ship
is drawn the edges are connected in the order they are listed
in the description, with lines connecting them.  The first and last
point are also connected.
For example, the following defines the default ship we all know so well:

    xpilot -shipShape '(3,1,2)(15,0)(-9,8)(-9,-8)'

Where the first parentheses surrounds a triple of numbers.
The first number of this triple denotes the number of points that
follow.  The second and third number of the triple define the two back
points of the ship, which are marked with the marking lights.
These two back points also determine where the thrust of the ship
originates, namely at the mean of these points.
All of the points follow, each one surrounded by parentheses.
The first point should be the top point of the ship as this is the
point where shots originate from (otherwise the ship will kill itself
by its own shots).
The ship shape is defined as if it was rotated 90 degrees to the right.
The definition should meet some requirements to enforce users to define
a ship which is not too small or too weird.  These restrictions are
arbitrary and open to discussion.  Currently they are as follows:
  1) each ship should have at least three different points and not more
     than sixteen points.
  2) at least one point should be eight or more pixels left from the origin.
  3) at least one point should be eight or more pixels right from the origin.
  4) at least one point should be eight or more pixels above the origin.
  5) at least one point should be eight or more pixels below the origin.
  6) at least three points should be eight or more pixels away from the origin.
  7) no point may be more than fifteen pixels away from the x- or y-axis.
Hopefully this is understandable, otherwise it is unusable :-)
Some example ship shapes made by Mark Boyns are:
##spike
xpilot.shipShape: (6,2,4)(15,0)(0,2)(-9,8)(-3,0)(-9,-8)(0,-2)
##mushroom
xpilot.shipShape: (11,5,6)(8,0)(5,8)(3,12)(0,15)(0,0)(-8,3)(-8,-3)(0,0)(0,-15)(3,-12)(5,-8)
##star
xpilot.shipShape: (8,3,5)(15,0)(2,2)(0,15)(-2,2)(-15,0)(-2,-2)(0,-15)(2,-2)
Stig Sæther Bakken adds:
##Milennium Falcon
xpilot.shipShape: (16,5,6)(14,2)(14,4)(2,10)(-5,10)(-10,8)(-12,3)(-12,-3)(-10,-8)(-5,-10)(9,-11)(10,-8)(7,-8)(14,-4)(14,-2)(4,-2)(4,2)
Someone has to make a shipshape editor! :-)
(And we need an archive of nice ship shapes.)
Andy Skinner adds:
xpilot*shipShape: (4,1,3)(15,0)(-9,8)(0,0)(-9,-8)
## squatty
xpilot*shipShape: (6,1,5)(8,0)(-8,12)(-4,4)(-8,0)(-4,-4)(-8,-12)
##Y-wing
xpilot*shipShape: (16,5,11)(14,0)(5,5)(6,2)(0,2)(0,8)(-13,8)(-13,4)(-4,4)(-6,0)(-4,-4)(-13,-4)(-13,-8)(0,-8)(0,-2)(6,-2)(5,-5)
##side wings
xpilot*shipShape: (15,5,9)(15,0)(-4,-3)(-4,-6)(0,-6)(0,-8)(-12,-8)(-12,-6)(-5,-6)(-5,6)(-12,6)(-12,8)(0,8)(0,6)(-4,6)(-4,3)
##fishy
xpilot*shipShape: (8,2,6)(15,0)(8,4)(-15,-8)(-8,2)(-4,0)(-8,-2)(-15,8)(8,-4)

Enough examples I think :)

Most of the work on user definable ship shapes has been done
by Scott W. Adkins.



There is a new server option by Harvey Thompson called: -mineFuseTime.
It specifies the time after which mines also explode if the player
who dropped the mine approaches it.  The default is 0 seconds, which means
that this feature is not used.


A new server option -robotsTalk based on work by Greg Shebert.
We only need some more robot messages.


Changes to the way ECM and mines interact by Tony Plate:
(1) ECMs change mine ownership.  This is a pretty powerful trick, so
one ECM can only change the ownership of one mine (the closest one).
This option is controlled by the -emcsReprogramMines.
(2) Mine ownership is displayed on the screen, when you are close enough.
How close you need to be depends on how many sensors you have (with no
sensors, you have to be within 1.5 times the mine explode range, increases
by 0.5 for each sensor).  Whether or not the mines are displayed as a
hollow or filled circle depends on who originally laid the mine, not who
it is safe for.  Controlled by the server option -identifyMines.
(3) The client has a -showMineName option.


The maps2image package by Andrew Scherpbier has been added to
the contrib directory.  It takes a set of xpilot maps and builds a
single PBM image from them. Each image is labeled with the map's
name below it.  If you have a lot of xpilot maps, this is a simple way
to remind yourself of what the different maps are/look like.


New in 3.1.0 is the inclusion of TkXpInterface in the contrib directory.
TkXpInterface is made by Ramdane FERHATI, Yves-Henry Berne.
It is based on an early version of tkxpilot by Richard Oak.
It is a very nice and complete package presenting an easy to use
graphical user interface to configure an XPilot server.  It provides
handles to tune options, select and preview a map, and to startup
a server with this setup.  It also provides a nice interface to
the meta server and can startup a client connected to the server of
your choice.  It requires installation of the Tcl/Tk and maps2image.
See the accompagnied README in the contrib/TkXpInterface directory for details.
This is hot stuff!  Recommended.


Hmm, I'm not sure if I haven't overlooked some changes.  There are so many.


The manual page for the client has been updated somewhat by Harvey Thompson
and Tony Plate.


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

Changes in 3.0.7 compared to 3.0.6:

1) New compile time option for Suns called SPARC_CMAP_HACK, which
   gives a very high speedup on some low quality graphics hardware.
   Faster display systems (e.g. those that do not have trouble
   displaying 12 or more frames per second) do not experience
   any benefit from this option.  This option needs the ERASE
   compile time option set to 1 (e.g. -DERASE=1).
   Be warned that this option needs further work and that it is
   currently not entirely riskfree in the sense that it should check
   if the display is local before trying to alter the colormap.
   We are hoping for some volunteer to improve this as we don't
   have Suns available to do it ourselves.
   Thanks to Steven Singer for providing extensive testing and analysis.
   His test report follows here:
    I've retimed the xpilot client response with various option setings -
    particularly to see the effect of my colourmap hack. I've also tried an
    alternate server we had on the system - Xsun - which doesn't include the
    NeWS support which our default server (xnews) does provide.
    I've tried to measure the maximum frame rate that can be obtained under
    the various settings. Note that I've increased the maximum frame rate as
    measured for ERASE on, my hack off to 23 fps (from 15 fps as I said
    previously). However, although it will cope some times at 23 fps, at
    other times it goes jerky. Anyway, here are the measurements:

    xpilots running on a remote machine - performace degrades badly if
    xpilots run on local machine.
    xpilot running locally on a SPARC 2 with a cg3 display card.
    xpilot 3.0.6 beta + my colourmap hacking.

    server	ERASE	My Hack	Max fps	Comments
    -------	------- ------- ------- -------------------------------
    xnews	Off	Off	~6	With fps>6 ~0.5 sec delay between
					key press and response.
    xnews	Off	On	~7	With fps>7 response lag as above.
    xnews	On	Off	23	Goes jerky if a lot of stuff (like
					landscape) on screen or for some other
					reason I haven't worked out
					(system load?). Generally on-on is
					smoother.
    xnews	On	On	>76	18 fps is smooth and playable but a
    					little flickery.
    Xsun	Off	Off	8-12	Difficult to say exactly as it copes
    					well when the server is going too fast.
    					Ie. there is no key lag, and the frame
    					update is fairly smooth
    Xsun	Off	On	????	As above, somewhere around 12 fps at a
    					guess.
    Xsun	On	Off	23	Similar to xnews response
    Xsun	On	On	76	Similar to xnews response

    Other notes
    -----------
    On the xnews server rotating dashes (shield and cloak) don't rotate.
    With ERASE On and the xnews server, the shield isn't erased properly.
    With ERASE On on either server the cloak isn't erased properly if your ship
    rotates.

    Glad he is our beta tester :-)

2) New server option called maxMissilesPerNuke, or maxNuke for short,
   which limits the number of missiles used per nuke and thusly allows
   players to fire more nukes at once if the player has enough missiles.
   Made by Stig Bakken.

3) New server options to set the initial number of items a player gets
   when he starts at his homebase.  Listed they are:
   initialFuel, initialTanks, initialECMs, initialMines, initialMissiles,
   initialCloaks, initialSensors, initialWideangles, initialRearshots,
   initialAfterburners, initialTransporters, initialLasers.
   Made by Stig Bakken.

4) Changes to the new server option targetKillTeam which kills all
   members of a team if their last target was destroyed.

5) Longer lasers as the current lasers were a bit weak.
   If this makes lasers too strong then we will shorten them again.
   Or better yet, make an option to set the laser length.

6) Targets can now be repaired if they are damaged.  The new target repair
   key is 'x' by default.  Made by Andy Skinner.

7) New features for talking made by Steve Davis.
   The mouse cursor is now warped to the talk window.
   The talk window now supports emacs-style line editing with
   CTRL-b, CTRL-f, CTRL-a and CTRL-k.
   A new user configurable fixed font for talking.
   Talk window editing has been cleaned up to make it easier to
   add more editing commands.

8) Changes to the player lock by Steve Davis.
   The arc is now red instead of blue.  This enhances visibility.
   The size is more visually appealing.
   Size is more linear to actual distance, and has a set maximum.
   Size scales with the map size.

9) New -motd option in the client thanks to Zack Evans.

10) -altTurnspeed and -altTurnresistance are now -altTurnSpeed and
    -altTurnResistance everywhere consistently.  Bugfix.

11) Important bugfix for dropping balls thanks to Gary O'Brien.

12) Very important bugfix for limited visibility maps like Tournament.
    Thanks to Geert Van der Plas from KU Leuven, Belgium.

13) Targets now also exist during non-teamplay as a form of destructable
    wall.

14) Bugfix for kicking a player.  Since 3.0.6 this also terminated
    the server.  This is in fact a more general bugfix.  In 3.0.6 if
    a players connection got corrupt then the server terminated.
    This is now also fixed.
    If I remember correctly this was reported first by Michael Eckardt.
    Not sure about the name, sorry.

15) Bugfix for nukes.  The nuke was counted as a shot on firing, but
    not when destroyed.  This caused serious problems in limted shots
    mode where players could not fire anymore after they had fired a couple
    of nukes.

16) Bugfix for tournament mode maps to correctly calculate when there
    is a draw.

17) Robots are now less handicapped by unusual directions of gravity.

18) Fix for NoQuit mode.  If NoQuit is set then the server does not quit
    even if no players show up ever.  Thanks to Dave Merrill.

19) Servers now report to the meta server whether they support sound or not.

20) Bugfix for calculating winner and loser teams in pizza mode thanks
    to Fred Hucht.

21) A new XPilot Map Transfer Protocol program by Andrew Scherpbier.
    It is in the contrib/xpmtp subdirectory and enables you to really
    conveniently upload, download, preview or generate maps to/from
    xpilot.sdsu.edu.  Check it out.

22) A new XPilot map generator program called wildmap.  It is in
    the contrib directory.  It generates nice maps and has a couple
    of options to tune the map characteristics like the map density,
    dimensions and so on.


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

Changes in 3.0.6 compared to 3.0.5:

This patch contains only a few new features.  The majority of
the changes include a VMS port by Curt Hjorring, several bug
fixes and several speedups.  This is an incomplete summary:

* VMS port by Curt Hjorring.  See the VMS subdirectory.

* Configurable text message printing in client.

* New toggleShield option for the client.

* New clock option for the client.

* Speedups of the client drawing (e.g. modulus removed in Paint_world).

* Faster server response during login.

* Several fixes to prevent zombie players.

* A new (unfinished) client compile time option called ERASE which seems
  to noticably speedup the drawing of clients on some particular kind of
  slow display system (a SPARC with a cg3 card).  Faster systems don't
  experience any advantage of this option (even a slight decrease in
  performamce).  Thanks to Stephen Singer and Curt Hjorring for testing.

* Much faster gravity object processing during server startup thanks to
  two posts in alt.games.xpilot which I can't find anywhere anymore :(

* And a number of bug fixes and small tweaks.


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

Changes in 3.0.5 compared to 3.0.4:

* XPilot will compile using G++ (tested on Linux and HPUX)
* Support for Thrusted Solaris CMW (thanks to Steve Marsden)
* Made it configurable if items can be picked up while shields are up
* Made it configurable if mines can be thrown while shields are up
* Added stun-gun option for laser
* Laser has been seriously weakened to balance the game
* Laser is no longer immediate (it is pulsed)
* New sounds for laser (thanks to Mark Boyns)
* Made robots less good at using lasers
* Bouncing against items while shields up now moves the item
* Right alignment of messages
* Messages are written character by character
* Default values for graphics (window size, num. colors) is
  reverted to 3.0.3 defaults
* Throwing/detaching mines now costs fuel
  (thanks to Fred & Michael from Duisburg)
* Might have fixed cloak bug (Charles, let us know if it works, ok? :)
* Bug fix for bouncing against objects in general (might have caused crash)
* Fix for drawing targets (which were drawn ugly and wrong)
* Fix for stealing a base from someone having game over (limited lives)
* Hopefully removed the bug that hung the server when a tank was released
* Several other small bug fixes

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

