ACM Flight Simulator, revision 4.6 What is ACM? ------------ ACM is a LAN-oriented, multiplayer aerial combat simulation. My 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. Players engage in air to air combat against one another using heat seeking missiles and cannons. ACM is implemented as two programs. The first, named "acm", is a small program that, when invoked, starts a flight session on a given workstation. The second component, named "acms", is a server process that manages the multiplayer environment. It also manages the flight simulation and display management that is required. Most players will prefer to run the acms process on a back-end server system on their local area network. Players at client workstations can then invoke the acm program to begin play. Riley Rainey (rainey@netcom.com OR riley@atria.com) Dallas, Texas November 20, 1994 Building ACM: ------------- ACM has been reworked to be built with the help of `configure'. 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 ODD FLIGHT BEHAVIOR (AND CORE DUMPS): On slower or heavily loaded systems, you may experience odd accelerations (say, to Mach 6 or more) or other strange behavior (such as uncontrollable "porpoising"). Acms may even dump core in this situation. To avoid this, you can recompile ACM without the "real-time deltaT" extensions and avoid the problem: $ REAL_DELTA_T=no; export REAL_DELTA_T $ ./configure $ make clean $ make IMPORTANT NOTE REGARDING IMAKE: Imakefiles have been kept for historical reasons. xmkmf should be used only As a last resort in the case that `configure' fails to work properly. 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 6200 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: ----------------------------------- This is essentially a patch release for 4.3. 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. Two chase-plane view methods have been added. The 'N' key now displays a very primitive chase plane view. Tetsuji Rai (tetsuji@rai.juice.or.jp or 74610.1537@compuserve.com) has added a much more sophisticated version that has been enhanced by the author. You can start a separate chase plane window by entering this command: % acm -chase The player-id's for all active ACM players can be retrieved using: % acm -list The keypad controls the aspect of the view: (2) front, (8) rear, (4) right, (6) left. To remember these, simply imagine wanting to look that direction and see the chased aircraft. The (J) key moves you closer to the aircraft, (K) moves you farther away. You can always chase a plane that is owned by you. You can only chase others when the acms server is started with the "-c" flag: % acms -c & 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. Two experimental navaids have been programmed in: A VOR/DME facility located southeast of the team 1's airport(109.0 MHz). An ILS system for runway 17 at team 1's airport (110.0 MHz). The runway heading is 172 degrees. 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 two major parts: the 3-D graphics routines 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. `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.5