ACM Flight Simulator,  revision 5.0


What is ACM?
------------

ACM is a LAN-oriented, multiplayer aerial combat simulation.  The main design
objective was to provide source code that could be easily compiled and
executed on a wide variety of platforms.  To that end, acm is written entirely
in C, exploiting the programming features of Unix, X11, and the BSD socket
interface.  A Windows/95 version is available from www.websimulations.com.

Players engage in air to air combat against one another using heat seeking
missiles and cannons.

ACM is implemented as a distributed simulation.  It communicates information
via the IEEE Distributed Interactive Simulation protocol (IEEE 1278.1-1994).
This should allow ACM to interoperate with other simulations that support that
protocol.


Riley Rainey (riley.rainey@websimulations.com)
Dallas, Texas
December 23, 1998


Building ACM:
-------------

To build ACM, type:

	$ ./configure
	$ make

On systems where X11 is installed in an unusual location, configure may have
trouble locating the X include files and libraries (you'll know that
because the compiler will complain that it can't find files like "X11/X.h").
If this problem crops up, you can help configure to set up the
Makefiles by telling it where to find X11:

	$ x_includes=/usr/myX11/include; export x_includes
	$ x_libraries=/usr/myX11/lib; export x_libraries
	$ ./configure
	$ make

By default, configure will compile ACM using gcc if gcc is found in your PATH
environment variable.  Some combinations of gcc and OS platforms have problems
with ACM (gcc 2.2.2 seems to have problems on SunOS and HP-UX, for example).
You can override configure's selection of gcc:

	$ CC=cc; export CC
	$ ./configure
	$ make

ACM can then be executed by typing:

	$ cd src; acm

When you are ready to install ACM on your system:

	# make install


What's different with revision 5.0:
-----------------------------------

Current ACM documentation may be found in the file "acmdoc.rtf".

ACM now dynamically maps DIS entity identifiers to rendered objects.  The
mapping is defined in the file "objects/object-map.txt".

ACM now has a more flexible scheme for determining aircraft damage.  See the
file "objects/munition-map.txt".

ACM now supports reading DXF object description files.  This support isn't
exhaustive, but it works with many popular 3D CAD programs capable of
exporting DXF files.

The V library object description file suffix was changed from ".obj" to
".obv" to avoid conflicting with Micrsoft object file names.

A bug in the new scene reader code was preventing 'FEATURES' (special
ground based features) from being rendered.  The default-scene file now
contains an example of a ground feature reference -- the tower at Addison
airport.

Support for the GNU --srcdir option to 'configure'.  Michael Deutschmann
(ldeutsch@mail.netshop.net) suggested changes to support this as well
as numerous autoconfig enhancements.

Several changes have been made to allow ACM to compile and link
cleanly on Linux systems.  ACM's configure now looks for a /usr/lib/games
directory and installs ACM's object files there if it is present.

Mats Lofkvist fixed several bugs relating to DIS processing.

The DIS/x library now supports more DIS dead reckoning methods.
All static and world-based methods are now supported.  Body
frame methods remain unsupported.

Missiles will no longer fire while weight is on the landing gear.

Mark Cianfaglione (markcia@nortel.ca) suggested changes to landing gear
handling.  Now the gear will not come up until weight is off the wheels.
At Mark's suggestion, the low fuel light now comes on when there is
fifteen percent fuel remaining -- it used to be hard coded to come on
any time there was less than 1000 lbs of fule on-board.

Misha Stephanov <misha@hp1.physics.uiuc.edu> pointed out two one-line,
but significant bugs in update.c and damage.c.  Misha also suggest
a changes to landing gear handling to detect when someone is unlucky
enough to attempt a gear-up landing.

ACM now has a basic DIS Stealth capability.

ACM supports numerous new command line options, all of which are
documented in the acmdoc.rtf file.


What's different with revision 4.8:
-----------------------------------

The world is now round -- er, spheroidal. When you enter the ACM world, you 
are placed on runway 15 at Addison airport in Dallas, Texas [my aircraft's
home base ;-) ].  The scene databases now include realistic radio navigation
aid information as well as runway location information. With this info 
integrated into ACM, you can fly more real instrument approaches.
If you'd like to try, you should get a copy of the current
National Ocean Service [NOS] terminal procedures [approach plates]
South Central Volume 2. I will try to get permission to scan and distribute a
few with the release of ACM.

Only the Dallas scene database is currently available.

Use your PC joystick with ACM!  Support for the Colorado Spectrum
Workstation Gameport(tm) has been added to ACM.  This gameport adapter
allows you to connect a PC joystick to a serial line on your UNIX
workstation.  The Workstation Gameport can be ordered from Colorado
Spectrum by phone: +1 (970) 225-6929; it currently lists for $100.
The Workstation Gameport is a different design than the Notebook
Gameport that you will find in your local PC retail store.  The Notebook
Gameport will not work with ACM.

WARNING:  This support is currently incomplete.  The joystick driver has been
temporarily hard-wired to interface to two-axis joysticks.  To enable joystick
operation, type:

	$ acm -js /dev/cua1

The name of the serial port connected to the gameport is supplied as the
second argument.  The device name will vary from one system to the next 
(/dev/cua1 corresponds to the direct-connect port "B" on my Sparc IPX).

Mats Lofkvist has integrated ACM with the U.S. Navy Postgraduate School's
Distributed Interactive Simulation software (called NPSNET).  As the name
implies, DIS is a simulation information interchange protocol that allows
distributed servers (ACM servers, in this case) to work cooperatively.

I have replaced Mats' use of NPSNET with a DIS library that I created.  This
library implementation should be more portable.

Using DIS means that if you are using ACM in a multiplayer environment, you'll
see much better overall performance.  

The DIS protocol relies on broadcast UDP datagrams. Therefore, all ACM
players must currently run on the same subnet (UDP broadcasts are not
propagated beyond a subnet).  There are DIS bridges available that
would potentially relax this restriction, but none have been tested with
ACM yet.

The ACM server (acms) has been eliminated.  Invoke acm by simply
typing 'acm'.  Check the acm man page for information about new
command-line arguments and switches.

A font problem that manifested itself on AIX/Windows has been fixed.

Fixes for Linux compatibility problems in ACM 4.7 were submitted by 
Jeremie Petit (petit@aurora.unice.fr).


What's different with revision 4.7:
-----------------------------------

A problem with V library 3-D to 2-D mapping has been fixed.

A problem with the V library could cause this esoteric error message on some
X servers:
	
	BadPixmap (invalid Pixmap parameter)

The fix to this problem was identified by Brent Holland.


What's different with revision 4.6:
-----------------------------------

Sound support has been added for many HP platforms.  Philippe-Andre Prindeville
made the changes required for ACM to function with the HP-UX audio API.
Configure no longer assumes that the NCD netaudio library is the only only one
named "libaudio.a".

Cloud layers can now be used to affect combat conditions.  A single cloud
top/base can be set.  This solid cloud layer is opaque to IR emissions, so
you will have a hard time shooting down an opponent who is on the other side
of the clouds.  The default cloud base is 2800 feet, tops at 9000 feet.
It is not currently possible to "turn-off" clouds.

Portability problems with ACM's usage of the random number generators rand()
and random() have been fixed.

A problem with architectures where a "long" is not the size of an "int" (DEC
Alphas) has been fixed.


What's different with revision 4.5:
-----------------------------------

The HUD compass and HSI were pointing to true north rather than to magnetic
north.  This has been fixed.  The magnetic variation has been set to
eight degrees east (it can be changed in navaid.c).  This means that the
18-36 runways at both team's airfields are actually 17-35 runways; the runway
heading for the ILS 17 approach at team one's airfield is 172 degrees;  the
runway heading for the ILS 36 approach at team two's airfield is 352 degrees.

A field has been added to the navaid description structure to account for
the fact that ILS localizers have a variable beam width (three to six degrees
according to the FAA Airman's Information Manual).  The two ILS approaches
have been adjusted so that their beam widths are 700 feet wide at the runway
threshold (per the standard).

Porting problems with Solaris 2.3 and DEC Alpha OSF/1 have been fixed.
Thanks to Bill Davidson, Peter Asenstorfer, and S.Y. Ni.

A problem in the VOR TO/FROM logic was pointed out by Jeff Westbrook and has
been fixed.

A problem with monochrome support was fixed by Jeff Westbrook.

ACM's configuration facility was rebuilt using autoconf 1.9.


What's different with revision 4.4:
-----------------------------------

Simple visual depth cueing has been added to ACM.  Depth cueing is only
activated on color or grey-scale screens that have at least 8 bit planes.
Visibility can be set using the "-visibility" switch on the acms command
line.  It produces interesting, if slow, results when used with any of the
Hawaiian Island scenes.  I intend to improve the performance and visual
fidelity of this feature.

A bug in the depth cueing color blending code has been fixed.

Fixes to src/makefile.in and V/lib/Makefile.in have been applied.  A
"make depend" target has been added.


What's different with revision 4.3:
-----------------------------------

Drones will now maneuver and attempt to attack you with missiles.
The original inspiration and code changes were supplied by 
Jason Nyberg (nyberg@ctron.com).  The drone tracking method was modified 
and the missile launch logic was created by Riley Rainey.

A bug in the AIM-9 time-to-target HUD calculation was fixed.

Support for NCD's netaudio software has been added.  The NCD netaudio software
is free and available in source form via anonymous ftp from ftp.x.org.

Netaudio 1.1 does not allow the user to switch the audio output port on
a Sun IPX (an IPX has both an internal speaker and an external jack for
headphones or separate speakers).  You can switch ports by using the SunOS
/usr/demo/SOUND/x_soundtool before executing acms.

The scene file format has been modified slightly.  The third line is
now the color to be used for the "ground".

The kauai-scene, oahu-scene and maui-scene files display environments
around those Hawaiian islands.  Terrain elevation data was extracted from
USGS one degree Digital Elevation Model (DEM) data files.  Because of the
complexity of these scenes, rendering speed is unacceptably slow on all but
the fastest contemporary workstations.

A bug in the V library backface clipping code was fixed by Tim Love.

A bug in the V library was resulting in oddly colored instrument panels at
seemingly random times.  This has been fixed.

A problem with the landing gear parameters on the F-16 has been fixed.

Acms 4.2 core dumped on AIX systems.  This has been fixed.  Tom McConnell
supplied the changes.


What's different with revision 4.2:
-----------------------------------

Several nits reported by CodeCenter have been repaired by Brad Bass.

Makefiles now use the $(MFLAGS) macro, where needed.


What's different with revision 4.1:
-----------------------------------

Ultrix and HP-UX make(1) was having problems with the $(MAKEFLAGS) directive in
V/Makefile.in.  It has been removed.  It's removal should not affect the
build process.

The Ultrix 4.3 shell was having problems with "./configure".  The problem
has been fixed.

A problem in "./Makefile" that would cause a mis-identification of the
default target has been fixed.

ClipPoly.c was unused in ACM 4, but has been updated so that it compiles.

A problem in inventory.c that was causing the nose-wheel steering mode to
stay enabled at all times has been fixed.  This problem was pointed-out by
      _
Mats Lofkvist (d87-mal@nada.kth.se).


What's different with revision 4.0:
-----------------------------------

Combat Simulation
-----------------

Mig-29's are now the default team two plane.

The HUD display has been improved.

A bug in the missile tracking algorithm that would induce misses when the
target was moving at a high speed has been fixed.

ACM now supports situation recording and playback.  The "{" key will start
recording, the "}" key ends it.  The positions of all aircraft existing
during the recording period will be saved in the file "./back_box_output".
That file can be played back by moving it to the file "./black_box_input".
Activate the playback by pressing the "[" key while you're in ACM.

DME, VOR's, Localizers, and Glide Slopes have been added.  An HSI has been
added to provide VOR and ILS readouts.  

To activate the HSI, press the 'R' key.  Each press of the 'R' key cycles
through RADAR -> HSI -> RADAR STANDBY.  The Omni Bearing Selector is moved
20 degrees with the '7' key, and one degree with the '8' key.  The '9' key
increases the NAV frequency by 1 MHz, the '0' key increases it by 0.05 MHz.
The selected frequency is displayed at the lower right-hand section of the HSI.

If you want to shoot an ILS approach, I suggest the following settings:

LEVEL FLIGHT:
	power	45 %RPM
	flaps	20
	gear	up
	speed brake  deployed as needed
	speed	~ 150 kts

ON GLIDE SLOPE:
	power	35 %RPM
	flaps	20
	gear	down
	speed brake  retracted
	speed	140-150 kts
	AOA	10-11 degrees

When you shoot the ILS 17 approach, don't forget to set the OBS dial to
the runway heading (172 degrees).  Otherwise, you'll get a very
confusing picture of which way to fly.
This approach configuration gives you a good opportunity to practice
soft landings.


Flight Simulation
-----------------

Engine response is no longer instantaneous.  Engine RPM (power) will
increase and decrease gradually to a newly selected setting.

The aircraft simulation model has been changed substantially.  Tim Tessin
uncovered a bug in pm.c that was substantially degrading the performance
of all aircraft in high angle of attack situations. It's been fixed.

Several problems with the lift-curve determination have been fixed.
The lift coefficient is now determined by interpolation.  The lift contribution
of flaps has been modified to be more consistent with reality.

Aircraft control surface effectiveness has been increased substantially.
I believe that this increase in consistent with a more realistic simulation.

ACM now models aircraft motion on the ground more accurately.  ACM actually
models the spring and motion damping effects of the landing gear struts, as
well as the contribution of ground friction by the wheels.

A problem with the roll dynamics of the flight simulation model pointed out
by Tim Tessin has been fixed.  The roll model (no pun intended) has been
substantially re-worked to be able to use standard NACA stability
derivatives to describe aircraft roll performance.

The pitch and yaw dynamics have been modified to use NACA derivatives.

The outside view has been modified.

The F-16 flight model has been modified to be more well behaved; lateral 
and longitudinal motion damping coefficients have been increased.


The Graphics
------------

The graphics have been re-vamped to be much faster on color workstations.
Monochrome graphics are slower.

Object clipping has been improved in the V library to improve rendering
performance.


The Guts of ACM
---------------

ACM now participates in the X11 WM_CLOSEDOWN and WM_DELETE_WINDOW protocols.

The directory structure has been modified to get the object description
files out of the source directory.  Object files now all have a '.obj'
extension.  The 'make install' target has been improved.

Aircraft descriptions are now defined in the file "objects/inventory".

Terrain layout is now described using a "scene" file.  Acms accepts a
"-s scene-file-name" command line option. The file "default-scene" describes
the default layout.

A periodic alarm facility has been added in the guts of ACM.  See alarm.[hc]
for details.  An example of its use can be found in navaid.c; it is used
to periodically update DME readouts on all aircraft.  It is designed to be
compatible with variants of ACM that modify deltaT on the fly.

The radar display has been modified to be more closely coupled to the V
library.  This code was borrowed from the ACM 4.0 version.

If no geometry specification is supplied, the ACM server now computes a
reasonable window geometry based on the screen's width.

Keypad view selection has been added for Sun systems with some help from
Keith Fredericks (keith@cray.com).



What's different with revision 2.4:
-----------------------------------

Missiles now use a more realistic target tracking method, known as proportional
navigation guidance.

Sustained aircraft load factors at high speeds are now limited to a range of
about +10.0 to -4.0 gees.

More math portability problems have been worked-around.  src/manifest.h
contains the definition NEEDS_COPYSIGN.  You may comment this out if your
system supports the IEEE copysign function.

This revision has been tested with X11R5.


What's different with revision 2.3:
-----------------------------------

This revision repairs several portability problems uncovered in revision 2.2.

A problem with IEEE math in interpolate.c has been worked-around.  Invalid
interpolation requests (which shouldn't happen in ACM) will now result in
messages being printed to standard error.

Several debugging code fragments are now only conditionally compiled. See
manifest.h for more information.

A problem controlling aircraft resupply could generate unexpected errors
from a system's sqrt function ("sqrt: domain error", for example). It has been
fixed.


What's different with revision 2.2:
-----------------------------------

Explosions now appear in the skies of ACM.  Explosions will appear when an
aircraft is struck by a missile or cannon shell.  Players go out with a
bang, too.

The flight simulation model has been tweaked to allow for spins.  I don't
think you can really spin an F-16, but if you'd like to try it in ACM, do
this: build up some airspeed in level flight and then go vertical (pitch
up to ninety degrees, or thereabouts).  Cut the throttle and afterburner
and keep the nose pointed vertically.  Eventually, the F-16 will begin to
fall back to earth -- and typically enter a spin.  The only recovery 
procedure that I've tried that works is to apply full forward (down)
elevator to break the stall; then re-apply power.

Elevator trim has been added.  The (J) key sets to the elevator trim to
be equal to the current elevator setting.  The (U) key resets it to the
normal takeoff setting.  Typically, you'll get the aircraft into the
pitch configuration that you want (e.g. level flight) and then press the
(J) key -- then move the elevator control to the neutral position
(the center of the HUD).

Aircraft now have functioning landing gear.  The (G) key acts as the landing
gear handle.  A landing gear handle and status lights are located to the right
of the radar set.

Each aircraft now carries a limited number of air-to-air missiles (eight, to
be precise). 

Aircraft can now be re-armed and re-fueled on the ground.
To do this, a player must land successfully at the team's home airfield
and come to a complete stop.  After an interval of not greater than 30
seconds, the aircraft will be completely re-armed and refueled.  Aircraft
damage is repaired, as well.

Acm's reaction to the resizing of its window has been improved substantially.

The code handling the HUD altitude, airspeed, and heading ladders has been
improved.

A problem with acms dumping core when it cannot access the graphics
description files has been fixed.  Thanks go to Mark Moraes.

Acm now makes an effort to select an appropriate X Visual to run in.  These
changes are based on code supplied by Mark Hall.

A problem with unwanted NoExpose events on monochrome displays was fixed
by Georges Lauri.

Acm's usage of the X DISPLAY environment variable has been improved with the
help of some code from Michael Pall.  Now systems where the ACM server is
running on the same system as the X server can get "unix:*" and "local:*"
connections.


GENERAL NOTES
-------------

This software is divided into three major parts: the 3-D graphics routines,
the DIS library and the flight simulator itself.  The 3-D stuff is contained
in the V directory.  V/lib holds the library itself.  V/test contains a 
program that can be used to test your port of the V library. The dis
directory holds the Distributed Interactive Simulation library.

`src' contains the remainder of the flight simulator.

Comments and suggestions to improve this software are welcome.

Several "features" in this revision of the software:

	* flaps and landing gear can be lowered at rediculously high speeds.

	* you can fly through mountains.

	* engines do not flame-out.

README: patchlevel-4.8
