Marathon Mapmaking: Setup, Snafus, & Solutions

Starting Steps

This document is a guide to getting started creating content 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). This is primarily an abridgement of a much longer guide I have written that currently isn’t broken up into digestible chunks; here, I’ve included solely what beginning mapmakers need to know.

This abridgement contains links to modern editors for Aleph One, a guide to setting up Weland and a visual mode plugin (either Vasara or Visual Mode.lua) in Windows and MacOS (a Linux guide may be forthcoming), links to the first resources you should read and watch once you’ve set Weland up, Forge manual errata, descriptions of a few aspects of modern mapmaking that aren’t covered by the Forge tutorials, and links to more advanced resources.

Table of Contents

  1. Table of Contents (you’re looking at it?)
  2. Aleph One Content Editors
    1. Marathon 2/Infinity Format
      1. Comparisons of Texturing Utilities
    2. Marathon 1 Format
  3. Weland Setup
    1. Configuring Weland’s Preferences
    2. Installing Visual Mode.lua or Vasara
    3. Configuring Weland!Aleph One
  4. Mapmaking Basics
    1. Tutorials & Resources for Beginning Mapmakers
    2. Forge Manual Errata & Omissions
    3. Mapping Issues in Weland
    4. Texturing Issues in Visual Mode.lua and Vasara
      1. Further Texturing Issues in Vasara
  5. Further Reading
    1. Advanced Tutorials & Resources
    2. Marathon Communities & Resources
  6. Contact Info
  7. What qualifies you to write this, anyway?
  8. Acknowledgements
  9. Endnotes

Aleph One Content Editors

Marathon 2/Infinity Format

Bungie’s two official editors were Forge (mapmaking) and Anvil (physics, shapes, sounds). I won’t address how to run these in this guide, because they don’t run on any operating system past MacOS 9.2.2, and there are vastly better replacements for both programs that actually run on modern operating systems. The next section, “Comparison of Texturing Utilities”, may help you decide which visual mode replacement you want.

While you might expect Forge+ to be roughly equivalent to Forge, Weland is actually much closer to it, to the extent that roughly 90% of the Forge tutorials can be applied wholesale to Weland. I list all the important differences I’m aware of below, and they make up a relatively small portion of this document; for most users, setup will be by far the most complicated difference to navigate.

Forge+ runs in Unity rather than Aleph One, which has some interesting ramifications. Because Aleph One is a portal engine, it is not possible to “noclip” into negative space (outside the map bounds); the engine needs to render using valid X, Y, Z, and polygon data to decide what should be visible, so attempting to render a scene from outside the bounds of any polygon simply crashes the engine. Unity, not being a portal engine, is not bound by this limitation, so you can use Forge+ to view an entire map at once from negative space. On the other hand, Forge+ is completely confused by “5D space” (two or more polygons occupying the same X/Y/Z space) and simply draws all walls.

Unfortunately, Forge+’s feature set is nowhere near as robust as Weland’s. It’s perfectly adequate for texturing, but without a hook to switch quickly back and forth between it and Weland, it’s more impractical than it should be. However, it’s still invaluable for providing a much better sense of the physical space various levels occupy.

Back to top · Table of contents · Advanced guide · Website index

Comparisons of Texturing Utilities

Back to top · Table of contents · Advanced guide · Website index

Marathon 1 Format

Unfortunately, Marathon 1 content editing is barely supported on modern OSes, with a few exceptions, the most noteworthy being a physics converter by @magical_beetle_40501 on Discord that I’m hosting here myself.

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

Technically, Hopper’s Perl utilities also count as support for shapes editing on modern operating systems; however, Perl requires a considerable amount of technical knowledge to use (it’s been jokingly referred to as a “write-only language”), and assisting users with getting it to work is well beyond this document’s scope.

The ‘Classic OS’ resources below require a Mac or emulator running System 7 through 9. Setting one up is also well beyond this document’s scope.

To make Marathon 1 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 · Advanced guide · Website index

Weland Setup

Configuring Weland’s Preferences

Back to top · Table of contents · Advanced guide · Website index

Visual Mode Setup

Installing Visual Mode.lua or Vasara (MacOS)

Back to top · Table of contents · Advanced guide · Website index

Installing Visual Mode.lua & Vasara (Windows)

Back to top · Table of contents · Advanced guide · Website index

Configuring Weland!Aleph One

Back to top · Table of contents · Advanced guide · Website index

Mapmaking Basics

Tutorials & Resources for Beginning Mapmakers

Although the manual and video tutorials listed below are (obviously) for Forge, Weland has an almost identical interface, and 95% of their contents apply just as well to Weland once you have Vasara or Visual Mode.lua set up. I’ve begun annotating the Forge manual to make it work better as a reference for Weland and to correct all its errata, but I’ve only annotated about a quarter of it as of this writing (2024-04-27), and I’ve yet to edit any of my annotations (some of them are currently way too technical for their positions in the manual). I’ve also documented the Forge manual’s most significant errata immediately below this section.

Essentially, you’ll use Weland for everything you’d do from Forge’s top-down view; you’ll use Visual Mode.lua or Vasara for almost everything you’d do in Forge’s visual mode (currently, neither has an ‘align heights’ feature); and you’ll use Atque for merging and splitting maps.

The modern replacement for Anvil is ShapeFusion; its feature set is very nearly identical to Anvil’s, although it does a few things differently. Nonetheless, the annotated Anvil help balloons will be essential, since they’re one of the few Anvil features not integrated into ShapeFusion. The default Infinity physics model is also essential because the “Standard” physics model distributed with Marathon Infinity is actually a Marathon 2 physics model (thanks, Bungie), so if you want to edit VacBob or SMG physics, you’ll have to grab the one from Simplici7y.

Back to top · Table of contents · Advanced guide · Website index

Forge Manual Errata & Omissions

Back to top · Table of contents · Advanced guide · Website index

Mapping Issues in Weland

Weland differs from Forge in a few ways and has a few (mostly minor) bugs. Some issues users may currently encounter:

Back to top · Table of contents · Advanced guide · Website index

Texturing Issues in Visual Mode.lua and Vasara

A few problems occur when texturing in Aleph One that were not problems in Forge. These include:

Further Texturing Issues in Vasara

Back to top · Table of contents · Advanced guide · Website index

Further Reading

Advanced Tutorials & Resources

I can’t vouch for the accuracy of all of this info (except, I hope, my own page), and you definitely shouldn’t worry about most of this stuff until later – you need to familiarize yourself with the fundamentals before moving onto more advanced techniques. (If you don’t know how to play a paradiddle, you aren’t ready to cover a Neil Peart solo.) Hastur’s Workshop is listed first here because it’s the first advanced tutorial you should read – while not all of it is still relevant, you can still find helpful nuggets even in the seemingly irrelevant bits (e.g., viewing distances are no longer limited to 30 World Units, but the tips on that page can still be helpful for making spaces seem larger than they are, which is especially helpful since there are really only about 63 usable World Units in each direction).

Back to top · Table of contents · Advanced guide · Website index

Marathon Communities & Resources

Back to top · Table of contents · Advanced guide · Website index

Contact Info

The fastest way to contact me is Discord. You can ping me on the Marathon Discord server at @aaron6608 (or @Aaron#6608), though it’s entirely possible others may be able to answer your questions before I see them, so I recommend this only if you notice errors/omissions in this document (or have suggestions for additions; if you remind me, I can credit you for any of the above). If you need help, I recommend asking in #classic-marathon, #forge, or #tech-support. (#development is intended only for engine and editor development, so unless you’re specifically discussing Vasara AF, you should probably ping me in one of the other three channels.)

I’m also on GitHub as aaronfreed, naturally. You can create an issue, submit a pull request, or start a discussion. I do ask that users be respectful (both of me and of others) and note that I maintain this page on my own time, for free, while also juggling multiple active development projects that I’m also working on, also for free. The rules I outline for my discussion section apply equally well to issues and pull requests.

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. Lastly, I do, of course, have an email address, but:

  1. Email is very nearly the worst way to contact me.
  2. The days when it was a good idea to post an email address on a public webpage are long over.

What qualifies you to write this, anyway?

I’ve been modding for this engine off and on since 1997 and have worked on a long list of projects over the years; rather than list them all here, you can just check my portfolio page. As mentioned, I also have a much longer mapmaking page that goes into much more depth.

You may also be interested in my Marathon soundtracks page. I have some additional Marathon-related music on my discography page. Additionally, my notes on my remastering process may be helpful to those working on sounds or music.

Acknowledgements

Back to top · Table of contents · Advanced guide · Website index

Endnotes

# Note
1 Namely, when Vasara AF loads the map, it makes a table containing all polygons marked as “Must Be Explored”, then in Triggers.idle, Triggers.postidle, and Triggers.cleanup, it scans that list, and if any polygons have been set as “Normal”, it resets them to “Must Be Explored”. If this doesn’t make sense to you, don’t worry; it’s in a footnote because it’s far beyond the scope of this guide.
2
  • Tie the platform’s activation to some specific action on the map, such as a “platform on trigger” on the player’s spawn polygon; then X+click to load the level from elsewhere when you go to texture.
  • Set the “platform on trigger” as something besides the starting polygon that players must walk on before they can see the platform; then teleport around the map to avoid walking on it.
  • Another solution is reportedly to type .save level in the Lua console rather than to close visual mode; you’ll then have to (re)load the version you saved (which will show up here) in Weland.
  • If you use any of the above solutions, you’ll need to remember to repeat your chosen solution each time you open visual mode. If you’re comfortable with Lua, you can save yourself the trouble by simply having the level’s Lua script activate platforms in Triggers.init. (I strongly recommend never using polygon IDs in Lua scripts, since you’d have to rewrite them after deleting polygons with smaller IDs; instead, put goal objects on them with checkpoints set to a memorable number you won’t use for anything else.)
3 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 unless you think LASO is fun’ 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; unfortunately, its fork of Aleph One is years behind its current feature set).
  • RED’s execution can be sloppy, and it’s probably too difficult, but it has some fantastic ideas and artwork, and it’s remarkable for having been made almost entirely by a single person – a teenager at the time, to boot. It’s little surprise that he later became a professional game and webcomic artist with credits including the Slime Rancher series, Spiral Knights, Three Panel Soul, and Mac Hall.
  • Lastly, EVIL’s strengths include professional-quality sprites; fantastic sounds, monsters, and weapons; and sometimes brilliant (if frustratingly inconsistent) level design.
4 Which, despite carrying the name of a program hardly anyone has actively used for fifteen years, is meant for all map, physics, shapes, and sound creation for Aleph One or the Marathon trilogy.

Back to top · Table of contents · Advanced guide · Website index