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. On the MacOS version of Aleph One, MML scripts are stored as TEXT resources in the Aleph One app which are accessed in increasing order of ID. On the SDL version of Aleph One, the scripts are stored in "MML" subdirectories of the local and 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. But one problem that I currently face is that the lists in this document are shown as starting from 1 instead of 0. I'm not sure how to correct that without numbering the items by hand; this document contains the kludge of adding 1000.

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: 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 Button
  14. Save-Last Button
  15. Replace-Saved Button
  16. Credits Button
  17. Quit Button
  18. Center Button

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:

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
  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

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

It has child elements that specify which ambient and random sound assignments to use, and also which external files to use, if desired. The ambient and random sound assigments are assignments from their indices to the list of (general) sound definitions, and are specified with child elements <ambient> and <random>. 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 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:

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:

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:

"Animated" isn't really used by the engine; the engine reads the animations off of the sequences without reference to it.

"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>, 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.
Here are the various blend types, to be used for semitransparent rendering:
  1. Crossfade blending; reasonable for semitransparent, non-glowing object
  2. Additive blending; reasonable for glowing, low-opacity object

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 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 final one, <fog>, has these attributes:

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


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 MacOS key definitions; note that these are Apple's virtual key values, which differ from the ASCII values. This documentation was cribbed from Figures 2-9 and 2-10 in the MacOS Classic low-level keyboard-input documentation. Those illustrations show hexadecimal values; they have been converted to decimal here:

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

	/* The keyboard syms have been cleverly chosen to map to ASCII */
	SDLK_UNKNOWN		= 0,
	SDLK_FIRST		= 0,
	SDLK_BACKSPACE		= 8,
	SDLK_TAB		= 9,
	SDLK_CLEAR		= 12,
	SDLK_RETURN		= 13,
	SDLK_PAUSE		= 19,
	SDLK_ESCAPE		= 27,
	SDLK_SPACE		= 32,
	SDLK_EXCLAIM		= 33,
	SDLK_QUOTEDBL		= 34,
	SDLK_HASH		= 35,
	SDLK_DOLLAR		= 36,
	SDLK_AMPERSAND		= 38,
	SDLK_QUOTE		= 39,
	SDLK_LEFTPAREN		= 40,
	SDLK_RIGHTPAREN		= 41,
	SDLK_ASTERISK		= 42,
	SDLK_PLUS		= 43,
	SDLK_COMMA		= 44,
	SDLK_MINUS		= 45,
	SDLK_PERIOD		= 46,
	SDLK_SLASH		= 47,
	SDLK_0			= 48,
	SDLK_1			= 49,
	SDLK_2			= 50,
	SDLK_3			= 51,
	SDLK_4			= 52,
	SDLK_5			= 53,
	SDLK_6			= 54,
	SDLK_7			= 55,
	SDLK_8			= 56,
	SDLK_9			= 57,
	SDLK_COLON		= 58,
	SDLK_SEMICOLON		= 59,
	SDLK_LESS		= 60,
	SDLK_EQUALS		= 61,
	SDLK_GREATER		= 62,
	SDLK_QUESTION		= 63,
	SDLK_AT			= 64,
	/* 
	   Skip uppercase letters
	 */
	SDLK_LEFTBRACKET	= 91,
	SDLK_BACKSLASH		= 92,
	SDLK_RIGHTBRACKET	= 93,
	SDLK_CARET		= 94,
	SDLK_UNDERSCORE		= 95,
	SDLK_BACKQUOTE		= 96,
	SDLK_a			= 97,
	SDLK_b			= 98,
	SDLK_c			= 99,
	SDLK_d			= 100,
	SDLK_e			= 101,
	SDLK_f			= 102,
	SDLK_g			= 103,
	SDLK_h			= 104,
	SDLK_i			= 105,
	SDLK_j			= 106,
	SDLK_k			= 107,
	SDLK_l			= 108,
	SDLK_m			= 109,
	SDLK_n			= 110,
	SDLK_o			= 111,
	SDLK_p			= 112,
	SDLK_q			= 113,
	SDLK_r			= 114,
	SDLK_s			= 115,
	SDLK_t			= 116,
	SDLK_u			= 117,
	SDLK_v			= 118,
	SDLK_w			= 119,
	SDLK_x			= 120,
	SDLK_y			= 121,
	SDLK_z			= 122,
	SDLK_DELETE		= 127,
	/* End of ASCII mapped keysyms */

	/* International keyboard syms */
	SDLK_WORLD_0		= 160,		/* 0xA0 */
	SDLK_WORLD_1		= 161,
	SDLK_WORLD_2		= 162,
	SDLK_WORLD_3		= 163,
	SDLK_WORLD_4		= 164,
	SDLK_WORLD_5		= 165,
	SDLK_WORLD_6		= 166,
	SDLK_WORLD_7		= 167,
	SDLK_WORLD_8		= 168,
	SDLK_WORLD_9		= 169,
	SDLK_WORLD_10		= 170,
	SDLK_WORLD_11		= 171,
	SDLK_WORLD_12		= 172,
	SDLK_WORLD_13		= 173,
	SDLK_WORLD_14		= 174,
	SDLK_WORLD_15		= 175,
	SDLK_WORLD_16		= 176,
	SDLK_WORLD_17		= 177,
	SDLK_WORLD_18		= 178,
	SDLK_WORLD_19		= 179,
	SDLK_WORLD_20		= 180,
	SDLK_WORLD_21		= 181,
	SDLK_WORLD_22		= 182,
	SDLK_WORLD_23		= 183,
	SDLK_WORLD_24		= 184,
	SDLK_WORLD_25		= 185,
	SDLK_WORLD_26		= 186,
	SDLK_WORLD_27		= 187,
	SDLK_WORLD_28		= 188,
	SDLK_WORLD_29		= 189,
	SDLK_WORLD_30		= 190,
	SDLK_WORLD_31		= 191,
	SDLK_WORLD_32		= 192,
	SDLK_WORLD_33		= 193,
	SDLK_WORLD_34		= 194,
	SDLK_WORLD_35		= 195,
	SDLK_WORLD_36		= 196,
	SDLK_WORLD_37		= 197,
	SDLK_WORLD_38		= 198,
	SDLK_WORLD_39		= 199,
	SDLK_WORLD_40		= 200,
	SDLK_WORLD_41		= 201,
	SDLK_WORLD_42		= 202,
	SDLK_WORLD_43		= 203,
	SDLK_WORLD_44		= 204,
	SDLK_WORLD_45		= 205,
	SDLK_WORLD_46		= 206,
	SDLK_WORLD_47		= 207,
	SDLK_WORLD_48		= 208,
	SDLK_WORLD_49		= 209,
	SDLK_WORLD_50		= 210,
	SDLK_WORLD_51		= 211,
	SDLK_WORLD_52		= 212,
	SDLK_WORLD_53		= 213,
	SDLK_WORLD_54		= 214,
	SDLK_WORLD_55		= 215,
	SDLK_WORLD_56		= 216,
	SDLK_WORLD_57		= 217,
	SDLK_WORLD_58		= 218,
	SDLK_WORLD_59		= 219,
	SDLK_WORLD_60		= 220,
	SDLK_WORLD_61		= 221,
	SDLK_WORLD_62		= 222,
	SDLK_WORLD_63		= 223,
	SDLK_WORLD_64		= 224,
	SDLK_WORLD_65		= 225,
	SDLK_WORLD_66		= 226,
	SDLK_WORLD_67		= 227,
	SDLK_WORLD_68		= 228,
	SDLK_WORLD_69		= 229,
	SDLK_WORLD_70		= 230,
	SDLK_WORLD_71		= 231,
	SDLK_WORLD_72		= 232,
	SDLK_WORLD_73		= 233,
	SDLK_WORLD_74		= 234,
	SDLK_WORLD_75		= 235,
	SDLK_WORLD_76		= 236,
	SDLK_WORLD_77		= 237,
	SDLK_WORLD_78		= 238,
	SDLK_WORLD_79		= 239,
	SDLK_WORLD_80		= 240,
	SDLK_WORLD_81		= 241,
	SDLK_WORLD_82		= 242,
	SDLK_WORLD_83		= 243,
	SDLK_WORLD_84		= 244,
	SDLK_WORLD_85		= 245,
	SDLK_WORLD_86		= 246,
	SDLK_WORLD_87		= 247,
	SDLK_WORLD_88		= 248,
	SDLK_WORLD_89		= 249,
	SDLK_WORLD_90		= 250,
	SDLK_WORLD_91		= 251,
	SDLK_WORLD_92		= 252,
	SDLK_WORLD_93		= 253,
	SDLK_WORLD_94		= 254,
	SDLK_WORLD_95		= 255,		/* 0xFF */

	/* Numeric keypad */
	SDLK_KP0		= 256,
	SDLK_KP1		= 257,
	SDLK_KP2		= 258,
	SDLK_KP3		= 259,
	SDLK_KP4		= 260,
	SDLK_KP5		= 261,
	SDLK_KP6		= 262,
	SDLK_KP7		= 263,
	SDLK_KP8		= 264,
	SDLK_KP9		= 265,
	SDLK_KP_PERIOD		= 266,
	SDLK_KP_DIVIDE		= 267,
	SDLK_KP_MULTIPLY	= 268,
	SDLK_KP_MINUS		= 269,
	SDLK_KP_PLUS		= 270,
	SDLK_KP_ENTER		= 271,
	SDLK_KP_EQUALS		= 272,

	/* Arrows + Home/End pad */
	SDLK_UP			= 273,
	SDLK_DOWN		= 274,
	SDLK_RIGHT		= 275,
	SDLK_LEFT		= 276,
	SDLK_INSERT		= 277,
	SDLK_HOME		= 278,
	SDLK_END		= 279,
	SDLK_PAGEUP		= 280,
	SDLK_PAGEDOWN		= 281,

	/* Function keys */
	SDLK_F1			= 282,
	SDLK_F2			= 283,
	SDLK_F3			= 284,
	SDLK_F4			= 285,
	SDLK_F5			= 286,
	SDLK_F6			= 287,
	SDLK_F7			= 288,
	SDLK_F8			= 289,
	SDLK_F9			= 290,
	SDLK_F10		= 291,
	SDLK_F11		= 292,
	SDLK_F12		= 293,
	SDLK_F13		= 294,
	SDLK_F14		= 295,
	SDLK_F15		= 296,

	/* Key state modifier keys */
	SDLK_NUMLOCK		= 300,
	SDLK_CAPSLOCK		= 301,
	SDLK_SCROLLOCK		= 302,
	SDLK_RSHIFT		= 303,
	SDLK_LSHIFT		= 304,
	SDLK_RCTRL		= 305,
	SDLK_LCTRL		= 306,
	SDLK_RALT		= 307,
	SDLK_LALT		= 308,
	SDLK_RMETA		= 309,
	SDLK_LMETA		= 310,
	SDLK_LSUPER		= 311,		/* Left "Windows" key */
	SDLK_RSUPER		= 312,		/* Right "Windows" key */
	SDLK_MODE		= 313,		/* "Alt Gr" key */
	SDLK_COMPOSE		= 314,		/* Multi-key compose key */

	/* Miscellaneous function keys */
	SDLK_HELP		= 315,
	SDLK_PRINT		= 316,
	SDLK_SYSREQ		= 317,
	SDLK_BREAK		= 318,
	SDLK_MENU		= 319,
	SDLK_POWER		= 320,		/* Power Macintosh power key */
	SDLK_EURO		= 321,		/* Some european keyboards */

	/* Add any other keys here */

	SDLK_LAST


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 MacOS key-modifier code is the sum of these values:

and defaults to the control key only (4096). Thus, if one wants the key modifiers to be control+shift, the "mac_keymod" attribute would get a value of 4096+512 = 4608.

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>


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: 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.


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.

The MacOS version uses Quicktime for music and movie playing, meaning that any of these formats can be used:

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:


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