sopwith-mission

NAME

.sop - Sopwith mission format

DESCRIPTION

The Sopwith mission format allows sopwith(6) to load custom user-defined levels and other modifications to the game. The files use Yocton as their basic format:

Each .sop file can contain three different sections:

level

This section contains level data. If present, the game's level is replaced with an entirely new level defined within this section. See LEVEL SECTION below.

symbols

This section allows the game's symbols (sprites) to be replaced. This allows graphical modifications to the game. See SYMBOLS SECTION below.

sounds

This section allows the game's music to be replaced. See SOUNDS SECTION below.

LEVEL SECTION

The level section allows a complete new level to be defined. At present only a single level can be defined, although this may change in the future. Each level contains two types of subsection: ground, which defines the level's terrain, and multiple object sections, each of which defines an in-game object.

The ground subsection is a list of decimal integer values that describe the level's terrain. Each value is defined through a Yocton property named _. Values should be in the range 16-199, and there should be a minimum of 320 (ie. one screen's worth). The following is an example:

  ground {
    _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
    ...
  }

Each object subsection defines an object that appears in the level. The following is an example:

  object {
    type: PLANE
    x: 30
    orient: 0
    territory_l: 0
    territory_r: 0
    faction: PLAYER1
  }

As seen, each object has a number of different properties:

type

See OBJECT TYPES below.

x

The X coordinate within the level where the object appears. The Y coordinate is set automatically depending on the object type and can not be specified.

orient

For planes, defines the direction in which planes face: 0 (right) or 1 (left). For ground targets, this controls the type of ground target; see TARGET TYPES below.

faction

Specifies the faction to which the object belongs. See FACTIONS below.

transform

For ground targets, this specifies a "transformation" to apply to the symbol. Eight different transformations are supported: 0 (no transformation); 1 (rotate 90 degrees counterclockwise); 2 (rotate upside-down); 3 (rotate 90 degrees clockwise); 4 (flip vertically); 5 (mirror, then rotate 90 degrees counterclockwise); 6 (mirror); 7 (mirror and then rotate 90 degrees clockwise). If you want to see an Ox do a headstand, this is the property to use, although it's more likely you'll want to use it to make tanks face the right direction.

territory_l

For planes, the left boundary of the range of the level the plane defends.

territory_r

For planes, the right boundary of the range of the level the plane defends.

The following is an example of a minimal level section that just contains a flat ground with no objects other than the player's plane:

  level {
    object {
      type: PLANE
      x: 30
      orient: 0
      territory_l: 0
      territory_r: 0
      faction: PLAYER1
    }
    ground {
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
      _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64 _: 64
    }
  }

OBJECT TYPES

The following object types can appear in a level:

PLANE

Defines either a player or computer-controlled plane. The faction property controls whether it is a human player or computer-controlled player; see FACTIONS below. Computer-controlled planes will defend their "territory", the range of which is defined by the territory_l and territory_r properties. If the player enters this territory, they will take off from their base and attack.

TARGET

A ground target. The value of the orient property defines the type of target, see TARGET TYPES below. The value of the faction property specifies the faction to which the target belongs. When one player destroys all targets owned by all enemy factions, the game advances to the next level.

BALLOON

Observation balloon. The value of the orient property defines the type of balloon; 0 = spherical balloon, 1 = Caquot-style. The value of the faction property specifies the faction to which the balloon belongs.

OX

An Ox (type of cattle). The Ox does nothing except act as an obstacle, and does not need to be killed to advance to the next level. Does not appear in novice mode.

BIRD

A single bird flies the randomly around the level. The bird acts as an obstacle that the player(s) must avoid. Does not appear in novice mode.

FLOCK

A flock of birds moves along the top of the screen. The flock acts an obstacle and may disperse into many different birds if disturbed. Does not appear in novice mode.

FACTIONS

Military objects belong to a "faction"; objects allied to a different faction are considered enemies. The color of the object indicates the faction:

PLAYER1

For planes, cyan fuselage and magenta wings. This corresponds to the human player in single player mode, and player 1 in multiplayer mode.

PLAYER2

For planes, magenta fuselage and cyan wings. This corresponds to the computer opponent in single player mode, and player 2 in multiplayer mode.

NONE

Used for animals / non-military targets.

The following values are also recognized; they are currently (effectively) unused, but may be used in the future if the multiplayer feature is extended to support more than two players.

PLAYER3

Maps to PLAYER2 in single player mode, or PLAYER1 in multiplayer mode. Planes of this faction are currently ignored in multiplayer mode.

PLAYER4

Maps to PLAYER2. Planes of this faction are currently ignored in multiplayer mode.

PLAYER5, PLAYER7

Maps to PLAYER1, but planes with this faction are currently ignored.

PLAYER6, PLAYER8

Maps to PLAYER2, but planes with this faction are currently ignored.

SYMBOLS SECTION

The symbols section allows the game's graphics to be replaced. The section can contain a number of subsections, one for each type of graphic. Graphics are defined as multiline text strings. The following is an example of a symbols section that changes the hangar graphic to add an extra (white) flag:

  symbols {
    swtrgsym {
      0:
      "    -                 -         \n" &
      "    - # # # #         - * * * * \n" &
      "    - # # # #         - * * * * \n" &
      "    -                 -         \n" &
      "    -                 -         \n" &
      "    -                 -         \n" &
      "    -                 -         \n" &
      "* * * * * * * * * * * * * * * * \n" &
      "* * * * * * * * * * * * * * * * \n" &
      "* * - - - - - - - - - - - - * * \n" &
      "* * - * * * * * * * * * * - * * \n" &
      "* * - * * * * * * * * * * - * * \n" &
      "* * - * * * * * * * * * * - * * \n" &
      "* * - * * * * * * * * * * - * * \n" &
      "* * - * * * * * * * * * * - * * \n" &
      "* * - * * * * * * * * * * - * * \n"
    }
  }

Graphics are limited to the original four CGA colors: black (space); cyan (asterisk); magenta (hyphen) and white (number sign / pound / octothorpe). Cyan and magenta are swapped for enemy planes (single player) and player 2 (multiplayer).

The following graphics are defined:

swplnsym (16x16)

Plane. There are four frames, for facing right (0), rotated 22.5 degrees counterclockwise (1), 45 degrees (2) and 67.5 degrees (3).

swhitsym (16x16)

Crashing plane. There are two frames of animation.

swwinsym (16x16)

Plane flying into the distance after completing the level. There are four frames of animation.

swtrgsym (16x16)

Ground target. Each frame is a different target type and the values are those from TARGET TYPES below.

swhtrsym (16x16)

Destroyed ground target. Each frame a different target type; the values are those from TARGET TYPES below. The number of pixels in the symbol control the size of the explosion when the target is destroyed.

swballoonsym (16x16)

Observation balloon. Each type of balloon has three animation frames: drifting left, centered, and drifting right. Spherical balloon starts at frame 0 and Caquot-style balloon begins at frame 3.

swoxsym (16x16)

Ox. There is one frame.

swflksym (16x16)

Bird flock. There are two frames, for the "flapping wings" animation.

swbrdsym (4x2)

Bird. There are two frames, for the "flapping wings" animation.

swbmbsym (8x8)

Falling bomb. There are two frames, for facing right (0) and rotated 45 degrees counterclockwise (1).

swmscsym (8x8)

Missile. There are four frames, for facing right (0), rotated 22.5 degrees counterclockwise (1), 45 degrees (2) and 67.5 degrees (3).

swbstsym (8x8)

Starburst (flare). There are two frames of animation.

swexpsym (8x8)

Debris after an explosion. There are eight frames for different types of debris.

swmedalsym (8x12)

Medals. There are three frames for each different type.

swribbonsym (8x2)

Ribbons. There are six frames for each different type.

swshtsym (16x16)

Shot out window. There is a single frame.

swsplsym (32x32)

Bird "splatted" into window. There is a single frame.

TARGET TYPES

0

Hangar

1

Factory

2

fuel tank

3

Tank

4

Truck

5

Tanker truck

6

Flag

7

Tent

8-12

User-defined target; the symbols section should be used to supply the graphics (see SYMBOLS SECTION above). Type 12 produces a big explosion like an oil tank when destroyed.

13-17

"Passive" user-defined target (does not fire at enemy planes). Type 17 produces a big explosion like an oil tank when destroyed.

18

Radio tower

19

Water tower

SOUNDS SECTION

The sounds section allows the in-game music to be replaced. There is only one property at present, named title_tune; its value is a string containing a sequence of notes to play. The following is an example of a sounds section that replaces the title music with the beginning of "Au Clair de la Lune":

  sounds {
    title_tune:
    "g4/r8/g4/r8/g4/r8/a4/r8/b2/r4/a2/r2/" &
    "g4/r8/b4/r8/a4/r8/a4/r8/g2/r2/"
  }

As seen, the format consists of a number of musical notes (a-g) separated by '/' characters. The notes are in the C major scale. Each note is followed by a number that indicates the length of the note as a fraction of a whole note; for example, 2 means half-note, 4 means quarter-note, etc. The following additional syntax is also supported:

The original DOS version of Sopwith interpreted notes as being in the A minor scale, but this is believed to have been a mistake and notes are now assumed to be in the more common C major scale. This does, however, mean that tunes from DOS .exe hacks will play differently; any A or B notes will need to be shifted down one octave to convert to the C major scale.

SEE ALSO

sopwith(6),

AUTHORS

This manual page was written by Simon Howard.

HISTORY

The original DOS version of Sopwith only supported a single level, although later versions increased the difficulty by repeatedly playing the same level again at increasing speeds. Some modifications were made by fans by hex-editing the DOS .exe file.

Some simple hacks just changed the name shown on the title screen (one changed it to "Red Baron", for example). Some more elaborate mods that changed the level itself included "Blokwit" and "Sokwith". Andrew Jenner even developed a basic level editor that allowed people to make their own maps, although the changes that can be made using this technique are inherently limited.

Full support for custom maps did not appear until 2024, with SDL Sopwith's v2.4 release. There will likely be further future extensions to this format to allow people to share more elaborate modifications to the game.