Strike Eagle Eye

Reference Manual

David O'Shea

Version 0.0038

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in Section IV, “GNU Free Documentation License”.

The copyright holder provides this document and any accompanying files as is without warranty of any kind. Any use of the information in this document or any accompanying files is at the user's own risk and to the extent permissible by law the copyright holder disclaims liability for any damage arising out of such use.

MicroProse is a U.S. registered trademark of and F-15 Strike Eagle III is a trademark of Infogrames Entertainment SA.

This product is not endorsed by or affiliated with Infogrames Entertainment SA.


Table of Contents

Introduction
1. Concepts
I. Co-ordinates
II. Objects
Attacking the Player
2. F-15 Strike Eagle III File Formats
I. World (.WLD) File
Co-ordinates
Level 0 (topmost) tile
Level 1 tile set
Level 2 tile set
Level 3 tile set
Object placement information
VGA palette
II. Enemy (.NMY) File
III. Theater Data (.DAT) File
Enemy/Home Plate Data
Unknown 1
Object Names
Object and Sub-Object Data
Model Downscaling Factors
Model Level of Detail Distances
Level 1 Tile Lights Flags
TSD Palette
Model Palette
Enemy Aircraft Types
Latitude/Longitude Conversion Data
IV. Range (.RNG) File
V. Available Missions (.MIS) and Selected Missions (MISSIONS.F15) Files
VI. Campaign (.CMP and .EXP) Files
Campaign Data (.CMP) File
Campaign Destroyed Targets (.EXP) File
VII. Reconnaissance Video (BRFPIC.F15) File
VIII. Audio Waveform (.8 and F153.BIN) Files
IX. FIXME (RAP.EXE) File
X. Simulation Engine (F15.EXE) File
Main .3DX File Names
Stores .3DX File Names
Weapon Data
Aircraft Data
XI. 3D Model (.3DX) Files
File Header
Model Data
File Terminator Record
Mountain 3D Model (??MTNS.3DX) Files
3. Appendices
I. F-15 Strike Eagle III Versions
Comparison of playable demo and version 4108.01
Comparison of versions 4108.01 and 4108.03
II. F-15 Strike Eagle III Known Issues
Game hangs when flying near to the carrier group or the battleship group
Campaign destroyed targets are overwritten
III. Game Data File Statistics
IV. GNU Free Documentation License
Glossary
References
Index

List of Tables

2.1. World (.WLD) File Format
2.2. Object List Entry Format
2.3. Theater Data (.DAT) File Format
2.4. Theater Data Enemy/Home Plate Header Format
2.5. Theater Data Enemy/Home Plate Record Indices
2.6. Theater Data Enemy/Home Plate Record Format
2.7. Enemy SAM and/or Radar Types
2.8. Home Plate Type
2.9. Assignment of Object Names in DS0.DAT to Models and Sub-Models
2.10. Object and Sub-Object Data Record Format
2.11. Model Palette Entry Interpretation
2.12. Latitude/Longitude Conversion Data Format
2.13. Range (.RNG) File Format
2.14. Bitmap Z Co-ordinate Record Format
2.15. Available Missions (.MIS) File Format
2.16. Selected Missions (MISSIONS.F15) File Format
2.17. Mission Record Format
2.18. Mission Target Record Format
2.19. Mission Weapon Type
2.20. Campaign Destroyed Targets (.EXP) File Format
2.21. Campaign Destroyed Target Record Format
2.22. RAP.EXE File Format
2.23. F15.EXE File Format
2.24. Main .3DX File Indices and Names
2.25. Weapon Record Format
2.26. Aircraft Record Format
2.27. Aircraft Radar Types
2.28. .3DX File Header Format
2.29. Model Data Header Format
2.30. Element count and rendering sequence tree presence flag decoding
2.31. Element Normal Vector Record Format
2.32. Element Rendering Sequence Tree Node Record Format
2.33. Vertex Co-ordinates Record Format
2.34. Sub-Element Appearance First Byte Value
2.35. Model Indices in Mountain 3D Model ( ??MTNS.3DX) Files
3.1. The released versions of of F-15 Strike Eagle III, least to most recent
3.2. File differences between playable demo and version 4108.01
3.3. Theater Statistics

Introduction

This document describes Strike Eagle Eye™, a set of open-source tools for the computer game F-15 Strike Eagle III™ developed and published by MicroProse®. Initially, this document will only cover the file formats used by the game, but over time a description of some of the internal data stored in memory by the game will be added, followed by information on the open-source tools developed to interface with the game and its files.

Warning:

The information in this document is a work in progress. It is possible that the information in this document only applies to certain versions or releases of the game, certain configurations of those versions or releases or different hardware or software platforms. It is possible that attempting to use this information with other versions or releases of the game, other configurations or other hardware or software platforms will result in damage to the game or your computer, so use this information at your own risk.

About this document

The latest release version of this document is always available at the Strike Eagle Eye website. The website also provides a link to the Strike Eagle Eye project page on SourceForge which provides details of the Subversion repository used to configure this document and accepts bug reports regarding this document.

This document was created in DocBook XML format using the Visual Editor for XML (Vex) plugin for the Eclipse Platform and then transformed into HTML for publishing on the World Wide Web using The SAXON XSLT Processor from Michael Kay and the DocBook XSL stylesheets. The transformation was directed by Apache Ant.

The following free open-source software was used to gather the information contained in this document: Bed binary editor, bochs PC emulator, DOSBox, Eigen C++ template library for linear algebra, GIMP - The GNU Image Manipulation Program, GNU Emacs, HT Editor hex editor, The Mesa 3D Graphics Library, MinGW - Minimalist GNU for Windows - and MSYS, the Python programming language, SDL - Simple DirectMedia Layer, VBinDiff - Visual Binary Diff.

Chapter 1. Concepts

I. Co-ordinates

The following co-ordinate system is used in this document, with the axes assigned based on the order that co-ordinates are stored in the data files:

  • the X axis is the east-west axis, with greater X co-ordinate values being further east;

  • the Y axis is the vertical axis, with greater Y co-ordinate values being at higher altitudes; and

  • the Z axis is the north-south axis, with greater Z co-ordinate values being further south.

In many of the game's data files, 2D coordinates are used, with no Y co-ordinate value specified.

II. Objects

An object consists of a 3D model which can appear at any number of locations on the ground, plus associated attributes and behaviour. The model may appear flat, or consist of a number of visually separate 3D parts, such as a number of unconnected buildings, but still consists of a single 3D model[1].

Examples of objects include air traffic control towers, patrol boats, oil rigs, SAM radar sites and camels.

There may be multiple instances of each object in the world, each of which:

Each object:

When an object visually consists of separate parts, those parts may be sub-objects which have their own names and which may be destroyed separately; the section called “Object and Sub-Object Data” describes how sub-objects are associated with objects. When the player destroys an object (or part of it if it has sub-objects), the same 3D model is still displayed at the same location, but some parts of the model may be rendered differently to simulate damage (see the section called “Condition Prefix Sub-Element” ).

Attacking the Player

Whilst objects can be attacked by the user, objects other than AAA guns are passive and do not attack the user or paint them using radar.

As described in the section called “Enemy/Home Plate Data”, the locations at which TEWS radar threats appear, and from which SAMs are launched, are specified in terms of coordinates within specific tiles in the Level 1 tile set. Typically, these will be set so that the location within a level 1 tile at which threats appear and SAMs are launched coincides with the location of a SAM object as specified in the section called “Object placement information”, but the SAM behaviour is not actually associated with a particular object in the data files, and it would be possible for there to be no object at the location specified in the section called “Enemy/Home Plate Data”.

In the case of AAA, placement of an AAA gun object (with the correct flag set as described in the section called “Object and Sub-Object Data”) is all that is required for AAA to be automatically be fired from the gun when the player is flying nearby. In order to cause an AAA-related radar to appear in the TEWS, the same scheme as described above is required (i.e. see the section called “Enemy/Home Plate Data” ).



[1] Presumably due to limitations on 3D model sizes, battleships consist of two separate models, one for the superstructure and one for the rest of the ship, but technically these are two separate objects, "Battleship" and "BB Top".

Chapter 2. F-15 Strike Eagle III File Formats

I. World (.WLD) File

A world file contains the following information about a theater of war:

  • a square bitmap for the surface of the earth in the theater, with each edge measuring one mebipixel (i.e. 10242) for a total area of one tebipixel (i.e. 10244), but utilising hierarchical levels of heavily repeated patterns to consume only 144 kibibytes on disk;

  • ground placement information for Objects ; and

  • the VGA palette used for the bitmap plus all other video output by the game while the world is visible on the screen (i.e. while in the cockpit).

The game ships with three world files, DS0.WLD, KO0.WLD and PA0.WLD. Each time a mission is created for a theater (FIXME:xref), a modified version of the .WLD file without the 0 (e.g. DS.WLD) is created[2]. In these modified versions of the world files, some enemy units are moved, for example SAM sites can appear and disappear (FIXME: or are they moved? does the unit count always stay the same?) and naval units move.

Table 2.1. World (.WLD) File Format

Offset (bytes)Length (bytes)Description
0x00x10000Level 0 (topmost) tile (256 * 256 * 1 byte)
0x100000x6000Level 2 tile set (96 tiles of size 16 * 16 * 1 byte)
0x160000x6000Level 1 tile set (96 tiles of size 16 * 16 * 1 byte)
0x1C0000x8000Level 3 tile set (128 tiles of size 16 * 16 * 1 byte)
0x240000x2400Object placement information (96 lists of 16 objects with 6 bytes per object)
0x264000x300VGA palette (256 entries with 3 bytes per entry)
0x26700 End-of-file

Co-ordinates

All tiles used in the world bitmap are two-dimensional row-major arrays of bytes. The arrays use a natural layout with the row index forming the Z co-ordinate and the column index forming the X co-ordinate. The axes are defined in Section I, “Co-ordinates”; note that Y co-ordinates are not referenced in this file.

Level 0 (topmost) tile

As there are a number of levels, each containing multiple tiles, it is useful to consider this top level of the bitmap to be a single tile, although it is never repeated. This tile is a 256 * 256 array of bytes with values less than 96, with each byte being an index into the level 1 tile set. The byte also forms an index for the Object placement information.

In the theaters supplied with the game, it can often be observed that a large number of bytes in this level 0 tile have the same value. This is because a large portion of these theaters is water or desert, and of this, a large portion will probably never be flown over by the player due to the relatively large size of the theater compared to the area in which missions take place.

In the Korea theater, it is observed that it is not possible to fly or slew into the four northern rows, the six southern rows, the two western columns or the four eastern columns of this tile. When the aircraft is near one of these edges, at certain zoom levels, it is possible to see wrapping in the TSD (moving map), for example when the aircraft is as far north as possible, the top row of pixels in the TSD is from the southernmost part of the world.

Level 1 tile set

Note:

As shown in Table 2.1, “World (.WLD) File Format”, this tile set follows the level 2 tile set in the file.

This contains a set of 96 tiles, each of which is a 16 * 16 array of bytes with values less than 96, with each byte being an index into the level 2 tile set. The index of the tile within this tile set also forms an index for the Object placement information - objects are placed on the surface of the earth based on which of the level 1 tiles covers that portion of the earth - and the FIXME:reference(data and mission) files also refer to these indices.

In the theaters supplied with the game, the level 1 tiles can generally be grouped into the following categories:

  • open ocean and plain ground in various patterns;

  • coastlines running east-west, north-south, diagonally and with various corners and bays;

  • ground with creeks and rivers running east-west, north-south and with various curves and forks;

  • ground with roads running east-west, north-south, diagonally and with various corners and intersections;

  • ground with a road intersecting with a creek or river where the object placement information would cause a bridge object to appear at the intersection;

  • ground with roads for interconnection within a SAM site where the object placement information would cause a SAM radar and launchers to appear at appropriate locations;

  • ground with many roads and a dark gray appearance simulating a town or city where the object placement information would cause buildings and possibly SAM/ AAA defences to appear;

  • ground with a runway and taxiways and perhaps roads and/or part of a town or city where the object placement information would cause a control tower and hangars to appear at appropriate locations, possibly along with other buildings and SAM/ AAA defences; and

  • ground with or without a road where the object placement information would cause tents or tanks to appear to simulate infantry or amour concentrations.

These tiles are placed adjacent to each other in the level 0 tile such that coastlines, creeks, rivers, roads, etc. are aligned properly.

In the game, if a TSD is zoomed out as far as possible and then zoomed in three times, the slew keys will move the length or width of a level 1 tile with each step. When zoomed in as far as possible, it requires 16 slew steps to move the length or width of a level 1 tile.

Level 2 tile set

This contains a set of 96 tiles, each of which is a 16 * 16 array of bytes with values less than 128, with each byte being an index into the level 3 tile set.

In the theaters supplied with the game, the level 2 tiles are often smaller versions of the level 1 tiles and are repeated to generate the level 1 tiles. For example, a level 2 tile may contain a short section of road and be repeated in a level 1 tile to form a longer stretch of road.

Level 3 tile set

This contains a set of 128 tiles, each of which is a 16 * 16 array of bytes with any valid byte value (i.e. values less than 256), with each byte being a VGA palette entry index that is written into video RAM by the game.

In the theaters supplied with the game, the level 3 tiles are often solid colours, stippled colours giving a textured effect, or geometrical shapes - generally diagonally-split tiles with one colour in one half and one in another used to form diagonal roads or coastlines.

In the Korea theater, it is observed that not all of the level 3 tiles are referenced by the level 2 tiles (FIXME: verify that all the higher-level tiles are referenced since we are inferring that with this statement).

Not all of the palette entries should be referenced by the the level 3 tiles, and some palette entries appear to be treated specially. In the Korea theater for example, it has been noted that when a level 3 tile contains the byte 0x10, which corresponds to a dark red colour in the palette, the value used on-screen as seen in a screen shot is actually 0x7F, which corresponds to a medium green colour in the palette. It appears that other palette entries are also treated in this way.

Object placement information

This forms an array of 96 object lists, indexed by the index into the level 1 tile set, specifying the Objects to be placed on the earth's surface in the area covered by any level 1 tile with the given index. Each object list consists of 16 object specifiers, so each level 1 tile can have up to 16 3D objects in it, although some 3D objects may be compound objects with sub-parts. Each entry in the object list is 6 bytes long and is of the following format:

Table 2.2. Object List Entry Format

Offset (bytes)Length (bytes)Description
0x00x2Object index (see Section II, “Objects” ); set to 0xFFFF if this object list entry should be ignored
0x20x2X co-ordinate at which the object should be placed
0x40x2Z co-ordinate at which the object should be placed

All values in the entry are little-endian . If the user attacks and destroys the object, the

[Friendly] object name destroyed by weapon name

message is shown using the name of the object whose index is specified here, regardless of what terms were used in any mission objective, although (FIXME: see .MIS file - if tile and index into object list are right it will say "PRIMARY ACHIEVED" just before the message about the destruction or something like that). Co-ordinates are world co-ordinates relative to the level 1 tile in which the object is being placed. This means that they reference a square grid with each dimension being 16 * 16 * 16 = 4096, so the four-most significant bits are normally 0, the next four are tile co-ordinates within the level 1 tile, the next four are the tile co-ordinates within the level 2 tile and the four least-significant bits are the tile co-ordinates within the level 3 tile. In some cases, the four most-significant bits are non-zero. An object can be placed on the eastern or southern edge of the tile by setting the relevant co-ordinate to 0x1000 (4096). A co-ordinate or co-ordinates greater than 0x1000 may be used to cause an object to appear within the area covered by a level 1 tile to the east and/or south of the tile to which the object list applies (FIXME: does game use 0x1000 or more in any base maps?), but note that when the player attacks the object, the object appears to not receive splash damage from bombs landing in level 1 tiles that are not adjacent to the tile whose object list the object is specified in. For example, given a level 1 tile whose tile co-ordinates in the level 0 tile are (0, 0), if the co-ordinates for an object in that tile's object list are (0x2000, 0), i.e. the object lies on the boundary between the level 1 tiles whose level 0 tile co-ordinates are (0, 1) and (0, 2), then if the player attempts to bomb the object and the bomb lands in level 1 tile (0, 1), the object may be destroyed, but if the bomb lands in level 1 tile (0, 2), it will not be destroyed. It is still possible to destroy an object with a co-ordinate slightly greater than 0x2000, e.g. 0x2010, but since it requires the user to not bomb the object directly but instead bomb the edge of the adjacent tile, the user is likely to have difficulty in destroying the object, as they would for a value less than but approaching 0x2000, so the co-ordinate should probably not approach 0x2000 if in fact there is good reason to use a co-ordinate greater than 0x1000. For co-ordinate values significantly larger than 0x2000, e.g. 0x3100, the object begins to exhibit strange effects such as not being visible from all angles.

VGA palette

This is a standard VGA palette with entries for 256 colours, with each 3-byte entry consisting of red, green and blue components in that order, and each component being a byte in the range 0 (minimum intensity) through 63 (maximum intensity) inclusive[3].

As noted in the section called “Level 3 tile set”, some palette entries cannot be referenced by the level 3 tiles. Some palette entries are used for the interior and exterior of the aircraft. It is expected that there would be two palette entries, one used for the aircraft's exhaust that would be a light blue colour and one used for the aircraft's tracers, missile exhausts and burning objects which would be red/orange/yellow, and that each of these palette entries would be cycled rapidly by the game to give a flame-like effect. It is likely that none of these palette entries may be referenced by the level 3 tiles.

II. Enemy (.NMY) File

The enemy file is a square bitmap covering the surface of the earth in the theater indicating which parts of the theater are controlled by the enemy. When the user destroys an object, this bitmap is used to determine whether the object is considered "Friendly" or not. This bitmap also determines which of the level 1 tile indices specified in (FIXME: reference .DAT file's enemy SAM/airbase information - specifically assume that this file is used to determine which tile indices referenced in ??0.DAT should be randomly selected from when generating ??.DAT) should "attack" the user (via radar "spikes", launching SAMs or launching aircraft from a runway) and which of the AAA guns specified in the Object placement information for the applicable level 1 tiles should fire on the user; the non-enemy SAM/AAA/airbases are completely passive.

This file is 512 bytes long and can be viewed as a 64 * 64 row-major array of bits covering the theater such that one bit in the array corresponds to a 4 * 4 block of level 1 tiles in the level 0 tile. Each row consists of 8 bytes, for a total of 64 bits, where the most-significant bit of the first byte has index 0 and the least-significant bit of the last byte has index 63. The file consists of 64 such rows, with the first having index 0 and the last having index 63. (FIXME: reference co-ordinates section which says X co-ordinate increases to the east, etc.)

A bit in the array is set to zero if the corresponding 4 * 4 block of level 1 tiles in the level 0 tile is enemy-controlled, and set to one if the block is friendly.

III. Theater Data (.DAT) File

This file contains various information about the theater. As for the .WLD file (see Section I, “World (.WLD) File”), the game ships with three of these files, DS0.DAT, KO0.DAT and PA0.DAT, and each time a mission is created for a theater, a modified version of the file without the 0 (e.g. DS.DAT) is created. However, in the case of the .DAT file, there is some difference in the format of the data in the ??0.DAT and ??.DAT files. This difference applies only to the enemy/home plate data and is described in the section called “Co-ordinates and Tile Indices in Enemy/Home Plate Records”. It appears that it is only in this section that the ??0.DAT and ??.DAT files differ.

Table 2.3. Theater Data (.DAT) File Format

Length (bytes)Description
6 + 10 * nSee the section called “Enemy/Home Plate Data”
2 + 38 * (m + 2)See the section called “Unknown 1”
variableSee the section called “Object Names”
2Number of objects (equal to the sum of the numbers of models in ??.3DX and ??MOB.3DX)
2Number of sub-objects (equal to the number of object names minus the number of objects)
12 * (number_of_objects + number_of_sub_objects)See the section called “Object and Sub-Object Data”
number_of_objectsSee the section called “Model Downscaling Factors”
2 * number_of_objectsSee the section called “Model Level of Detail Distances”
96See the section called “Level 1 Tile Lights Flags”
256See the section called “TSD Palette”
56Unknown 3
512See the section called “Model Palette”
2 + 2 * kSee the section called “Enemy Aircraft Types”
2Unknown 5
10See the section called “Latitude/Longitude Conversion Data”

Enemy/Home Plate Data

The enemy/home plate data specifies the locations of:

  • enemy SAM and/or radar sites;

  • enemy airbases; and

  • (friendly) home plates.

This data begins at offset 0x0 in the file and consists of a header whose format is described in Table 2.4, “Theater Data Enemy/Home Plate Header Format” followed by a list of records whose format is described in Table 2.6, “Theater Data Enemy/Home Plate Record Format” . The header defines the number of records in the list and, as shown in Table 2.5, “Theater Data Enemy/Home Plate Record Indices” , also divides the list into a number of distinct, contiguous groups based on their indices.

Table 2.4. Theater Data Enemy/Home Plate Header Format

Offset (bytes)Length (bytes)Description
0x00x2nRecords, the number of enemy/home plate records following this header
0x20x2firstEnemyAirbase, the index of the first record corresponding to an enemy airbase
0x40x2firstHomePlate, the index of the first record corresponding to a home plate

Table 2.5. Theater Data Enemy/Home Plate Record Indices

First indexLast indexCo-ordinates relative to level 1 tile in ??0.DAT[a]Description
02n/aall fields in these records are set to 0
2firstEnemyAirbase - 1yesenemy SAM and/or radar sites
firstEnemyAirbasefirstHomePlate - 1yesenemy airbases
firstHomePlatenRecords - 1nohome plates

Note:

Through testing, it has been determined that the game (at least in version 4108.01) supports the case where firstEnemyAirbase is equal to firstHomePlate , i.e. where there are no enemy airbase records. This is supported in both of the following cases:

  • where there are one or more enemy airbase records in the ??0.DAT file, but the referenced tile indices are designated as friendly in the ??.NMY file, in which case the game determines that there are no enemy airbases and writes no records for these to the ??.DAT file; and

  • where there are no enemy airbase records in the ??0.DAT file and hence the game writes none to the ??.DAT file.

Table 2.6. Theater Data Enemy/Home Plate Record Format

Offset (bytes)Length (bytes)Description
0x00x2X co-ordinate (see the section called “Co-ordinates and Tile Indices in Enemy/Home Plate Records” )
0x20x2Z co-ordinate (as above)
0x40x2SAM and/or radar type (see Table 2.7, “Enemy SAM and/or Radar Types”), set to 0 for records not corresponding to a SAM and/or radar site
0x60x1set to 0 if this record corresponds to a SAM and/or radar site, 1 for a friendly/enemy airbase/home plate
0x70x1home plate type (FIXME describe), set to 0 for records not corresponding to a home plate
0x80x1for SAM and/or radar and enemy airbase records when they appear in the ??0.DAT file, non-zero tile index in level 1 tile set to which this record applies, otherwise set to 0
0x90x1padding byte always set to 0

Table 2.7. Enemy SAM and/or Radar Types

ValueTEWS radar indicator[a]SAM type launchedNotes
0x0n/an/athis value indicates no SAM and/or radar
0x19noneGCI radar
0x29noneGCI radar
0x31SA-2 
0x41SA-3not used [b]
0x52SA-5 
0x62Hawk 
0x73SA-6 
0x84SA-8B 
0x98SA-14 
0xA4SKYGRD 
0xB4ROLAND 
0xCnoneSA-7 
0xDnoneSA-13 
0xE8nonenot used [b]

[a] The number shown within a box in the authentic mode TEWS display to indicate the radar type.

[b] These values are not used in any of the ??0.DAT files distributed with version 4108.01 of the game or the DS.DAT file distributed with the version 4108.03 patch.


Co-ordinates and Tile Indices in Enemy/Home Plate Records

The enemy/home plate record may specify the location(s) that it refers to in one of two ways:

  1. specifying a set of locations by specifying a non-zero level 1 tile index and world co-ordinates relative to the level 1 tile; or

  2. specifying a single location by specifying the home plate co-ordinates of the location (with the level 1 tile index set to 0).

The first scheme is used for enemy SAM and/or radar and enemy airbase records in ??0.DAT . The second scheme is used for home plate records in ??0.DAT and for all record types in ??.DAT .

Note:

When the first method is used in the ??0.DAT file, it has not yet been determined whether the game uses all enemy (see Section II, “Enemy (.NMY) File”) level 1 tiles with the given index when generating the records in the ??.DAT file. It can been seen however that the number of enemy/home plate records in the ??.DAT file is much greater than that in the ??0.DAT file.

Home Plates

A home plate may be either an airbase or a tanker track. The game selects one home plate as the starting point and intended finishing point for the mission; the player can choose to land at an alternate airbase at the end of the mission.

At the start of the mission, the aircraft is always heading north, so all runways are oriented north-south and the KC-10 tankers are always heading north.

The co-ordinates in a home plate record appear to specify the middle of the runway or, in the case of a tanker track, the exact location of the KC-10 tanker - this is the location of the home plate marker in the TSD. However, the actual location of the aircraft at the start of the mission is approximately two minutes of latitude south of this position, which corresponds to the southern end of the runway or, in the case of a tanker track, a position behind the KC-10 tanker.

Airbases are further divided into two types, those with one runway where type 0x04 is used and those with two where type 0x0C is used. In the latter case, the home plate co-ordinates should specify the eastern runway; the game will have two F-15s performing touch-and-go landings on the western runway. It is assumed that the distance between the two runways is somehow set on a per-theater basis as in the Korean theater, where type 0x0C is not used in the KO0.DAT file shipped with the game, the F-15s appear to use the runway that the home plate is on instead of a (non-existent) runway to the west. The two F-15s do not appear immediately after the start of the mission. When they first appear, they are quite close together and their first landing is aligned well with the runway, but on subsequent landings the distance between the planes increases and their touchdowns are unrealistic and close to the sides of the runway.

The home plate records are used by the game to determine where it is appropriate for the player to land the plane at the end of the mission; confusingly for the player, they cannot simply land on any runway in friendly territory as it is not the presence of a runway texture on the ground that allows them to land. When type 0x0C is used, the player is able to land on either of the two runways.

Home plate names as shown on the whiteboard in the briefing room appear to be stored in RAP.EXE. The home plate type does not affect the home plate's name - after changing a home plate from type 0x14 to 0x04 it is still shown as Tanker Track on the whiteboard - but the use of type 0x14 causes the home plate's name (whether it be an airbase name or Tanker Track) to be followed by two hyphens and a random callsign (which also appears to be taken from RAP.EXE).

Table 2.8. Home Plate Type

ValueDescription
0x00Indicates that a record is not a home plate record
0x04Airbase with one runway
0x0CAirbase with two runways
0x14Tanker track

Unknown 1

It is not known what the purpose of this section is. It appears to consist of a 16-bit count m , which is set to 11 in all ??0.DAT files supplied with the game, followed by ( m + 2) records of size 38 bytes, for a total of 2 + 38 * (11 + 2) = 496 bytes.

Note:

It has not been verified that the value 11 actually relates to the amount of data following, i.e. that changing this value results in a change in the file size expected by the game.

Object Names

This part of the file specifies the names of the various objects that can appear on the ground in the theater. These object names appear during a mission in messages of the form

[Friendly] object name destroyed by weapon name

and during the debrief in messages of the form Hit object name .

This data is formatted as a 2-byte unsigned integer n followed by n bytes of variable-length, NUL-terminated (ASCIIZ) strings.

Some objects in the game consist of a number of sub-objects which can be independently destroyed by the player. All objects and sub-objects have names specified in this list of names. However, as shown in the section called “Case Study”, at some times the game shows the name of the object whose sub-objects have been destroyed and at other times shows the names of individual sub-objects that have been destroyed.

Names are assigned sequentially to objects and sub-objects in the following order:

  • models in ??[M].3DX ordered by model index from least to greatest; then

  • as above for ??MOB[M].3DX; then

  • sub-models as identified by used conditional magic values (FIXME: xref) 0x92 to 0x99 in models in ??[M].3DX, grouped by model index from least to greatest and ordered within each grouping by conditional magic value from least to greatest; then

  • as above for ??MOB[M].3DX.

Note that all of the models in the ??[M].3DX and ??MOB[M].3DX files must be read in order to determine the number of sub-models in each model. For an example of the mapping from names to models and sub-models, see Table 2.9, “Assignment of Object Names in DS0.DAT to Models and Sub-Models” .

Table 2.9. Assignment of Object Names in DS0.DAT to Models and Sub-Models

Object name index ( 0-based)Assigned to
0 to 29 DS[M].3DX model indices 0 to 29
30 to 61 DSMOB[M].3DX model indices 0 to 31
62 to 65 DS[M].3DX model index 4 conditional magic values 0x92 to 0x95
66 to 69 DS[M].3DX model index 5 conditional magic values 0x92 to 0x95
70 to 73 DS[M].3DX model index 6 conditional magic values 0x92 to 0x95
74 to 76 DS[M].3DX model index 19 conditional magic values 0x92 to 0x94
77 to 80 DS[M].3DX model index 23 conditional magic values 0x92 to 0x95
81 to 88 DS[M].3DX model index 27 conditional magic values 0x92 to 0x99
89 to 91 DSMOB[M].3DX model index 4 conditional magic values 0x92 to 0x94
92 to 95 DSMOB[M].3DX model index 7 conditional magic values 0x92 to 0x95
96 to 99 DSMOB[M].3DX model index 13 conditional magic values 0x92 to 0x95
100 to 102 DSMOB[M].3DX model index 14 conditional magic values 0x92 to 0x94
103 to 104 DSMOB[M].3DX model index 16 conditional magic values 0x92 to 0x93
105 to 106 DSMOB[M].3DX model index 23 conditional magic values 0x92 to 0x93

Object and Sub-Object Data

This part of the file contains various data for each object and sub-object. It consists of an array of records with indices corresponding to the sequence of model names described above. The format of each record is described in Table 2.10, “Object and Sub-Object Data Record Format”.

Table 2.10. Object and Sub-Object Data Record Format

Offset (bytes)Length (bytes)Description
0x01Unknown flags[a]
0x11Unknown, may relate to the type of weapon required to destroy the object or sub-object
0x22Signed integer specifying the number of points the player receives for destroying the target, set to 0 for objects that have sub-objects
0x44Unknown, probably contains a number of separate bytes or words
0x82Signed X world co-ordinate relative to the model's origin of the centre of the object or sub-object; generally set to 0 for objects except those whose models are not centred on the origin, non-zero for most sub-objects
0xA2Signed Z world co-ordinate relative to the model's origin corresponding to the above

[a] This byte appears to contain flag bits. The following observations have been made in the DS0.DAT file:

  • the bit 0x01 is set for records corresponding to objects or sub-objects that are AAA guns, tanks, ZSU-23s, ZSU-57s or objects that contain one or more sub-objects of those types, e.g. it is set for City which contains four AAA Gun sub-objects, and setting this will cause any object to fire AAA at the player;

  • the bit 0x02 is set for records corresponding to naval vessels; and

  • the bit 0x80 is set:

    1. for a record corresponding to an object only if the object is one with sub-objects, in which case the byte at offset 0x1 gives the sub-object index of the first sub-object in the object, where 0 is the index of the first sub-object in the theater; and

    2. for a record corresponding to a sub-object only if the sub-object is the last sub-object in its parent object.


Note:

Co-ordinates are relative world co-ordinates, not model co-ordinates, and hence are not scaled by the model downscaling factor.

Model Downscaling Factors

This part of the file consists of an array of unsigned bytes, one for each object (sub-objects are not included as they do not have their own models). Each value is used to scale down the size of its corresponding ??[M].3DX or ??MOB[M].3DX model. All vertex co-ordinate values in a model in one of these files are divided by the model's downscaling factor to convert them into world co-ordinates. No downscaling factor in the original files supplied with the game is greater than 8. The value 0 is used in some cases where the corresponding model contains no vertices and hence no division by zero would actually be performed.

Model Level of Detail Distances

This part of the file consists of an array of 16-bit unsigned integers, one for each object (sub-objects are not included as they do not have their own models). The game determines whether a higher-detail ??[MOB].3DX model or a lower-detail ??[MOB]M.3DX model should be drawn by comparing the distance between the camera and the object to the threshold distance for the model as specified in this array.[4]

Note:

This distance is likely to be in world co-ordinates, but this has not yet been confirmed.

Level 1 Tile Lights Flags

This part of the file consists of an array of bytes, one for each level 1 tile, specifying whether or not the tile has world-level lights that are not associated with objects. These lights are specified in the ??LTSF.3DX file, which contains one model for each level 1 tile. A 1 value indicates that lights are provided for the corresponding tile, i.e. the corresponding model in the ??LTSF.3DX file has one or more vertices. A 0 value indicates that lights are not provided, i.e. the model has zero vertices.

TSD Palette

This part of the file provides a 256-entry palette mapping from the VGA palette indices specified in the level 3 tiles in the .WLD file (see the section called “Level 3 tile set”) to the VGA palette indices to be used in the TSD. The map shown in the TSD is generated from the .WLD tile data using LOD (FIXME: this document does not yet describe how LOD works for the .WLD file or even mention it in the .WLD file section) as for the ground texture and the resulting pixel values are then mapped using this palette onto VGA palette entries appropriate for use in the TSD.

In the files supplied with the game, it appears that entries corresponding to VGA palette indices that are not used by the level 3 tiles use an identity mapping, i.e. entry i has value i. Other entries map to a small number of VGA palette entries which the game does not modify the brightness of based on the time of day, unlike the VGA palette entries referenced by the level 3 tiles.

Model Palette

This part of the file provides a 256-entry palette specifying the colours/textures to be used when displaying models from any of the .3DX files used in the theater. Tracers from AAA guns are also affected by this palette, but tracers from the player's F-15 and enemy aircraft are not. Single-pixel dots used to represent aircraft and missiles at long distances from the viewer are also not affected by this palette. The colour values used in the sub-elements in the .3DX files are used to index into the array of palette entries. Each palette entry consists of 2 bytes as described in Table 2.11, “Model Palette Entry Interpretation” .

Table 2.11. Model Palette Entry Interpretation

Second byte valueColour or texture drawn [a]Use in supplied ??0.DAT files [a]
0xFAPartially transparent; in most cases, the value of a seems to have no effect, but for some values such as 81 and 153 it results in the cockpit glass appearing to be very dark gray with all shapes in the cockpit appearing dark greenFor entries 128 and 145 only, with a always set to 0
0xFBCompletely transparent; a appears to be ignored although all possible values for it have not been testedFor entry 10 only, with a always set to 0xFB as well
0xFCDithering of transparency and aIn the DS theater, colour index 28 which is used for the GCI radar antennae is a dithering of transparency and dark green (VGA palette index 175)
0xFD Transparent, with a used to adjust palette indices of other surfaces viewed through the surface as shown by the following test results where the value of a was set to one of the following values and the cockpit of the player's F-15 was observed:
  • 0: the cockpit glass is completely transparent

  • 2: the shapes in the cockpit are drawn using VGA palette index 62 instead of 60 and the sky texture visible through the cockpit glass appears to be drawn with VGA palette indices 2 greater than before as well

  • 4: the change in the sky is more obvious than with 2, but the shapes in the cockpit still use palette index 62 suggesting that the game is aware of the gradients in the palette and avoids changing the hue when using a to adjust palette indices

  • 64: the hue of the shapes in the cockpit is changed to brown, suggesting that the game only supports a particular range of values for a when attempting to avoid hue changes.

Not used
0xFESolid aNot used
0xFFSolid aApproximately 90% of entries are of this type
otherDithering of a and bFor entries 137 to 143 inclusive as referenced by ??MTNS.3DX in all theaters, although in the KO and PA theaters, most entries use equal values for a and b, causing a solid colour to appear instead of dithering

[a] a and b refer to the first and second bytes in the palette entry respectively.


F-15 cockpit showing use of unmodified palette entry with 0xFA for glass

F-15 cockpit showing use of modified palette entry with 0xFB for glass

GCI radar in DS theater showing use of palette entry with 0xFC

Special Palette Entries

Palette index 146 is handled specially by the game. This special handling occurs when this value is used as the colour for a sub-element in a .3DX file, but not when it appears in a palette entry in the .DAT file or is used in the level 3 tile set in a .WLD file. The contents of the corresponding palette entry are ignored by the game and the behaviour is instead as follows:

  1. When used in F15AIR3.3DX, PLANE1.3DX, PLANE2.3DX (i.e. all model files used for aircraft) and .3DX files for weapons and other stores (e.g. FUEL_RW.3DX), the game first draws the corresponding sub-element with VGA palette index 147 (bright red), then with 146 (dark red), then does not draw the element, draws it using palette index 146 again and then repeats the cycle, causing the sub-element to appear as a flashing red light. This .3DX file defines point sub-elements on the leading edges of both wings and on the tip of the starboard vertical stabiliser, causing flashing red lights to appear in these places on the player's F-15 when the player has turned on the running lights using Shift+L.

  2. When used in ??[MOB][M].3DX (i.e. all model files used for ground objects), the game behaves as for 1 except that the steps where VGA palette index 146 is used are removed, i.e. the sub-element alternates between bright red and not drawn, and the flashing is of a lower frequency.

  3. When used in ??MTNS.3DX, the game always draws the sub-element using VGA palette index 146, i.e. the element does not flash. Note however that the palette entry with index 146 is still ignored.

Enemy Aircraft Types

This part of the file consists of a 16-bit unsigned integer giving the number of different enemy aircraft types that will appear in the theater followed by a list of 16-bit unsigned integers giving the aircraft type indices. (FIXME: cross-reference aircraft type data in F15.EXE)

Latitude/Longitude Conversion Data

This part of the file specifies how the world co-ordinates used within the game are converted to latitudes and longitudes for presentation to the player in the briefing and the up-front controller.

Table 2.12. Latitude/Longitude Conversion Data Format

Offset (bytes)Length (bytes)Description
0x00x2lat0, the latitude in minutes corresponding to the northernmost part of the map (i.e. Z world co-ordinate 0 relative to the level 0 tile)
0x20x2long0, the longitude in minutes corresponding to the westernmost part of the map (i.e. X world co-ordinate 0 relative to the level 0 tile)
0x40x2latInWldCoord, the increase in Z world co-ordinate per minute increase in latitude
0x60x2longInWldCoord, the increase in X world co-ordinate per minute increase in longitude
0x80x1ASCII character prefix applied to latitudes, i.e. N or S[a]
0x90x1ASCII character prefix applied to longitudes, i.e. E or W

[a] S is not used in any of the theaters shipped with the game as they are all in the northern hemisphere.


Given world co-ordinates x and z, the latitude lat and longitude long in minutes can be calculated using the values specified in Table 2.12, “Latitude/Longitude Conversion Data Format” in this way:

lat = lat0 + z / latInWldCoord
long = long0 + x / longInWldCoord

Note that for theaters in the northern hemisphere, latInWldCoord will be negative since an increase in latitude corresponds to a more northerly location and hence a decrease in Z world co-ordinate. Similarly, theaters in the western hemisphere will have a negative longInWldCoord.



[4] If the player configures OptionsObject DetailLow, models from ??[MOB]M.3DX will always be used.

IV. Range (.RNG) File

The range file specifies, for each home plate, the area in the world from which targets can be selected when that home plate is used for a mission. Each area is specified in the form of a bitmap with a resolution of one level 1 tile. These bitmaps always have an X dimension of 256 level 1 tiles but have a variable Z dimension.

Table 2.13. Range (.RNG) File Format

Length (bytes)Description
2Number of home plates n
2 * nn records of the format described in Table 2.14, “Bitmap Z Co-ordinate Record Format”
32 - 2 * nPadding (all 0)
variableBitmap data

Note:

Although it appears that the size of the padding between the records and the bitmap data is calculated to ensure that there are 32 bytes between the home plate count and the first bitmap, it has not been verified that this is the case for values of n other than 8 or 9, i.e. other than those values that are used in the original game files.

Table 2.14. Bitmap Z Co-ordinate Record Format

Offset (bytes)Length (bytes)Description
0x01Z tile co-ordinate relative to the level 0 tile corresponding to the first row in the bitmap
0x11Z tile co-ordinate relative to the level 0 tile corresponding to the last row in the bitmap

Each bitmap can be viewed as a 256 * Z row-major array of bits. Each row consists of 32 bytes, for a total of 256 bits, where the most-significant bit of the first byte has index 0 and the least-significant bit of the last byte has index 255. A bit in the array is set to 1 if the corresponding level 1 tile is within range of the home plate or 0 if it is not. As expected, all tile co-ordinate rows in the level 0 tile that lie outside of the range of Z tile co-ordinates specified in the record are not considered to be within range of the home plate.

The level 1 tiles selected by the bitmaps in this file should correspond to those marked as enemy tiles in the .NMY file (see Section II, “Enemy (.NMY) File”), otherwise the game will select mission objectives which will be treated as friendly when destroyed by the player.

V. Available Missions (.MIS) and Selected Missions (MISSIONS.F15) Files

The available missions file lists the available missions for the theater. Each mission entry references a level 1 tile index to which the mission can apply, so if there is for example a SAM SITE mission, when generating the mission the game can select from one of many SAM sites in the theater.

The selected missions file lists the three missions selected for the user's current sortie plus additional information about the sortie.

Table 2.15. Available Missions (.MIS) File Format

Offset (bytes)Length (bytes)Description
0x00x2Number of missions n (little-endian, greater than 2)
0x20x9E * nn mission records (FIXME:xref)
0x2 + 0x9E * n0x9EEmpty mission (FIXME: what values does it have?)
0x2 + 0x9E * (n + 1) End-of-file

Table 2.16. Selected Missions (MISSIONS.F15) File Format

Offset (bytes)Length (bytes)Description
0x00x2Un-terminated ASCII string giving theater identifier, e.g. (FIXME: format) "KO"
0x20x4Unknown
0x60x2As for offset 0x0
0x8FIXME:?Unknown
0x640x2X home plate co-ordinate of the home plate (selected from the (FIXME: reference .dat file))
0x660x2Z home plate co-ordinate of the home plate
0x68FIXME:?Unknown
0x880xCFIXME: identical to bytes at 0x64 onwards?
FIXME:?FIXME:?Unknown
0xBE0x1DA3 mission records (FIXME: xref)

Table 2.17. Mission Record Format

Offset (bytes)Length (bytes)Description
0x00x1Level 1 tile index containing objective
0x10x1Mission Weapon Type
0x20x2FIXME: unknown
0x40x50Targeted objects (10 records of size 8 bytes and structure as defined in Table 2.18, “Mission Target Record Format”; last 2 records are never used but appear to be usable)
0x540x2FIXME: number of targeted objects that must be destroyed (assume this is a little endian value and not a byte followed by something else - it makes sense as 16-bit, value never more than 4, although values up to 10 work)
0x560x2Displayed X world co-ordinate relative to the level 1 tile containing the objective. This co-ordinate is used in all cases where the objective's location is made visible to the player, including specifying the point about which the reconnaissance video in the briefing rotates, the location of the designator in radar displays and the TSD and the distance to the sequence point shown in the up-front controller. In order to complete the objective, the player must destroy the previously-noted number of targeted objects from the list rather than destroy the specific object at these co-ordinates.
0x580x2FIXME: Z co-ordinate (as above)
0x5A0x1Always zero in .MIS file, X tile co-ordinate within the level 0 tile of the level 1 tile containing the objective in MISSIONS.F15
0x5B0x1Always zero in .MIS file, Z tile co-ordinate within the level 0 tile of the level 1 tile containing the objective in MISSIONS.F15
0x5C0x2FIXME: unknown, set to zero in .MIS file, non-zero in MISSIONS.F15
0x5E0x40ASCIIZ objective description shown in handwriting on the board in the briefing room, in a normal font when you click on the board, and in the up-front controller in the cockpit; typically all in uppercase (FIXME: can use lowercase?); hyphens may be used, typically padded with spaces after the NUL character
0x9E End-of-record

Table 2.18. Mission Target Record Format

Offset (bytes)Length (bytes)Description
0x00x1Index into the object list (see Object placement information) of the selected level 1 tile of an object that must be destroyed, where the first object list entry is given an index equal to 1
0x10x3Always 0
0x40x1FIXME: unknown, but non-zero if record is valid
0x50x1Always 0
0x60x1FIXME: unknown
0x70x1Always 0

If the level 1 tile index at offset 0x0 occurs many times in the level 0 tile, it will take the game some time to generate the user's mission - this will be observed as a delay entering the mission briefing room.

Table 2.19. Mission Weapon Type

ValueAir-to-Ground weapon selected by defaultUsed for[a]
0Harpoon, no AA missilesNot used
1Mk82 (500lb)Headquarters, port facilities
2Mk84 (2000lb)Hardened hangars, bunkers, C&C bunker, SHC tunnel, bio weapon plant, chemical plant, nuke plant, commo tower, bridge, power plant, ammo dump
3CBU-87 CEMSAM site, SAM radar, oil storage tanks, ZSU-23 site, ZSU-57 site, propane tanks, SCUD site, SA-5 site, GCI radar, truck depot, AAA guns, DPRK guard towers, infantry group, ammo dump
4RockeyeTank group
5HarpoonBio weapons ship, oil tanker, submarine, chem weapons ship, supply ship, DPRK supply ship, DPRK spy ship, missile boats, Najin gun boat
6DurandalRunway

[a] The information about the mission objectives that the weapon is used for is based on investigation of the missions available in the Korean theater.


VI. Campaign (.CMP and .EXP) Files

These files are only created by the game when a player starts a campaign. The base file name consists of the theater designator, e.g. DS, followed by the player's roster index in the range 0 to 7, so if the player with the right-most locker in the roster screen is playing a campaign in the Desert Storm theater, the file names DS7.CMP and DS7.EXP would be used.

Campaign Data (.CMP) File

This file is first created by the game when the player first enters the briefing room after selecting campaign mode.

Campaign Destroyed Targets (.EXP) File

This file records the objects that the player has destroyed during the campaign, whether or not they were mission objectives. At the end of each mission, the game updates this file to reflect the new targets destroyed during the mission. The number of records stored at offset 0x0 is incremented by the number of targets destroyed and, as documented in the section called “Campaign destroyed targets are overwritten”, the existing records at the start of the file are overwritten with the new data and new records with all fields set to 0 are added to the end of the file.

Table 2.20. Campaign Destroyed Targets (.EXP) File Format

Offset (bytes)Length (bytes)Description
0x00x2Number of records n
0x20x6 * nn records of format described in Table 2.21, “Campaign Destroyed Target Record Format”
0x2 + 0x6 * n End-of-file

Table 2.21. Campaign Destroyed Target Record Format

Offset (bytes)Length (bytes)Description
0x00x1X tile co-ordinate within the level 0 tile
0x10x1Z tile co-ordinate within the level 0 tile
0x20x20-based index into the object list for the level 1 tile referenced by the above co-ordinates
0x40x2Bit list indicating which sub-models of the object were destroyed or 0xFFFF if the object does not have any sub-models. In the case where this is a bit list, it is expected that the most significant 8 bits are all set to 0 as no model supplied with the game has more than 8 sub-models. Each bit number n (with 0 being the LSB) corresponds to the model's conditional magic (FIXME: xref to model information) with value 0x92 + n where the conditional should be set/true if and only if the bit is set to 1. If this field is set to 0xFFFF, the conditional magic with value 0x81 (if it exists) is used instead.

Case Study

In version 4108.03 of the game, during a campaign in the Desert Storm theater, the primary objective for a mission is AAA EMPLACMENTS (sic) N3449 E4517 . The primary objective information in MISSIONS.F15 reveals that:

  • the level 1 tile index containing the objective is 0x37;

  • the tile co-ordinates within the level 0 tile of the level 1 tile containing the objective are ( 0x95, 0x28);

  • only one mission target record has a 1-based index into the object list which is non-zero and this value is 6 (the last four, unknown bytes of the record are FF000200); and

  • the number of targeted objects that must be destroyed is 2.

It can be confirmed that the byte at offset 0x2895 in DS.WLD is equal to 0x37 . In the same file, the object placement information (see the section called “Object placement information” ) for level 1 tile index 0x37 contains the value 27 at index 5. In DS.DAT , the object description for object 27 is City . Model index 27 in DS.3DX has 8 buildings, 4 of which appear to have AAA guns on top of them. When set, conditional magic values (FIXME: xref) 0x92 to 0x99 each cause one of these buildings to appear destroyed, with the even-numbered values corresponding to the buildings with AAA guns on them. The object descriptions in DS.DAT for objects 81-88 appear to apply to these sub-models; these descriptions alternate between AAA Gun and Building .

When the primary objective is attacked using CBU-87 CEM, the following messages appear:

(WSO) City destroyed by CBU87
(WSO) PRIMARY MISSION ACHIEVED!

Inspection of the target area using reverse padlock ( F10 ) view reveals that not all of the buildings appear destroyed although due to the explosion animations it is very difficult to determine exactly how many are destroyed. In the debrief, Hit AAA Gun appears 4 times with no other Hit messages shown.

Inspection of the DS7.EXP file reveals that the number of records is increased by 1 compared to the state of the file prior to the mission, a new record consisting entirely of 0 s is appended to the file, and the first record in the file contains: [5]

  • tile co-ordinates within the level 0 tile ( 0x95, 0x28) which match the co-ordinates from MISSIONS.F15;

  • 0-based index into the object list for the level 1 tile equal to 5 which is consistent with the object list entry referenced in MISSIONS.F15;[6] and

  • bit list equal to 0x55, equal to 01010101 in binary where bits 0, 2, 4 and 6 are set, which is consistent with the even-numbered conditional magic values for the model corresponding to the buildings which appear to have AAA guns on them and is also consistent with the object descriptions in DS.DAT.

As a result of these values being recorded in the DSP7.EXP file, during the next mission these objects still appear destroyed (without the explosion animations) as shown below:

Destroyed AAA Guns in the City due to the .EXP file

For comparison, the following figure shows the City model with none of the buildings destroyed and with the conditional magic value for each building superimposed over the building:

City annotated with conditional magic numbers[7]



[5] the section called “Campaign destroyed targets are overwritten” covers the storage of new data in the first records of the file and the appending of records with all values set to 0.

[6] This value is offset by 1 from the value in MISSIONS.F15 due to the differing array index base.

[7] Image rendered by prototype .3DX file viewer.

VII. Reconnaissance Video (BRFPIC.F15) File

This file contains the animation shown on the monitor in the briefing room when the player is viewing the map in that room. This animation is played in a loop and alternately shows the primary and secondary objectives in black-and-white. The file is generated when the player first selects the map in the briefing room.

This file consists of two 16-frame animations, one animation for each objective, with no file header. Each frame is of size 4060 bytes: 70 pixels wide, 58 pixels high and 8 bits per pixel. The top-left pixel of each frame is drawn at screen location (3, 121) by the game. The palette used for display of the video differs from that used when the player is in the cockpit.

VIII. Audio Waveform (.8 and F153.BIN) Files

These files are 8kHz 8-bit mono raw PCM wave files with no header information. The .8 files are used in the title animation with one file for each spoken phrase. The F153.BIN file contains all the wave audio used in the game with phrases generated by playing back multiple clips from the file; a separate table containing the offset and length of each word/phrase/phrase part must be present in some other part of the game.

IX. FIXME (RAP.EXE) File

This executable program file appears to be the main executable program that implements the non-simulation part of the game, including the main screen, theater selection, the briefing room and the arming screen.

This file is compressed using FIXME. After decompression using FIXME, the following data can be found in it:

Table 2.22. RAP.EXE File Format

Offset by game version (bytes)Length (bytes)Description
4108.014108.03
FIXMEFIXMEvariableFIXME: add home plate names

X. Simulation Engine (F15.EXE) File

This executable program file appears to be the main executable program that implements the simulation part of the game, i.e. the part where the player is flying the plane.

This file is compressed using FIXME. After decompression using FIXME, the following data can be found in it:

Table 2.23. F15.EXE File Format

Offset by game version (bytes)Length (bytes)Description
4108.014108.03
0x05B44A0x0597CA92See the section called “Main .3DX File Names”
0x05B4A60x059826unknownunknown
0x05B72A0x059B88936See the section called “Weapon Data”
0x05BAD20x059F301200See the section called “Aircraft Data”
0x05BF820x05A3E0unknownunknown
0x05FB260x05DF84782See the section called “Stores .3DX File Names”
0x05FE340x05E292unknownunknown

Main .3DX File Names

This part of the file contains a list of variable-length, NUL-terminated (ASCIIZ) .3DX file names. Where xx occurs in these file names, it is replaced with the two-character code for the theater.

If the first file name is assigned index 1, the model file indices used in the section called “Weapon Data” and the section called “Aircraft Data” below (in the file supplied with the game, indices 5 through 7 are used) correspond to the names in this list and index 0 is used to indicate the absence of a model.

Table 2.24. Main .3DX File Indices and Names

IndexFile nameDescription of contentsDownscaling Factor(s)
1xx.3DXGround objectsSpecified per model in the .DAT file, see the section called “Model Downscaling Factors”
2xxMOB.3DXGround objects
3xxM.3DXLow-detail versions of the models in xx.3DX
4xxMOBM.3DXLow-detail versions of the models in xxMOB.3DX
5F15AIR3.3DXF-15 models with a number of levels of detail plus cockpit model used in padlock ( F8) view4[a]
6PLANE1.3DXUS-built fixed-wing aircraft plus a bombunknown
7PLANE2.3DXNon-US-built fixed-wing aircraft plus a parachute, an aircraft's shadow and a missile
8xxLTSF.3DXGround lights, with one model for each level 1 tile0.5
9xxMTNS.3DXMountains (see the section called “Mountain 3D Model (??MTNS.3DX) Files” )0.25

[a] This has been verified for the first two models in this file only. It is possible that other models may differ.


Stores .3DX File Names

As for the part of the file described in the section called “Main .3DX File Names” , this part of the file contains a list of variable-length, NUL-terminated (ASCIIZ) .3DX file names. The files referenced by this list all contain models for external stores on the player's aircraft including air-to-air missiles, air-to-ground weapons and fuel tanks.

Note:

Many file names are repeated in this list. The significance of this repetition and the ordering of the entries has not been investigated.

Weapon Data

This part of the file contains data for the following types of weapons:

  • SAMs;

  • AAMs;

  • a number of items called GUN_1 through GUN_5 whose use is unknown; and

  • a number of air-to-ground weapons including HARM and GBU-15, which do not reference the models used for the player's weapons and hence are most likely related to a removed feature of the game where AI aircraft could launch ground attacks.

These records are assigned indices starting with 0 for the first record (which contains the name None ) and are referenced using these indices by the data described in the section called “Aircraft Data” .

Table 2.25. Weapon Record Format

Offset (bytes)Length (bytes)Description
08ASCIIZ name
814unknown
221model index in .3DX file, or 0 if there is no model
231model file index (see the section called “Main .3DX File Names”), or 0 if there is no model

Aircraft Data

This part of the file contains data for:

  • the KC-10 which only appears at home plates with home plate type 0x14 (i.e. tanker tracks);

  • other friendly fixed-wing aircraft, including F-14 and F-117, which do not appear in the game; and

  • US and enemy helicopters which do not appear in the game and for which models are not specified or available except in the playable demo version of the game.

Some enemy fixed-wing aircraft names (e.g. MIG-23) appear in more than one record. This is most likely because the record includes the missile loadout of the aircraft and the same aircraft can appear in the game with different loadouts as shown in [1] in its description of the enemy forces in each theater.

Table 2.26. Aircraft Record Format

Offset (bytes)Length (bytes)Description
08ASCIIZ name
82unsigned integer specifying the maximum speed of the aircraft; the aircraft's normal speed in knots shown in the air-to-air radar's DTWS mode display is approximately 85% of the value specified here
102unsigned integer specifying the maximum banking factor when turning, ranging from 1 for low-performance transportation aircraft to 5 for high-performance fighters; a value of 0 results in the aircraft generally never turning toward the player's aircraft and higher values such as 10 result in the aircraft banking far too much - until it is upside-down - and failing to turn
122see Table 2.27, “Aircraft Radar Types”
141model index in .3DX file, or 255 if there is no model
151model file index (see the section called “Main .3DX File Names”), or 0 if there is no model
162index of the weapon record (see the section called “Weapon Data”) of the radar-guided missiles carried, 0 for None
182index of the weapon record (see the section called “Weapon Data”) of the heat-seeking missiles carried, 0 for None
202number of radar-guided missiles carried, 0 if the corresponding weapon record index is 0
222number of heat-seeking missiles carried, 0 if the corresponding weapon record index is 0

Table 2.27. Aircraft Radar Types

ValueTEWS radar indicator[a]Notes
0x00n/athis value indicates that the aircraft has no radar
0x149used in supplied file only for AWACS aircraft which is not expected to appear in the game
0x159used in supplied file only for IL-76 aircraft
0x163 
0x171 
0x184 
0x192 
0x1A5 

[a] The number shown within a diamond in the authentic mode TEWS display to indicate the radar type.


XI. 3D Model (.3DX) Files

A large number of .3DX files are provided with the game. Each file contains a number of 3D models that can be drawn during the mission. The files containing all aircraft, objects and lights that appear on the ground and mountains are referenced by the data described in the section called “Main .3DX File Names” and the files containing the external stores for the player's aircraft are referenced by the data described in the section called “Stores .3DX File Names”.

Each file begins with a header (see the section called “File Header”) followed by variable-length data for each model (see the section called “Model Data”) and finally a file terminator record (see the section called “File Terminator Record”).

This file format, with some variations, is also used by Microprose F-117A™ Stealth Fighter 2.0.

File Header

Each .3DX file begins with the following header:

Table 2.28. .3DX File Header Format

Offset (bytes)Length (bytes)Description
0x02Number of models n
0x22 * nFor each of the n models, absolute file offset of the first byte of the model data (see the section called “Model Data”)
0x2 + 2 * n2Absolute file offset of the file terminator record (see the section called “File Terminator Record” )

Model Data

For each model in the file, the following data is present: FIXME xrefs: header, element normal vectors, element vertex index lists, element rendering sequence tree (if present), vertex co-ordinates, edges, element appearance data

FIXME describe elements, edges and vertices; cover fact that element indices 0-254 are available but 255 is reserved as a special value in Table 2.32, “Element Rendering Sequence Tree Node Record Format”

Model Data Header

Table 2.29. Model Data Header Format

Offset (bytes)Length (bytes)Description
0x02Signature set to 0x8001
0x22Absolute file offset of the byte following this absolute file offset
0x42unknown
0x62unknown, but appears to relate to the number of parts of the model that can move independently (e.g. a rotating radar dish)
0x88 * previous unknown value if it is greater than 2, otherwise 0unknown, but appears to contain origin for independently-moving parts
variable2number of vertices (see FIXME)
variable2see the section called “Element count and rendering sequence tree presence flag”

Element count and rendering sequence tree presence flag

This signed 2-byte value encodes both:

  • the number of elements (see FIXME) as the absolute value; and

  • a boolean indication of whether or not a rendering sequence tree (see FIXME) is present for the model based on the sign of the value.

Table 2.30. Element count and rendering sequence tree presence flag decoding

Condition on value xDerivation of element countDerived rendering sequence tree presence flag
x >= 0xFalse
x < 0-1 * xTrue

Element Normal Vectors

This part of the model data consists of one record of the following format for each element. Each record may have an optional 2-byte prefix which is a value in the range 0x8000 through 0x8003 inclusive or 0x8100. FIXME: meaning of prefix

Table 2.31. Element Normal Vector Record Format

Offset (bytes)Length (bytes)Description
0x02X component of vector (if value read from file is in the range 0x8000 through 0x8003 inclusive or is equal to 0x8100, this value is an optional prefix as described above and is not part of the record)
0x22Y component of vector
0x42Z component of vector
0x64Constant factor FIXME

This data is used to determine the visibility of the element, i.e. whether or not the viewer is in front of the element, or equivalently whether or not the element is facing toward the viewer.

Element Vertex Index Lists

This part of the model data contains one vertex index list for each element. Each vertex index list starts with a one-byte vertex count giving the number of vertex indices in the list n. This is followed by n bytes, where each byte is a 0-based vertex index.

Element Rendering Sequence Tree

As noted in the section called “Element count and rendering sequence tree presence flag” , this part of the model data may nor may not be included. If the flag indicates that it is not included, this part of the model data is not present and consumes no space in the file.

This data starts with a one-byte, 0-based element index giving the root element of the tree. Following this byte is one tree node record of the format described in Table 2.32, “Element Rendering Sequence Tree Node Record Format” for each element. These nodes are arranged into a binary tree where each tree node contains two references to sub-trees in the form of element indices. Note that there is exactly one tree node for each element and therefore tree nodes are referred to by their element indices.

Table 2.32. Element Rendering Sequence Tree Node Record Format

Offset (bytes)Length (bytes)Description
0x010-based element index of the root node of the left-hand sub-tree, or 0xFF if there is no sub-tree
0x11as above, but for the right-hand sub-tree

This tree specifies the order in which elements should be drawn in order to ensure that elements that are closer to the viewer are drawn as closer to the viewer than elements that are further away. To draw an element A closer to the viewer than an element B implies that element A must be rendered after element B, i.e. a rendering sequence is implied.

When the model is rendered, a traversal of all tree nodes (i.e. all elements) is performed, starting at root node. The following processing is performed for each node:

  • if the corresponding element is visible (as determined using the information described in the section called “Element Normal Vectors” ):

    1. the right-hand sub-tree is recursively processed;

    2. the corresponding element is drawn; and

    3. the left-hand sub-tree is recursively processed;

  • otherwise (the corresponding element is not visible)

    1. the left-hand sub-tree is recursively processed;

    2. the corresponding element is not drawn (as it is not visible); and

    3. the right-hand sub-tree is recursively processed.

Therefore, any elements that are in front of a given element (i.e. on the side of the given element that its normal vector extends from) must be part of the element's left-hand sub-tree and any elements that are behind a given element (i.e. on the opposite side of the given element from its normal vector) must be part of the element's right-hand sub-tree. Note that in some cases, such as when considering the faces of a convex solid, it is not possible for one element to obscure another. In such cases, it would not matter what sequence the elements were rendered in, so following of the rule described here would not be required but it would not be detrimental either.

Vertex Co-ordinates

This part of the model data consists of one record of the following format for each vertex. As for the data described in the section called “Element Normal Vectors”, each record may have an optional 2-byte prefix which is a value in the range 0x8000 through 0x8003 inclusive or 0x8100. FIXME: meaning of prefix

Table 2.33. Vertex Co-ordinates Record Format

Offset (bytes)Length (bytes)Description
0x02X co-ordinate of vertex (if value read from file is in the range 0x8000 through 0x8003 inclusive or is equal to 0x8100, this value is an optional prefix as described above and is not part of the record)
0x22Y co-ordinate of vertex
0x42Z co-ordinate of vertex

Edges

This part of the file starts with a 2-byte edge count n followed by n edge records. Each edge record consists of 2 bytes, each a 0-based vertex index for one end of the edge. It appears that the edges are undirected and therefore the order in which the two vertices in each edge are specified does not matter.

Element Appearance Data

This data specifies the visual appearance of the elements by defining, for each element, one or more sub-elements consisting of points, lines or polygons. Each sub-element can have conditions attached to it, allowing the game to selectively render certain sub-elements to simulate a normal vs. destroyed appearance, turn lights on and off, etc.

This part of the file can take one of three forms:

  1. the general case where there is a non-zero element count (and by implication a non-zero vertex count as it is impossible to define an element without vertices);

  2. the degenerate case where the numbers of vertices and elements are both zero, resulting in this data having a total length of zero; and

  3. a special case where the element count is zero but the vertex count is non-zero, in which case there is data in this section for one implicit element not otherwise referenced in the file, but no file offsets table (FIXME XREF) is present[8].

The data consists of an optional list of absolute file offsets of the element appearance data followed by the actual data.

Element Appearance Data Offsets

This part of the file consists of one 2-byte absolute file offset for each element. This file offset references the start of the element appearance record for the given element.

This part of the file is not present in the special case where the element count is zero but the vertex count is non-zero.

Element Appearance Records

This part of the file consists of one element appearance record for each element or, in the special case where the element count is zero but the vertex count is non-zero, exactly one element appearance record.

Each element appearance record consists of a variable number of sub-element appearance records, each of which is of variable length, ending with a sub-element appearance record marked as a terminator. The first byte of a sub-element appearance record indicates the length of the record and the general appearance of the sub-element.

Table 2.34. Sub-Element Appearance First Byte Value

Value of first byte xSub-element appearance record section 
0x00 < x <= 0x1FFIXME: polygon inside edges 
0x20 < x <= 0x3FFIXME: points at vertices 
0x40 < x <= 0x5FFIXME: lines along edges 
0x56FIXME: unknown - could be 0x16 lines 
0x80 <= x <= 0x9AFIXME: conditions 
0xFFFIXME: terminator 

Polygon Sub-Element

This sub-element appearance record type defines a one-sided polygon bounded by a sequence of edges. The element's normal extends from the side that is drawn and the edges are specified using clockwise winding . The record consists of the following bytes:

  1. a byte containing the number of edges that bound the polygon n such that n is no less than 3[9] and no greater than 31[10];

  2. n bytes, each specifying an edge index, with indices specified in clockwise order; and

  3. a byte containing the model palette index (see the section called “Model Palette”) with which the polygon is drawn.

Points Sub-Element

This sub-element appearance record type defines a set of points drawn at specified vertex indices. Due to the low resolution used, in the game each point has a size of one pixel regardless of viewing distance.

This sub-element type is most frequently used for lights, where palette indices for red, blinking red or white are normally used. Note that whereas in real life a point light is normally viewable from almost all angles except when it is obscured by other objects, this set of points is rendered by the game based on whether the element's normal vector indicates that it is facing the viewer and, if one is present, based on the element rendering sequence tree. To have a point visible from all angles, it would be necessary to use two separate elements with normals facing in opposite directions.

The record consists of the following bytes:

  1. a byte equal to 0x20 plus the number of points n such that n is no less than 1[11] and no greater than 31[12];

  2. a byte containing the model palette index (see the section called “Model Palette”) with which the points are drawn; and

  3. n bytes, each specifying the index of a vertex at which a point is to be drawn.

Lines Sub-Element

This sub-element appearance record type defines a set of lines drawn along specified edge indices. (FIXME: always have count of 1 in F15SE3, but higher in F117A?) Due to the low resolution used, in the game each line has a width of one pixel regardless of viewing distance.

The uses of this sub-element type include a submarine's communication (FIXME: whip?) antenna, beams making up communications towers and edges of partially-transparent/stippled polygons such as radar dishes and the player's cockpit. Just as in (FIXME: reference points sub-element), note that whereas in real life an antenna or beam is normally viewable from almost all angles except when it is obscured by other objects, this set of lines is rendered by the game based on whether the element's normal vector indicates that it is facing the viewer and, if one is present, based on the element rendering sequence tree. To have a line visible from all angles, it would be necessary to use two separate elements with normals facing in opposite directions.

The record consists of the following bytes:

  1. a byte equal to 0x40 plus the number of lines n such that n is no less than 1[13] and no greater than 31[14];

  2. a byte containing the model palette index (see the section called “Model Palette”) with which the lines are drawn; and

  3. n bytes, each specifying the index of an edge along which a line is to be drawn.

Condition Prefix Sub-Element

This sub-element does not itself specify that a shape or shapes be rendered, but instead indicates that the following sub-element should be rendered conditionally based on the result of a certain test. This sub-element is never followed by another condition prefix sub-element or a terminator sub-element, i.e. it always immediately precedes a sub-element for polygons, points or lines.

The record consists of the following bytes:

  1. a byte equal to 0x80 plus the condition number n such that n is no less than 0 and no greater than 26[15]; and

  2. a byte containing the value used in the conditional comparison.

The condition numbers and values have special meanings defined by the game engine. These meanings appear to be specific to certain .3DX files or sets of them as some values are used in two different files for different purposes.

For many of the condition numbers, the sub-elements affected by (following) the conditional sub-elements for different values are mutually exclusive. For example, in ??[MOB][M].3DX the sub-elements following conditional number 1 with value 0 represent an undestroyed part of a model whereas for value 1 the sub-elements represent the same part of the model when it is destroyed. It would not make sense to draw both sets of sub-elements as the same part of a model cannot be both destroyed and not at the same time, so at any one point in time only the sub-elements for one of the two values will be drawn. Similarly, the sub-elements following conditional number 10 with value 1 are only drawn when it is dark, whereas when it is not dark these elements are not drawn (it is not known if there are any sub-elements prefixed with conditional number 10 with value 0). This case can be considered to be similar to the previous, where at any point in time only the sub-elements for one of the two values are drawn, except in this case there are no elements to draw if the value is 0.

Based on this, it seems reasonable to assume that as the game engine renders each model, it associates a single value with each condition number and only renders those sub-elements with matching condition numbers and values. In the case of condition number 26, this would mean that even if the model contained more than one gun, a muzzle flash could only be drawn for one at a time, but as the game engine never appears to render any muzzle flashes this assumption cannot be proved or disproved based on this condition number.

FIXME document known values

File Terminator Record

This record consists of two bytes with value 0 and consumes the last two bytes of the file. Aside from the fact that it is always referenced by the last 2-byte file offset in the file header (see the section called “File Header”), it can be distinguished from model data (see the section called “Model Data”) as the first two bytes of model data are a non-zero signature.

Mountain 3D Model (??MTNS.3DX) Files

Each theather has a file containing 3D models of mountains. Each file contains 32 models. When the models are assigned indices 0 through 31, the binary representation of each model's index provides information about the model as shown in Table 2.35, “Model Indices in Mountain 3D Model ( ??MTNS.3DX) Files”. The models are divided into two sets of 16 which vary in their appearance, with the MSB selecting between the two sets. Some of the models are designed to be placed adjacent to other mountain models to form a continuous mountain range, with the other 4 bits indicating in which cardinal direction(s) the model is intended to be used with adjacent mountain models. Each of these bits is set if the mountain is open in the given direction, i.e. there should be another mountain model in that direction, or unset if the mountain model is attached to the ground in the given direction.

Table 2.35. Model Indices in Mountain 3D Model ( ??MTNS.3DX) Files

Bit0 (MSB)1234 (LSB)
Purposeset numberNESW



[8] In the files supplied with the game, this special case is only seen in the ??LTSF.3DX files.

[9] It has not been verified that this is the minimum value, but it is most likely the minimum, as even though it would be possible to omit one edge from the polygon and infer that it connects the two vertices that each appear in only one of the polygon's edges, this is not done in the files provided with the game.

[10] This upper limit has not been verified.

[11] It has not been verified that this is the minimum value, but a value of 0 does not make sense as it specifies that nothing will be rendered.

[12] This upper limit has not been verified.

[13] It has not been verified that this is the minimum value, but a value of 0 does not make sense as it specifies that nothing will be rendered.

[14] This upper limit has not been verified. FIXME need to investigate 0x56

[15] This is the largest value observed in the files supplied with the game. It is possible that a larger value could be used if (FIXME: larger number of sub-objects is specified in .dat file)



[2] If a modified version already exists (i.e. a mission has previously been created for the theater and the user has not removed the modified version), it is not clear whether the new modified version is based on the existing modified version or the base version shipped with the game.

[3] The range 0 through 63 corresponds to 6 bits of resolution per colour channel as is supported by the VGA standard.

Chapter 3. Appendices

I. F-15 Strike Eagle III Versions

Table 3.1. The released versions of of F-15 Strike Eagle III, least to most recent

Version number[a]Release dateDescription
(version number not available)01-Oct-1992[b]Playable demo that appears to be based on a much earlier version of the code, distributed as F15IIPD.ZIP
4108.0108-Dec-1992[c]As provided on original installation floppy diskettes
4108.02unknownIt is not known if this version was released, but it is listed in the README.TXT file supplied in F15303.ZIP
4108.0323-Apr-1993[d]Version provided in the F15303.ZIP patch and most likely on the floppy diskette provided with [1] [e]

[a] As shown in FILEAbout F-15 III

[b] The date stamp of the most recent file (READ.ME) in the .ZIP file

[c] The date stamp of all the files on the installation floppy diskettes

[d] The date stamp of the most recent file (README.1ST) in the patch

[e] From the back cover of [1] :

Bonus Disk!

Includes the latest F-15 Strike Eagle III update files plus all new historical missions based on the U.S. air strikes on Iraq in 1993!

As the README.TXT file from F15303.ZIP indicates that 4108.03 is the version in which the IRAQ '93 missions were added, it is likely that this floppy diskette included the same version.


Comparison of playable demo and version 4108.01

The following table shows some of the differences between these two versions of the game:

Table 3.2. File differences between playable demo and version 4108.01

File name by versionDifferences
Playable demo4108.01
THEM.3DX PLANE2.3DXModels for helicopters only present in playable demo
US.3DX PLANE1.3DX


Comparison of versions 4108.01 and 4108.03

This section contains a partial analysis of the differences between these two versions of the game.

Differences in F15.EXE

As shown in Section X, “Simulation Engine (F15.EXE) File”, file offsets differ between the two files, suggesting differences in the program code or unknown data. However, no differences exist in the data discussed in the section called “Main .3DX File Names”, the section called “Stores .3DX File Names”, the section called “Weapon Data” and the section called “Aircraft Data”.

II. F-15 Strike Eagle III Known Issues
Game hangs when flying near to the carrier group or the battleship group

In version 4108.01 of the game, DSMOB.3DX model index 20 incorrectly has the (FIXME: reference .3dx file format) value at offset 0x8b1f set to 0. From inspection of the data in the file, it appears that 2 is the correct value. An incorrect value in this location would lead to the game attempting to read data from incorrect file offsets and hence getting garbage.

This model is described in DS0.DAT as Guided Missile Frigate and appears to be used in the carrier and battleship groups. Flying close to either of these with OptionsObject DetailHigh set would cause this model to be loaded. It has also been observed that, with the same setting, viewing the carrier battle group in reverse padlock (F10) mode also causes the game to hang or crash. As the DSMOBM.3DX file does not have a similar error, it is assumed that with OptionsObject DetailLow set no problem would occur as the erroneous model would not be loaded.

README.TXT in F15303.ZIP states under Version 4108.03 , FIXES :

When flying near to the carrier group or the battleship group, the game will no longer hang.

The .ZIP file contains a new DSMOB.3DX file. The only difference between the version of this file shipped with version 4108.01 and this new version is that the byte at offset 0x8b1f is changed from 0 to 2 .

Campaign destroyed targets are overwritten

On completion of a mission in versions 4108.01 and 4108.03 of the game, when the .EXP file (see the section called “Campaign Destroyed Targets (.EXP) File”) is updated, the number of records stored at offset 0x0 is increased as expected, but the new records are written over the top of the initial records. Records containing all 0 values are appended to the file where it would be expected that the new records should have been written.

The result of this behaviour is that targets that were destroyed earlier in the campaign will no longer be destroyed later in the game. It is possible that the game was designed to cause some or all destroyed targets to be repaired (i.e. revert to their pre-destruction state) over time. However, the following factors suggest that this is a bug in the game:

  1. The aforementioned appended records with all values set to 0 serve no purpose, which suggests that there is a bug in the handling of this file.

  2. Given that the first record in the file is always the first to be overwritten on every mission, assuming that at least one target is destroyed on each mission, then this first record would record the first target destroyed in mission n and cause that target to appear destroyed in mission (n + 1). However, during that mission (n + 1), the first record would be overwritten, so that by mission (n + 2) the first target destroyed in mission n no would longer appear destroyed. Assuming a rate of one mission per day, this behaviour would simulate the case where, for at least the first target destroyed in each mission, the enemy takes only one day to repair the damage. In the case where more targets are destroyed on the first mission than in any subsequent mission, however, some records will never be overwritten, simulating the case where some targets destroyed in the first mission are never repaired. These do not appear to be reasonable parameters for a simulation; it would make more sense that the intention was for the game to not simulate the repair of any destroyed targets.

It would be possible for an external tool to back up the .EXP files before the game is run and, assuming that only one mission is flown per campaign whilst the game is running, compare these to the modified versions after the game exits to re-construct the complete set of records in order to work around this issue.

Note:

Implementing such a workaround would greatly increase the number of valid records in the .EXP file by the end of a campaign. It may be the case that the game was never tested with large numbers of valid records in this file and that this workaround could cause issues in the game.

III. Game Data File Statistics

Table 3.3. Theater Statistics

DatumTheater
DSKOPA
??0.DAT home plate count899
??0.DAT object name count107116102
??[M].3DX model count302929
??MOB[M].3DX model count323129

IV. GNU Free Documentation License

Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

  1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
  2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
  4. Preserve all the copyright notices of the Document.
  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
  6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
  8. Include an unaltered copy of this License.
  9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
  10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
  11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
  12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
  13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
  14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
  15. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (C) YEAR YOUR NAME.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

Glossary

A

  • Authentic mode:

    The game allows various systems in the aircraft to be modelled using one of two different levels of realism (and therefore difficulty). This mode is the most realistic of the two.

    See Also Standard mode.

C

  • Clockwise winding:

    Specifies that the vertices or (in the case of this game) edges defining a one-sided polygon (i.e. a polygon that is only rendered when observed from a particular side) are specified in an order that, when observed from the side that is rendered, is clockwise.

D

H

  • Home plate:

    The friendly air base or tanker track that a mission starts and ends at.

  • Home plate co-ordinate:

    A modified form of world co-ordinate used for storing the co-ordinates of a home plate. A home plate co-ordinate is a world co-ordinate divided by 32 and is stored in 16 bits with the most significant bit always 0. (FIXME: rename as these co-ordinates have been found to be used elsewhere)

L

  • LSB:

    Least-Significant Bit

S

  • Standard mode:

    The game allows various systems in the aircraft to be modelled using one of two different levels of realism (and therefore difficulty). This mode is the least realistic of the two.

    See Also Authentic mode.

T

  • Tactical Electronic Warfare System:

    In the game, this provides a cockpit display of ground and airborne radar threats and missiles. In authentic mode, ground and airborne radar threat icons include a number which provides additional information about the type of radar.

  • Tactical Situation Display:

    A cockpit display showing a moving map with icons showing the locations of the primary and secondary targets and the home plate. In standard mode, it also shows the locations of ground and airborne threats and all friendly airbases.

  • TEWS: See Tactical Electronic Warfare System.
  • Tile co-ordinate:

    A co-ordinate within a tile that, if any sub-tiles exist, treats them as having a size of one and hence references a sub-tile rather than an actual location in the world. In other words, this co-ordinate always forms an array index into the 2D array that makes up the tile.

  • TSD: See Tactical Situation Display.

W

  • World co-ordinate:

    A co-ordinate within a tile that accounts for the sizes of all the levels of sub-tiles, if any exist. A world co-ordinate may be relative to a particular tile at a particular level, in which case co-ordinate (0, 0) refers to the top-left corner of that tile, or may be relative to the whole world (i.e. the level 0 tile), in which case co-ordinate (0, 0) refers to the top-left corner of the level 0 tile.

References

[1] Russell, Lawrence T. F-15 Strike Eagle III: The Official Strategy Guide. Rocklin, CA, USA 95677-1260: Prima Publishing, 1993. ISBN 1-55958-197-2.