-
Notifications
You must be signed in to change notification settings - Fork 0
/
mapcomplexity.html
326 lines (218 loc) · 36.2 KB
/
mapcomplexity.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>Marathon Map Complexity: A Case Study</title>
<link rel="stylesheet" type="text/css" href="https://code.cdn.mozilla.net/fonts/fira.css">
<link rel="stylesheet" type="text/css" href="css.css">
<script>
function sortTable(table, col, reverse) {
var tb = table.tBodies[0], // use `<tbody>` to ignore `<thead>` and `<tfoot>` rows
tr = Array.prototype.slice.call(tb.rows, 0), // put rows into array
i;
reverse = -((+reverse) || -1);
tr = tr.sort(function (a, b) { // sort rows
return reverse // `-1 *` if want opposite order
* (a.cells[col].textContent.trim() // using `.textContent.trim()` for test
.localeCompare(b.cells[col].textContent.trim(), undefined, {numeric: true})
);
});
for(i = 0; i < tr.length; ++i) tb.appendChild(tr[i]); // append each row in order
}
function makeSortable(table) {
var th = table.tHead, i;
th && (th = th.rows[0]) && (th = th.cells);
if (th) i = th.length;
else return; // if no `<thead>` then do nothing
while (--i >= 0) (function (i) {
var dir = 1;
th[i].addEventListener('click', function () {sortTable(table, i, (dir = 1 - dir))});
}(i));
}
function makeAllSortable(parent) {
parent = parent || document.body;
var t = parent.getElementsByTagName('table'), i = t.length;
while (--i >= 0) makeSortable(t[i]);
}
window.onload = function () {makeAllSortable();};
</script>
</head>
<body>
<header>
<h1><em>Marathon</em> Map Complexity: A Case Study</h1>
<p>This is an appendix to my <a href="mapmaking.html">advanced mapmaking guide</a> for <em>Marathon</em> Aleph One; please refer there for further context – though if you’re completely lost and wish to understand mapmaking for this engine, I advise starting with my <a href="mapmaking101.html">beginners’ guide</a>.</p>
<p>Please <a href="aboutme.html">contact me</a> if you notice any errors or omissions.</p>
</header>
<p>I mentioned in the advanced page’s <a href="mapmaking.html#generalmapmaking">General Notes</a> section that <span id="ftnt_ref01" class="dotted" name="I highly advise just following the link for an explanation, but in brief, you’re limited to 65,536 map indices. That sounds like a lot, but each vertex, each line, each polygon, each line shorter than 0.5 World Units, each platform, and each polygon within a 10 World Unit X/Y radius of each sound object uses a map index, and that’s just off the top of my head – you run out of them quickly. (This is a slight oversimplification – lines and vertices that aren’t attached to polygons don’t actually count.) In practice, you generally start to run out somewhere between 1,500 and 2,000 polygons. The largest polygon count I’ve seen in a playable map layout is 2,466.">map indices<a href="#ftnt01" class="noprintlink">⁽¹⁾</a></span> 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 <em>Eternal</em> level <strong>‘Where Giants Have Fallen’</strong>. 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.</p>
<h1 id="contents">Contents</h1>
<ol class="toc">
<li><a href="#top">Intro</a></li>
<li><a href="#contents">Table of Contents</a> (you’re looking at it)</li>
<li><a href="#whfg">Three Iterations of ‘Where Giants Have Fallen’</a>
<ol>
<li><a href="#wghf-mv">Iteration 1: <em>Eternal</em> Mark V</a></li>
<li><a href="#wghf-10">Iteration 2: <em>Eternal X</em> 1.0</a></li>
<li><a href="#wghf-13">Iteration 3: <em>Eternal X</em> 1.3</a>
<ol>
<li><a href="crossbeams">Crossbeams: A Closer Look</a></li>
<li><a href="#escapewillmakemegod">Escape Will Make Me God</a></li>
<li><a href="#pillars">The Magic Disappearing Pillar</a></li>
<li><a href="#limits">How We Stayed Within the Index Limits</a>
<ol>
<li><a href="#greeble">Minimal Greeble Density</a></li>
<li><a href="#soundobjects">The Law of Conservation of Sound Objects</a></li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li><a href="#igs">‘Il grande silenzio’</a> (<em>Tempus Irae Redux</em>)</li>
<li><a href="#monument">‘Monument to All Your Sins’</a> (<em>Starlight</em>)</li>
<li><a href="#stp">‘Stone Temple Pilates’</a> (<em>Marathon Phoenix</em>)</li>
<li><a href="#lessons">Lessons</a></li>
<li><a href="#endnotes">Endnotes</a></li>
</ol>
<h1 id="wghf">Three Iterations of ‘Where Giants Have Fallen’</h1>
<h2 id="wghf-mv">Iteration 1 (<em>Eternal</em> Mark V)</h2>
<h5>Designer: Forrest Cameranesi</h5>
<p>This is a Weland view of <em>Eternal Mark V</em>’s ‘Where Giants Have Fallen’:</p>
<div class="image"><a href="wghf-mv-0.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ Mark V Draw Mode" src="wghf-mv-0.png" width="512" height="512" title="‘Where Giants Have Fallen’ Mark V Draw Mode"></a></div>
<p>(I’ve hidden all objects besides players and sounds in all these screenshots; they’re the only important objects for our purposes. I’ve also removed extraneous lines and map writing from some later screenshots; the map writing wouldn’t be legible at this resolution anyway. Also, click this or any subsequent image on this page to enlarge it.)</p>
<p>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 VAF, Vasara, or Visual Mode.lua. That adds up fast. That said, the <em>Mark V</em> version looks like this:</p>
<div class="image"><a href="wghf-mv-1.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ Mark V Visual Mode #1" src="wghf-mv-1.png" width="600" height="300" title="‘Where Giants Have Fallen’ Mark V Visual Mode #1"></a></div>
<div class="image"><a href="wghf-mv-2.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ Mark V Visual Mode #2" src="wghf-mv-2.png" width="600" height="300" title="‘Where Giants Have Fallen’ Mark V Visual Mode #2"></a></div>
<p>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.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h2 id="wghf-10">Iteration 2 (<em>Eternal X</em> 1.0)</h2>
<h5>Designer: Adam Ashwell</h5>
<p><em>Eternal X</em> 1.0 overhauled the level, but the new version was even slower. It looked like this in Weland:</p>
<div class="image"><a href="wghf-10-0.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.0 Draw Mode" src="wghf-10-0.png" width="512" height="512" title="‘Where Giants Have Fallen’ 1.0 Draw Mode"></a></div>
<p>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 <a href="https://en.wikipedia.org/wiki/Portal_rendering" target="_blank">portal engine</a>. Portal engines have several strengths, but rendering large, complex outdoor spaces is not one of them. As a result, whenever players approach the edges of one of these maps and look inward, the performance plummets, even on modern boxes. With frame interpolation being an established Aleph One feature, it’s simply unacceptable 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 <span id="ftnt_ref02" class="dotted" title="1.0.3 differs from 1.0 only in featuring a few minor bug fixes. Since there was all of one week between 1.0’s release on 2008-02-23 and 1.0.3’s release on 2008-03-01, I have to imagine that comparatively few people played versions 1.0 through 1.0.2.">“Where Giants Have Fallen” in <em>Eternal X</em> 1.0.3<a href="#ftnt02" class="noprintlink">⁽²⁾</a></span> (again with 1.3 textures):</p>
<div class="image"><a href="wghf-10-1.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.0 Visual Mode #1" src="wghf-10-1.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.0 Visual Mode #1"></a></div>
<div class="image"><a href="wghf-10-2.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.0 Visual Mode #2" src="wghf-10-2.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.0 Visual Mode #2"></a></div>
<p>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 monotonous, and the lamps just look silly. Subsequent releases 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.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h2 id="wghf-13">Iteration 3 (<em>Eternal X</em> 1.3)</h2>
<h5>Designers: CryoS and Aaron Freed</h5>
<p>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):</p>
<div class="image"><a href="wghf-13-0.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Draw Mode" src="wghf-13-0.png" width="512" height="512" title="‘Where Giants Have Fallen’ 1.3 Draw Mode"></a></div>
<p>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 <span id="ftnt_ref03" class="dotted" title="One of the crossbeams has gone out of skew on the treadle.">crossbeams<a href="#ftnt03" class="noprintlink">⁽³⁾</a></span> 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:</p>
<div class="image"><a href="wghf-13-1.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Visual Mode #1" src="wghf-13-1.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Visual Mode #1"></a></div>
<div class="image"><a href="wghf-13-2.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Visual Mode #2" src="wghf-13-2.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Visual Mode #2"></a></div>
<p>Again, we notice a few things immediately. First, this area still <em>looks</em> 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 <em>not</em> a typo.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h3 id="crossbeams">Crossbeams: A Closer Look</h3>
<p>But doesn’t it look like you can see over the crossbeams? Yes. This <del>trick</del> <em>illusion</em> employs ‘5D space’, the engine’s ability to overlap spaces in X/Y/Z coordinates. It can do this because it uses <em>four</em> dimensions to render spaces: <strong>X</strong>, <strong>Y</strong>, <strong>Z</strong>, and <strong>polygon</strong>. 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 <del>a trick</del> <em>an illusion</em> here, but… if you could get to the area of the crossbeam with the blue pillars, you’d see this:</p>
<div class="image"><a href="wghf-13-3.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Crossbeam Top #1" src="wghf-13-3.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Crossbeam Top #1"></a></div>
<p>And the other side of the crossbeam would look like this:</p>
<div class="image"><a href="wghf-13-4.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Crossbeam Top #2" src="wghf-13-4.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Crossbeam Top #2"></a></div>
<p>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).</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h3 id="escapewillmakemegod">Escape Will Make Me God</h3>
<p>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:</p>
<div class="image"><a href="wghf-13-5.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Crossbeam Top #3" src="wghf-13-5.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Crossbeam Top #3"></a></div>
<p>Or even jump to an island, where they can see the sky texture clipping their view of the crossbeam in places:</p>
<div class="image"><a href="wghf-13-6.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Island View" src="wghf-13-6.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Island View"></a></div>
<p>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.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h3 id="pillars">The Magic Disappearing Pillar</h3>
<p>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:</p>
<div class="image"><a href="wghf-13-7.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3: Now you see it…" src="wghf-13-7.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3: Now you see it…"></a></div>
<p>However, if we step a bit to the left:</p>
<div class="image"><a href="wghf-13-8.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3:…now you don’t." src="wghf-13-8.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3: …now you don’t."></a></div>
<p>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).</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h3 id="limits">How We Stayed Within the Index Limits</h3>
<p>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.</p>
<h4 id="greeble">i. Minimal Greeble Density</h4>
<p>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 <em>Phoenix</em>’s ‘Stone Temple Pilates’, in this case combining its style with those of <em>Apotheosis X</em> (hence all the hexagons, though I already felt obligated to use them due to Tacticus’ brilliant sky texture), <em>Eternal</em> 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.)</p>
<p>Overall, outside the centre of the map, the average polygon size is really quite large; polygons sometimes get narrow, but their sides generally remain quite long. There are multiple advantages to this beyond just preventing extra map indices from being gobbled up by polygon exclusion zones – for one thing, as Hastur’s Workshop <a href="https://citadel.lhowon.org/litterbox/Forge/hastursworkshop/things2.html" target="_blank">explains</a>, a monster cannot cross a line that’s shorter than its diameter, and if the monster gets trapped in a polygon where all lines are shorter than its diameter, it will be unable to move or attack unless a player occupies the same polygon. Furthermore, keeping polygons relatively large makes sound objects less costly to use. Speaking of which…</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h4 id="soundobjects">ii. The Law of Conservation of Sound Objects</h4>
<p>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 <em>say</em> <strong>‘Waterfall’</strong>:</p>
<div class="image"><a href="wghf-13-a.png" target="_blank" class="noprintlink"><img alt="Sound in Where Giants Have Fallen" src="wghf-13-a.png" width="800" height="416" title="Sound in ‘Where Giants Have Fallen’"></a></div>
<p>However, the following script is merged in with the level:</p>
<blockquote><pre><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></pre></blockquote>
<p>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.</p>
<p>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.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h1 id="igs">‘Il grande silenzio’</h1>
<h5>Collection: <em>Tempus Irae Redux</em></h5>
<h5>Designer: Aaron Freed</h5>
<div class="image"><a href="igs-0.png" target="_blank" class="noprintlink"><img alt="‘Il grande silenzio’ Draw Mode" src="igs-0.png" width="512" height="512" title="‘Il grande silenzio’ 1.3 Draw Mode"></a></div>
<p>My first pastiche of ‘Stone Temple Pilates’, seen above in its current state (1,751 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 revision (2023-03-31), still hasn’t been released: <em>Tempus Irae Redux</em> (hopefully, we’ll have it out in April 2024). There are obvious stylistic differences, starting with 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 of ‘Il grande silenzio’ (and, as a direct consequence, how much less densely they’re clustered in others).</p>
<p>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 <em>Tempus Irae Redux</em>), which each require sound objects to keep their ambient sounds from cutting off; and partly because I was pastiching two brilliant mapmakers: <strong>RyokoTK</strong> and my co-conspirator <strong>James Hastings-Trew</strong>, who both tend to employ a lot of greeble. Ryoko noted on Discord that I ‘underestimated just how damn wasteful’ his polygon use is, but funnily enough, I deliberately set out to <em>exceed</em> the amount of greeble they use, reasoning, ‘Modern computers can handle it.’ (This was my first mistake; it 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:</p>
<div class="image"><a href="igs-1.png" target="_blank" class="noprintlink"><img alt="‘Il grande silenzio’ Visual Mode #1" src="igs-1.png" width="600" height="300" title="‘Il grande silenzio’ Visual Mode #1"></a></div>
<div class="image"><a href="igs-2.png" target="_blank" class="noprintlink"><img alt="‘Il grande silenzio’ Visual Mode #2" src="igs-2.png" width="600" height="300" title="‘Il grande silenzio’ Visual Mode #2"></a></div>
<p>Further revisions will require me to fix that, which in turn will likely require removing and reconstructing a few parts of the map from scratch – a painful process.</p>
<p>It might be more instructive to show screenshots of these maps consecutively:</p>
<div class="image"><a href="igs-3.png" target="_blank" class="noprintlink"><img alt="‘Il grande silenzio’ Visual Mode #3" src="igs-3.png" width="600" height="300" title="‘Il grande silenzio’ Visual Mode #3"></a></div>
<div class="image"><a href="wghf-13-9.png" target="_blank" class="noprintlink"><img alt="‘Where Giants Have Fallen’ 1.3 Visual Mode #9" src="wghf-13-9.png" width="600" height="300" title="‘Where Giants Have Fallen’ 1.3 Visual Mode #9"></a></div>
<p>Now, do I think the geometry in the <em>Tempus</em> map looks cool? Yes. Do I think it looks that much cooler than the <em>Eternal</em> map? Certainly not enough to justify the added difficulty it caused me.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h1 id="monument">‘Monument to All Your Sins’</h1>
<h4>Collection: <em>Starlight</em></h4>
<h4>Designer: RyokoTK</h4>
<p>That said, I’m showing these screenshots not to show off the maps, but to illustrate how overusing greeble causes problems, and to provide a better yardstick for <em>what ‘overusing greeble’ even means</em>. Greeble looks cool, but you have to know how much is too much. There’s probably no way to truly learn this except through trial and error, but examining mapmakers’ styles more closely than I did can help. Ryoko doesn’t use as much greeble as I thought he did when I made ‘Il grande silenzio’. I believe ‘Monument to All Your Sins’ from <em>Starlight</em> still has the highest polygon count of any map he’s released (1,843):</p>
<div class="image"><a href="monument-0.png" target="_blank" class="noprintlink"><img alt="‘Monument to All Your Sins’ Draw Mode" src="monument-0.png" width="512" height="512" title="‘Monument to All Your Sins’ Draw Mode"></a></div>
<p>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 <em>Chronicles</em> 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):</p>
<div class="image"><a href="monument-1.png" target="_blank" class="noprintlink"><img alt="‘Monument to All Your Sins’ Visual Mode #1" src="monument-1.png" width="600" height="300" title="‘Monument to All Your Sins’ Visual Mode #1"></a></div>
<div class="image"><a href="monument-2.png" target="_blank" class="noprintlink"><img alt="‘Monument to All Your Sins’ Visual Mode #2" src="monument-2.png" width="600" height="300" title="‘Monument to All Your Sins’ Visual Mode #2"></a></div>
<p>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.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h1 id="stp">‘Stone Temple Pilates’</h1>
<h4>Collection: <em>Marathon Phoenix</em></h4>
<h4>Designer: RyokoTK</h4>
<p>While I’m at it, here’s ‘Stone Temple Pilates’, which has 1,771 polygons. The Weland view looks like this:</p>
<div class="image"><a href="stp-0.png" target="_blank" class="noprintlink"><img alt="‘Stone Temple Pilates’ Draw Mode" src="stp-0.png" width="512" height="512" title="‘Stone Temple Pilates’ Draw Mode"></a></div>
<p>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 – then bear in mind that many have two floors, so they’re even more densely detailed than they look.)</p>
<p>‘Stone Temple Pilates’ looks like this in Vasara:</p>
<div class="image"><a href="stp-1.png" target="_blank" class="noprintlink"><img alt="‘Stone Temple Pilates’ Visual Mode #1" src="stp-1.png" width="600" height="300" title="‘Stone Temple Pilates’ Visual Mode #1"></a></div>
<div class="image"><a href="stp-2.png" target="_blank" class="noprintlink"><img alt="‘Stone Temple Pilates’ Visual Mode #2" src="stp-2.png" width="600" height="300" title="‘Stone Temple Pilates’ Visual Mode #2"></a></div>
<p>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.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h1 id="lessons">Lessons</h1>
<p>We can boil down the lessons of this case study to two major principles:</p>
<ol>
<li>Don’t overuse greeble.</li>
<li>Don’t overuse sound objects.</li>
</ol>
<p>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.</p>
<p>An even better understanding can come from looking at <em><a href="https://simplici7y.com/items/starlight" target="_blank">Starlight</a></em>, <em><a href="https://simplici7y.com/items/marathon-phoenix-2" target="_blank">Phoenix</a></em>, and the <a href="http://eternal.bungie.org/development" target="_blank">latest preview build of <em>Eternal</em></a> (and <em>Tempus Irae Redux</em>, once it comes out) yourself. Learning from others is one of the best ways to improve. <strong>RyokoTK</strong>’s other works (<em><a href="https://simplici7y.com/items/kindred-spirits" target="_blank">Kindred Spirits</a></em>, <em><a href="https://simplici7y.com/items/paradise-lost" target="_blank">Paradise Lost</a></em>, <em><a href="https://simplici7y.com/items/second-quest" target="_blank">Second Quest</a></em>, etc.) are also well worth looking at, as are the works of mappers like <strong>windbreaker</strong> (<em><a href="https://lochnits.com/marathon/istoria/">Istoria</a></em>, <em><a href="https://simplici7y.com/items/imperium" target="_blank">Imperium</a></em>, <em><a href="https://simplici7y.com/items/infra-apogee" target="_blank">Infra Apogee</a></em>, <em><a href="https://simplici7y.com/items/caustic-dystopia" target="_blank">Caustic Dystopia</a></em>, etc.); <strong>James Hastings-Trew</strong> and <strong>Borzz</strong> (<em><a href="https://simplici7y.com/items/megiddo-game" target="_blank">Megiddo Game</a></em>, <em><a href="http://nardo.bungie.org/alephone.php" target="_blank">Tempus Irae</a></em>, etc.); <strong>hypersleep</strong> and <strong>CryoS</strong> (<em><a href="https://simplici7y.com/items/apotheosis-x-5" target="_blank">Apotheosis X</a></em>); and of course <strong>Bungie</strong> and <strong>Double Aught</strong> themselves. (If you were previously unaware of <strong>Double Aught</strong>’s classic net map collection <a href="https://simplici7y.com/items/coriolis-loop/" target="_blank">Coriolis Loop</a>, today’s your lucky day. Use ⌘+⌥+N on Mac or Ctrl+Shift+N on Windows or Linux to start a new game on any level.) 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.</p>
<p>Next up: How to <a href="mapindexreduction.html">reduce your map index count</a> without sacrificing appearance or sound.</p>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
<h1 id="endnotes">Endnotes</h1>
<table class="endnotes">
<thead>
<tr>
<th class="right"><strong>#</strong></th>
<th><strong>Note</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td class="right"><a href="#ftnt_ref01" id="ftnt01" class="noprintlink"><strong>1</strong></a></td>
<td>I highly advise just <a href="mapmaking.html#generalmapmaking">following the link</a> for an explanation, but in brief, you’re limited to 65,536 map indices. That sounds like a lot, but each vertex, each line, each polygon, each line shorter than 0.5 World Units, each platform, and each polygon within a 10 World Unit X/Y radius of each sound object uses a map index, and that’s just off the top of my head – you run out of them quickly. (This is a slight oversimplification – lines and vertices that aren’t attached to polygons don’t actually count.) In practice, you generally start to run out of them at somewhere between 1,500 and 2,000 polygons. The largest polygon count I’ve seen in a playable map layout is 2,466.</td>
</tr>
<tr>
<td class="right"><a href="#ftnt_ref02" id="ftnt02" class="noprintlink"><strong>2</strong></a></td>
<td>1.0.3 differs from 1.0 only in featuring a few minor bug fixes. Since there was all of one week between 1.0’s release on 2008-02-23 and 1.0.3’s release on 2008-03-01, I have to imagine that comparatively few people played versions 1.0 through 1.0.2.</td>
</tr>
<tr>
<td class="right"><a href="#ftnt_ref03" id="ftnt03" class="noprintlink"><strong>3</strong></a></td>
<td>One of the crossbeams has <a href="https://youtu.be/D5Df191WJ3o" target="_blank">gone out of skew on the treadle</a>.</td>
</tr>
</tbody>
</table>
<p class="sectionbreak noprint"><a href="#top">Back to top</a> · <a href="mapmaking101.html">Mapmaking (basic)</a> · <a href="mapmaking.html">Mapmaking (advanced)</a> · <a href="aboutme.html">Contact me</a> · <a href="/">Website index</a></p>
</body>
</html>