Marathon Mapmaking: Setup, Snafus, & Solutions

This document is a guide to content creation for Marathon Aleph One, an open-source engine based on Bungie’s groundbreaking first-person shooter trilogy (1994-1996) – not its upcoming extraction shooter (though I’m quite intrigued by the latter). With the exception of the Weland setup guide, this is designed as an advanced document; see ‘Other Tutorials & Resources’ for guides to basic mapmaking principles, which you should definitely familiarize yourself with before moving onto more advanced tricks.

This guide contains overviews of common problems creators may face (and solutions thereto), plus links to editors, other useful guides/resources, and communities where users may be able to find solutions to problems not covered here. It is meant to help troubleshoot several problems with Marathon content creation that, as far as I know, aren’t documented anywhere else well, if at all.

Who are you and what qualifies you to write this?

I’m Aaron; I’m likely best-known in the community for co-directing Eternal, though I’ve also worked in some capacity (not always mapping-related) on current and forthcoming mods like Apotheosis X, Hellpak, Tempus Irae Redux, Where Monsters Are in Dreams, Marathon Chronicles…basically, I’ve been busy mapping for this engine off and on since about 1997, during which I’ve acquired all kinds of stupid arcane knowledge about it. Have you ever heard of ambient light delta? Neither had Aleph One’s developers until I pointed it out. I’m not saying that because I think it’s worth being proud of having acquired so much useless and pointless knowledge, but what I do have are a very particular set of skills, skills I have acquired over a very long career. Skills that make me… oh, sorry, that’s Taken. Anyway, I feel Aleph One content creation should have a lower barrier to entry, so here’s an attempt to create a reference for solutions to some of its frustrating problems.

If you wish to contact me, the best way is via Discord. You can ping me on the Marathon Discord server at @Aaron#6608, though it’s entirely possible others may be able to answer your questions before I see them, so I’d recommend this only if you notice errors/omissions in this document (or have suggestions for additions; I can credit you for all three). If you need help, it’s best to ask in #marathon-general, #forge, or #tech-support (#development is for engine/editor development). I’m also on the Pfhorums (as The Man) and Reddit (as u/aaronnotarobot), but I can’t promise to respond to messages on either quickly.

You may also be interested in my Marathon soundtracks page, which contains some technical information about remastering music and sounds that may be helpful to those working on sounds or music. A lot of my own creative work, much of which is Marathon-related, may be found on my discography and portfolio pages.

Table of Contents

  1. Author Info
  2. Table of Contents (you’re looking at it?)
  3. Acknowledgements
  4. Resources
    1. Aleph One Content Editing (Marathon 2/Infinity Format)
    2. Marathon 1 Content Editing for Aleph One
    3. Other Tutorials & Resources
    4. Marathon Communities & Resources
  5. General
    1. Weland Setup
      1. Configuring Weland’s Preferences
      2. Installing Visual Mode & Vasara (MacOS)
      3. Installing Visual Mode & Vasara (Linux & Windows)
      4. Configuring Weland!Aleph One
    2. ShapeFusion
  6. Shapes & Palettes
    1. Restrictions on Number of Colors
    2. Transparency & Landscapes
    3. Sequence Timing & Film Compatibility
  7. 8-bit Software Mode
    1. ‘Weapons in Hand’ Sequences
    2. The Images File
    3. Chapter Screens
  8. Mapmaking
    1. Forge Manual Errata & Omissions
    2. General Notes
    3. Scripts, Monster Limits, & Music
      1. Looping Music
    4. Tags Are Terrible (though sometimes inexorable)
      1. Ways to Avoid Tags
    5. Ambient Sound
    6. Texturing Issues in Visual Mode.lua and Vasara
      1. Further Texturing Issues in Vasara
    7. Those Weird Marathon 1 Polygon Types
    8. Directionality
    9. Circles and the Custom Grid
      1. Radii and Rotations for 1 WU-long Sides with Regular Polygons
    10. Map Complexity: A Case Study
  9. Sounds
    1. General Notes
    2. Vanilla Infinity Sound ID List
    3. Sound Sources
  10. The Annotated Anvil Help Balloons
    1. Physics Models
      1. Aliens
        1. Appearance and Sounds
        2. Combat Settings
        3. Physical Constants
        4. Behavior Settings
        5. Immunities and Weaknesses
      2. Effects
      3. Shots
      4. Physics
      5. Weapons
        1. Weapon Definition
        2. Trigger Settings
    2. Sounds
    3. Shapes
      1. Bitmaps and Color Tables
      2. Frames and Sequences
  11. Example DefaultNames.txt
  12. Endnotes

Acknowledgements

Back to top · Table of contents

Resources

Aleph One Content Editing (Marathon 2/Infinity Format)

Back to top · Table of contents

Marathon 1 Content Editing for Aleph One

It’s not supported on modern OSes, with one partial exception: You can extract M1 sound files’ contents by splitting them with Atque, but it won’t re-merge them into a format Aleph One reads as M1 sounds. The ‘Classic OS’ resources below require a Mac or emulator running System 7 through 9. Setting one up is beyond this document’s scope.

To make this content compatible with modern Aleph One, you must run it through MacBinary (I’ve never gotten this to work) or extract it from an emulator disk image with a program like HFV Explorer (the method I used for my remastered Marathon 1 and Trojan sounds).

Back to top · Table of contents

Other Tutorials & Resources

I can’t vouch for the accuracy of all of this info (besides the GitHub wiki), but start with the Forge manual and tutorials for Weland; they aren’t 100% accurate (hence the errata below), but you need to familiarize yourself with the fundamentals before moving onto more advanced techniques. (For ShapeFusion, start with the annotated Anvil help balloons.) The rest of these resources may still be helpful, Hastur’s Workshop especially – that should be your next step after finishing the tutorials.

Back to top · Table of contents

Marathon Communities & Resources

Back to top · Table of contents

General

Weland Setup

Configuring Weland’s Preferences

Installing Visual Mode & Vasara (MacOS)

Installing Visual Mode & Vasara (Linux & Windows)

Configuring Weland!Aleph One

Back to top · Table of contents

ShapeFusion

Back to top · Table of contents

Shapes & Palettes

Restrictions on Number of Colors

Palettes (also called CLUTs, short for Color Look-Up Tables, the name for these resources in MacOS’ resource fork in the classic OS) can pose particular problems. One particular issue occurs with non-standard CLUTs.

  1. We’re restricted to 256 colors not just within one palette but across all eight palettes within a collection. If there are more than 256, then once it runs out, Aleph One will simply use the closest color it encounters among the first 256.
  2. Aleph One counts colors that are imperceptibly different as separate colors. For instance, it regards #0100FF (red 1, green 0, blue 255) as different from #0200FF (red 2, green 0, blue 255).
  3. Unlike Anvil (which tried to restrict itself to vanilla-safe colors unless you specifically enabled a setting to override this), ShapeFusion isn’t guaranteed to use the same colors each time it creates a color ramp unless each ramp starts and ends with the same color and contains the same number of colors.

It’s a mess. Two ways to ensure you’re getting the 256 colors you want:

  1. Export all color tables in a collection to GIMP format (.gpl) and go through them with a fine-toothed comb. GIMP palettes are human-readable and can be edited in any text editor; each color is simply listed in RGB format, with values ranging from 0 to 255 for all three colors. After weeding out the unwanted near-identical colors across palettes, save and reimport.
  2. Simply use all 256 colors you want in CLUT 0 and rearrange them as desired in the others if needed. Be warned, however, that ShapeFusion currently has no option to reduce the number of colors per CLUT, should you decide you want fewer. You’d currently need to open the shapes file in Anvil or Hakvil (using an emulator or a classic Mac) and adjust the palettes there.

Note that using non-vanilla palettes causes 8-bit software mode to look very, very stupid, in case anyone even cares about that in a scenario created in 2023. I don’t actually know how it selects the colors for that.

Back to top · Table of contents

Transparency & Landscapes

Marathon counts the first three colors of each CLUT as transparent, whether you want it to or not. Why does it need three? Why not just one? In all likelihood, only Jason Jones might be able to answer this question, assuming he even remembers the answer. This poses problems with custom landscape CLUTs. Why do landscapes even have transparency? Another question Jason Jones probably doesn’t recall the answer to. The first three colors in a landscape CLUT are still considered transparent, and in OpenGL mode, Marathon changes anything it regards as transparent to show up as white.

As a result, for all practical purposes, landscape CLUTs are restricted to 253 colors, so when generating landscape CLUTs, you must account for transparency and fill the CLUT’s first three colors with garbage that won’t show up in the landscape. Alternately (in Photoshop), you can:

  1. Convert to 253-color indexed color.
  2. Convert back to RGB.
  3. Using Forced > Custom with #0000FF, #FF00FF, and #00FFFF, convert to 256-color indexed color.
  4. Export the new CLUT.

Either way. (I don’t use GIMP, but I’m guessing you can do something similar by making a 253-color bitmap, exporting the CLUT, and editing it in a text editor.)

Back to top · Table of contents

Sequence Timing & Film Compatibility

Back to top · Table of contents

8-bit Software Mode

Aleph One 1.4 restored 8-bit software mode after it had been unavailable for over a decade. I’ve given this its own section because it doesn’t strictly belong in either the shapes section or the mapmaking section; it causes potential havoc in territory related to both ShapeFusion (shapes sequences) and Atque (images files, map resources).

‘Weapons in Hand’ Sequences

For years, Aleph One didn’t have 8-bit software mode, so ‘8-bit color’ and ‘true color’ sequences being out of alignment wasn’t a problem. Since it does again, if a sequence is present in one and not the other, a physics model calling said sequence will crash Aleph One (or cause an assertion failure; I forget which, but either way, it closes the game). Plus, if a sequence has a different timing between the two versions of a collection, it’ll desync films and may desync network games if one player uses 8-bit software mode and the other doesn’t.

As tempting as it is to tell players not to use 8-bit software mode, some will inevitably disregard it out of ignorance, and others out of pure spite (insert out-of-context ‘Killing in the Name’ quote here). The best solution is to make sure each sequence in both versions has the same sequence type, frames per view, ticks per frame, loop frame, key frame, transfer mode period, and frame sound, then update one anytime you update the other.

By default, the only other collections with ‘true color’ versions are the landscape palettes, and it’s very rare (though not unthinkable) for something to call one of the sequences in these (assuming any are even defined). I think a classic Mac utility could create ‘true color’ versions of other collections (all 32 collections can have them; it’s just that, by default, only the Weapons in Hand and Landscapes did), and if a shapes file had these, their sequences should align between ‘8-bit’ and ‘true color’ wherever they’re defined.

Back to top · Table of contents

The Images File

The Images file should have at least images 1100 and 1101 (‘enabled’ and ‘disabled’ versions of the main menu) and 1700 (the vanilla HUD). It also needs CLUT resources with the same IDs. If it lacks images 1100 and 1101 (and their accompanying CLUTs), the menu will show up black if a player selects 8-bit software, and if they then quit the game, they’ll either need to delete their scenario preferences or manually edit them to fix the graphics settings (on the very slim chance they even know how to do this) – which will effectively render the scenario unplayable for many players.

For full reference, the resources in Images correspond to the following:

Add 1,000 to each of these numbers for the ‘24-bit’ versions. It’s ideal to have separate 8-bit and 24-bit versions, as IIRC, Photoshop and GIMP dither images much better than Aleph One does.

Back to top · Table of contents

Chapter Screens & Sounds

Aleph One won’t display a chapter screen in 8-bit software mode unless it has an associated CLUT resource sharing the chapter screen’s resource ID. Make sure to include these if you care about 8-bit software mode at all. Chapter screens go from 1500 (for level 0) to 1599 (for the end screen or, God help us all, level 99). Add 10,000 for ‘24-bit’ versions and (I found this one out the hard way – by noticing it after a scenario release) 20,000 for ‘32-bit’ versions. (This effectively makes 115xx and 215xx unusable if you have a level xx – but I’m not sure if Aleph One will ever display the 115xx picture when the 215xx exists, so if you use 215xx for the chapter screen, you might be able to get away with using 115xx for a terminal picture.)

Also, if there’s an associated sound sharing the 15xx ID, Aleph One will play it. This includes ending screens (though Aleph One also plays the music file, so it’s probably not worth including a sound 1599 unless you plan for your scenario not to have opening music).

Back to top · Table of contents

Mapmaking

Forge Manual Errata & Omissions

Back to top · Table of contents

General Notes

Back to top · Table of contents

Scripts, Monster Limits, & Music

Back to top · Table of contents

Looping Music

For the record, I’m not talking about the music restarting after it fades out – Aleph One does that by default. I’m talking about seamless loops, where the ending leads straight back into the beginning. Current releases of Aleph One can do this, but it’s very finicky and is dependent upon a few things:

  1. It doesn’t work with MP3 files, only Ogg Vorbis, WAV, AIFF, and (in Aleph One 1.6.1 and later) FLAC. The reason for this is that MP3 inserts junk samples at the start and end of a track, and Aleph One’s music player doesn’t know enough to skip these. Transcoding directly from MP3 to one of these other formats won’t help; you’ll need to edit the junk samples out and save as another file. If you plan to save your audio as Ogg Vorbis, I recommend following my procedure for upmastering audio on my soundtracks page; otherwise, you’ll experience generation loss. (Upmastering does not produce a perfect replica of the sound that got lost during MP3 compression – that’s impossible. If you can find a lossless source, you should definitely use that as the source of your in-game audio. Upmastering does help to counteract generation loss, though.)
  2. By default, Aleph One parses audio files in 1,024-sample chunks (roughly 23 milliseconds with a 44.1 kHz sample rate) and won’t reload the audio file (or load the next file) until it’s in the final sample block. Annoyingly, the chunk size can vary based on a setting in the preferences file (and you must actually load the preferences in a text editor to see the setting), but it’s usually 1,024 or 512 (thus, I’m oversimplifying here and assuming 1,024-sample blocks).

    Thus, in this case, the number of samples modulo 1024 should be as close to 1023 as possible. (You can find out how many samples your music file has in any audio editor worth its salt.) In other words, the ideal number of samples for a loop is (1024 * n) – 1, where n is some integer. It’s acceptable for it to be (1024 * n) – 2, (1024 * n) – 3, (1024 * n) – 4, and so on, but the more the distance increases, the longer and more perceptible the delay gets. The longest delay results from 1024 * n samples.

    Manipulating your song’s length by fewer than 23 milliseconds probably won’t audibly affect the rhythm if you’re careful to fill up the space you add with audio information that isn’t out of place (or to trim audio congruously). If silence ends up getting tossed into there, though, you’ve got a problem.
  3. The song must start and end at a zero crossing – in both channels, in the case of stereo music. A zero crossing is a point where the waveform crosses the midpoint. Here’s an example displayed in iZotope RX (zoomed in quite a bit both vertically and horizontally to make it clearly visible).
Illustration of a zero crossing in iZotope RX
  1. Even this may not be sufficient to get a seamless loop, so I recommend avoiding starting your music file at a particularly loud point. A cymbal crash, for example, is far from ideal. An acoustic guitar strum is better.

Tags Are Terrible (though sometimes inexorable)

Don’t get me wrong – in the right circumstances, they’re immensely useful. But they can also break the game if you don’t know what you’re doing, especially if they’re marked as Repair. If you take two things away from this admittedly opinionated section:

  1. Avoid ever marking tag switches or chip insertion slots as Repair.
  2. If you absolutely must mark such a switch as repair, make sure it controls both a light and a platform that can always activate or deactivate – that will probably work around the worst bugs. Probably. (Though you’d still be able to deactivate the tag switch, which would make it possible to change a level state from complete to incomplete – annoying design, to say the least. This aspect, at least, isn’t a problem for chips – once a chip is inserted, it stays inserted.)

Now, for the gory details:

Back to top · Table of contents

Ways to Avoid Tags

Tags aren’t always necessary; the main cases where they are necessary are for destructible wires, chip insertion, or very odd arrangements of platforms. In most other cases, a sufficiently determined mapper can avoid using them. Some tips:

Back to top · Table of contents

Ambient Sound

Back to top · Table of contents

Texturing Issues in Visual Mode.lua and Vasara

Further Texturing Issues in Vasara

Back to top · Table of contents

Those Weird Marathon 1 Polygon Types

Back to top · Table of contents

Directionality

Angle Liquids Objects Lines Sounds
East to west Faces east West to east From west
90° South to north Faces south South to north From north
180° West to east Faces west East to west From east
270° North to south Faces north North to south From south

Back to top · Table of contents

Circles and the Custom Grid

For the purposes of this tutorial, we’ll take the term ‘circle’ to mean ‘regular polygon with sufficiently many sides to look circular’. Aleph One is not actually capable of curves.

There are a few ways to construct circles in Weland. The simplest is probably to use shift+alt and draw points of equal length out from a central area. This will give you a regular 16-sided polygon, and for many cases, this is all you’ll need. However, in many cases, you may want more points. There are a few options here. There’s a circle plugin, which is fine if you’re OK doing a bit of math. (To get this to load on Windows, you may need to go to ‘Properties’ and select ‘Unblock’ next to ‘Security’. Obviously, don’t make a habit of doing this with just any software downloaded from the Internet unless you trust the authors.) Another option that doesn’t require a plugin (but still requires a bit of math) is the custom grid, this little icon you may not have bothered to try out before:

Custom Grid Icon

When you click it, it brings up some sliders that may at first look intimidating. (I’ve resized parts of this image to make its contents legible, but it’s otherwise untouched.)

Custom Grid Sliders

For our ‘circle’, Origin will match its center and Scale will match its radius (at its vertices, anyhow). Rotation will vary, as we’ll see. I’ll demonstrate how to draw a 24-sided circle. We’ll leave Origin as 0, 0. We’ll start Rotation from . For Scale, we’ll use the seemingly random number 3.831. Press 4 on the keyboard to get the grid to show at 1x size, then draw points out from (0, 0) in all four cardinal directions. We should have something like:

0° Circle Vertices
Protip: If you’re having trouble finding (0, 0), you can rotate the grid forward and backward (it always rotates around the center point); or edit one point by double-clicking it; or start from 15° and work back around to . (Again, I don’t recommend using a Rotation of 90°; it’s not quite accurate.)

From here, we must rotate the grid by regular increments (this might be the trickiest part). 360° (the span of a circle) divided by 24 points (the number of vertices we’re using) gives us 15° increments, so our next angle is 15°. Set Rotation to 15° and draw lines out from the center. Rotating by another 15° gives us 30°, then 45°, then 60°, then 75°. (We could do this with fewer rotations, but we’ll save that for later.) All these steps are shown below.

15° Circle Vertices 30° Circle Vertices 45° Circle Vertices 60° Circle Vertices 75° Circle Vertices

We now have our circle’s points. Our next step is to draw our lines. It’ll probably help to disable the grid or to reduce the grid size (i.e., press 1 on the keyboard).

Drawing the Lines of Our ‘Circle’

The next task is to fill the circle (assuming we wish to do that). It’s an inefficient allocation of map indices to fill all 24 triangles when we can use more sides per polygon; here, we can divide our circle into quadrants to get eight sides per polygon, which is perfect.

Filling Our ‘Circle’

Now, some notes:

  1. If we select one of our circle’s outer lines, we’ll see why 3.831 was our Scale: they’re all 1 or 0.999 WU long. A long list of radii and rotations that produce 1 WU-long sides can be found below.
  2. Not using the center as one of our vertices could, in some cases, allow us to fill our circle with fewer polygons; however, it could also result in acute angles, which often cause bouncy walls. In this specific case, four polygons is the fewest we could get away with.
  3. I mentioned Shift+Alt constraint as a way to create 16-sided polygons. You can combine this with grid rotation if the number of sides is a multiple of 8 (divides evenly into 45°, i.e., use 8 of the 16 Shift+Alt angles) or 16 (divides evenly into 22.; i.e., use all 16 Shift+Alt angles). As the math might confuse people at first, I avoided showing this above, but it can save time once you’re comfortable with this method.
  4. Points may be off by an internal unit (≈.001 WU) or two. Adjust them manually if this bothers you. Drawing our lines from the center with Shift+Alt constraint makes this slightly less likely.
  5. Since we started at , we don’t have any horizontal or vertical lines in our circle. To get them, we’d divide our grid rotation of 15° by 2 for a starting angle of 7., then increase that by 15 (i.e., 22., 37., 52., 67., 82.). The result is below. Note that getting both horizontal and vertical lines requires a number of sides divisible by 4. If it’s divisible by 2, we’ll get one but not the other. If it’s an odd number, we’ll get only a single horizontal or vertical side.
  6. ‘Circle’ with Vertical Lines

  7. If our number of vertices is not a multiple of 4, we’ll still start at as usual, keep adding our angle increment until we exceed 90°, subtract 90° from our Rotation, and then continue as before. We also won’t draw lines in all four directions – we’ll either draw them in two directions (if our number of vertices is a multiple of 2) or one (if it isn’t).

Back to top · Table of contents

Radii and Rotations for 1 WU-long Sides with Regular Polygons

These radii and rotations will create 1 WU-long sides. (As pointless as including a triangle may seem, this is a fast way to get an equilateral triangle centered around a desired point.) Italic numbers are divisible by 8 (i.e, you can use Shift+Alt with 45° angles); bold numbers, by 16 (22. angles). 1 WU = 1,024 Internal Units; these are included for the circle plugin. It produces slightly different results, so they differ slightly.

(Click a category in the table header to sort by that category. Click it again to reverse the sort direction.)

# Sides WU Radius IU Radius Rotation
3 0.578 591.3 120.0°
5 0.852 871 72.0°
6 1.000 1024 60.0°
7 1.153 1180 51.42857142…°
8 1.306 1338 45.0°
10 1.618 1657 36.0°
12 1.934 1978 30.0°
14 2.247 2301 25.71428571…°
16 2.563 2624 22.5°
18 2.880 2948 20.0°
20 3.197 3272 18.0°
24 3.831 3922 15.0°
28 4.467 4574 12.85714285…°
32 5.102 5224 11.25°
36 5.735 5873 10.0°
40 6.372 6525 9.0°
42 6.690 6851 8.57142857…°
44 7.008 7176 8.1818…°
48 7.647 7830 7.5°
52 8.283 (use 4.142) 8482 6.92307692…°
56 8.918 (use 4.459) 9130 6.42857142…°
60 9.558 (use 4.779) 9780 6.0°
64 10.190 (use 5.095) 10435 5.625°
72 11.468 (use 5.734) 11740 5.0°

Back to top · Table of contents

Map Complexity: A Case Study

I mentioned above in General Notes that map indices are the primary limit on map complexity, and advised avoiding too many small polygons in a given area. Two more reasons to avoid too much complexity, though, are to avoid frustration and to improve map performance. This case study largely centers on the once-infamous Eternal level ‘Where Giants Have Fallen’. I apologize in advance for the length and number of images; the main lessons can be summarized as ‘Don’t overuse greeble or sound objects,’ but I think illustrating what that means would be helpful.

This is a Weland view of Eternal Mark V’s ‘Where Giants Have Fallen’:

‘Where Giants Have Fallen’ Mark V Draw Mode

(I’ve hidden all objects besides players and sounds; they’re the only important objects for our purposes.)

And here are some Vasara screenshots, with a few major caveats. First, I took these screenshots with 1.3 shapes because I wanted consistency between them. Second, the map had basically no shading to speak of, so I ran Auto Shade on it to make it easier to parse. Third, I rarely use hi-res textures when texturing, due partly to loading times, but mostly to memory usage: the game must load all textures into memory when it loads Vasara or Visual Mode.lua. That adds up fast. That said, the Mark V version looks like this:

‘Where Giants Have Fallen’ Mark V Visual Mode #1
‘Where Giants Have Fallen’ Mark V Visual Mode #2

Beyond the obvious issues of the terrible shading and the sea of gray, this version, despite featuring only 509 polygons, is relatively slow for several reasons I’ll discuss at length soon.

Eternal X 1.0 overhauled the level, but the new version was even slower. It looked like this in Weland:

‘Where Giants Have Fallen’ 1.0 Draw Mode

Despite only featuring 836 polygons, this one chugs even worse. Both of these maps have a major problem: they have essentially no negative space. To oversimplify slightly, Aleph One is effectively a portal engine. Portal engines have several strengths, but rendering large, complex outdoor spaces is not one of them. As a result, whenever the player gets near one of the edges of one of these maps, the performance plummets, even on modern boxes. With frame interpolation now a feature in Aleph One, it’s simply not acceptable for maps to get fewer than 60 fps on modern boxes, at least in areas of the map players are meant to access. Here are a few screenshots of what the 1.0 version looks like (again with 1.3 textures):

‘Where Giants Have Fallen’ 1.0 Visual Mode #1
‘Where Giants Have Fallen’ 1.0 Visual Mode #2

You get as close to the feeling of having climbed up a huge mountain as Aleph One is likely to provide (which is admittedly not very close), but as you can see in the first screenshot, the frame rate is bad in places, the texturing is quite dull, and the lamps just look silly. Subsequent releases of the map fixed the latter two aspects, but the frame rate problem persisted, which was the primary impetus for CryoS and me to remake it from scratch.

Our new version – and I’ll withhold its polygon count for a moment – looks like this in Weland (minus some map writing that I’ve removed to make the screenshot more legible):

Where Giants Have Fallen 1.3 Draw Mode

This screenshot has some conspicuous features. First, the new map is a lot more circular. (I worked on the design, to the surprise of no one who knows my style.) Secondly, there are crossbeams⁽³⁾ extending through playable areas of the map that break it up into sextants (septants if we count the central structure). It’s hard to tell from a Weland screenshot, but these actually create an optical illusion to make players think they’re seeing much further than they actually are; landscape textures mostly conceal players’ inability to actually see past the crossbeams. Here are some screenshots I took in Vasara:

Where Giants Have Fallen 1.3 Visual Mode #1
Where Giants Have Fallen 1.3 Visual Mode #2

Again, we notice a few things immediately. First, this area still looks wide-open, even though it constricts the view to a much smaller area; second, despite having a snow script (which can be a drag on performance), the map gets a much better frame rate. And here’s where I’ll note its polygon count: 2,028. That’s not a typo.

But doesn’t it look like you can see over the crossbeams? Yes. This trick illusion employs ‘5D space’, the engine’s ability to overlap spaces in X/Y/Z coordinates. It can do this because it uses four dimensions to render spaces: X, Y, Z, and polygon. This is related to it being a portal engine: it determines what to render based on how lines connect polygons. I feel a bit like a magician revealing how to perform a trick an illusion here, but… if you could get to the area of the crossbeam with the blue pillars, you’d see this:

Where Giants Have Fallen 1.3 Crossbeam Top #1

And the other side of the crossbeam would look like this:

Where Giants Have Fallen 1.3 Crossbeam Top #2

The only thing to the left of the last screenshot, and to the right of the one prior, is a landscape-textured wall. (These regions are, of course, inaccessible to players.) As long as we constrict players’ view to a reasonable segment of the level, the frame rate rarely dips below 120 fps and almost never below 60 (on my eight-year-old Windows box, no less).

But in a few cases, players can actually escape the constriction. One is if they fall to their deaths, which, who cares. In a few others, though, they can use the assault rifle (or a similar weapon) to boost themselves over onto the edges of the crossbeams, whence they’ll get a clear view of two sextants at once:

Where Giants Have Fallen 1.3 Crossbeam Top #3

Or even jump to an island, where they can see the sky texture clipping their view of the crossbeam in places:

Where Giants Have Fallen 1.3 Island View

I consider these secrets, so I don’t really care to fix them. More importantly, this goes to show how important negative space is to keeping the frame rate within acceptable bounds.

There are other seams in the level design as well, but there’s usually enough going on in the level to distract players from noticing. Another case relates to the blue pillars. Two are clearly visible from here:

Where Giants Have Fallen 1.3: Now you see it…

However, if we step a bit to the left:

Where Giants Have Fallen 1.3:…now you don’t.

The rear one disappears. This is a result of the engine’s lack of any sort of ‘bridges and balconies’, owing to how it connects polygons. We can’t stack one polygon on top of another, and the passage under the crossbeam blocks off the view above it, so the blue pillar in the back is impossible to show. Despite this, I felt the blue pillars were worth including, since they conceal more conspicuous blemishes in the view from the top of the level (which are again consequences of the passages beneath the crossbeams).

This is the largest map I’ve constructed (mostly) from scratch that never once exceeded the map index limit. There are a few reasons for this, but I think the two biggest are ambient sounds and greeble.

Greeble, in this case, refers to map detailing. This may not be evident to anyone else but me, but the newest ‘Where Giants Have Fallen’ was effectively my second attempt to make a pastiche of Phoenix’s ‘Stone Temple Pilates’, in this case combining its style with those of Apotheosis X (hence all the hexagons, though I already felt obligated to use them due to Tacticus’ brilliant sky texture), Eternal itself, and of course my own compulsion to make everything as circular as possible. (Ironically, the one part I didn’t create from scratch is the central structure, the most circular part of the whole level – that was CryoS’ work.)

‘Il grande silenzio’ Draw Mode

My first pastiche of ‘Stone Temple Pilates’, seen above in its current, unfinished state (1,763 polygons), went a lot differently. It’s called ‘Il grande silenzio’ (after a brilliant Corbucci spaghetti western with an equally brilliant Morricone soundtrack); it’s from a project that, as of this writing, still hasn’t been released: Tempus Irae Redux. There are obvious stylistic differences; besides the mathematical regularity of ‘Where Giants Have Fallen’, we can also see how much more densely the sound, points, and polygons are clustered in many areas (and, as a direct consequence, how much less densely they are clustered in others).

In fact, I first ran out of map indices at around 1,500 polygons and had to prune dozens of sound objects. This is partly because I set almost all my doors to Heavy S’pht Doors (well, Heavy Italian Doors, as we might call them in Tempus Irae Redux), which each require sound objects to keep their ambient sounds from cutting off; and partly because I was pastiching two brilliant mapmakers: RyokoTK and my co-conspirator James Hastings-Trew, who both tend to employ a lot of greeble. However, I greatly exceeded the amount they use, reasoning, ‘Modern computers can handle it.’ (This was before Aleph One had frame interpolation.) But thanks to the snow script and the comparative lack of negative space, the map chugs in a few places:

‘Il grande silenzio’ Visual Mode #1
‘Il grande silenzio’ Visual Mode #2

My further revisions will require me to fix that, which in turn will likely require removing a few parts and reconstructing them from scratch – a painful process.

It might be more instructive to show screenshots of these maps consecutively:

‘Il grande silenzio’ Visual Mode #3
‘Where Giants Have Fallen’ 1.3 Visual Mode #9

Now, do I think the geometry in the Tempus map looks cool? Yes. Do I think it looks that much cooler than the Eternal map? Certainly not enough to justify the added difficulty it caused me.

In any case, my main point in showing these screenshots isn’t to show off the maps; it’s to show how overusing greeble causes problems. It looks cool, but you have to know when to stop. There’s probably no way to learn this except trial and error, but I urge you to examine mapmakers’ styles closely. Ryoko doesn’t really use as much greeble as I thought he did when I made ‘Il grande silenzio’. As an example, ‘Monument to All Your Sins’ from Starlight, which I believe has the highest polygon count of any map he’s released (1,843):

‘Monument to All Your Sins’ Draw Mode

Yes, there are parts with plenty of greeble, but there’s really nothing approaching the density I was using. Regardless of this, when I got his permission to adapt it for Chronicles as a solo level, he warned me that it was near the map index limit, that he’d had to simplify it during construction, and that it’d probably crash if I added too much complexity or many more ambient sound objects – which, in fact, is exactly what happened. In any case, here are two views from the southeast of ‘Monument’ (which, to be clear, is just about the upper bound of the detail I’d suggest trying to incorporate):

‘Monument to All Your Sins’ Visual Mode #1
‘Monument to All Your Sins’ Visual Mode #2

There are parts with a lot of greeble, but others with almost none. And it looks fantastic. This was a lesson I hadn’t absorbed when I made ‘Il grande silenzio’, but ‘Where Giants Have Fallen’ hammered it home for me.

While I’m at it, here’s ‘Stone Temple Pilates’, which has 1,771 polygons. The Weland view looks like this:

‘Stone Temple Pilates’ Draw Mode

I think the map’s overall polygon density is comparable to what I wanted ‘Il grande silenzio’ to have, but there are some important differences. The clusters of small polygons aren’t as densely packed together, and while there are a lot of sound objects, Ryoko has few of them near polygon clusters as dense as mine. (Scroll back to the ‘Il grande silenzio’ Weland screenshot again and look at how densely clustered the polygons in some of my houses are.)

‘Stone Temple Pilates’ looks like this in Vasara:

‘Stone Temple Pilates’ Visual Mode #1
‘Stone Temple Pilates’ Visual Mode #2

This map slaps. Its influence on ‘Il grande silenzio’ is probably especially obvious; its influence on ‘Where Giants Have Fallen’ is probably less so, besides the isolated islands from which Enforcers snipe at players, but it’s nonetheless there.

Anyway, back to ‘Where Giants Have Fallen’. The other way I saved a lot of headache was by using as few sound objects as possible; to avoid using too many, I even went to the trouble of making new ambient sounds that combined existing sounds. For instance, this sound may say ‘Waterfall’:

Sound in Where Giants Have Fallen

However, the following script is merged in with the level:

<marathon>
    <!-- puts Water & Waterfall into the Waterfall slot -->
    <sounds>
        <ambient index="6" sound="251"/>
    </sounds>
    <!-- sets Water to use the Waterfall sound slot -->
    <liquid index="0">
        <sound type="5" which="6"/>
    </liquid>
</marathon>

As the comments suggest, this reassigns the ‘Waterfall’ ambient sound to use a separate ambient sound created by mix-pasting the ‘Water’ and ‘Waterfall’ sounds; and it plays that sound whenever the player’s head is above water. This effectively cuts in half the number of sounds I need water to play, and cuts the number of sound objects on the level by eight.

On dream versions of the level (of which there are four), I embed another script to combine the ‘Wind’ sound (or, in one case, the ‘Wind & Rain’ sound) and the ‘Dream Ambience’ sound, thus saving further sound objects. The expense is three sound slots and about a dozen megabytes in the sound file (these sounds are CD-quality stereo, so they’re not small), but hey, that’s nothing by the standards of modern games, and it means the map runs without any issues.

We can boil down the lessons of this case study to two major principles:

  1. Don’t overuse greeble.
  2. Don’t overuse sound objects.

However, if I just wrote that – or even ‘don’t overuse greeble and sound objects so you don’t run out of map indices’ – you might not grasp what ‘overuse’ means. Hopefully, you at least now have reference points.

An even better understanding can come from looking at Starlight, Phoenix, and the latest preview build of Eternal (and Tempus Irae Redux, once it comes out) yourself. Learning from others is one of the best ways to improve. RyokoTK’s other works (Kindred Spirits, Paradise Lost, Second Quest, etc.) are also well worth looking at, as are the works of mappers like windbreaker (Istoria, Imperium, Infra Apogee, Caustic Dystopia, etc.); James Hastings-Trew and Borzz (Megiddo Game, Tempus Irae, etc.); hypersleep and CryoS (Apotheosis X); and of course Bungie and Double Aught themselves. It’s worth not just marveling at the pretty sights, but also closely considering where they use greeble and sounds and – just as importantly – where they don’t.

Back to top · Table of contents

Sounds

General Notes

Vanilla Infinity Sound ID List

I’ve used the Lua mnemonics for these unless I had a reason not to, which I usually note in tooltips (also reproduced at the bottom of this document as endnotes). Parenthetical names are alternate names prominently used elsewhere (e.g., Anvil/ShapeFusion or Forge/Weland).

Sounds in bold below have all of their sources definitively identified (see Sound Sources below for these). Sounds in italics have some of them definitively identified.

(Click a category in the table header to sort by that category. Click it again to reverse the sort direction.)

ID # Sound
10000 1 Teleport In
10010 2 Teleport Out
10020 3 Crushed
10030 5 Absorbed
10040 7 Oxygen Warning
10050 8 Suffocation
10060 9 Energy Refuel
10070 10 Oxygen Refuel
10080 11 Can’t Toggle Switch
10090 12 Switch On
10100 13 Switch Off
10110 14 Puzzle Switch
10120 15 Chip Insertion
10130 16 Pattern Buffer
10150 18 Adjust Volume
10160 19 Got Powerup⁽⁴⁾
10170 20 Get Item⁽⁴⁾
11000 21 Bullet Ricochet
11010 22 Metallic Ricochet
11020 23 Empty Gun
11030 34 Fist Hitting
11040 35 Magnum Firing
11050 36 Magnum Reloading
11060 37 Assault Rifle Firing
11070 38 Grenade Launcher Firing
11080 39 Grenade Exploding⁽⁵⁾
11090 40 Grenade Flyby
11100 41 Fusion Pistol Firing
11110 42 Fusion Exploding
11120 43 Fusion Flyby
11130 44 Fusion Charging
11140 45 Rocket Exploding⁽⁶⁾
11150 46 Rocket Flyby
11160 47 Rocket Firing
11170 48 Flamethrower
11180 49 Body Falling
11190 50 Body Exploding
11200 51 Bullet Hit Flesh
11210 134 Assault Rifle Reloading
11220 136 Shotgun Firing
11230 137 Shotgun Reloading
11240 141 Computer Login
11250 142 Computer Logout
11260 143 Computer Page
11270 135 Assault Rifle Shell Casings
11280 17 Destroy Control Panel
11290 132 Fusion Pistol Firing Charged
11300 138 Ball Bounce
11310 139 You Are It
11320 140 Got Ball
11330 133 Major Fusion Charged
12000 24 S’pht Door Closing⁽⁷⁾
12010 25 S’pht Door Opening⁽⁷⁾
12020 26 S’pht Door Obstructed
12030 27 S’pht Platform Starting
12040 28 S’pht Platform Stopping
12080 32 Heavy S’pht Platform Starting
12090 33 Heavy S’pht Platform Stopping
13000 144 Heavy S’pht Door
13010 145 Heavy S’pht Door Opening
13020 146 Heavy S’pht Door Closing
13030 147 Heavy S’pht Door Open
13040 148 Heavy S’pht Door Closed
13050 149 Heavy S’pht Door Obstructed
14000 90 Water
14010 91 Sewage
14020 92 Lava
14030 93 Goo
14040 94 Underwater
14050 95 Wind
14060 96 Waterfall
14070 97 Siren
14080 98 Fan
14100 100 S’pht Platform
14120 101 Alien Harmonics (Jjaro Ship)
14130 102 Heavy S’pht Platform
14140 103 Light Machinery
14150 104 Heavy Machinery
14160 105 Transformer
14170 106 Sparking Transformer
14180 169 Machine Binder
14190 170 Machine Bookpress
14200 171 Machine Puncher
14210 172 Electric Hum
14220 173 Alarm
14230 174 Night Wind
14240 201 Alien Noise 1 (Pfhor Ship #1)
14250 202 Alien Noise 2 (Pfhor Ship #2)
14260 4 Jjaro Ship Creak⁽⁸⁾
14500 107 Water Drip
14510 175 Surface Explosion (Thunder)
14520 176 Underground Explosion
14530 186 Lamp Exploding
14540 29 Loon
14545 187 Pfhor Platform Starting
14550 188 Pfhor Platform Stopping
14560 189 Pfhor Platform
14570 190 Pfhor Door Closing⁽⁹⁾
14580 191 Pfhor Door Opening⁽⁹⁾
14590 192 Pfhor Door Obstructed
14600 193 Pfhor Door
14610 194 Pfhor Switch On
14620 195 Pfhor Switch Off
14630 196 Juggernaut Firing
14640 197 Juggernaut Warning
14650 198 Juggernaut Exploding
14660 199 Juggernaut Start Attack
14670 200 Enforcer Exploding
15000 71 Drone Activate
15010 72 Drone Start Attack
15020 73 Drone Attack
15030 74 Drone Dying
15040 75 Drone Death
15050 76 Drone Projectile Hit
15060 77 Drone Projectile Flyby
15100 64 Cyborg Moving
15110 65 Cyborg Attack
15120 66 Cyborg Hit
15130 67 Cyborg Death
15140 68 Cyborg Projectile Bounce
15150 69⁽¹⁰⁾ Cyborg Projectile Hit
15200 59 S’pht Attack
15210 60 S’pht Death
15220 61 S’pht Hit
15230 62 S’pht Projectile Flyby
15240 63 S’pht Projectile Hit
15300 52 Fighter Activate
15310 53 Fighter Wail
15320 54 Fighter Scream
15330 55 Fighter Chatter
15340 56 Fighter Attack
15350 57 Fighter Projectile Hit
15360 58 Fighter Projectile Flyby
15400 78 Bob Wail
15410 79 Bob Scream
15420 80 Bob Hit
15430 81 Bob Chatter
15440 82 Assimilated Bob Chatter
15450 83 Bob Trash Talk
15460 84 Bob Apology
15470 85 Bob Activation
15480 86 Bob Clear
15490 87 Bob Angry (Stop Shooting Me You Bastard)
15500 88 Bob Secure
15510 89 Bob Kill the Player
15610 151 Hunter Attack
15630 153 Hunter Landing
15640 154 Hunter Exploding
15650 155 Hunter Projectile Hit
15660 156 Hunter Projectile Flyby
15700 157 Enforcer Activate
15710 158 Enforcer Attack
15720 159 Enforcer Projectile Hit
15730 160 Enforcer Projectile Flyby
15800 161 F’lickta Melee Attack
15810 162 F’lickta Melee Hit
15820 163 F’lickta Projectile Attack
15830 166 F’lickta Projectile Lava Hit
15840 167 F’lickta Projectile Lava Flyby
15850 168 F’lickta Dying
15860 164 F’lickta Projectile Sewage Hit
16000 177 S’pht’Kr Attack
16010 178 S’pht’Kr Projectile Hit
16020 179 S’pht’Kr Projectile Flyby
16030 180 S’pht’Kr Being Hit
16040 181 S’pht’Kr Exploding
17000 182 Tick Chatter
17020 184 Tick Flapping
18000 30 SMG Firing
18010 31 SMG Reloading
18100 203 VacBob Wail
18110 204 VacBob Scream
18120 205 VacBob Hit
18130 206 VacBob Chatter
18140 207 Assimilated VacBob Chatter
18150 208 VacBob Trash Talk
18160 209 VacBob Apology
18170 210 VacBob Activation
18180 211 VacBob Clear
18190 212 VacBob Angry (Stop Shooting Me You Bastard)
18200 213 VacBob Secure
18210 214 VacBob Kill the Player
19000 108 Walking in Water
19010 109 Exiting Water⁽¹¹⁾
19020 110 Entering Water⁽¹¹⁾
19060 115 Entering Lava⁽¹¹⁾
19070 116 Exiting Lava⁽¹¹⁾
19100 111 Small Water Splash
19120 113 Large Water Splash
19130 118 Small Lava Splash
19150 120 Large Lava Splash
19170 122 Entering Sewage⁽¹¹⁾
19180 121 Exiting Sewage⁽¹¹⁾
19190 123 Small Sewage Splash
19210 125 Large Sewage Splash

The following classes are empty and have ID -1:

(Click a category in the table header to sort by that category. Click it again to reverse the sort direction.)

ID # Sound
-1 0 Startup
-1 6 Breathing
-1 70 Cyborg Projectile Flyby
-1 99 S’pht Door
-1 112 Medium Water Splash
-1 114 Walking in Lava
-1 118 Medium Lava Splash
-1 120 Walking in Sewage
-1 124 Medium Sewage Splash
-1 126 Walking in Goo
-1 127 Exiting Goo⁽¹¹⁾
-1 128 Entering Goo⁽¹¹⁾
-1 129 Small Goo Splash
-1 130 Medium Goo Splash
-1 131 Large Goo Splash
-1 150 Hunter Activate
-1 152 Hunter Dying
-1 165 F’lickta Projectile Sewage Flyby
-1 183 Tick Falling
-1 185 Tick Exploding

You’ll thus need to change their IDs if you add sounds to them; likewise with all new classes you create.

Back to top · Table of contents

Sound Sources

I’ve been able to locate the sources of many vanilla Marathon Infinity sounds; others remain elusive. Nearly all the ones I’ve found are from the General Series 6000, a 40-disc collection by the Canadian company Sound Ideas. (Alternatively, see here for a bundle of the General Series 6000 with, as of this writing, ten extensions, all of which are too recent to be sources for Marathon.) The one exception I’ve been able to locate, Fist Hitting, comes from the Series 4000 Hollywood collection. The Series 6000 sounds are ubiquitous not just in games (Doom also used many, for example) but across all types of media, so while you may be hearing shout-outs to Marathon when someone uses one of these sounds, it’s likelier that they just used an industry-standard stock sound library.

I’ve remixed or remastered the entire Infinity sound file, using the original sources when I’d found them and various audio tricks I’ve learned over the years when I hadn’t; a recent revision is available here (see here for detailed notes). As of 2023-08-28, this should be the current revision. An ‘extended’ version with longer versions of some samples and more samples for some sounds is also available here.

The sources I’ve been able to locate are, in order by disc/track/index:

Also, at least two chapter screen sounds come from the Series 6000 General:

And at least a few Pathways into Darkness sounds also come from the Series 6000 General:

And various mods have also mined these sounds, including:

If you’re aware of any sources of vanilla sounds not listed here, either for Marathon 1, Marathon Infinity, or even Pathways into Darkness, please let me know.

Acknowledgements to W’rkncacnter on the Discord for pointing out that the Fighter Dying sound is a pitch-shift of the Porcupine sound. I had already noticed that the Fighter and F’lickta deaths had the same source, but it never occurred to me that the Tick also had the same source.

Back to top · Table of contents

The Annotated Anvil Help Balloons

Formatted with occasional asides and corrections, which I’ve marked in [bracketed italics], ending with -Ed.

Back to top · Table of contents

Example DefaultNames.txt

(See reference above.)
# Default names for elements related to ShapeFusion
#
# This file lists names for Infinity-like scenarios, based *largely* on the default Lua
# mnemonics, with exceptions falling into six categories:
#
# 1. Anything in [brackets], usually to clarify:
#     a. stuff I thought might be confusing, or
#     b. to note which sound classes are empty and which are (AFAIK) not used anywhere
#        (these are not always the same).
# 2. Apostrophes, which I added for readability. AFAIK, the only mnemonic that has an
#    apostrophe is "Lh'owon" in the scenery, which ShapeFusion doesn't have names for.
# 3. The scare quotes are also not in the mnemonics. I used these for a few sound names
#    that are incorrect for at least the 16-bit sounds. Unfortunately, the default Lua
#    mnemonics are what they are.
# 4. For collections, I added numbers to the start that aren't part of the mnemonics
#    (no one wants to count collection numbers).
# 5. Numbers at the end of the sound list, so that if you've added sound classes, you
#    can select them in your physics models.
# 6. Tick -> Flappyboi. Clearly the most important change.


# collection names (from Lua mnemonics)
collection 0	0 Interface
collection 1	1 Weapons in Hand
collection 2	2 Juggernaut
collection 3	3 Flappyboi
collection 4	4 Explosions
collection 5	5 Hunter
collection 6	6 Player
collection 7	7 Items
collection 8	8 Trooper
collection 9	9 Fighter
collection 10	10 Defender
collection 11	11 Yeti
collection 12	12 Bob
collection 13	13 VacBob
collection 14	14 Enforcer
collection 15	15 Drone
collection 16	16 Compiler
collection 17	17 Water
collection 18	18 Lava
collection 19	19 Sewage
collection 20	20 Jjaro
collection 21	21 Pfhor
collection 22	22 Water Scenery
collection 23	23 Lava Scenery
collection 24	24 Sewage Scenery
collection 25	25 Jjaro Scenery
collection 26	26 Pfhor Scenery
collection 27	27 Day
collection 28	28 Night
collection 29	29 Moon
collection 30	30 Space
collection 31	31 Cyborg


# shot names (from Lua mnemonics)
shot 0	Missile
shot 1	Grenade
shot 2	Pistol Bullet
shot 3	Rifle Bullet
shot 4	Shotgun Bullett
shot 5	Staff
shot 6	Staff Bolt
shot 7	Flamethrower Burst
shot 8	Compiler Bolt Minor
shot 9	Compiler Bolt Major
shot 10	Alien Weapon
shot 11	Fusion Bolt Minor
shot 12	Fusion Bolt Major
shot 13	Hunter
shot 14	Fist
shot 15	Armageddon Sphere
shot 16	Armageddon Electricity
shot 17	Juggernaut Rocket
shot 18	Trooper Bullet
shot 19	Trooper Grenade
shot 20	Minor Defender
shot 21	Major Defender
shot 22	Juggernaut Missile
shot 23	Minor Energy Drain
shot 24	Major Energy Drain
shot 25	Oxygen Drain
shot 26	Minor Hummer
shot 27	Major Hummer
shot 28	Durandal Hummer
shot 29	Minor Cyborg Ball
shot 30	Major Cyborg Ball
shot 31	Ball
shot 32	Minor Fusion Dispersal
shot 33	Major Fusion Dispersal
shot 34	Overloaded Fusion Dispersal
shot 35	Yeti
shot 36	Sewage Yeti
shot 37	Lava Yeti
shot 38	SMG Bullet



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


# alien class names (from Lua mnemonics)
alien 0	Player
alien 1	Minor Flappyboi
alien 2	Major Flappyboi
alien 3	Kamikaze Flappyboi
alien 4	Minor Compiler
alien 5	Major Compiler
alien 6	Minor Invisible Compiler
alien 7	Major Invisible Compiler
alien 8	Minor Fighter
alien 9	Major Fighter
alien 10	Minor Projectile Fighter
alien 11	Major Projectile Fighter
alien 12	Green Bob
alien 13	Blue Bob
alien 14	Security Bob
alien 15	ExplodaBob
alien 16	Minor Drone
alien 17	Major Drone
alien 18	Big Minor Drone
alien 19	Big Major Drone
alien 20	Possessed Drone
alien 21	Minor Cyborg
alien 22	Major Cyborg
alien 23	Minor Flame Cyborg
alien 24	Major Flame Cyborg
alien 25	Minor Enforcer
alien 26	Major Enforcer
alien 27	Minor Hunter
alien 28	Major Hunter
alien 29	Minor Trooper
alien 30	Major Trooper
alien 31	Mother of All Cyborgs
alien 32	Mother of All Hunters
alien 33	Sewage Yeti
alien 34	Water Yeti
alien 35	Lava Yeti
alien 36	Minor Defender
alien 37	Major Defender
alien 38	Minor Juggernaut
alien 39	Major Juggernaut
alien 40	Tiny Pfhor
alien 41	Tiny Bob
alien 42	Tiny Yeti
alien 43	Green VacBob
alien 44	Blue VacBob
alien 45	Security VacBob
alien 46	ExplodaVacBob


# monster class names (from Lua mnemonics)
class 0	Player
class 1	Bob
class 2	MADD
class 3	Possessed Drone
class 4	Defender
class 5	Fighter
class 6	Trooper
class 7	Hunter
class 8	Enforcer
class 9	Juggernaut
class 10	Drone
class 11	Compiler
class 12	Cyborg
class 13	ExplodaBob
class 14	Flappyboi
class 15	Yeti


# damage type names (from Lua mnemonics)
damage 0	Explosion
damage 1	Staff
damage 2	Projectile
damage 3	Absorbed
damage 4	Flame
damage 5	Claws
damage 6	Alien Weapon
damage 7	Hulk Slap
damage 8	Compiler
damage 9	Fusion
damage 10	Hunter
damage 11	Fists
damage 12	Teleporter
damage 13	Defender
damage 14	Yeti Claws
damage 15	Yeti Projectile
damage 16	Crushing
damage 17	Lava
damage 18	Suffocation
damage 19	Goo
damage 20	Energy Drain
damage 21	Oxygen Drain
damage 22	Drone
damage 23	Shotgun



# effect class names (from Lua mnemonics)
effect 0	Rocket Explosion
effect 1	Rocket Contrail
effect 2	Grenade Explosion
effect 3	Grenade Contrail
effect 4	Bullet Ricochet
effect 5	Alien Weapon Ricochet
effect 6	Flamethrower Burst
effect 7	Fighter Blood Splash
effect 8	Player Blood Splash
effect 9	Civilian Blood Splash
effect 10	Assimilated Civilian Blood Splash
effect 11	Enforcer Blood Splash
effect 12	Compiler Bolt Minor Detonation
effect 13	Compiler Bolt Major Detonation
effect 14	Compiler Bolt Major Contrail
effect 15	Fighter Projectile Detonation
effect 16	Fighter Melee Detonation
effect 17	Hunter Projectile Detonation
effect 18	Hunter Spark
effect 19	Minor Fusion Detonation
effect 20	Major Fusion Detonation
effect 21	Major Fusion Contrail
effect 22	Fist Detonation
effect 23	Minor Defender Detonation
effect 24	Major Defender Detonation
effect 25	Defender Spark
effect 26	Trooper Blood Splash
effect 27	Water Lamp Breaking
effect 28	Lava Lamp Breaking
effect 29	Sewage Lamp Breaking
effect 30	Alien Lamp Breaking
effect 31	Metallic Clang
effect 32	Teleport Object In
effect 33	Teleport Object Out
effect 34	Small Water Splash
effect 35	Medium Water Splash
effect 36	Large Water Splash
effect 37	Large Water Emergence
effect 38	Small Lava Splash
effect 39	Medium Lava Splash
effect 40	Large Lava Splash
effect 41	Large Lava Emergence
effect 42	Small Sewage Splash
effect 43	Medium Sewage Splash
effect 44	Large Sewage Splash
effect 45	Large Sewage Emergence
effect 46	Small Goo Splash
effect 47	Medium Goo Splash
effect 48	Large Goo Splash
effect 49	Large Goo Emergence
effect 50	Minor Hummer Projectile Detonation
effect 51	Major Hummer Projectile Detonation
effect 52	Durandal Hummer Projectile Detonation
effect 53	Hummer Spark
effect 54	Cyborg Projectile Detonation
effect 55	Cyborg Blood Splash
effect 56	Minor Fusion Dispersal
effect 57	Major Fusion Dispersal
effect 58	Overloaded Fusion Dispersal
effect 59	Sewage Yeti Blood Splash
effect 60	Sewage Yeti Projectile Detonation
effect 61	Water Yeti Blood Splash
effect 62	Lava Yeti Blood Splash
effect 63	Lava Yeti Projectile Detonation
effect 64	Yeti Melee Detonation
effect 65	Juggernaut Spark
effect 66	Juggernaut Missile Contrail
effect 67	Small Jjaro Splash
effect 68	Medium Jjaro Splash
effect 69	Large Jjaro Splash
effect 70	Large Jjaro Emergence
effect 71	Civilian Fusion Blood Splash
effect 72	Assimilated Civilian Fusion Blood Splash



# weapon class names (from Lua mnemonics)
weapon 0	Fist
weapon 1	Pistol
weapon 2	Fusion Pistol
weapon 3	Assault Rifle
weapon 4	Missile Launcher
weapon 5	Flamethrower
weapon 6	Alien Weapon
weapon 7	Shotgun
weapon 8	Ball
weapon 9	SMG

# item class names (from Lua mnemonics)
item 0	Knife
item 1	Pistol
item 2	Pistol Ammo
item 3	Fusion Pistol
item 4	Fusion Pistol Ammo
item 5	Assault Rifle
item 6	Assault Rifle Ammo
item 7	Assault Rifle Grenades
item 8	Missile Launcher
item 9	Missile Launcher Ammo
item 10	Invisibility
item 11	Invincibility
item 12	Infravision
item 13	Alien Weapon
item 14	Alien Weapon Ammo
item 15	Flamethrower
item 16	Flamethrower Ammo
item 17	Extravision
item 18	Oxygen 
item 19	Single Health
item 20	Double Health
item 21	Triple Health
item 22	Shotgun
item 23	Shotgun Ammo
item 24	Key
item 25	Uplink Chip
item 26	Light Blue Ball
item 27	Ball
item 28	Violet Ball
item 29	Yellow Ball
item 30	Brown Ball
item 31	Orange Ball
item 32	Blue Ball
item 33	Green Ball
item 34	SMG
item 35	SMG Ammo

Back to top · Table of contents


Endnotes

# Note
1 Trojan, EVIL, Tempus Irae, RED, Eternal X, Rubicon X, Phoenix, Mararthon Yuge, Apotheosis X, and Istoria. I’d unconditionally recommend Tempus Irae, Eternal X, Phoenix, and Apotheosis X (note: I’ve contributed in some capacity to current or forthcoming releases of all of these: remastered music for Phoenix; sounds and scripting for Apotheosis X; too many things to list for Eternal X and Tempus Irae Redux). Rubicon X and Istoria round out my top six with the caveats ‘don’t play Rubicon X above Normal’ and ‘the Flame IADD fight can heck right off’. If you’re attuned to Yuge’s irreverent humour, it’ll reward you with fantastic gameplay and a remarkable demonstration of procedural level design. Trojan is great for those who wish Marathon 1 had been longer (even if you don’t play it, check out the OST, which slaps. Also, I remastered the music and sounds for the standalone edition, which unfortunately doesn’t work with current versions of Aleph One). RED’s execution is occasionally sloppy, and it’s probably too difficult, but it has some fantastic ideas and is remarkable for being almost entirely the work of a single person – who was a teenager at the time, to boot. EVIL’s strengths include professional-quality sprites; fantastic sounds, monsters, and weapons; and sometimes brilliant (if frustratingly inconsistent) level design.
2 What, you don’t have a third hand? Then you must not be Zaphod Beeblebrox.
3 One of the crossbeams has gone out of skew on the treadle.
4 The Lua mnemonics have ‘Got Powerup’, but ‘Get Item’. Note the dichotomy here so you don’t get got.
5 The Lua mnemonics (but not Anvil or ShapeFusion) misspell this as ‘Grenade Expolding’. I’ve corrected it.
6 Misspelled in Anvil (and thus ShapeFusion) as ‘Rocket Expoding’. The Lua mnemonics get this one correct.
7 In both Anvil/ShapeFusion and the Lua mnemonics, the sounds purporting to be ‘S’pht Door Opening’ (#24) and ‘S’pht Door Closing’ (#25) are labeled correctly for the 8-bit versions but incorrectly for the 16-bit versions, which are inexplicably swapped. I’ve changed them here to match the 16-bit versions, because who uses 8-bit sound in 2022?
8 Inexplicably labeled in the Lua mnemonics as ‘Nuclear Hard Death’, the physics’ name for the screen flash and sound effect made when Juggernauts die. (Worst Prince cover ever.) That sound is Juggernaut Exploding (#198, ID 14650).
9 The default names for these (in both Anvil/ShapeFusion and in the Lua mnemonics) are just wrong, both for their 8-bit and 16-bit versions. Again, I’ve corrected them.
10 Nice.
11 ⁽ᵃ⁾ ⁽ᵇ⁾ ⁽ᶜ⁾ ‘Exiting’ and ‘Entering’ are ordered inconsistently for different media types, both ID-wise and number-wise. Be careful.

Back to top · Table of contents