Marathon Mapmaking: Reducing Map Index Use

A supplement to my advanced Marathon Aleph One mapmaking guide, though if you’re new to mapmaking, you should definitely start with my beginners’ guide. This is also something of a follow-up to a case study I wrote on map complexity.

Please contact me if you notice any errors or omissions.

Table of Contents

  1. Intro
  2. Table of Contents (you’re looking at it)
  3. I ran out of map indices. Wat do?
  4. Prune Polygons Where Possible
  5. Principles of Pruning
  6. Potential Pitfalls of Pruning

I ran out of map indices. Wat do?

In any case, a problem that has plagued every creator of sufficiently complex Marathon Aleph One maps is the limit of 65,536 map indices, the primary factor that limits map complexity in the engine. I explain the matter at greater length in my general guide, but in short, each vertex, each line, each polygon, each line shorter than 0.5 World Units (polygon exclusion zones, used to calculate lines the player cannot cross), each platform, and each polygon within a 10 World Unit X/Y radius of each sound object uses a map index. (Note: Take this list and all map index totals listed here with a grain of salt – the list may not be complete, and I may not have every factor exactly right. I plan to do a deep dive into the source code within the coming weeks.) 65,536 initially sounds like a lot, but this all adds up quickly!

Unfortunately, if you run out of map indices, your only choice is to simplify your level – otherwise, it won’t even load due to an assertion failure. If you have an easy way to split it into two levels without compromising the mission or the flow, that’s by far the optimal choice, as it allows you to leave its detail intact. (The sole caveat is that you’ll need to be sure any geometry shared between both levels remains consistent, or it’ll spoil the effect of them being connected.)

If that isn’t an option, you’ll have to reduce the level’s count of one or more of the following:

It may seem tempting to prune sound objects first, as they are by far the largest user of map indices, but I’d advise caution in doing so – sudden transitions from one ‘sound region’ to another can be jarring. Aleph One 1.7’s new OpenAL sound engine actually lessens this problem somewhat by preventing sounds from suddenly cutting off when the player crosses from one boundary to another; however, they still suddenly start up, so only half the problem has been solved.

Prune Polygons Where Possible

More importantly, though, you almost certainly didn’t fill polygons as efficiently as you could’ve. I mentioned in my case study on map complexity that ‘Monument to All Your Sins’ (a massive level from RyokoTK’s brilliant net map pack Starlight) has 1,843 polygons. In addition, it has 3,277 vertices and 5,171 lines.

Before I proceed here, I want to be extremely clear that the following is not in any sense meant to throw shade at Ryoko, who is one of the most prolific and consistently brilliant level designers ever to create Marathon content. I’m not on his level and doubt I ever will be. That said, the solo adaptation I created for Marathon Chronicles, from which I removed none of the original’s visual complexity, contains 1,784 polygons, 3,271 vertices, and 5,106 lines (a savings of 59 polygons, 6 vertices, and 65 lines). The image below (click to enlarge) compares the two versions to show where I pruned polygons:

The fact that I only found 59 polygons to prune is actually quite impressive. Here are a few levels from various editions of Where Monsters Are in Dreams with their initial polygon counts, the polygon counts I pruned them to, and the number of polygons I pruned. (In all cases, the levels’ appearance was not visibly changed.)

Level Ante Post Δ
We Were Speaking of Fate 1,705 1,500 -205
Cause & Effect (first iteration) 2,466 2,222 -244
Burning Memories 2,217 2,022 -195
Cast Your Fate to the Stars 1,950 1,768 -182

Lest anyone think I’m letting myself off the hook for inefficient polygon use, ‘Cast Your Fate to the Stars’ is my level!

In any case, I’m not saying this because I think it demonstrates any kind of talent on my part (for one thing, as El Estepario Siberiano, arguably the greatest drummer alive, has argued, talent is a lie); it simply requires attention to detail and understanding of geometry, both of which can be learned. I’m revealing this solely to indicate how many polygons it’s often possible to remove without negatively impacting a map’s appearance. Furthermore, not merely will pruning polygons reduce a level’s map index use, but it will also improve its performance.

Back to top · Mapmaking (basic) · Mapmaking (advanced) · Contact me · Website index

Principles of Pruning

A few principles I find have served me well:

Back to top · Mapmaking (basic) · Mapmaking (advanced) · Contact me · Website index

Potential Pitfalls of Pruning

There are, of course, potential pitfalls as well:

With all this in mind (not to mention what a pain it is to retexture areas after deleting and remaking polygons – Weland’s ‘Remember Deleted Sides’ only works some of the time), I can’t blame anyone for not finding polygon pruning to be the most attractive solution. Ideally, you can prevent the need to prune by looking closely at your map geometry before you start texturing to begin with. However, I’m surely not the only person who’s planned one thing for a level, then wound up doing something entirely different that required fewer polygons than expected.

In any case, as time-consuming and frustrating as this process can be, it’s still – to me at least – far preferable to having to sacrifice map complexity. Hopefully this helps.

Back to top · Mapmaking (basic) · Mapmaking (advanced) · Contact me · Website index