Introduction

The Marathon Markup Language (MML), a subset of the Extensible Markup Language (XML): This was created for the purpose of configuring the Marathon engine in a non-hardcoded way. MML scripts are stored in the "Scripts" subdirectory of the local data directory, and the "MML" subdirectory of the global data directories and accessed in alphabetical order (scripts in the local directory are read after the global ones so they can override their settings).

For more on XML, check out these links:

One feature that I've attempted to maintain is that any set of values can always be overrode by another. For example, if you set some color to be red in one file, and that color to be green in a file processed after it, that color will be green.

Many of the element attributes here are some sort of index value, and they are all counted from 0 unless specified otherwise; for example, collections are numbered from 0 to 31.

Here is the format:

Marathon Root Element: <marathon>

This is the root element, the one that contains all the others. Other Marathon-related root elements may be defined in the future, however, such as root elements for stuff that is intended for individual map levels. These may have a format like <maralevel index="value">.

This element has no attributes and contains these child elements:


String-Set Element: <stringset>

This element is an imitation of MacOS 'STR#' resources. It has an attribute of "index", which has a numerical value corresponding to the original resource ID:
  1. Errors
  2. Filenames
  3. Top-Level Interface Items
  4. Prompts
  5. Network Errors
  6. Key Codes to Names
  7. Preferences Advice
  8. Computer Interface
  9. Join Dialog Messages
  10. Weapon Names
  11. File Search Path
  12. Preferences Groupings
  13. Postgame Network Game Statistics
  14. Net Game Setup
  15. New Join Dialog Messages
  16. Progress Strings for Networking
  17. Difficulty Level Names
  18. Item Names
  19. Item types
  20. Player and Team Color Names
  21. Net Statistics Strings
  22. OpenGL-Option Color-Picker Prompts
This element contains child elements with form <string>, which have an attribute of "index", and contents of whatever the string is supposed to be. The index is zero-based, unlike the original STR# resources, whose indices are one-based. For example, the filenames are specified in this fashion:
<!-- STR# Resource: "Filenames" -->
<stringset index="129">
<string index="0">Shapes</string>
<string index="1">Shapes.16</string>
<string index="2">Sounds</string>
<string index="3">Sounds.16</string>
<string index="4">Aleph One Preferences</string>
<string index="5">Map</string>
<string index="6">Untitled Game</string>
<string index="7">Marathon</string>
<string index="8">Aleph One Recording</string>
<string index="9">Physics Model</string>
<string index="10">Music</string>
<string index="11">Images</string>
<string index="12">Movie</string>
</stringset>

Interface-Stuff Element: <interface>

This kind of element specifies stuff used in the heads-up display (HUD). It has one attribute, "motion_sensor", which is boolean, and which indicates whether or not the motion sensor will be active. In what follows, the HUD coordinates used will be x = rightward and y = downward, with the HUD's top left corner being at x = 0, y = 320. This element also contains these kinds of child elements:

Here is a list of all the interface rectangles:

  1. Player Name
  2. Oxygen
  3. Shield
  4. Motion Sensor
  5. Microphone
  6. Inventory
  7. Weapon Display
  8. New-Game Button
  9. Load-Game Button
  10. Gather Button
  11. Join Button
  12. Preferences Button
  13. Replay-Last Button
  14. Save-Last Button
  15. Replay-Saved Button
  16. Credits Button
  17. Quit Button
  18. Center Button
  19. [unused]
  20. [unused]
  21. Computer Terminal Screen
  22. Computer Terminal Header
  23. Computer Terminal Footer
  24. Computer Terminal Full-width Page
  25. Computer Terminal Left Page
  26. Computer Terminal Right Page
  27. Computer Terminal Logon Graphic
  28. Computer Terminal Logon Title [Marathon only]
  29. Computer Terminal Logon Location [Marathon only]
  30. Player Respawn Indicator [Marathon only]
  31. Blinking HUD Light [Marathon only]

Here is a list of all the interface colors:

  1. Ammo Box-Display Full
  2. Ammo Box-Display Empty
  3. Black
  4. Inventory Text
  5. Inventory Header Background
  6. Inventory Background
  7. Slate Player
  8. Red Player
  9. Violet Player
  10. Yellow Player
  11. White Player
  12. Orange Player
  13. Blue Player
  14. Green Player
  15. White
  16. Invalid Weapon
  17. Computer Border-Text background
  18. Computer Border Text
  19. Computer Text
  20. Computer White Text
  21. Computer Red Text
  22. Computer Dark Green Text
  23. Computer Cyan Text
  24. Computer Yellow Text
  25. Computer Dark Red Text
  26. Computer Blue Text
Here is a list of all the interface fonts:
  1. Interface
  2. Weapon Name
  3. Player Name
  4. Interface Item Count
  5. Terminal
  6. Terminal Title
  7. Network Statistics
Here is a list of all the weapon displays:
  1. Knife (placeholder; really one's fists)
  2. Pistol
  3. Fusion Pistol
  4. Assault Rifle
  5. Rocket Launcher
  6. Flamethrower
  7. Alien Weapon
  8. Shotgun
  9. Ball
  10. SMG


Motion-Sensor Element: <motion_sensor>

This kind of element is for assigning motion-sensor features; the assignment is done by doing <assign>, which has attributes "monster" (which one of these in the list) and "type", which is
  1. Self, Friendly Player, and Bob
  2. Alien
  3. Hostile Player

One can disable it by specifying that the top-level element <interface> has attribute "motion_sensor" with value "false".


Overhead-Map Element: <overhead_map>

This kind of element is for setting up overhead-map features. It can have an attribute of "mode", which has possible values:
  1. Normal: automapping is cumulative (the default)
  2. Currently visible only
  3. All

It can also have the attribute "title_offset", whose value is how many pixels downward to offset the title text.

One can assign various types to monsters; they can either never show up, or else show up as a Bob or as an alien. This must be done separately for living and dead monsters, because the engine "forgets" what monster type a dead monster is.

Thus, one assigns live monsters with <assign_live> and dead ones with <assign_dead>. Which live monster to assign one specifies with an attribute "monster", which takes a monster type, while which dead monster to assign one specified with an attribute of "coll", which takes a collection ID. Both elements assign to a type of display, specified with attribute "type"; the possible types are:

  1. won't ever show up
  2. Bob (shown by default)
  3. Alien (not shown by default)

One can display additional stuff by specifying an appropriate element; this elements have an attribute of "on", which is a boolean value.

Lines can be specified with the element <line>, which has these attributes, all mandatory:

Colors can be specified with the element <color>, which is indexed; For more on specifying colors, go here. Here are what the colors are:
  1. Plain polygon
  2. Platform
  3. Water
  4. Lava
  5. Sewage
  6. JjaroGoo
  7. PfhorSlime
  8. Hill
  9. Solid Line
  10. Elevation Line
  11. Control Panel (unused)
  12. Bob Display
  13. Monster Display
  14. Item Display
  15. Projectile Display
  16. Checkpoint Display
  17. Annotation
  18. Map Title
  19. Path
  20. Minor Ouch
  21. Major Ouch
  22. Teleporter

Fonts can be specified with the element <font>, which is indexed; For more on specifying fonts, go here. Here are what the fonts are:

  1. Annotation at scale 0 (lowest)
  2. Annotation at scale 1
  3. Annotation at scale 2
  4. Annotation at scale 3 (highest)
  5. Map title
One can disable it by specifying that the top-level element <view> has attribute "map" with value "false".


Infravision Element: <infravision>

This kind of element contains what is needed to specify infravision colors. These are assigned by texture collection, and there are 4 colors to choose from. The assignment is done with element <assign>, which has the attributes "coll" (for collection) and "color" (for which one of the colors). Here are the default colors:
  1. Aliens (red)
  2. Friends and Items (green)
  3. Walls and Scenery, also the S'pht (blue)
  4. Player Stuff and Explosion Effects (yellow)
Colors can be specified with the element <color>, which is indexed; For more on specifying colors, go here.


Animated-Textures Element: <animated_textures>

This kind of element is for specifying animated textures. Animated textures are specified as sequences, which contain loops of texture frames and various timing and phase information. For example, suppose that a sequence contains frames (a,b,c). As time goes on, frame a will be translated first into frame a, then into frame b, then into frame c, and then will repeat the sequence, as shown below:

a - a b c a b c ...
b - b c a b c a ...
c - c a b c a b ...

This element has two kinds of child elements, <clear> and <sequence>.

The first one, <clear>, clears the sequences; if it has an attribute of "coll", it will clear the sequences for the collection specified in that attribute's value; if not, it will clear all the sequences. However, this command can be followed by commands to create sequences, which will then be executed as if no "clear" command had been issued.

The second one, <sequence>, specifies the sequences themselves. It takes these attributes:

This one also contains a child element, <frame>, which has a mandatory attribute of "index", which is the frame's index. There must be at least one of these in a sequence, for rather obvious reasons.


Control-Panels Element: <control_panels>

This kind of element specifies various control-panel features, such as what kind it is, what items it accepts, and so forth. It has these attributes:

Each kind of control panel is specified with the child element <panel>, which has these attributes:

This element has an optional child element, "sound", with two attributes, both mandatory: type and which. The type indicates when the sound is to play, while which is the index in the list of sound definitions (-1 means none).

The map files themselves reference control panels by definition; here are the default control-panel definitions:

  1. Water: Oxygen Refuel
  2. Water: Energy Refuel (1x)
  3. Water: Energy Refuel (2x)
  4. Water: Tag Switch (Accepts Chip)
  5. Water: Light Switch
  6. Water: Platform Switch
  7. Water: Tag Switch
  8. Water: Pattern Buffer
  9. Water: Computer Terminal
  10. Water: Tag Switch (Destroyable)
  11. Lava: Energy Refuel (1x)
  12. Lava: Energy Refuel (2x)
  13. Lava: Energy Refuel (3x)
  14. Lava: Light Switch
  15. Lava: Platform Switch
  16. Lava: Tag Switch
  17. Lava: Pattern Buffer
  18. Lava: Computer Terminal
  19. Lava: Oxygen Refuel
  20. Lava: Tag Switch (Accepts Chip)
  21. Lava: Tag Switch (Destroyable)
  22. Sewage: Energy Refuel (1x)
  23. Sewage: Energy Refuel (2x)
  24. Sewage: Energy Refuel (3x)
  25. Sewage: Light Switch
  26. Sewage: Platform Switch
  27. Sewage: Tag Switch
  28. Sewage: Pattern Buffer
  29. Sewage: Computer Terminal
  30. Sewage: Oxygen Refuel
  31. Sewage: Tag Switch (Accepts Chip)
  32. Sewage: Tag Switch (Destroyable)
  33. Pfhor: Energy Refuel (1x)
  34. Pfhor: Energy Refuel (2x)
  35. Pfhor: Energy Refuel (3x)
  36. Pfhor: Light Switch
  37. Pfhor: Platform Switch
  38. Pfhor: Tag Switch
  39. Pfhor: Pattern Buffer
  40. Pfhor: Computer Terminal
  41. Pfhor: Oxygen Refuel
  42. Pfhor: Tag Switch (Accepts Chip)
  43. Pfhor: Tag Switch (Destroyable)
  44. Jjaro: Energy Refuel (1x)
  45. Jjaro: Energy Refuel (2x)
  46. Jjaro: Energy Refuel (3x)
  47. Jjaro: Light Switch
  48. Jjaro: Platform Switch
  49. Jjaro: Tag Switch
  50. Jjaro: Pattern Buffer
  51. Jjaro: Computer Terminal
  52. Jjaro: Oxygen Refuel
  53. Jjaro: Tag Switch (Accepts Chip)
  54. Jjaro: Tag Switch (Destroyable)

The control panels can do various things; these are:

  1. Oxygen Refuel
  2. Energy Refuel (1x)
  3. Energy Refuel (2x)
  4. Energy Refuel (3x)
  5. Light switch
  6. Platform switch
  7. Tag switch
  8. Pattern buffer (for saving games)
  9. Computer terminal

The sound types are:

  1. Activating
  2. Deactivating
  3. Unusable


Platforms Element: <platforms>

This kind of element specifies various platform features, such as its sounds and how deadly it is when it crunches. Each individual platform type is specified with a <platform> child element, which has these attributes: The index is which one of these platform types:
  1. S'pht Door
  2. S'pht Split Door
  3. Locked S'pht Door
  4. S'pht Platform
  5. Noisy S'pht Platform
  6. Heavy S'pht Door
  7. Pfhor Door
  8. Heavy S'pht Platform
  9. Pfhor Platform
This element also has child element <damage> (how much damage; it is described in greater detail here),


Liquids (Medias) Element: <liquids>

This kind of element specifies various liquid features, such as how deadly a liquid is, and so forth. Each individual liquid type is specified with a <liquid> child element, which has these attributes: The index value is which one of these liquid types:
  1. Water
  2. Lava
  3. Pfhor
  4. Sewage
  5. Jjaro
while the "submerged" value is which one of these liquid types
  1. Water
  2. Lava
  3. Sewage
  4. Jjaro
  5. Pfhor
This element also has child elements <damage> (how much damage; it is described in greater detail here), <effect> and <sound>. The latter two have two attributes, both mandatory: type and which. The type indicates when to make the effect / sound, while which is the index in the list of effect or sound definitions (-1 means none).

The effects:

  1. Small Detonation
  2. Medium Detonation
  3. Large Detonation
  4. Large Emergence

The sounds:

  1. Feet Entering
  2. Feet Leaving
  3. Head Entering
  4. Head Leaving
  5. Splashing
  6. Ambient Over
  7. Ambient Under
  8. Platform Entering
  9. Platform Leaving


Sounds Element: <sounds>

This kind of element specifies various sound features. Its attributes are various formerly-hardcoded sounds here and there; these are made variable for Marathon 1 compatibility:

NameDefaultDescription
terminal_logon#141Logging-on sound at a terminal
terminal_logoff#142Logging-off sound at a terminal
terminal_page#143Next-page sound at a terminal
teleport_in#1Teleporting in
teleport_out#2Teleporting out
got_powerup#19Picked up a powerup
got_item#20Picked up anything else
crunched#3Monster getting crunched
exploding#198Juggernaut exploding
breathing#6Made when player is underwater (will play more often if oxygen bar is low)
oxygen_warning#7Warning when getting low on oxygen
adjust_volume#18Made when sound volume gets changed
button_success#143Made when an interface-button action succeeds (changes resolution, for example)
button_failure#5Made when an interface-button action fails (unable to change resolution, for example)
button_inoperative#11Made when an interface button cannot make any action
ogl_reset#198OpenGL textures getting reset
center_button#29Main menu center button

It has child elements that specify which ambient, random, and dialog sound assignments to use, and also which external files to use, if desired. The ambient, random, and dialog sound assigments are assignments from their indices to the list of (general) sound definitions, and are specified with child elements <ambient>, <random>, and <dialog>. Each of them has these attributes, both mandatory:

The ambient sounds are:
  1. Water
  2. Sewage
  3. Lava
  4. Goo
  5. Under Liquids
  6. Wind
  7. Waterfall
  8. Siren
  9. Fan
  10. S'pht Door
  11. S'pht Platform
  12. Heavy S'pht Door
  13. Heavy S'pht Platform
  14. Light Machinery
  15. Heavy Machinery
  16. Transformer
  17. Sparking Transformer
  18. Machine Binder
  19. Machine Bookpress
  20. Machine Puncher
  21. Electric
  22. Alarm
  23. Night Wind
  24. Pfhor Door
  25. Pfhor Platform
  26. Alien Noise 1
  27. Alien Noise 2
  28. Alien Harmonics
The random sounds are:
  1. Water Drip
  2. Surface Explosion
  3. Underground Explosion
  4. Loon
  5. Creak
The dialog sounds are:
  1. Intro
  2. OK
  3. Cancel
  4. Error
  5. Select
  6. Click
  7. Type
  8. Delete
  9. Erase

The external sounds are specified with the child element <sound>, which has these attributes:

One clears the external-sound definitions currently present wtih the child element <sound_clear>.


Fader Elements: <faders>

This kind of element is for specifying various fader features, the faders being what causes the whole screen to change color when one is underneath a liquid or getting hit by something. It has two kinds of child elements, <fader> and <liquid>.

The first kind, <fader>, specifies features of each individual fader; it has attributes

and a child element <color>, which is not indexed. For more on specifying colors, go here. The fader types are these:
  1. Tint: fade to the fader's color value:
    [new color] = [old color] + ([fader color] - [old color])*[opacity]
  2. Randomize: do random shifts of the colors:
    [new color] = [old color] + [opacity]*[random numbers]
  3. Negate: darkens light colors and lightens dark colors. For each channel:
    [opacity complement] = 1 - [opacity]
    if [old color] > 0.5 then
       [new color] = max([old color], xor([fader color], [old color]) + [opacity complement])
    else
       [new color] = min([old color], xor([fader color], [old color]) - [opacity complement])
    Intermediate results may be out of (0,1) range.
  4. Dodge: some weird processing. For each channel:
    [new color] = max([old color], 1 - (1 - [fader color])*[old color] - [opacity])
    Intermediate results may be out of (0,1) range.
  5. Burn: some weird processing. For each channel:
    [opacity complement] = 1 - [opacity]
    [new color] = max([old color],[fader color]*[old color] + [opacity complement])
    Intermediate results may be out of (0,1) range.
  6. Soft tint: fade to the fader's color value multiplied by the intensity (maximum of color-channel values):
    [intensity] = max(color channels of [old color])
    [new color] = [old color] + ([fader color]*[intensity] - [old color])*[opacity]
In all these equations, color values are from 0 (black) to 1 (white), and out-of-range result values are reduced to that range by subtracting whichever integer will put the result into that range.

The second kind, <liquid>, specifies faders for liquids; it has attributes

The index is which one of these liquid types:
  1. Water
  2. Lava
  3. Sewage
  4. Jjaro
  5. Pfhor


Player Element: <player>

This kind of element specifies various player-character features, such as starting energy, starting oxygen, rebellion-map stripped energy (specified with attributes), and starting items, damage types, powerup durations and item assignments (specified with child elements), and shapes (player collection and sequences for various states). The attributes are: Note: the oxygen depletion and replenishment rates can be negative if one so desires, making changes in the opposite direction.

The starting items can be set with an element of <item>, which has attributes:

Both of them are mandatory. The first weapon in the list is the one that will get used. The default list is:
  1. Pistol
  2. Knife
  3. Knife
  4. Pistol Ammo
  5. Pistol Ammo
  6. Pistol Ammo
  7. Knife
  8. Knife
  9. Knife
  10. Knife
  11. Knife
  12. Knife
  13. Knife
  14. Knife
  15. Knife
  16. Knife

The responses to various kinds of damage can be set with an element of <damage>, which has attributes:

If there is none of something, then it gets a value of -1. Soft death for sprites can also be specified with a -1.

The durations of the powerups can be set with an element of <powerup>. It has these attributes

These have a value of the number of engine ticks the powerup lasts; an engine tick is 1/30 second.

The item assignments of the powerups can be set with an element of <powerup_assign>. It has these attributes

If one turns some ammo or other non-powerup item into a powerup, be sure to set its item type to be "powerup" with the items element.

Player shapes can be set with an element of <shape>, which differs from the usual element with that name; the player shapes have an overall collection and various sequences, and each element will set either that collection or one of the sequences. It has these attributes, all of which are mandatory:

The types and subtypes have these values:

  1. Collection and Death Sequences
    1. Collection (default: 6)
    2. Hard dying (default: 9)
    3. Soft dying (default: 8)
    4. Hard dead (default: 11)
    5. Soft dead (default: 10)
  2. Leg Sequences (player actions)
    1. Stationary (default: 7)
    2. Walking (default: 0)
    3. Running (default: 0)
    4. Sliding (default: 24)
    5. Airborne (default: 23)
  3. Idle-Weapon Torso Sequences
  4. Charging-Weapon Torso Sequences
  5. Firing-Weapon Torso Sequences
    1. Fists (defaults: 1, 1, 2)
    2. Pistol (defaults: 3, 3, 4)
    3. Fusion Pistol (defaults: 20, 21, 22)
    4. Assault Rifle (defaults: 26, 26, 27)
    5. Rocket Launcher (defaults: 14, 14, 15)
    6. Flamethrower (defaults: 12, 12, 13)
    7. Alien Weapon (defaults: 31, 31, 32)
    8. Shotgun (defaults: 16, 16, 17)
    9. Ball (defaults: 28, 28, 28)
    10. SMG (defaults: 33, 33, 34)
    11. Two Pistols (defaults: 5, 5, 6)
    12. Two Shotguns (defaults: 18, 18, 19)

View Element: <view>

This kind of element specifies various view features. It has these attributes:

This element has the child elements <font>, for setting on-screen-display fonts and <fov>, which is for setting field-of-view features.

The default on-screen font is "Monaco", size 12, normal style; for more on setting fonts, go here.

Field-of-view features are set with child element <fov>, which has these attributes:

All of them are in degrees, all of them are floating-point values (can be non-integer) between 0 and 180, and all of them are optional.


Weapons Element: <weapons>

This kind of element specifies various features of the weapons, such as shell casings and weapon order (child elements <shell_casings> and <order>).

Shell-casing features one can specify with the child element <shell_casings>, which has these attributes:

The time unit here is the engine tick; x0, y0, vx0, vy0, dvx, and dvy are all floating-point values that are relative to the screen (0 = left, 1 = right; 0 = bottom, 1 = top).

The various types of shell casings are:

  1. Assault rifle
  2. Centered pistol
  3. Left-side pistol
  4. Right-side pistol
  5. SMG

The weapon order can be specified with the child element <order>, which has these attributes, both mandatory:

The default weapon order is

  1. Fist
  2. Pistol
  3. Fusion Pistol
  4. Shotgun
  5. Assault Rifle
  6. SMG
  7. Flamethrower
  8. Rocket Launcher
  9. Alien Weapon
  10. Ball


Items Element: <items>

This kind of element specifies various features of items that can be picked up. These are specified with the child element <item>, which has these attributes:

The item shape can be specified with a shape child element, which can be blank (<shape/>).


Damage-Kicks Element: <damage_kicks>

This element specifies the velocity impulse that some damage type will produce. The kick for each damage type is specified with a <kick> child element, which has these attributes:

Monsters Element: <monsters>

This element specifies additional characteristics of monsters. Each monster type is specified with a <monster> child element, which has these attributes:

Scenery Element: <scenery>

This kind of element specifies various features of scenery objects, including size and solidity. Each individual type of scenery object is specified with a <object> child element, which has these attributes:

This element's shapes can be specified with child elements <normal> and <destroyed>, for before-and-after shapes; each of them has the actual shape value specified with a shape child element.

Some notes on the flags:

"Destroyable" is not meaningful unless the object is also "solid"; this is because a projectile must collide with the object in order to destroy it. Thus, a solid but indestructible object would get flags="1", and a destroyable one would get flags="5".

The index is which one of these scenery-object types:

  1. Lava: light dirt
  2. Lava: dark dirt
  3. Lava: bones
  4. Lava: bone
  5. Lava: ribs
  6. Lava: skull
  7. Lava: hanging light 1
  8. Lava: hanging light 2
  9. Lava: small cylinder
  10. Lava: large cylinder
  11. Lava: block 1
  12. Lava: block 2
  13. Lava: block 3
  14. Water: pistol clip
  15. Water: short light
  16. Water: long light
  17. Water: siren
  18. Water: rocks
  19. Water: blood drops
  20. Water: water thing
  21. Water: gun
  22. Water: Bob remains
  23. Water: puddles
  24. Water: big puddles
  25. Water: security monitor
  26. Water: alien supply can
  27. Water: machine
  28. Water: fighter's staff
  29. Sewage: stubby green light
  30. Sewage: long green light
  31. Sewage: junk
  32. Sewage: big antenna 1
  33. Sewage: big antenna 2
  34. Sewage: alien supply can
  35. Sewage: bones
  36. Sewage: big bones
  37. Sewage: Pfhor pieces
  38. Sewage: Bob pieces
  39. Sewage: Bob blood
  40. Pfhor: green light
  41. Pfhor: small alien light
  42. Pfhor: alien ceiling rod light
  43. Pfhor: bulbous yellow alien object
  44. Pfhor: square gray organic object
  45. Pfhor: Pfhor skeleton
  46. Pfhor: Pfhor mask
  47. Pfhor: green stuff
  48. Pfhor: Hunter shield
  49. Pfhor: bones
  50. Pfhor: alien sludge
  51. Jjaro: short ceiling light
  52. Jjaro: long light
  53. Jjaro: weird rod
  54. Jjaro: Pfhor ship
  55. Jjaro: Sun
  56. Jjaro: large glass container
  57. Jjaro: nub 1
  58. Jjaro: nub 2
  59. Jjaro: Lh'owon
  60. Jjaro: floor whip antenna
  61. Jjaro: ceiling whip antenna


Landscapes Element: <landscapes>

This kind of element is for modifying landscape rendering. This element has two kinds of child elements, <clear> and <landscape>.

The first one, <clear>, clears the landscape options, setting them back to their defaults; if it has an attribute of "coll", it will clear the sequences for the collection specified in that attribute's value; if not, it will clear all the sequences. However, this command can be followed by commands to set up landscape options, which will then be executed as if no "clear" command had been issued.

The second one, <landscape>, specifies the landscape options themselves. It takes these attributes:


Texture-Loading Element: <texture_loading>

This kind of element is for setting what textures are to be loaded. It has one attribute, "landscapes", which is boolean; it indicates whether or not to load M2/Moo-style landscapes (collections 26 to 30). It also has a child element, <texture_env>, for indicating what wall-texture and scenery collections are to be loaded. It takes these attributes, all mandatory:

The defaults for Marathon 2/oo are, in order (walls, scenery):

  1. 17, 22 -- Lh'owon Water
  2. 18, 23 -- Lh'owon Lava
  3. 19, 24 -- Lh'owon Sewage
  4. 20, 25 -- Jjaro
  5. 21, 26 -- Pfhor

Those for Marathon 1 are, in order (walls, control panels, scenery):

  1. 17, 8, 23 -- Marathon Set 1
  2. 18, 8, 23 -- Marathon Set 2
  3. 19, 8, 23 -- Marathon Set 3
  4. 2, 24, 25 -- Pfhor

Note also that Marathon 1 has its landscapes in the wall-texture collections; the attribute "landscapes" is to be false for it.


OpenGL-Rendering Element: <opengl>

This kind of element is for modifying the OpenGL rendering. Currently, both texture-rendering modification and fog are supported; texture-rendering modification modifies the rendering of each bitmap. This element has these kinds of child elements, <txtr_clear>, <texture>, <model_clear>, <model>, <shader>, and <fog>.

The first one, <txtr_clear>, clears the texture options, setting them back to their defaults. If it has an attribute of "coll", it will clear the sequences for the collection specified in that attribute's value; if not, it will clear all the sequences. However, this command can be followed by commands to set up texture options, which will then be executed as if no "txtr_clear" command had been issued.

The next one, <texture>, specifies the texture options themselves. It takes these attributes:

Note: all resulting values will be pegged to the range 0 to 1. Here are the various opacity types:

  1. Crisp edges. The opacity threshold is 0.5.
  2. Fuzzy edges.
  3. Fuzzy edges with opacity = average of color channels.
  4. Fuzzy edges with opacity = maximum of color channels.

The opacities of all but the first will be scaled and shifted with opac_scale and opac_shift. The first one of these is good for objects with well-defined edges; the others are good for clouds, flames, energy-weapon bolts, and so forth, which will not have sharp boundaries. The average and maximum modes were included as a way of producing variable opacity without adding any new files; this hack was inspired by the semitransparency handling in the Tomb Raider series. The idea here is that the brighter regions are likely to be the more opaque ones in these cases. I've put both of them in because they behave somewhat differently; max has the same strength for saturated colors as for grays, while mean has less strength for saturated colors than for grays.

Here are the texture types:

  1. Wall Textures
  2. Landscape Textures
  3. Inhabitants
  4. Weapons in hand

The following texture attributes are deprecated, may not work properly, and should no longer be used:

The values 8 and 9 for the "clut" attribute are deprecated and should no longer be used. Instead, use a "clut" value of -1 and a "clut_variant" of 1 or 2.

The next one, <model_clear>, clears all the model definitions; it works much like <txtr_clear>.

The next one, <model> specifies a 3D model to be used in place of some sequence. Models can either be static, having no built-in animations (most 3D-model formats), or they can be dynamic, having such animations (Brian Barnes's Dim3 model format, for example). These animations are specified by sequence (animation in BB's terminology); each sequence should have at least one frame. There is one special "sequence", the neutral pose, which indicates a model with no animations applied. This element takes child elements <seq_map> and <skin>, and these attributes:

The scaling and rotations will be applied before the shifts; the rotations will be applied in order x, y, and z.

Its child element of <seq_map> is the sequence-mapping element, has these attributes, both mandatory:

A model element can have several such elements, covering many of a collection's sequences.

The model element's child element of <skin> has these attributes, which closely parallel those of <texture>:

The next one, <shader>, specifies custom shader definitions used by the shader-capable renderer. It takes these attributes:

The final one, <fog>, has these attributes:

and a color subelement, which indicates the fog color (default: gray [red = green = blue = 0.5]).


Software Rendering Element: <software>

This kind of element is for modifying the software rendering. This element has the child element <texture>

<texture> specifies options for wall textures only, CLUT 0. It takes these attributes:

Here are the various opacity types:

  1. Crisp edges. Opacity is unaltered (this will cause no visible change in the software renderer).
  2. Fuzzy edges.
  3. Fuzzy edges with opacity = average of color channels.
  4. Fuzzy edges with opacity = maximum of color channels.

In all cases, the wall texture's bitmap transparency definition is unaltered by opac_shift, opac_scale, and opac_type. Therefore, if a bitmap is marked transparent, the pixels that use color 0 will always be transparent, regardless of this MML.


Dynamic-Limits Element: <dynamic_limits>

This kind of element specifies various dynamic limits, more specifically, the maximum numbers of various entities whose quantity varies during the game. These are specified with various child elements, each one of which has a mandatory attribute of "value", which is set to the appropriate number. Here they are:

Player-Name Element: <player_name>

This is the default player name in netgames, which takes the form:
<player_name>Marathon Player</player_name>


Scenario Element: <scenario>

This element is for identifying the scenario. It has an attribute "name" which is the scenario name displayed in the Find Internet Game client, an attribute "version" which is the scenario version displayed in the Find Internet Game client, and an attribute "id" which is used to determine which games to gray out. The defaults for name, version, and id are blank.

There are also child elements <can_join> which specify other scenario ids this one can join.

Scenario names are limited to 32 characters in length. Scenario version strings are limited to 8 characters in length. Scenario IDs are limited to 24 characters in length.

Games show up as joinable when any of these is true:

All matches are case sensitive.

For example:

<scenario name="Marathon Infinity" id="Marathon Infinity">
<can_join>Marathon 2</can_join>
</scenario>

Keyboard-Defaults Element: <keyboard>

This element is for setting the default keyboard settings. It has an attribute "set" which indicates which of the three sets to set keys for (Standard, Arrows, PowerBook), and a child element <key> with attributes Here are the various actions:
  1. Moving Forward
  2. Moving Backward
  3. Turning Left
  4. Turning Right
  5. Sidestepping Left
  6. Sidestepping Right
  7. Looking Left
  8. Looking Right
  9. Looking Up
  10. Looking Down
  11. Looking Center
  12. Cycle Weapons Backward
  13. Cycle Weapons Forward
  14. Left Trigger State
  15. Right Trigger State
  16. Sidestep Don't Turn
  17. Run Don't Walk
  18. Look Don't Turn
  19. Action Trigger State
  20. Toggle Map
  21. Microphone Button

Here are the SDL key definitions, which have been cribbed from the SDL include file "SDL_keysym.h":

  1. SDLK_BACKSPACE
  2. SDLK_TAB
  3. SDLK_CLEAR
  4. SDLK_RETURN
  5. SDLK_PAUSE
  6. SDLK_ESCAPE
  7. SDLK_SPACE
  8. SDLK_EXCLAIM
  9. SDLK_QUOTEDBL
  10. SDLK_HASH
  11. SDLK_DOLLAR
  12. SDLK_AMPERSAND
  13. SDLK_QUOTE
  14. SDLK_LEFTPAREN
  15. SDLK_RIGHTPAREN
  16. SDLK_ASTERISK
  17. SDLK_PLUS
  18. SDLK_COMMA
  19. SDLK_MINUS
  20. SDLK_PERIOD
  21. SDLK_SLASH
  22. SDLK_0
  23. SDLK_1
  24. SDLK_2
  25. SDLK_3
  26. SDLK_4
  27. SDLK_5
  28. SDLK_6
  29. SDLK_7
  30. SDLK_8
  31. SDLK_9
  32. SDLK_COLON
  33. SDLK_SEMICOLON
  34. SDLK_LESS
  35. SDLK_EQUALS
  36. SDLK_GREATER
  37. SDLK_QUESTION
  38. SDLK_AT
  39. SDLK_LEFTBRACKET
  40. SDLK_BACKSLASH
  41. SDLK_RIGHTBRACKET
  42. SDLK_CARET
  43. SDLK_UNDERSCORE
  44. SDLK_BACKQUOTE
  45. SDLK_a
  46. SDLK_b
  47. SDLK_c
  48. SDLK_d
  49. SDLK_e
  50. SDLK_f
  51. SDLK_g
  52. SDLK_h
  53. SDLK_i
  54. SDLK_j
  55. SDLK_k
  56. SDLK_l
  57. SDLK_m
  58. SDLK_n
  59. SDLK_o
  60. SDLK_p
  61. SDLK_q
  62. SDLK_r
  63. SDLK_s
  64. SDLK_t
  65. SDLK_u
  66. SDLK_v
  67. SDLK_w
  68. SDLK_x
  69. SDLK_y
  70. SDLK_z
  71. SDLK_DELETE
  72. SDLK_KP0
  73. SDLK_KP1
  74. SDLK_KP2
  75. SDLK_KP3
  76. SDLK_KP4
  77. SDLK_KP5
  78. SDLK_KP6
  79. SDLK_KP7
  80. SDLK_KP8
  81. SDLK_KP9
  82. SDLK_KP_PERIOD
  83. SDLK_KP_DIVIDE
  84. SDLK_KP_MULTIPLY
  85. SDLK_KP_MINUS
  86. SDLK_KP_PLUS
  87. SDLK_KP_ENTER
  88. SDLK_KP_EQUALS
  89. SDLK_UP
  90. SDLK_DOWN
  91. SDLK_RIGHT
  92. SDLK_LEFT
  93. SDLK_INSERT
  94. SDLK_HOME
  95. SDLK_END
  96. SDLK_PAGEUP
  97. SDLK_PAGEDOWN
  98. SDLK_F1
  99. SDLK_F2
  100. SDLK_F3
  101. SDLK_F4
  102. SDLK_F5
  103. SDLK_F6
  104. SDLK_F7
  105. SDLK_F8
  106. SDLK_F9
  107. SDLK_F10
  108. SDLK_F11
  109. SDLK_F12
  110. SDLK_F13
  111. SDLK_F14
  112. SDLK_F15
  113. SDLK_NUMLOCK
  114. SDLK_CAPSLOCK
  115. SDLK_SCROLLOCK
  116. SDLK_RSHIFT
  117. SDLK_LSHIFT
  118. SDLK_RCTRL
  119. SDLK_LCTRL
  120. SDLK_RALT
  121. SDLK_LALT
  122. SDLK_RMETA
  123. SDLK_LMETA
  124. SDLK_LSUPER (Left "Windows" key)
  125. SDLK_RSUPER (Right "Windows" key)
  126. SDLK_MODE ("Alt Gr" key)
  127. SDLK_COMPOSE (Multi-key compose key)
  128. SDLK_HELP
  129. SDLK_PRINT
  130. SDLK_SYSREQ
  131. SDLK_BREAK
  132. SDLK_MENU
  133. SDLK_POWER (Power Macintosh power key)
  134. SDLK_EURO (Some european keyboards)

Cheating Element: <cheats>

This element controls whether or not the engine will respond to the cheat codes; it has these attributes: and this child element: <keyword>, which is for specifying the cheat keywords. It has a mandatory attribute, "index", and some contained text, as with the text-string elements.

The cheat-code keywords and their defaults are

  1. Energy (1x): NRG
  2. Oxygen: OTWO
  3. Map Everything: MAP
  4. Invisible: BYE
  5. Invincible: NUKE
  6. Infravision: SEE
  7. Extravision: WOW
  8. Pistol: MAG
  9. Assault Rifle: RIF
  10. Rocket Launcher: POW
  11. Flamethrower: TOAST
  12. Fusion Gun: MELT
  13. Shotgun: PUFF
  14. SMG: ZIP
  15. Alien weapon: PZBXAY
  16. All weapons' ammo: AMMO
  17. Jump: QWE
  18. Everything (almost): SHIT
  19. Save at this spot: YOURMOM

For example, making the energy cheat into "JUICE" means setting up

<keyword index="0">JUICE</keyword>

Hold down control and type the cheat code in to activate it.


Logging Configuration Element: <logging>

This element is used to configure Aleph One's logging behavior. It has no attributes of its own. Its single child element, <logging_domain>, requests particular logging behaviors for a logging domain.

The <logging_domain> element has the following attributes:

The following are the currently-defined standard log levels:
  1. logFatalLevel: program must exit
  2. logErrorLevel: can't do something significant
  3. logWarningLevel: can continue but results could be really screwy
  4. logAnomalyLevel: can continue, results could be off a little, but no big deal
  5. logNoteLevel: something worth mentioning
  6. logTraceLevel: details of actions and logic
  7. logDumpLevel: values of data etc.
Note that the <threshhold> attribute requires that the level be specified as an integer (but that it need not equal one of the standard levels), and further that log messages with level exactly equal to the threshhold level will NOT be seen.

Example:

<logging>
<logging_domain domain="global" threshhold="40" show_locations="true" flush="true"/>
</logging>
This would set up the "global" logging domain such that only messages more important than "notes" would be seen; that source code filenames and line numbers would be included in the log; and that the log file would be flushed after every message, so a message logged just before an application crash would appear in the log file.


Console

The <console> tag controls messages typed into or printed to the screen. It has these attributes: There are also child elements for macros and carnage messages:

Macros

Macros are substitutions performed on commands entered into the console. For instance, you can make a macro that changes ".1" into "I'll defend". Macros can be used for chat, or to shorten other commands. Each macro child element has an input and an output attribute. To trigger the macro, type a dot immediately followed by the macro input into the console.

Macro inputs can be letters and numbers, but not spaces. Anything after the first space will remain unsubstituted. For instance, ".1 you losers" becomes "I'll defend you losers"

Example:

<console>
<macro input="1" output="I'll defend"/>
</console>

Carnage Messages

Carnage messages are printed to the screen when a player is killed by himself or another player in a net game (assuming the gatherer has not disabled carnage messages). Each <carnage_message> tag has these attributes: A blank string (the default) results in nothing being printed.

Example:

<console>
<carnage_message projectile_type="14" 
     on_kill="%aggressor% killed %player% with a SPNKR" 
     on_suicide="%player% suicided with a SPNKR"/>
</console>

Level Scripting

Unlike most MML elements, a level-script element can only live in a map file, and it must be TEXT resource 128 or some equivalent, in order for its parser to know where to find it. Its root element is <marathon_levels> and not <marathon>, to distinguish it from the usual sort of MML.

It has child elements <level>, <end>, <default>, <restore>, and <end_screens>, all but the last one specify what individual level scripts to execute. The element <level> has a mandatory attribute, "index", which specifies which level the script is for; the first one is index 0. The element <end> specifies a script that is for the end of a game; The element <default> specifies a script that is for the entire map file; it is executed before a level's script is executed, for rather obvious reasons. The element <restore> is intended to restore parameters to their A1 defaults when switching to another map file; this is done because the parameters that the MML parser sets are set in a "sticky" fashion, and because saving and restoring default values inside the code would require a whole lot of extra coding.

These elements have child elements that specify the script entries; the entries are executed in the order that they are specified in the file. This means that music files played in sequential order will be played in the order that they are specified in, the first in the list played first, etc.

Directoris and files are specified in Unix fashion, <dirname>/<dirname>/<filename>, with a ':' being translated into a '/' in the MacOS. The root directory for such specifications is the map file's parent directory, so something like "Music/bang_my_head.mp3" means looking for file "bang_my_head.mp3" in the directory "Music", which is in the same directory that the map file lives in.

Aleph One supports playing back MPEG-1 movies, and AIFF, WAV, Ogg/Vorbis, and mp3 music.

Finally, the <end_screens> element is for specifying which PICT resources are to be used as the end-of-game screen displays. This specification is done with these attributes:

You can also use <load_screen>, <music>, and <random_order> in a <default_levels> tag in regular <marathon> MML.


Appendix 1: Additional Elements

Colors

Colors are specified with the element <color> colors may be either indexed (being list members), or non-indexed (being in isolation). The color channels are red, green, and blue, with values that range from 0 to 1. All the color-channel attributes (red, green, blue) are mandatory. This example makes color 7 be yellow:
<color index="7" red="1" green="1" blue="0"/>

Shapes

Shapes can be specified with the element <shape>. A shape specification includes which collection, which color table, and which sequence or frame; a shape may also be allowed to be blank. A shape's attributes are A blank shape is specified as one having no attributes: <shape/>. A non-blank shape requires the collection and sequence attributes, and optionally the color-table attribute (default: 0).

Damage

Damage is specified with the element <damage>. Damage features are set with these attributes, which are all optional.

Fonts

Fonts are specified with the element <font> like colors, fonts may be either indexed (being list members), or non-indexed (being in isolation). None of the font attributes proper are mandatory. This example sets font 4 to the default font for the computer terminals.
<font index="4" name="Courier" size="12" style="0"/>

Boolean data

This is not a separate element, but a kind of value of an attribute. These values for a boolean attribute, indicate that a flag is to be on or an action is to be taken. These values, indicate that a flag is to be off or an action is not to be taken.


Appendix 2: Lists of Entity Types

The collections:
  1. Interface
  2. Weapons in Hand
  3. Juggernaut
  4. Tick
  5. Explosion Effects
  6. Hunter
  7. Player
  8. Items
  9. Trooper
  10. Pfhor Fighter
  11. S'pht'Kr
  12. F'lickta
  13. Bob
  14. VacBob
  15. Enforcer
  16. Drone
  17. S'pht
  18. Walls - Water
  19. Walls - Lava
  20. Walls - Sewage
  21. Walls - Jjaro
  22. Walls - Pfhor
  23. Scenery - Water
  24. Scenery - Lava
  25. Scenery - Sewage
  26. Scenery - Jjaro
  27. Scenery - Pfhor
  28. Landscape - Day
  29. Landscape - Night
  30. Landscape - Moon
  31. Landscape - Outer Space
  32. Cyborg

The monsters:

  1. Player
  2. Tick - Energy
  3. Tick - Oxygen
  4. Tick - Kamikaze
  5. S'pht - Minor
  6. S'pht - Major
  7. S'pht - Minor Invisible
  8. S'pht - Major Invisible
  9. Pfhor Fighter - Minor
  10. Pfhor Fighter - Major
  11. Pfhor Fighter - Minor Projectile
  12. Pfhor Fighter - Major Projectile
  13. Bob - Crew
  14. Bob - Science
  15. Bob - Security
  16. Bob - Bad
  17. Drone - Minor
  18. Drone - Major
  19. Drone - Big Minor
  20. Drone - Big Major
  21. Drone - Subverted
  22. Cyborg - Minor
  23. Cyborg - Major
  24. Cyborg - Minor Flame
  25. Cyborg - Major Flame
  26. Enforcer - Minor
  27. Enforcer - Major
  28. Hunter - Minor
  29. Hunter - Major
  30. Trooper - Minor
  31. Trooper - Major
  32. Mother of All Cyborgs
  33. Mother of All Hunters
  34. F'lickta - Sewage
  35. F'lickta - Water
  36. F'lickta - Lava
  37. S'pht'Kr - Minor
  38. S'pht'Kr - Major
  39. Juggernaut - Minor
  40. Juggernaut - Major
  41. Tiny Fighter
  42. Tiny Bob
  43. Tiny F'lickta
  44. VacBob - Crew
  45. VacBob - Science
  46. VacBob - Security
  47. VacBob - Bad

The items to be picked up:

  1. Knife (apparently some placeholder item for "nothing")
  2. Pistol
  3. Pistol Ammo
  4. Fusion Pistol
  5. Fusion Pistol Ammo
  6. Assault Rifle
  7. Assault Rifle Bullets
  8. Assault Rifle Grenades
  9. Rocket Launcher
  10. Rockets
  11. Invisibility Powerup
  12. Invincibility Powerup
  13. Infravision Powerup
  14. Alien Weapon
  15. Alien Weapon Ammo
  16. Flamethrower
  17. Flamethrower Ammo
  18. Extravision Powerup
  19. Oxygen Powerup
  20. Energy Powerup x1
  21. Energy Powerup x2
  22. Energy Powerup x3
  23. Shotgun
  24. Shotgun Ammo
  25. S'pht Door Key
  26. Uplink Chip
  27. Light Blue Ball
  28. Red Ball (the skull)
  29. Violet Ball
  30. Yellow Ball
  31. Brown Ball
  32. Orange Ball
  33. Blue Ball
  34. Green Ball
  35. SMG
  36. SMG Ammo

The weapons:

  1. Fist
  2. Pistol
  3. Fusion Pistol
  4. Assault Rifle
  5. Rocket Launcher
  6. Flamethrower
  7. Alien Weapon
  8. Shotgun
  9. Ball
  10. SMG

The projectiles:

  1. Rocket
  2. Grenade
  3. Pistol Bullet
  4. Rifle Bullet
  5. Shotgun Bullet
  6. Staff Hit
  7. Staff Bolt
  8. Flamethrower Flames
  9. S'pht Bolt - Minor
  10. S'pht Bolt - Major (Seeking)
  11. Alien-Weapon Bolt
  12. Fusion Bolt - Minor
  13. Fusion Bolt - Major
  14. Hunter Bolt
  15. Fist Punch
  16. Armageddon Sphere
  17. Armageddon Electricity
  18. Juggernaut Rocket
  19. Trooper Bullet
  20. Trooper Grenade
  21. S'pht'Kr Bolt - Minor
  22. S'pht'Kr Bolt - Major
  23. Juggernaut Missile
  24. Energy Drain - Minor
  25. Energy Drain - Major
  26. Oxygen Drain
  27. Drone Bolt - Minor
  28. Drone Bolt - Major
  29. Drone Bolt - Subverted
  30. Grenade - Minor Cyborg (Bouncing)
  31. Grenade - Major Cyborg (Seeking)
  32. Ball
  33. Dispersal - Minor Fusion
  34. Dispersal - Major Fusion
  35. Dispersal - Overloaded Fusion
  36. F'lickta Claw
  37. F'lickta Glob
  38. F'lickta Lava Glob
  39. SMG Bullet

The effects:

  1. Rocket Explosion
  2. Rocket Contrail
  3. Grenade Explosion
  4. Grenade Contrail
  5. Bullet Impact
  6. Alien Weapon Impact
  7. Flamethrower Flame
  8. Pfhor Hit
  9. Player Hit
  10. Bob Hit
  11. Bad Bob Hit
  12. Enforcer Hit
  13. S'pht Bolt Minor Impact
  14. S'pht Bolt Major Impact
  15. S'pht Bolt Major Contrail
  16. Pfhor Projectile Impact
  17. Pfhor Melee Hit
  18. Hunter Projectile Detonation
  19. Hunter Hit
  20. Minor Fusion Impact
  21. Major Fusion Impact
  22. Major Fusion Contrail
  23. Fist Hit
  24. Minor S'pht'Kr Impact
  25. Minor S'pht'Kr Impact
  26. S'pht'Kr Hit
  27. Trooper Hit
  28. Water Lamp Breaking
  29. Lava Lamp Breaking
  30. Sewage Lamp Breaking
  31. Pfhor Lamp Breaking
  32. Clank (melee hit)
  33. Teleport In
  34. Teleport Out
  35. Small Water Splash
  36. Medium Water Splash
  37. Large Water Splash
  38. Large Water Emergence
  39. Small Lava Splash
  40. Medium Lava Splash
  41. Large Lava Splash
  42. Large Lava Emergence
  43. Small Sewage Splash
  44. Medium Sewage Splash
  45. Large Sewage Splash
  46. Large Sewage Emergence
  47. Small Goo Splash
  48. Medium Goo Splash
  49. Large Goo Splash
  50. Large Goo Emergence
  51. Minor Drone Projectile Impact
  52. Major Drone Projectile Impact
  53. Subverted Drone Projectile Impact
  54. Drone Hit
  55. Cyborg Projectile Explosion
  56. Cyborg Hit
  57. Minor Fusion Dispersal
  58. Major Fusion Dispersal
  59. Overloaded Fusion Dispersal
  60. Sewage F'lickta Hit
  61. Sewage F'lickta Projectile Hit
  62. Water F'lickta Hit
  63. Lava F'lickta Hit
  64. Lava F'lickta Projectile Hit
  65. F'lickta Claw
  66. Juggernaut Hit
  67. Juggernaut Missile Contrail
  68. Small Jjaro Splash
  69. Medium Jjaro Splash
  70. Large Jjaro Splash
  71. Large Jjaro Emergence
  72. VacBob Hit
  73. Bad VacBob Hit

Player-damage types (out of order from "true" damage types):

  1. Explosion
  2. Crushing
  3. Bullet
  4. Shotgun Bullet
  5. Electrical Staff
  6. Hulk Slap
  7. Absorbed
  8. Teleporter
  9. Flame
  10. Hound Claws
  11. S'pht Bolt
  12. Alien-Weapon Bolt
  13. Hunter Bolt
  14. Fusion Bolt
  15. Fist
  16. F'lickta Claws
  17. F'lickta Glob
  18. S'pht'Kr Bolt
  19. Lava
  20. Goo
  21. Suffocation
  22. Energy Drain
  23. Oxygen Drain
  24. Drone Bolt

"True" damage types:

  1. Explosion
  2. Electrical Staff
  3. Bullet
  4. Absorbed
  5. Flame
  6. Hound Claws
  7. Alien-Weapon Bolt
  8. Hulk Slap
  9. S'pht Bolt
  10. Fusion Bolt
  11. Hunter Bolt
  12. Fist
  13. Teleporter
  14. S'pht'Kr Bolt
  15. F'lickta Claws
  16. F'lickta Glob
  17. Crushing
  18. Lava
  19. Suffocation
  20. Goo
  21. Energy Drain
  22. Oxygen Drain
  23. Drone Bolt
  24. Shotgun Bullet

The faders:

  1. Start Cinematic Fade In
  2. Cinematic Fade In
  3. Long Cinematic Fade In
  4. Cinematic Fade Out
  5. End Cinematic Fade Out
  6. Red (bullets, fists)
  7. Big Red (bigger bullets, fists)
  8. Picked Something Up
  9. Bright (teleporting)
  10. Long Bright (nuclear explosions)
  11. Yellow (explosions)
  12. Big Yellow (big explosions)
  13. Purple
  14. Cyan (Pfhor-staff/projectile hits)
  15. White (absorbed)
  16. Big White
  17. Orange (flamethrower)
  18. Long Orange (M1 lava)
  19. Green (Hunter projectile)
  20. Long Green (M1 goo)
  21. Static (S'pht projectile)
  22. Negative (minor fusion bolt)
  23. Big Negative (major fusion bolt)
  24. Flicker Negative (Drone bolt)
  25. Dodge Purple (alien weapon)
  26. Burn Cyan (Armageddon Beast electricity)
  27. Dodge Yellow (Armageddon Beast projectile)
  28. Burn Green (Hunter projectile)
  29. Tint Green (under goo)
  30. Tint Blue (under water)
  31. Tint Orange (under lava)
  32. Tint Gross (under sewage)
  33. Tint Jjaro (under JjaroGoo)

The texture-mapping transfer modes:

  1. Normal
  2. Fade Out to Black
  3. Invisibility
  4. Subtle Invisibility
  5. Pulsate
  6. Wobble
  7. Fast Wobble
  8. Static
  9. 50% Static
  10. Landscape
  11. Smear
  12. Fade Out Static
  13. Pulsating Static
  14. Fold In
  15. Fold Out
  16. Horizontal Slide
  17. Fast Horizontal Slide
  18. Vertical Slide
  19. Fast Vertical Slide
  20. Wander
  21. Fast Wander
  22. Big Landscape

The sounds:

  1. Startup
  2. Teleport In
  3. Teleport Out
  4. Body Being Crunched
  5. Creak
  6. Absorbed
  7. Breathing
  8. Oxygen Warning
  9. Suffocation
  10. Energy Refuel
  11. Oxygen Refuel
  12. Can't Toggle Switch
  13. Switch On
  14. Switch Off
  15. Puzzle Switch
  16. Chip Insertion
  17. Pattern Buffer
  18. Destroy Control Panel
  19. Adjust Volume
  20. Got Powerup
  21. Got Item
  22. Bullet Ricochet
  23. Metallic Ricochet
  24. Empty Gun
  25. S'pht Door Opening
  26. S'pht Door Closing
  27. S'pht Door Obstructed
  28. S'pht Platform Starting
  29. S'pht Platform Stopping
  30. Loon
  31. SMG Firing
  32. SMG Reloading
  33. Heavy S'pht Platform Starting
  34. Heavy S'pht Platform Stopping
  35. Fist Hitting
  36. Pistol Firing
  37. Pistol Reloading
  38. Assault Rifle Firing
  39. Grenade Launcher Firing
  40. Grenade Exploding
  41. Grenade Flyby
  42. Fusion Firing
  43. Fusion Exploding
  44. Fusion Flyby
  45. Fusion Charging
  46. Rocket Exploding
  47. Rocket Flyby
  48. Rocket Firing
  49. Flamethrower
  50. Body Falling
  51. Body Exploding
  52. Bullet Hitting Flesh
  53. Fighter Activate
  54. Fighter Wail
  55. Fighter Scream
  56. Fighter Chatter
  57. Fighter Attack
  58. Fighter Projectile Hit
  59. Fighter Projectile Flyby
  60. S'pht Attack
  61. S'pht Death
  62. S'pht Hit
  63. S'pht Projectile Flyby
  64. S'pht Projectile Hit
  65. Cyborg Moving
  66. Cyborg Attack
  67. Cyborg Hit
  68. Cyborg Death
  69. Cyborg Projectile Bounce
  70. Cyborg Projectile Hit
  71. Cyborg Projectile Flyby
  72. Drone Activate
  73. Drone Start Attack
  74. Drone Attack
  75. Drone Dying
  76. Drone Death
  77. Drone Projectile Hit
  78. Drone Projectile Flyby
  79. Bob Wail
  80. Bob Scream
  81. Bob Hit
  82. Bob Chatter
  83. Bad Bob Chatter
  84. Bob Trash Talk
  85. Bob Apology
  86. Bob Activation
  87. Bob Clear
  88. Bob Stop Shooting Me, You Bastard
  89. Bob Area Secure
  90. Bob Kill the Player
  91. Water
  92. Sewage
  93. Lava
  94. Goo
  95. Under Liquids
  96. Wind
  97. Waterfall
  98. Siren
  99. Fan
  100. S'pht Door
  101. S'pht Platform
  102. Alien Harmonics
  103. Heavy S'pht Platform
  104. Light Machinery
  105. Heavy Machinery
  106. Transformer
  107. Sparking Transformer
  108. Water Drip
  109. Walking in Water
  110. Exit Water
  111. Enter Water
  112. Small Water Splash
  113. Medium Water Splash
  114. Large Water Splash
  115. Walking in Lava
  116. Enter Lava
  117. Exit Lava
  118. Small Lava Splash
  119. Medium Lava Splash
  120. Large Lava Splash
  121. Walking in Sewage
  122. Exit Sewage
  123. Enter Sewage
  124. Small Sewage Splash
  125. Medium Sewage Splash
  126. Large Sewage Splash
  127. Walking in Goo
  128. Exit Goo
  129. Enter Goo
  130. Small Goo Splash
  131. Medium Goo Splash
  132. Large Goo Splash
  133. Major Fusion Firing
  134. Major Fusion Charged
  135. Assault Rifle Reloading
  136. Assault Rifle Shell Casings
  137. Shotgun Firing
  138. Shotgun Reloading
  139. Ball Bounce
  140. You Are It
  141. Got Ball
  142. Computer interface Logon
  143. Computer interface Logout
  144. Computer interface Page
  145. Heavy S'pht Door
  146. Heavy S'pht Door Opening
  147. Heavy S'pht Door Closing
  148. Heavy S'pht Door Open
  149. Heavy S'pht Door Closed
  150. Heavy S'pht Door Obstructed
  151. Hunter Activate
  152. Hunter Attack
  153. Hunter Dying
  154. Hunter Landing
  155. Hunter Exploding
  156. Hunter Projectile Hit
  157. Hunter Projectile Flyby
  158. Enforcer Activate
  159. Enforcer Attack
  160. Enforcer Projectile Hit
  161. Enforcer Projectile Flyby
  162. F'lickta Melee Attack
  163. F'lickta Melee Attack Hit
  164. F'lickta Projectile Attack
  165. F'lickta Projectile Sewage Attack Hit
  166. F'lickta Projectile Sewage Flyby
  167. F'lickta Projectile Lava Attack Hit
  168. F'lickta Projectile Lava Flyby
  169. F'lickta Dying
  170. Machine Binder
  171. Machine Bookpress
  172. Machine Puncher
  173. Electric
  174. Alarm
  175. Night Wind
  176. Surface Explosion
  177. Underground Explosion
  178. S'pht'Kr Attack
  179. S'pht'Kr Hit
  180. S'pht'Kr Flyby
  181. S'pht'Kr Being Hit
  182. S'pht'Kr Exploding
  183. Tick Chatter
  184. Tick Falling
  185. Tick Flapping
  186. Tick Exploding
  187. Ceiling Lamp Exploding
  188. Pfhor Platform Starting
  189. Pfhor Platform Stopping
  190. Pfhor Platform
  191. Pfhor Door Opening
  192. Pfhor Door Closing
  193. Pfhor Door Obstructed
  194. Pfhor Door
  195. Pfhor Switch Off
  196. Pfhor Switch On
  197. Juggernaut Firing
  198. Juggernaut Warning
  199. Juggernaut Exploding
  200. Juggernaut Preparing to Fire
  201. Enforcer Exploding
  202. Alien Noise 1
  203. Alien Noise 2
  204. VacBob Wail
  205. VacBob Scream
  206. VacBob Hit
  207. VacBob Chatter
  208. Bad VacBob Chatter
  209. VacBob Trash Talk
  210. VacBob Apology
  211. VacBob Activation
  212. VacBob Clear
  213. VacBob Stop Shooting Me, You Bastard
  214. VacBob Area Secure
  215. VacBob Kill the Player