<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>congusbongusgames</title>
		<description>Thoughts on game dev, design and music from a hobbyist</description>
		<link>https://cxong.github.io</link>
		<atom:link href="https://cxong.github.io/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Easy Backward Compatibility</title>
				<description>&lt;p&gt;This one’s a practical coding article, one that &lt;a href=&quot;https://cxong.github.io/2018/10/sdl-rendercopyex&quot;&gt;I haven’t done&lt;/a&gt; &lt;a href=&quot;https://cxong.github.io/2016/01/how-to-write-a-lan-server&quot;&gt;in quite a while&lt;/a&gt;. It’s something I’ve come across often over the years so I’ve always wanted to have an article to point people to, so here it is.&lt;/p&gt;

&lt;p&gt;Here’s the premise: you’re making a game (or really any program) that reads data, whether that’s game data, config files, save files and so on. When these files get extended (like adding new fields or even changing the meaning of existing fields), you want the old files to still be usable, and not be made obsolete. This is &lt;a href=&quot;https://en.wikipedia.org/wiki/Backward_compatibility&quot;&gt;&lt;strong&gt;backward compatibility&lt;/strong&gt;&lt;/a&gt;, and it’s great to have.&lt;/p&gt;

&lt;p&gt;A common misperception is that backward compatibility is always hard. Understandable since we often hear about vendors breaking it, or when vendors do provide it, it’s made a big deal out of (e.g. when Sony fans tout that new PlayStation consoles can play previous gen games, or when Microsoft fans tout the legendary backward compatibility of Windows). Maintaining backward compatibility for complex systems is indeed hard, but when we’re talking about simple config or data files, it’s surprisingly easy. Even novice programmers can do it, in fact.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.ibb.co/kywXQ74/PSCOMP.png&quot; alt=&quot;PlayStation backward compatibility chart&quot; /&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;starting-off-dont-overthink-it-keep-it-simple&quot;&gt;Starting off: don’t overthink it, keep it simple&lt;/h2&gt;

&lt;p&gt;Let’s work through an example which is based on something I’ve personally worked on. Suppose you have a game where players can choose from a few different characters, and this choice is saved, for example in a save file. The number of characters is hard coded and stored in a list, so the simplest thing to do is save the index of the character. Using it is easy; we use the save index directly in our character array.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.myabandonware.com/media/screenshots/c/cyberdogs-347/cyberdogs_3.png&quot; alt=&quot;3 Cyberdogs characters&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Save file:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Loading code:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;CHARACTERS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Jones&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;head_sprites&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;jones.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Ice&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;head_sprites&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ice.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;WarBaby&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;head_sprites&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;warbaby.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;character&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CHARACTERS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Later, if we want to add more characters, we need to add them at the end of the list. This way save files using the existing characters still work.&lt;/p&gt;

&lt;h2 id=&quot;adding-new-fields-make-it-optional-use-default-values&quot;&gt;Adding new fields: make it optional, use default values&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://www.playdosgames.com/assets/screenshots/c-dogs.png&quot; alt=&quot;Different character colours&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Notice the characters are all dark blue. Now suppose we want to be able to customise the character colours, out of a fixed list. We can add a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;color&lt;/code&gt; field, but what about the old save file, it doesn’t have the field! No problem, we can handle this in code and assume the lack of the field means the default colour, dark blue:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;red&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;COLORS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;red&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;#ff0000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;green&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;#00ff00&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;dark blue&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;#000099&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;color&quot;&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;COLORS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;COLORS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;dark blue&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;extending-a-field-be-supportive&quot;&gt;Extending a field: be supportive&lt;/h2&gt;

&lt;p&gt;Somewhere down the line we might decide a fixed list of colours isn’t flexible; we want to be able to specify any colour via hex code. Now we could introduce a new field for it, but that seems redundant. Since it’s obvious what’s a hex code and what isn’t, we can just add support for hex codes to the existing field:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#ff0000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# Try to load hex first; if it fails load by name
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;load_hex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;COLORS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Although our code is more complex, it keeps the data file simple and flexible.&lt;/p&gt;

&lt;h2 id=&quot;incompatible-changes-use-versioning&quot;&gt;Incompatible changes: use versioning&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cdogs-sdl/master/wiki/images/char_menu.png&quot; alt=&quot;Character editor&quot; /&gt;&lt;/p&gt;

&lt;p&gt;What if we are changing a field in an incompatible or non-trivial way? Let’s say we’ve decided we made a mistake with using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; to specify the character. We want to be able to customise the name, separately to the character. Supporting both isn’t easy since we don’t want to stop players from using numbers as names (as silly as that seems). This is where versioning comes in, as it lets us make arbitrary changes to the file format. Let’s start our version at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;, which means when there’s no version, it’s implicitly version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Bob&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;character&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;version&quot;&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;character&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CHARACTERS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;character&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;character&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CHARACTERS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# Use default character name
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;character&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/colored_hats.png&quot; alt=&quot;Different hats and shades&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let’s look at a more involved example. Suppose we are several versions in, and we want to be able to customise many parts of the character - different body part colours, different hats, hairstyles and more. And we still want to support save files going all the way to the start. This is what our file and loading code might look like:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Bob&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;hat&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;beret&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#00ff00&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;hair&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mullet&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#663300&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;soldier&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#336699&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;style&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# Hat style as an index
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HAT_STYLES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;style&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# Only one hat allowed, and use a flag for whether they have a hat
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;has_hat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;has_hat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;baseball&quot;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;none&quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# No hats before version 8 :(
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;none&quot;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ... etc.
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The code looks pretty hectic just for loading the hat style, so you could also choose to implement a separate load function for each version. Whichever makes sense for you:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save_v10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;style&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save_v9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HAT_STYLES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;style&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save_v8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;has_hat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;has_hat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;baseball&quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;none&quot;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_save_v7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;hat_style&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;none&quot;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;why-its-so-easy&quot;&gt;Why it’s so easy&lt;/h2&gt;

&lt;p&gt;Using the technique described above, I’ve managed to maintain backward compatibility for multiple data files (save files, campaigns, mods) over dozens of versions without much fuss, and so can you. So why can’t everyone do it, or when they do, it seems so effortful?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Microsoft maintaining WIN32 backward compatibility by &lt;a href=&quot;https://en.wikipedia.org/wiki/Bug_compatibility&quot;&gt;reproducing decades of bugs&lt;/a&gt; so old programs work the same way&lt;/li&gt;
  &lt;li&gt;PlayStation 3 had to &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_3_models&quot;&gt;include PlayStation 2 chips&lt;/a&gt; in order to play those games&lt;/li&gt;
  &lt;li&gt;Apple putting in lots of effort to make &lt;a href=&quot;https://en.wikipedia.org/wiki/Rosetta_(software)&quot;&gt;Rosetta&lt;/a&gt; work well, including timing it with big hardware performance bumps so that users don’t notice the emulation delays as much&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course our example of loading a simple file containing a character definition is easy because it’s so simple. Other well known examples of backward compatibility are much harder because:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;They are way more complicated: a software program is much harder to maintain compatibility than a static, simple file format&lt;/li&gt;
  &lt;li&gt;They are performance critical, whereas loading a save file for example doesn’t need to run in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So in most cases, maintaining backward compatibility is simple and effective. The next time you’re thinking about backward compatibility, and whether a change may break it: don’t worry, just add some translation code and you’re done!&lt;/p&gt;
</description>
				<pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2026/01/easy-backward-compatibility</link>
				<guid isPermaLink="true">https://cxong.github.io/2026/01/easy-backward-compatibility</guid>
			</item>
		
			<item>
				<title>Timeless Games</title>
				<description>&lt;p&gt;The games industry is famously tough and insecure to be in, as it is hit-driven: rush the right game to market at the right moment and you can rake in the big bucks as your game becomes the current cultural phenomenon, or miss it and die in ignominy. This leads to a bunch of pathologies: &lt;a href=&quot;https://cxong.github.io/2024/08/crunch-in-the-games-industry&quot;&gt;the persistence of crunch&lt;/a&gt;, rushing to hit key sales dates, or to beat a competitor &lt;a href=&quot;https://cxong.github.io/2024/03/in-the-shadow-of-doom&quot;&gt;(or avoid being beaten)&lt;/a&gt;, constantly chasing trends in tech or fickle tastes in the latest hot game genre. No wonder so many people keep burning out.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/timeless.jpg&quot; alt=&quot;Timeless games collage&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As a hobbyist, the odds are even more stacked, as you have limited time and energy to chase trends, so making a hit is literally winning the lottery. There’s got to be a better way: don’t make games that quickly go out of date, make games that will be fun even if they are late, that stand the test of time. Make timeless games.&lt;/p&gt;

&lt;h1 id=&quot;which-games-become-outdated-easily&quot;&gt;Which Games Become Outdated Easily&lt;/h1&gt;

&lt;p&gt;Before answering what games are “timeless”, let’s rule out what kind of games we definitely don’t want to make:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Flashy tech&lt;/li&gt;
  &lt;li&gt;What’s trendy right now&lt;/li&gt;
  &lt;li&gt;Games that big studios are making&lt;/li&gt;
  &lt;li&gt;Games that a lot of people want to make&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is, avoid relying on &lt;strong&gt;novelty&lt;/strong&gt; and in &lt;strong&gt;crowded competitive spaces&lt;/strong&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Whenever a new piece of technology comes out, there’s great buzz and excitement as people try to make games using it. If you are fast enough to beat others to market with a good game, then this is a smart strategy. Otherwise, you will not only be overshadowed by the initial wave of contenders; because the tech is so new, most people won’t know what they’re doing and make many first-mover mistakes. The penalty for being late to market is thus doubly brutal: you’ll also be competing with those who have learned from those mistakes with a superior product.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/yHMBMay.png&quot; alt=&quot;Mobile game icons all featuring a white guy screaming&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Think of new tech like a new console, rendering techniques, VR, 3D… all these things, when they first came out, produced a gold rush, with a few big winners and countless losers. When the iPhone was new it was a massive deal, and it spawned an entire new platform, something that doesn’t happen for decades. But for every Angry Birds or Candy Crush, there were countless losers who languished in obscurity (see also: &lt;a href=&quot;https://en.wikipedia.org/wiki/Survivorship_bias&quot;&gt;survivorship bias&lt;/a&gt;). The market moved too fast, the wave of aspiring game creators was too overwhelming, quickly saturating the market.&lt;/p&gt;

&lt;p&gt;Likewise, there are moments where certain genres or types of games become “in”, and everyone wants to play them, which creates an opportunity for copycats to cash in on the action. &lt;a href=&quot;https://en.wikipedia.org/wiki/Concord_(video_game)&quot;&gt;Hero shooters&lt;/a&gt;, &lt;a href=&quot;https://kotaku.com/battle-royale-failed-died-flops-fortnite-pubg-culling-2-1850289773&quot;&gt;battle royale&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Hytale&quot;&gt;Minecraft clones&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Heroes_of_Newerth&quot;&gt;MOBAs&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Earth_%26_Beyond&quot;&gt;MMORPGs&lt;/a&gt;, &lt;a href=&quot;https://90sfps.fandom.com/wiki/William_Shatner%27s_TekWar&quot;&gt;“Doom clones”&lt;/a&gt;, &lt;a href=&quot;https://screenrant.com/video-game-mascots-90s-tried-failed-to-dethrone-mario/&quot;&gt;mascot platformers&lt;/a&gt; - all of these trends came and went, spawning a bunch of winners and many more losers. When you win you can truly win big - &lt;a href=&quot;https://web.archive.org/web/20180706082638/https://www.recode.net/2018/6/26/17502072/fortnite-revenue-game-growth-318-million&quot;&gt;Fortnite&lt;/a&gt; being perhaps the winningest bandwagon-jumper of them all - but it’s also so easy to miss the boat and lose. Imagine your chances of making a successful battle royale game after Fortnite, and without the resources of a large studio behind you!&lt;/p&gt;

&lt;p&gt;So now we know what &lt;em&gt;not&lt;/em&gt; to make, ideas about what to make should be crystallising:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Based on mature, proven tech&lt;/li&gt;
  &lt;li&gt;Avoids trends, focuses on styles that are older or niche&lt;/li&gt;
  &lt;li&gt;Games that aren’t popular with bandwagoners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But before we look into each in detail, let’s examine what exactly makes a game “timeless”.&lt;/p&gt;

&lt;h1 id=&quot;what-are-timeless-games&quot;&gt;What are Timeless Games?&lt;/h1&gt;

&lt;p&gt;Within any art form, there exist entries that stand the test of time, and are enjoyed by people many years after their first appearances, and bring the same joy and sublime feelings in those who discover it for the first time. In analogue games there are examples such as &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_chess&quot;&gt;Chess&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Go&quot;&gt;Go&lt;/a&gt; that are actively enjoyed, hundreds and thousands of years later, even as newer board games are released all the time. There are also examples like &lt;a href=&quot;https://en.wikipedia.org/wiki/Sudoku&quot;&gt;Sudoku&lt;/a&gt; which, while being relatively recent, still enjoy wide popularity to this day, decades after. Likewise in film, there are many classic movies that are still enjoyed decades later, even as the artform continues to evolve.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Chess_Set_MET_DP170393.jpg/330px-Chess_Set_MET_DP170393.jpg&quot; alt=&quot;Iranian Shatranj set, an ancient form of chess, 12th century&quot; /&gt;&lt;/p&gt;

&lt;p&gt;What makes some of these examples timeless, even in the face of shifting tastes and trends, while others age like milk, being heavily tied to a certain place in time, and make them hard for modern audiences to enjoy? Before answering this, consider that there are likewise timeless video games, but it seems in this medium, there are way fewer examples. Tetris, 2D Mario, sports games, and perhaps a handful of other notable examples notwithstanding, plus some classic hits that enjoy re-releases and remakes supported by nostalgia. Games just seem to age poorly as a medium, and sometimes entire genres come and go. Time is unkind to games.&lt;/p&gt;

&lt;p&gt;Why is this so? One reason is that games are a relatively young artform, and is still evolving rapidly. For most of its lifetime, games were constrained by technical limitations, which meant that new tech was constantly unlocking new possibilities and greatly impacting the whole industry. I argue that it wasn’t until the &lt;a href=&quot;https://en.wikipedia.org/wiki/Indie_game#Shifting_industry_and_increased_visibility_(2005%E2%88%922014)&quot;&gt;indie boom of the late 00’s&lt;/a&gt; that games could achieve mainstream success without using current gen technology, and today we have a healthy mix of games pushing the latest tech vs those that don’t. Compare this to film, where although technology and techniques are constantly evolving, you don’t need the latest and greatest in order to make a successful film at all. But like games, in the early decades of film, people were still figuring out the artform, and it wasn’t until the 30’s and 40’s when the artform came of age. The best films prior to this are very hard for modern audiences to enjoy, but by the 30’s and 40’s you had classics like &lt;em&gt;Citizen Kane&lt;/em&gt;, &lt;em&gt;Casablanca&lt;/em&gt;, &lt;em&gt;Gone with the Wind&lt;/em&gt; and more. As long as you can get used to black and white and other dated aesthetics, the movies are still eminently enjoyable.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Claude_Rains_and_James_Stewart_in_Mr._Smith_Goes_to_Washington_%281939%29.jpg/330px-Claude_Rains_and_James_Stewart_in_Mr._Smith_Goes_to_Washington_%281939%29.jpg&quot; alt=&quot;Screenshot of Mr. Smith Goes to Washington&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;1939 is considered by many to be &lt;a href=&quot;https://en.wikipedia.org/wiki/1939_in_film&quot;&gt;the greatest year in film&lt;/a&gt;, due to classic releases including &lt;em&gt;Gone With the Wind&lt;/em&gt;, &lt;em&gt;Mr. Smith Goes to Washington&lt;/em&gt;, and &lt;em&gt;The Wizard of Oz&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The good news is that the games industry is now older than the movie industry at the time of those classics, so the “&lt;em&gt;Citizen Kane&lt;/em&gt; of games” might be made right about now - the industry has grown up, so to speak. Apart from avoiding fleeting trends or overly tying your game to a specific point in time, making timeless games is about focusing on timeless, universal appeal. Just as classic examples of art depict universal human values, timeless games focus on themes and gameplay mechanics that have raw, timeless appeal. Tetris has the intellectual challenge of rotating shapes in your head and the satisfaction of completing and wiping out rows of blocks. 2D platformers like Mario have the compelling mechanic of predicting parabolic jumping arcs. Behind every good game is a hook that taps into something universally appealing, and games that focus on this have a good chance of staying relevant for years.&lt;/p&gt;

&lt;p&gt;On that note, there are plenty of games that haven’t aged perfectly, but whose legacy lives on in other forms. Games that get re-released and remade. Games that inspire other games. Games that birth new genres. Study these games, which parts live on in the remakes, which parts get ditched and improved. If you study enough examples like this, you’ll get a good idea of what parts of those games are timeless, and should in turn inspire our games. Let’s look at a few examples now:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/b/b6/Minecraft_2024_cover_art.png&quot; alt=&quot;Minecraft cover art&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Minecraft&quot;&gt;&lt;strong&gt;Minecraft&lt;/strong&gt;&lt;/a&gt;: what started as a simple experiment in block rendering and procedural generation turned into a billion dollar game franchise that is enjoyed by an entire generation of players. Rather than detract from the game, the simple graphics invites players to engage, and &lt;em&gt;play&lt;/em&gt; with the game, so in a way the game is the ultimate sandbox - not only can you do many things in the game (craft, explore, roleplay) but the game &lt;a href=&quot;https://en.wikipedia.org/wiki/Affordance&quot;&gt;affords&lt;/a&gt; creativity. By giving players extreme freedom, the game rewards our primal need for creation and expression, and that’s why it’s had such long legs.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/9/9c/Mario_Kart_gameplay.jpg&quot; alt=&quot;Mario Kart gameplay&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mario_Kart&quot;&gt;&lt;strong&gt;Mario Kart&lt;/strong&gt;&lt;/a&gt;: this mashup of racing and vehicular combat is one of the longest running game franchises, and it’s all based on a single principle: bringing and keeping players together in a simple racing competition. Playing and competing with friends is great fun, but many games struggled with keeping things fun when players have very different skill levels. Mario Kart cleverly uses different powerups and mechanics to keep everyone in the game, from powerful items like the dreaded &lt;a href=&quot;https://www.mariowiki.com/Spiny_Shell_(blue)&quot;&gt;blue shell&lt;/a&gt; or controversial techniques like &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_game_difficulty_balancing#Approaches&quot;&gt;rubberbanding&lt;/a&gt;, players can stay in the game and interact with each other even if they fall far behind.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/d/d2/Dwarf_Fortress_world_generation.png&quot; alt=&quot;Dwarf Fortress world generation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dwarf_Fortress&quot;&gt;&lt;strong&gt;Dwarf Fortress&lt;/strong&gt;&lt;/a&gt; famously spent 20 years in development, and is perhaps the quintessential example of a timeless game. Built by a microscopic team on a shoestring budget over a ludicrous amount of time, the game could not rely on catching any trends or hype cycles, and instead depended on systems that could produce endless gameplay variation - procedural generation and emergent gameplay dialled up to 11. The game is deep and punishing, promising players - at least those that put in the effort - endless satisfaction and surprise. This &lt;a href=&quot;https://en.wikipedia.org/wiki/Roguelike&quot;&gt;heavy emphasis on procgen and deep systems&lt;/a&gt; is not the only way to &lt;a href=&quot;https://cxong.github.io/2023/11/big-without-scale&quot;&gt;economically create lots of content&lt;/a&gt;, but it’s certainly hard to beat.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/9/96/Stardew_valley_screenshot.png&quot; alt=&quot;Stardew Valley&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Harvest_Moon_(video_game)&quot;&gt;&lt;strong&gt;Harvest Moon&lt;/strong&gt;&lt;/a&gt; / &lt;a href=&quot;https://en.wikipedia.org/wiki/Stardew_Valley&quot;&gt;&lt;strong&gt;Stardew Valley&lt;/strong&gt;&lt;/a&gt;: one game inspired the other decades later, and both are great examples of how a single good idea can have timeless appeal, and that idea now has an entire genre dedicated to it: &lt;a href=&quot;https://en.wikipedia.org/wiki/Cozy_game&quot;&gt;cozy games&lt;/a&gt;. Where some games get our adrenaline pumping and reward achievement and competition, cozy games let us wind down and relax, and there’s always a time and place for that. It also helps that the stereotypical &lt;a href=&quot;https://en.wikipedia.org/wiki/Farm_life_sim&quot;&gt;farming life&lt;/a&gt; heavily overlaps with that kind of sentiment.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/2/2f/Zerg_colony_%28StarCraft%29.png&quot; alt=&quot;StarCraft&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/StarCraft&quot;&gt;&lt;strong&gt;StarCraft&lt;/strong&gt;&lt;/a&gt;: these days RTS games are a solid post-decline niche genre, but somehow StarCraft, released almost 3 decades ago during the RTS golden age, is still going strong and one of the most popular RTS games today, beating even its sequel StarCraft II. The same could be said for &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires_II&quot;&gt;Age of Empires II&lt;/a&gt;, which was released around the same time, and is more popular than its sequels. How is it that these games have such staying power, even outlasting their sequels? While it is true that these games can be frustrating to play - mechanically cumbersome and full of &lt;a href=&quot;https://web.archive.org/web/20160712055841/http://www.gamasutra.com/blogs/BradWardell/20160104/262961/Ashes_of_the_Singularity_PREmortem.php&quot;&gt;newbie traps&lt;/a&gt; - but it’s those same features that give the games so much character. The bad pathfinding and limited control group sizes make StarCraft both strategically and mechanically challenging, which makes winning fights via good positioning doubly impressive. The slow buildup and large number of civilisations and units in Age of Empires 2 means a lot of players enjoy the game by building nice-looking cities, or just messing around with different armies and unique units. As newer RTS games sanded out the edges, the games lost their character as a result. This shows the folly of pursuing the “perfect” game and optimising the fun away. Sometimes a flawed game is lovely in its own way.&lt;/p&gt;

&lt;h1 id=&quot;the-takeaway&quot;&gt;The Takeaway&lt;/h1&gt;

&lt;p&gt;There’s no formula for making a good game, let alone a timeless one, but by studying what works and what doesn’t, we find some strong patterns that can better our odds:&lt;/p&gt;

&lt;p&gt;Don’t&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Chase trends that are based on novelty - time is already working against you&lt;/li&gt;
  &lt;li&gt;Competing directly in crowded spaces - the market will move much faster than you can keep up&lt;/li&gt;
  &lt;li&gt;Rely on gimmicks or things that aren’t universally appealing - chances are their appeal is based on something fleeting that will not age well&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus on universal human motivations. Creativity, mastery, competition, social expression - these will remain fundamental human needs that never go out of style&lt;/li&gt;
  &lt;li&gt;Study remakes, what do they keep, what do they improve on. Elements that have already stood the test of time will continue to do so&lt;/li&gt;
  &lt;li&gt;Find the core essence of what makes certain games fun, what human needs they appeal to&lt;/li&gt;
  &lt;li&gt;Give players a reason to come back to the game again and again, or at least ruthlessly eliminate the reasons that keep players away&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately it’s about decoupling your game from fleeting trends and focusing on universal appeals that stand the test of time. For hobbyists it’s perhaps the best strategy.&lt;/p&gt;
</description>
				<pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2025/12/timeless-games</link>
				<guid isPermaLink="true">https://cxong.github.io/2025/12/timeless-games</guid>
			</item>
		
			<item>
				<title>Great Music Done Poorly</title>
				<description>&lt;p&gt;There are few experiences where the situation is so incongruent that you are left utterly speechless at the absurdity of it all, your mind incapable of processing what just happened, after feebly trying to search for an explanation. One of these is the soundtrack for &lt;em&gt;Resident Evil: Director’s Cut DualShock&lt;/em&gt;’s &lt;em&gt;Mansion Basement&lt;/em&gt;:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/iJYvCHm3Ov4&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;A survival horror game should have music that sets a creepy ambience, but this track has fans baffled, variously describing it as “clowns farting”, “Charlie Brown gets in trouble”, or “trombones falling down the stairs”.&lt;/p&gt;

&lt;p&gt;One interesting theory is that the MIDI instruments got messed up in this track; here’s the same with the instruments “corrected”, the difference is night-and-day (skip ahead a bit):&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/9oByTUQjCFg&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;!--more--&gt;

&lt;p&gt;Thus we arrive at one of the truisms with music - sometimes it’s so easy to get it wrong just by doing one or two things poorly. In games, with budget, time, design and technical constraints, we can have music that is actually great but ends up being done poorly. Sometimes technical limitations don’t let the music shine. Sometimes not enough care or expertise was used when integrating the music. In this post we’ll examine a few prominent examples, and discuss how they (and we) can do better.&lt;/p&gt;

&lt;h2 id=&quot;ruined-by-repetition-shining-force-2&quot;&gt;Ruined by Repetition: Shining Force 2&lt;/h2&gt;

&lt;p&gt;Although not as notable or critically acclaimed as the likes of Final Fantasy, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Shining_(video_game_series)&quot;&gt;Shining series&lt;/a&gt; of SRPGs in the 90s was, with Phantasy Star, one of the two RPG pillars for SEGA and well regarded. The second mainline entry, &lt;a href=&quot;https://en.wikipedia.org/wiki/Shining_Force_II&quot;&gt;Shining Force 2&lt;/a&gt;, is perhaps the pinnacle of the series, with a large cast of characters, sweeping plot, and a kick ass soundtrack. The way composer &lt;a href=&quot;https://en.wikipedia.org/wiki/Motoaki_Takenouchi&quot;&gt;Motoaki Takenouchi&lt;/a&gt; brings symphonic sound out of the Mega Drive’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Yamaha_YM2612&quot;&gt;6-channel FM synth chip&lt;/a&gt; is nothing short of masterful.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/qunj0fbMi9Q&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;But this is not how players typically experience the music. As an SRPG, the “strategy” part of the game alternates between the battle map and fight scenes, with different musical themes used for each. Because of this rapid alternation, the player hears the first 5 seconds of the musical themes again and again, as the music starts from the beginning each time…&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/Z238UvrZdBM?start=285&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;This means players typically never experience the full battle music themes, which are some of the best tracks in the game, because every time a character is attacks or is attacked, the game screen changes and the theme restarts from the beginning again. The tracks are not exactly minimalist which means they become repetitive real quick. What a shame!&lt;/p&gt;

&lt;p&gt;How could the game have done better? I think having different musical themes and switching between them is a good idea, but don’t restart from the beginning. Have them pause and resume when we’re swapping in and out, and this means the themes are fully utilised.&lt;/p&gt;

&lt;p&gt;I’m not familiar with the game’s programming, but I suspect even if they could implement pause-and-resume music, it may have been difficult on the hardware, so I’ll put this one down to technical limitations. Our next example also suffered from technical limitations, but in a different way.&lt;/p&gt;

&lt;h2 id=&quot;strangled-by-space-bubble-bobble&quot;&gt;Strangled by Space: Bubble Bobble&lt;/h2&gt;

&lt;p&gt;This choice may seem out of place because the &lt;a href=&quot;https://en.wikipedia.org/wiki/Bubble_Bobble_(video_game)&quot;&gt;Bubble Bobble&lt;/a&gt; theme is very good. Not only is it a great melody, but it does a lot with its severe technical limitations:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/KOuVKxzW4Do&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;It uses only 2 channels but sounds like it’s using more via alternating instruments, and manages to squeeze in echo effects as well. It is quite a long theme for its time, at almost 50 seconds before fully repeating, but uses minimal memory space due to clever repetition of patterns. And the theme resolves back on itself, making the repeats sound natural and satisfying rather than jarring.&lt;/p&gt;

&lt;p&gt;Despite all these good things, I would argue that it unfortunately falls into this uncanny valley where the theme is almost but not quite long enough to not sound repetitive, which is not helped by its reuse of patterns/riffs, so if you’re not paying full attention to the music (for example when you are playing the game), you might pick up the same riff playing that you heard 10 seconds ago, so the theme sounds even more repetitive.&lt;/p&gt;

&lt;p&gt;But if technical limitations meant themes couldn’t be long or complex enough to overcome this uncanny valley, what else could they have done? Well, how about like &lt;a href=&quot;https://en.wikipedia.org/wiki/Donkey_Kong_(1981_video_game)&quot;&gt;Donkey Kong&lt;/a&gt;:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/ljaJ7swsR98&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;This iconic “theme” is just a bass-line of 5 notes, so it doesn’t even qualify as a theme, and is more like a riff. By being this minimalist and simple, Donkey Kong’s music manages to stay out of the way and repeat itself ad infinitum without feeling repetitive. Compared to other game music of its era, like Pac-Man and Galaxian’s sirens, to Xevious’s grating attempt at a theme, Donkey Kong’s is masterful by comparison.&lt;/p&gt;

&lt;p&gt;In other words, Bubble Bobble’s theme could have been better if it either kept it simple, or be made more complex with variations, additional layers and an overall longer theme. It’s hard to imagine what this may have been like though, given how iconic the theme has become, but it’s definitely a theme that hasn’t aged as well as it could have.&lt;/p&gt;

&lt;h2 id=&quot;overstaying-its-welcome-empire-earth&quot;&gt;Overstaying its Welcome: Empire Earth&lt;/h2&gt;

&lt;p&gt;When you’re making an RTS to take on one of the best in the industry - &lt;em&gt;Age of Empires&lt;/em&gt; - and outdo it in the way it’s known for - its epic scale - you need a heck of a good soundtrack. &lt;a href=&quot;https://en.wikipedia.org/wiki/Empire_Earth_(video_game)&quot;&gt;Empire Earth&lt;/a&gt;’s attempt was commendable, as it had a varied and polished soundtrack, with moody ambients and moving crescendos.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/ZoslAq6-ajU&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Yet if you listen to it for any significant length, you’ll notice how utterly repetitive it is. First, the tracks are very short. Don’t let the runtime of online listings fool you, most are sourced from a bad rip that overstates exactly how short the tracks are - don’t believe me? Load them into an audio editor and see. I find that one minute is usually the bare minimum length for a game track to avoid it sounding repetitive, and usually you want two minutes at least.&lt;/p&gt;

&lt;p&gt;Second, the tracks sound good at first but some show clear signs of corner-cutting. Some tracks feature a simple theme that repeats endlessly with variations. One track is pretty much just a cover of &lt;a href=&quot;https://www.youtube.com/watch?v=Y9Mi0W0WWp0&quot;&gt;Behold the Darkness&lt;/a&gt;. There are ways to make good music like this, but in &lt;em&gt;Empire Earth&lt;/em&gt;’s case, unfortunately it’s not done well.&lt;/p&gt;

&lt;p&gt;I would give the game’s creators the benefit of the doubt and to put this down to severe budget constraints, and that &lt;a href=&quot;https://en.wikipedia.org/wiki/Stainless_Steel_Studios&quot;&gt;the studio&lt;/a&gt; did a great job given the circumstances, but this style of music simply cannot be done well on the cheap.&lt;/p&gt;

&lt;h2 id=&quot;bad-timing-age-of-mythology&quot;&gt;Bad Timing: Age of Mythology&lt;/h2&gt;

&lt;p&gt;By the early 2000’s video games had established itself as a major entertainment medium, rivalling Hollywood in budget and technical sophistication. &lt;a href=&quot;https://cxong.github.io/2023/09/rts-music-review&quot;&gt;Many games already had great music&lt;/a&gt; and were starting to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Baba_Yetu&quot;&gt;recognised as such&lt;/a&gt;, but not quite yet. Games had an inferiority complex when compared with the film and record industries, and were eager to prove and outdo themselves. If you read literature from around this time, you will see terms like “cinematic” or “immersive” thrown around liberally to describe good games.&lt;/p&gt;

&lt;p&gt;It’s against this backdrop that many games dove head-first into dynamic music. Instead of fixed soundtracks that played in the background on repeat, wouldn’t it be cool to have them react according to what’s happening in the game? It’s a new and exciting concept, so there were bound to be times where people got it wrong. One of these is &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Mythology&quot;&gt;&lt;em&gt;Age of Mythology&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/gVrY2RL2X88?start=1456&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;The game otherwise has fantastic music that’s done well. It even has “mellow” versions of its main tracks which are played in various cutscenes or &lt;a href=&quot;https://ageofempires.fandom.com/wiki/Soundtrack_(Age_of_Mythology)#Trivia&quot;&gt;when the action is subdued&lt;/a&gt;, a very nice touch. However it has a jarring “town attack” track which plays whenever your town center is being attacked, or if you attack an enemy’s.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/H2DXOnLwRtI&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;There’s nothing wrong with the track but it’s entirely to do with its hair-trigger: even if the enemy is attacking with a few scout units, or you’re ordering your army to attack various things, as soon as you click the town center, this track cuts abruptly in, often interrupting some chill track that’s typical of this game’s soundtrack. The effect is extremely jarring and takes you out of it - the opposite of what a good soundtrack should do.&lt;/p&gt;

&lt;p&gt;It appears &lt;em&gt;Age of Mythology: Retold&lt;/em&gt; reworks this somewhat, having the track cut in during more appropriate triggers. It shows how tricky it is to have dynamic music work well.&lt;/p&gt;

&lt;h2 id=&quot;too-much-change-streets-of-rage-3&quot;&gt;Too Much Change: Streets of Rage 3&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Streets_of_Rage&quot;&gt;&lt;em&gt;Streets of Rage&lt;/em&gt;&lt;/a&gt; was a huge deal back in the day. During the Nintendo vs Sega console war, the two developer-publishers put out numerous quality series and were pretty competitive with each other, but Sega’s Streets of Rage convincingly trounced its counterparts. With its innovative gameplay, slick styling and pumping EDM soundtrack, it cemented the Genesis/Megadrive as the go-to platform for beat-em-up gamers. The second game in the series was its apex, with its club techno-inspired soundtrack &lt;a href=&quot;https://en.wikipedia.org/wiki/Streets_of_Rage_2#Music&quot;&gt;universally acclaimed&lt;/a&gt; for its quality and pushing the limits of its FM synthesiser hardware.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/GIYR7mq3PJQ&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;p&gt;Obviously a cover, but you can tell how fantastic the source is nonetheless&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For the third iteration, Sega took what worked in SoR2 and iterated on everything. The composer Yuzo Koshiro drew heavily from club influences at the time and used a unique system to compose its highly experimental soundtrack. The result &lt;a href=&quot;https://en.wikipedia.org/wiki/Streets_of_Rage_3#Soundtrack&quot;&gt;fiercely divided fans and critics&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/DuQChpKONNo&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;For fans accustomed to the melodic techno of the second game, this was certainly very challenging, and many hated the chaotic and atonal tracks. But others, particularly those who were familiar with its club influences, recognised it as such and lauded its creativity. Time proved the second group right as it aged well and was shown to be a masterpiece ahead of its time.&lt;/p&gt;

&lt;p&gt;Perhaps we can draw two lessons from this: don’t alienate your fans by deviating too much from what they like, and be careful with being too ahead of the curve. I will say one thing though: despite how avant-garde the music was, the style is perfect for boss battles where the high energy and tension is most suitable. Just have a listen to this banger, IMO one of the best boss themes for the Megadrive:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;64&quot; src=&quot;https://www.youtube-nocookie.com/embed/XpimeJTPbbk&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;to-recap&quot;&gt;To Recap&lt;/h2&gt;

&lt;p&gt;We’ve hit on a few themes here, how good music can be ruined in a game:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Using the wrong instruments (Resident Evil): yikes! You’d think professional composers could easily avoid this, but in any case, we can all learn how important factors like instrumentation, tempo or dynamics can make or break a piece.&lt;/li&gt;
  &lt;li&gt;Lazy integration (Shining Force 2, Age of Mythology): respect your music, and take the time to integrate it properly. Don’t let excessive repetition or jarring transitions ruin the music and make it unwelcome.&lt;/li&gt;
  &lt;li&gt;Not enough space (Bubble Bobble, Empire Earth): depending on the type of music, they need to be long and complex enough to develop properly and not sound repetitive. Likewise a soundtrack needs a certain length so that the same tracks don’t repeat excessively.&lt;/li&gt;
  &lt;li&gt;Too much change (Streets of Rage 3): don’t excessively change what works. Games that come with a built-in fanbase will also come with expectations, and that goes for music as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can write more in depth about how to do game music &lt;em&gt;well&lt;/em&gt;, and provide positive examples, but this post is already dragging on, so perhaps another time.&lt;/p&gt;
</description>
				<pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2025/10/great-music-done-poorly</link>
				<guid isPermaLink="true">https://cxong.github.io/2025/10/great-music-done-poorly</guid>
			</item>
		
			<item>
				<title>Designing a Great FPS Playground</title>
				<description>&lt;style&gt;
table, th, td {
  border: 1px solid black;
}
&lt;/style&gt;

&lt;p&gt;Back in the day I played a lot of online FPS games, but one really stuck with me and earned most of my devotion: &lt;a href=&quot;https://en.wikipedia.org/wiki/Wolfenstein:_Enemy_Territory&quot;&gt;Enemy Territory&lt;/a&gt;, the free (and now open source) team, class and objective-based game. I remember during a late night session, one of my clan-mates said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;congusbongus always goes for the objectives eh?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was the first time I really thought about how people play the same game in different ways, and enjoy different aspects of it. Later I would learn about &lt;a href=&quot;https://en.wikipedia.org/wiki/Bartle_taxonomy_of_player_types&quot;&gt;Bartle’s player types&lt;/a&gt; and how that applies to all sorts of multiplayer games, and mechanics like different player classes or even weapon types clearly caters to different kinds of players. But herein lies a problem: how do you get different kinds of players to come together and interact, instead of running off doing their own thing? Players like me would do the objectives because that’s the goal of the game, after all, but what about players who don’t care about that, and instead might grief, camp or just mess around?&lt;/p&gt;

&lt;p&gt;Plenty of mechanics prevent the most antisocial of behaviours. Spawn protection prevents the worst kinds of spawn camping, and limited ammo prevents players from camping advantageous terrain indefinitely. But I want to look at how map design can focus the action, provide good pacing, and enable dynamic gameplay so different kinds of players can shine and enjoy the game in their own ways. For that we need to first look at the classic Enemy Territory map &lt;a href=&quot;https://et.trackbase.net/map/8/&quot;&gt;Supply Depot&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://et.trackbase.net/img/etmap/thumb/8supply_cc_thumb.jpg&quot; data-fancybox=&quot;gallery-supply&quot; data-caption=&quot;The overhead map of Supply Depot. The Allies start in the west building and attack up the road to a roadblock on the north. Then they continue South to a large walled complex, to steal gold and take it back up the road and escape to the east.&quot;&gt;
&lt;img src=&quot;https://et.trackbase.net/img/etmap/thumb/8supply_cc_thumb.jpg&quot; alt=&quot;Command Map&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://et.trackbase.net/img/etmap/8supply1.jpg&quot; data-fancybox=&quot;gallery-supply&quot; data-caption=&quot;The Allies start with their truck (right), and attack a bunker gate (left). They must plant dynamite to blow the gate open, but the bunker provides great protection and firing lines for the defending Axis.&quot;&gt;
&lt;img src=&quot;https://et.trackbase.net/img/etmap/thumb/8supply1_thumb.jpg&quot; alt=&quot;First Gate&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://et.trackbase.net/img/etmap/8supply2.jpg&quot; data-fancybox=&quot;gallery-supply&quot; data-caption=&quot;After the bunker gate (right), the Allies continue up the road and must blow up a second, depot gate (left, behind trees). Like the bunker, the depot walls provide great firing positions for the defenders.&quot;&gt;
&lt;img src=&quot;https://et.trackbase.net/img/etmap/thumb/8supply2_thumb.jpg&quot; alt=&quot;Depot Gate&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://et.trackbase.net/img/etmap/8supply3.jpg&quot; data-fancybox=&quot;gallery-supply&quot; data-caption=&quot;The Allies then bring the truck to the back of the depot and load the gold into the truck using the crane. However the crane controls are deep within the depot building, which is easily defensible by the Axis.&quot;&gt;
&lt;img src=&quot;https://et.trackbase.net/img/etmap/thumb/8supply3_thumb.jpg&quot; alt=&quot;Depot crane&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Supply Depot is perhaps the most popular competition map, and certainly the &lt;a href=&quot;https://et.trackbase.net/maplist/&quot;&gt;most popular custom map&lt;/a&gt;. It is played with an attacking team (Allies) and a defending team (Axis). The Allies must escort a truck - which moves on a pre-defined route - through first a bunker gate, then a depot gate, steal gold crates from the depot and load them into the truck, and finally escort the truck back out and to the escape point. This multi-stage structure gives the game a series of &lt;a href=&quot;https://www.masterclass.com/articles/freytags-pyramid&quot;&gt;rising-and-falling action points&lt;/a&gt; that keep the game moving in a very exciting way. Objectives in Enemy Territory aren’t usually straightforward: for example, to blow up a gate, the players must first plant dynamite, but then guard it for 30 seconds lest it is defused. Thus we have the following dramatic structure:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Allies face a heavily-defended bunker gate (exposition)&lt;/li&gt;
  &lt;li&gt;Allies beat back the Axis and plant dynamite at the bunker gate (rising action)&lt;/li&gt;
  &lt;li&gt;Allies defend the dynamite as the Axis fights to push them back (climax)&lt;/li&gt;
  &lt;li&gt;The dynamite explodes, opening the way to the next area (falling action)&lt;/li&gt;
  &lt;li&gt;The Axis fall back to defend the depot gate (denouement)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And this structure repeats twice more, at the depot gate and crane controls, and to a lesser extent the final chase of the truck as it reaches the exit.&lt;/p&gt;

&lt;p&gt;From what I’ve described, you’d think that this map is fantastic and provides exciting gameplay all the time. This is simply not true. While it is a great &lt;em&gt;competition&lt;/em&gt; map, as a public map it is one of the less popular, for two main reasons:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The objectives require a high level of teamwork at personal risk&lt;/li&gt;
  &lt;li&gt;Going alone and taking your own non-objective tasks is ineffective&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So as an individual player, your experience is likely to be: go for the objective, at great personal risk, and fail miserably, or try taking a very long sneaky path, but you don’t achieve much besides get a few extra kills, and it feels boring to do so. The map is not well designed for less skilled, individual players, who need to be able to enjoy the game in their own way. The map is more like a (team) obstacle course, instead of a playground.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Let’s look at a pair of maps to see a different way whereby a map can produce dynamic gameplay, from &lt;a href=&quot;https://en.wikipedia.org/wiki/Counter-Strike&quot;&gt;Counter-Strike&lt;/a&gt;: &lt;a href=&quot;https://counterstrike.fandom.com/wiki/Dust&quot;&gt;de_dust&lt;/a&gt; and &lt;a href=&quot;https://counterstrike.fandom.com/wiki/Dust_II&quot;&gt;de_dust2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://games.parsons.edu/wp-content/uploads/2012/04/dust_floorplan.jpg&quot; data-fancybox=&quot;gallery-dust&quot; data-caption=&quot;Overhead map of de_dust. Terrorists spawn in the left courtyard, and Counter-Terrorists spawn in the right, with bomb site A in the north and B right where CTs spawn. It soon becomes apparent that the two choke points are the dark corridors in the middle and the underpass in the south.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/de_dust-overview_th.jpg&quot; alt=&quot;de_dust floorplan&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://games.parsons.edu/wp-content/uploads/2012/04/dust1.jpg&quot; data-fancybox=&quot;gallery-dust&quot; data-caption=&quot;Entrance to the underpass in de_dust. Millions of hours were spent slaughtering virtual players in this tiny map.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/dust1_th.jpg&quot; alt=&quot;de_dust underpass entrance&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dust 2 needs no introduction, being one of the most popular maps in one of the most popular FPS game franchises. Its predecessor Dust 1 (a.k.a. de_dust) was also notorious in its day, also one of the most popular (and often most hated) maps in the game’s early years. &lt;a href=&quot;https://games.parsons.edu/de_dust/&quot;&gt;If you’ve played it you’ll know this well&lt;/a&gt;, but even if not, a little study of the floor plan will reveal why it is so controversial: the map design forces players into two easily defensible chokepoints, and unless there’s a spirited assault with a generous amount of luck, the game devolves into a spammy, chaotic mess of a firefight, with little teamwork to speak of and random deaths galore. In other words, it forces players to play in one specific way, and even if you’re not on the receiving end of the meat grinder, the game quickly becomes monotonous.&lt;/p&gt;

&lt;p&gt;Contrast this with de_dust2, which has an ingenious map layout. &lt;a href=&quot;https://www.gamedeveloper.com/design/a-cs-go-level-design-concept-the-pathways&quot;&gt;As with most bomb defuse maps&lt;/a&gt;, there are two bomb sites where the Terrorists (T) can plant a bomb to win, but the Counter-Terrorists (CT) have the advantage of being closer to the bomb sites, and can set up a defense ahead of time. The one tactical edge Ts have is they can all attack one site, whereas CTs need to potentially split their players among two, unless they read their opponents correctly. In game-theoretic terms we have this payoff matrix:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;CT / T&lt;/th&gt;
      &lt;th&gt;All attack A&lt;/th&gt;
      &lt;th&gt;All attack B&lt;/th&gt;
      &lt;th&gt;Attack opportunistically&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;All defend A&lt;/td&gt;
      &lt;td&gt;CT wins&lt;/td&gt;
      &lt;td&gt;CT loses&lt;/td&gt;
      &lt;td&gt;Outcome uncertain&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;All defend B&lt;/td&gt;
      &lt;td&gt;CT loses&lt;/td&gt;
      &lt;td&gt;CT wins&lt;/td&gt;
      &lt;td&gt;Outcome uncertain&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Defend opportunistically&lt;/td&gt;
      &lt;td&gt;CT disadvantage&lt;/td&gt;
      &lt;td&gt;CT disadvantage&lt;/td&gt;
      &lt;td&gt;CT wins&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://knowyourmeme.com/memes/rush-b&quot;&gt;RUSH B&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words for either team there is no &lt;a href=&quot;https://en.wikipedia.org/wiki/Strategic_dominance&quot;&gt;dominant strategy&lt;/a&gt; as the payoff is roughly equal no matter what they do. They can both gamble and go to one bomb site, and win/lose based on what the other team did, or they can try to hedge their bets and try to defend both (or some variant like try to control the middle ground), which is harder to do and puts them at a disadvantage if the other team was more decisive. So the game has a rock-paper-scissors like nature, and every round can be different than the last, keeping things fresh and dynamic.&lt;/p&gt;

&lt;p&gt;Of course the devil is in the details, as a lot of the payoff values depend on things like how quickly can teams go from one bomb site to the other (rotation time), how defensible each site is, how easy it is to scout what the other team is doing, how effective delay or denial mechanics like smoke grenades are in the map and so on. Small factors can easily tip the balance of the map, changing the effective strategies and making the game less fun.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;A game like Counter-Strike is in some ways easy to design for, since the game is constrained both in space (small maps, one objective) and time (short time limit per round). In more complex games, with larger maps, multiple objectives and stages, and long round times, it can be hard to prevent players running off doing their own thing, while still letting them play the game in their own play-style.&lt;/p&gt;

&lt;p&gt;Enter Team Fortress 2’s &lt;a href=&quot;https://wiki.teamfortress.com/wiki/Payload&quot;&gt;payload game mode&lt;/a&gt;. This game, perhaps more than any other, set the blueprint for how the combination of &lt;a href=&quot;https://en.wikipedia.org/wiki/Hero_shooter&quot;&gt;hero shooter&lt;/a&gt; + well designed map mechanics can focus gameplay into one main battleground, while still spanning a large total space. For those uninitiated, in the payload game mode, the attacking team must escort a slow-moving vehicle past a series of checkpoints, and the defending team have a defender’s advantage, especially when it comes to the “payload”, where escorts are particularly vulnerable to being shot at from all directions. The payload is the natural focal point of the game, even as it traverses the length of the level.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.escapistmagazine.com/wp-content/uploads/2023/07/Team-Fortress-2-Best-Payload-Maps-Badwater-Basin.jpg?w=1024&amp;amp;resize=1024%2C576&quot; data-fancybox=&quot;gallery-payload&quot; data-caption=&quot;Screenshot of Badwater Basin, perhaps the best payload map in TF2.&quot;&gt;
&lt;img src=&quot;https://www.escapistmagazine.com/wp-content/uploads/2023/07/Team-Fortress-2-Best-Payload-Maps-Badwater-Basin.jpg?w=1024&amp;amp;resize=400%2C240&quot; alt=&quot;Badwater Basin&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://www.escapistmagazine.com/wp-content/uploads/2023/07/Team-Fortress-2-Best-Payload-Maps-Gold-Rush.jpg?w=1024&amp;amp;resize=1024%2C576&quot; data-fancybox=&quot;gallery-payload&quot; data-caption=&quot;Screenshot of Gold Rush, one of the first payload maps in the game. TF2 did not come out with payload maps but added it soon after, and Gold Rush remained a favourite as it went through many changes.&quot;&gt;
&lt;img src=&quot;https://www.escapistmagazine.com/wp-content/uploads/2023/07/Team-Fortress-2-Best-Payload-Maps-Gold-Rush.jpg?w=1024&amp;amp;resize=400%2C240&quot; alt=&quot;Gold Rush&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Despite being a natural meat-grinder, how does the game encourage players to jump in? In a number of clever ways:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The payload itself slowly replenishes attackers standing next to it, making it a natural place to hang out&lt;/li&gt;
  &lt;li&gt;The payload stops moving if a defender is next to it, which means the fastest way to stop it is for a defender to jump into the fray&lt;/li&gt;
  &lt;li&gt;Multiple attackers can push the payload faster, encouraging more players to gather around it&lt;/li&gt;
  &lt;li&gt;If left unattended, the payload rolls slowly backwards, encouraging attackers not to neglect it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore, the distinctive player characters have clear strengths and weaknesses, which encourages teammates to stick together, even if they are not explicitly a support class. The game is extremely sticky in this way, bringing players together into a chaotic arena.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Across games and generations, one challenge has remained constant: how do you design maps and mechanics that cater to many kinds of players, while still keeping them in the same game? Great competitive maps like Supply Depot reward tight teamwork but can alienate casual or solo players. Maps like de_dust2 embrace unpredictability, creating freshness through tactical ambiguity. And TF2’s payload mode shows that, with the right incentives, even chaos can be fun and focused.&lt;/p&gt;

&lt;p&gt;Whether you’re designing a symmetrical shooter or a hero-based brawler, the goal should be the same: build a playground where every kind of player feels they can contribute - and where the game naturally pulls them toward each other.&lt;/p&gt;
</description>
				<pubDate>Sat, 21 Jun 2025 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2025/06/designing-a-playground</link>
				<guid isPermaLink="true">https://cxong.github.io/2025/06/designing-a-playground</guid>
			</item>
		
			<item>
				<title>The Map Is Not the Territory</title>
				<description>&lt;p&gt;Everyone loves game maps. Especially when it comes to &lt;a href=&quot;https://cxong.github.io/2023/11/big-without-scale&quot;&gt;large game worlds&lt;/a&gt;, there’s nothing quite like looking at a mesmerising map filled with awesome detail, and imagine (re)inhabiting parts of this virtual world. When studying a map of a game that I’ve spent dozens if not hundreds of hours in, I often get a sense of both familiarity and strangeness. It’s not just that the map shows a different perspective of the same world I experienced as a game avatar, but that the map misrepresents the player experience world in fundamental ways.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/magus_map_drawn.jpg&quot; data-fancybox=&quot;gallery-map&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/magus_map_drawn_th.jpg&quot; alt=&quot;Magus game map, drawn&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/MagusPreservation/master/map.png&quot; data-fancybox=&quot;gallery-map&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/magus_map_th.png&quot; alt=&quot;Magus game map&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;My love of game maps drove me to hand-draw this map of the obscure DOS roguelike &lt;em&gt;Magus&lt;/em&gt; recently. From &lt;a href=&quot;https://mastodon.gamedev.place/@congusbongus/111900901099931635&quot;&gt;https://mastodon.gamedev.place/@congusbongus/111900901099931635&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;🇯🇵&lt;/h1&gt;

&lt;p&gt;There are two good reasons why almost all travel itineraries for first-time visits to Japan will involve Tokyo and Osaka: they are very well served by high speed rail, and both are large cities with lots of things to see and do. While starting a tour in Tokyo makes sense, there are many good travel locations much closer to Tokyo - in Greater Tokyo or not far out - that often get neglected. This discrepancy becomes apparent when you start looking at a map of Japan. Of course, the reason is obvious when you consider transit, and the personal experience of actually doing the travelling, but the map won’t make this apparent at all.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://www.voyagedmagazine.com/wp-content/uploads/2015/07/Japan-Itinerary-Map.jpeg.webp&quot;&gt;&lt;img src=&quot;https://www.voyagedmagazine.com/wp-content/uploads/2015/07/Japan-Itinerary-Map.jpeg.webp&quot; alt=&quot;Japan travel itinerary map&quot; width=&quot;400px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;With few exceptions, first-time Japan travel itineraries will include the Tokyo-Osaka rail corridor, occasionally including day trips from either city. Destinations outside these areas sadly get neglected. From: &lt;a href=&quot;https://www.voyagedmagazine.com/how-to-plan-your-first-trip-to-japan-travel-guide-itinerary/&quot;&gt;https://www.voyagedmagazine.com/how-to-plan-your-first-trip-to-japan-travel-guide-itinerary/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;!--more--&gt;

&lt;p&gt;You can try this exercise with any new location, like a country or a city. Look at a map and it can seem like a wealth of possible destinations spread out across the area, but when it comes down to the practical, travel-time realities, the place starts looking entirely different. Some places will start feeling closer than they appear on the map, while others, appearing close together, may feel very remote. (This phenomenon is properly visualised by an &lt;a href=&quot;https://en.wikipedia.org/wiki/Isochrone_map&quot;&gt;isochrone map&lt;/a&gt;)&lt;/p&gt;

&lt;h1 id=&quot;️&quot;&gt;🏙️&lt;/h1&gt;

&lt;p&gt;Chances are, you live in a &lt;a href=&quot;https://planningtank.com/settlement-geography/the-monocentric-city&quot;&gt;monocentric city&lt;/a&gt; or something close to it - where most people work in a central district but commute from outside it, and whose transit radiates from the centre. By living in such a space, your mental image of the city and its space probably differs quite a lot from the map. Two facts will hold true for you at the same time:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;There are far away locations that you have visited often, because they are easy to travel to&lt;/li&gt;
  &lt;li&gt;There are nearby locations that you have never visited, because they are very difficult to travel to&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Chicago is a poster child of this kind of city; its mass transit mostly radiates from a &lt;a href=&quot;https://en.wikipedia.org/wiki/Core_city&quot;&gt;core downtown area&lt;/a&gt;. Travelling to and from downtown is easy, but travelling between the “branches” is so difficult that the best option is usually to transfer via downtown.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.chicago-l.org/maps/route/maps/2003elevated.jpg&quot;&gt;&lt;img src=&quot;https://www.chicago-l.org/maps/route/maps/2003elevated.jpg&quot; alt=&quot;Chicago L map, 2003&quot; width=&quot;400px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s the gist; unless you can fly like a bird, your experience of navigating the world will not resemble the map.&lt;/p&gt;

&lt;h1 id=&quot;-1&quot;&gt;🌎&lt;/h1&gt;

&lt;p&gt;More than any other development, &lt;a href=&quot;https://en.wikipedia.org/wiki/First_transcontinental_railroad&quot;&gt;railroads made modern USA&lt;/a&gt;. By shrinking transcontinental travel from weeks to days, it linked the coasts, tamed the West, and made it a breadbasket. It turned the continent into a single economic zone, culture, and national identity.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/a/a5/Rates_of_travel_in_America%2C_1800_to_1930.png&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Rates_of_travel_in_America%2C_1800_to_1930.png/330px-Rates_of_travel_in_America%2C_1800_to_1930.png&quot; alt=&quot;Rates of travel in America&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When mass air travel first appeared, it made the world smaller. It did for the world what railroads did for USA. The fact that people, goods and military forces could travel from one end of the world to the other in days or less meant that no one on this world was truly out of reach; we could not ignore each other, and could not avoid being influenced by global events. Geographic scale did not change, but the psychological impact of fast travel had irrevocably changed the nature of the world.&lt;/p&gt;

&lt;h1 id=&quot;-2&quot;&gt;🎮&lt;/h1&gt;

&lt;p&gt;What’s true for the world also applies to video games. When we find new waypoints in Diablo, we bend the geometry of the world, and we feel like we are conquering the wilderness. When we find a new tool that allows us to backtrack efficiently in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Metroidvania&quot;&gt;Metroidvania&lt;/a&gt;, we shrink the size of the world and we feel powerful.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://diablo2.diablowiki.net/images/d/d2/Waypoint1.gif&quot; alt=&quot;Diablo 2 waypoint&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A great case study of how different modes of travel fundamentally changes gameplay is &lt;a href=&quot;https://en.wikipedia.org/wiki/Stratego&quot;&gt;Stratego&lt;/a&gt; vs &lt;a href=&quot;https://en.wikipedia.org/wiki/Luzhanqi&quot;&gt;Luzhanqi&lt;/a&gt;. The two games are extremely similar, but where Stratego pieces can only move one square at a time, those in Luzhanqi have a range of options based on the terrain - they can move unlimited spaces along a railroad, and there are well-connected campsites which are safe from attack. The result is a much faster-paced game, with the game board feeling much smaller due to the railroads, where most of the action takes place, filled with opportunity and danger.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;img src=&quot;https://i0.wp.com/ulises.blogia.com/upload/20060502191234-luzhanqi66.jpg&quot; alt=&quot;Luzhanqi&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;The 4 player (2v2) variant for Luzhanqi is especially popular&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So how do you use this knowledge to design better games? There are lots of possibilities:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Giving the player a fast travel mechanism (a shortcut, or &lt;a href=&quot;https://cxong.github.io/2016/12/2d-overhead-traversal&quot;&gt;fast-traversal vehicle&lt;/a&gt;) makes them feel more powerful, and the world feel smaller. It’s a psychologically impactful way of granting a reward, aside from plainly buffing their stats or giving them a powerful item.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://vgkami.com/wp-content/uploads/2023/04/The-Airship-in-Final-Fantasy-1.jpg.webp&quot;&gt;&lt;img src=&quot;https://vgkami.com/wp-content/uploads/2023/04/The-Airship-in-Final-Fantasy-1.jpg.webp&quot; alt=&quot;Final Fantasy 4 airship&quot; width=&quot;400px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Distance is not so much a function of space, but time and effort taken to travel to a location. If a destination involves a long and dangerous journey away from a safe hub, it can feel especially remote. Consider placing big rewards or secrets in such locations - finding them can feel especially rewarding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://fl-guide.de/graph/systems/omega41.png&quot; alt=&quot;Freelancer neutron star in Omega-41 system&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Letting the player unlock more paths (in the form of waypoints or shortcuts) is an interesting way to provide a sense of progress. It gives the player the feeling of reshaping the world for their convenience, giving them a sense of belonging to the world.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://static.pokemoncoders.com/wp-content/uploads/2025/06/get-cut-in-pokemon-hg-ss-getting-cut.jpg&quot; alt=&quot;Pokemon HeartGold/SoulSilver cutting a tree&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2025/04/the-map-is-not-the-territory</link>
				<guid isPermaLink="true">https://cxong.github.io/2025/04/the-map-is-not-the-territory</guid>
			</item>
		
			<item>
				<title>Crunch in the Games Industry</title>
				<description>&lt;p&gt;In the 2022 book &lt;a href=&quot;https://bossfightbooks.com/products/goldeneye-007-by-alyse-knorr&quot;&gt;&lt;em&gt;Goldeneye 007&lt;/em&gt;&lt;/a&gt; by &lt;em&gt;Alyse Knorr&lt;/em&gt;, interviews with the dev team reveal the incredibly unlikely success of this groundbreaking game. An inexperienced hodgepodge team left to their own devices produced an industry-changing, record-breaking game, despite many odds going against them. It was truly a lightning-in-a-bottle story. One thing that stayed with me however was how insanely hard the team worked. 12-hour days, 7-day weeks, high even by industry standards, but the team was young, talented, loved their work and wanted to prove themselves, so they sustained this workload for years until the game was done. And they were richly rewarded for their efforts.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“GoldenEye the movie and game featured an OMEGA Seamaster watch like this one. In the game, the watch serves as a laser weapon and pause screen. Rare gifted each member of the GoldenEye team one of these watches after the game’s release.”&lt;/p&gt;

  &lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Bond-Omega.JPG/220px-Bond-Omega.JPG&quot; alt=&quot;Omega Seamaster&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;Excerpt From &lt;em&gt;GoldenEye 007&lt;/em&gt; by &lt;em&gt;Alyse Knorr&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;!--more--&gt;

&lt;p&gt;Surely this workload should give us pause, especially as fans of the games, we are indirectly responsible for cultivating this unhealthy work culture. The games industry is not the only one like this; many other industries, especially in entertainment, or entry-level positions, can be just as ruthless. And so you may say, “these folks are young and they love their work - what’s wrong with letting passionate people work really hard?” I can understand this sentiment, even though it’s clear by now overwork is a health epidemic that should always be avoided. But the picture becomes murky when employers deliberately exploit this.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The team’s imposter syndrome came partly from their youth and inexperience—everyone on the GoldenEye team was in their late 20s or early 30s and mostly single, something Rare specifically looked for, since it meant their employees wouldn’t have a life outside of work. Rare’s workplace culture also strongly encouraged long hours. The company’s whole ethos had always been about scrappy workaholic excellence, starting with their earliest days as Ultimate Play the Game. Into the 90s, the Stamper brothers themselves continued to maintain long hours, and around Rare there was little respect for employees who only worked nine to five. “You were promoted if you were dedicated, and by dedicated, I mean, do you stay long hours and work yourself hard?” Botwood told Eurogamer.”&lt;/p&gt;

  &lt;p&gt;Excerpt From &lt;em&gt;GoldenEye 007&lt;/em&gt; by &lt;em&gt;Alyse Knorr&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When the games industry was young, you could certainly make the case that the people in it were willingly putting in the long hours. The teams behind its games were young, single 20-somethings, often friends, &lt;a href=&quot;http://romej.com/2012/06/places-of-doom-where-id-built-games/&quot;&gt;working out of their bedrooms and apartments on their dreams&lt;/a&gt;. Perhaps it was ok as long as things stayed like this, and for a while it seemed it could indefinitely. Even as the 20-somethings grew older and started families, their passion still kept them in the industry, where they hired a new generation of passionate 20-somethings to work their butts off. And there was no shortage of fresh talent: the industry was still new, growing and exciting. But things had to change eventually.&lt;/p&gt;

&lt;p&gt;Around the time of &lt;a href=&quot;https://ea-spouse.livejournal.com/274.html&quot;&gt;&lt;em&gt;EA Spouse&lt;/em&gt;&lt;/a&gt;, I had an acquaintance who worked at &lt;a href=&quot;https://en.wikipedia.org/wiki/Team_Bondi&quot;&gt;&lt;em&gt;Team Bondi&lt;/em&gt;&lt;/a&gt; on &lt;a href=&quot;https://en.wikipedia.org/wiki/L.A._Noire&quot;&gt;&lt;em&gt;L.A. Noire&lt;/em&gt;&lt;/a&gt;. The project was notorious for its scope creep and horrid working conditions, and people working on the game worked weekends regularly, with insane turnover. These kinds of stories became common around those years, and it’s not hard to see why. The industry was completely open to abuse by - and I’m not going to mince words - psychopathic executives exploiting young workers, since the poor working culture had already been established as the norm, and there was little protection from such abuse. This was 20 years ago, and sadly little has changed since then. It turns out, gamers as a whole are not too concerned about the unfair toil undergone by the people who make the games, and only if the quality of the games themselves suffer as a result of crunch culture. Gamers didn’t react much to &lt;em&gt;EA Spouse&lt;/em&gt;, but they sure got up in arms about the proliferation of day-1 patches and DLC, which is also a side effect of crunch. Instead of moving to protect the biggest victims, we instead circled the wagons and pointed at studios who “did it right”: “&lt;em&gt;it’s done, when it’s done&lt;/em&gt;”, or “&lt;em&gt;a delayed game is eventually good, a bad game is bad forever&lt;/em&gt;”, sentiments attributed to the “good” studios like &lt;em&gt;Valve&lt;/em&gt;, &lt;em&gt;Blizzard&lt;/em&gt; and &lt;em&gt;Nintendo&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;img src=&quot;https://static1.srcdn.com/wordpress/wp-content/uploads/2020/02/Warcraft-3-Reforged-Review-Bad-Gameplay.jpg&quot; alt=&quot;Warcraft III: Reforged&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;Warcraft III: Reforged&lt;/em&gt; was overwhelmingly poorly received. Once hailed as a studio with great working conditions that produced quality games without crunch, those days are long gone, and perhaps the abuse was always there, but in a hidden, insidious manner.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And so although things may have improved a little, here and there, we still saw ugly stories, such as those about sexual harassment from &lt;a href=&quot;https://en.wikipedia.org/wiki/Riot_Games#Allegations_over_gender_discrimination_and_sexual_harassment&quot;&gt;&lt;em&gt;Riot Games&lt;/em&gt;&lt;/a&gt; and former industry darling &lt;a href=&quot;https://en.wikipedia.org/wiki/Blizzard_Entertainment#California_Department_of_Fair_Employment_and_Housing_v._Activision_Blizzard&quot;&gt;&lt;em&gt;Blizzard&lt;/em&gt;&lt;/a&gt;. So it turns out the industry didn’t solve abuse, it only got good at hiding it, and preventing it from affecting their bottom lines.&lt;/p&gt;

&lt;p&gt;I don’t want to point the finger excessively at exploitative studios and execs, as much as they do deserve the negative attention. Even when clear exploitation isn’t taking place, the industry is still filled with the likes of indies and solo devs pushing themselves hard (perhaps too hard) to make it. Studios like &lt;em&gt;Rare&lt;/em&gt;, &lt;em&gt;id&lt;/em&gt;, &lt;em&gt;Blizzard&lt;/em&gt;, and countless more, have made the games we love, but often under harsh workloads. The games that formed our cherished memories are often the result of blood, sweat and tears. This is something I had difficulty accepting, and I sincerely hope things could be different. But it’s time we stopped glamorising it and treat it for what it is: a problem.&lt;/p&gt;
</description>
				<pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2024/08/crunch-in-the-games-industry</link>
				<guid isPermaLink="true">https://cxong.github.io/2024/08/crunch-in-the-games-industry</guid>
			</item>
		
			<item>
				<title>In the Shadow of Doom</title>
				<description>&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/screenshots/61554-doom-3do-title-screen.jpg&quot; alt=&quot;Doom&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the closing days of 1993, id Software released &lt;a href=&quot;https://en.wikipedia.org/wiki/Doom_(1993_video_game)&quot;&gt;Doom&lt;/a&gt;, and the gaming world was changed forever. A landmark title that arguably established the first person shooter (FPS) genre, it was technically and artistically foundational, became one of the top selling and critically acclaimed games of all time, and even &lt;a href=&quot;https://en.wikipedia.org/wiki/1993%E2%80%9394_United_States_Senate_hearings_on_video_games&quot;&gt;sparked a moral panic&lt;/a&gt; over its violence. And recently, as Doom turned 30, its &lt;a href=&quot;https://en.wikipedia.org/wiki/Masters_of_Doom&quot;&gt;cultural impact&lt;/a&gt; can still be felt. It’s hard to overstate what a big deal Doom was.&lt;/p&gt;

&lt;p&gt;Yet Doom was not the first big deal by id Software, nor was it the first FPS. Little more than a year prior, id released &lt;a href=&quot;https://en.wikipedia.org/wiki/Wolfenstein_3D&quot;&gt;Wolfenstein 3D&lt;/a&gt;, an action-packed and immersive 3D shooter that many consider the “grandfather of FPS”, and topped many game-of-the-year lists. Compared to Doom, it was clearly inferior, but through its frenetic pace and ultra violence, it was easy to see where Doom came from. Even as id slaved away at breakneck pace making Doom, competitors saw Wolfenstein 3D and the possibilities of immersive 3D gaming and rushed to make clones and their unique spins on the emerging paradigm. Some knew that id was coming up with something big but few anticipated how utterly massive Doom would become.&lt;/p&gt;

&lt;p&gt;And thus we are left with the gaming and cultural behemoth that was Doom, and in its wake, lie numerous could-have-beens, hopelessly overshadowed and forgotten. Some were quality games that could have enjoyed great success, some were decent and could have sustained the budding studios behind them, and some were, well, forgettable me-toos that nevertheless could have built modest followings. In this post, as we &lt;a href=&quot;https://www.theguardian.com/games/2023/dec/08/doom-at-30-what-it-means-by-the-people-who-made-it&quot;&gt;look back on 30 years of Doom&lt;/a&gt;, let’s also look back on the the losers of history, the games that deserved more love than they did, in the shadow of Doom.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h1 id=&quot;rise-of-the-triad&quot;&gt;Rise of the Triad&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/screenshots/4249203-rise-of-the-triad-dark-war-dos-a-better-screenshot-of-the-infamo.png&quot; alt=&quot;Rise of the Triad&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rise_of_the_Triad&quot;&gt;Rise of the Triad&lt;/a&gt; is a fun and frenetic game released in late 1994. With a mix of 1940’s machine guns and occult fantasy weapons, a paper-thin plot about shooting cultists on an island, and pretty crazy weapons (like the “Drunk Missile”), ROTT is quite the mad romp and built a modest following… mostly among people who happened to miss out on games like Doom and Duke Nukem 3D. Because it was hopelessly obsoleted by Doom, coming out a full year later.&lt;/p&gt;

&lt;p&gt;ROTT was based on old tech. Originally conceived as a sequel to Wolfenstein 3D, its tech and design followed lead designer &lt;a href=&quot;https://en.wikipedia.org/wiki/Tom_Hall&quot;&gt;Tom Hall&lt;/a&gt; when he left id to Apogee due to creative differences, as the former wanted to focus on making Doom. To add to the troubles, id later withdrew the license to the Wolfenstein franchise, which meant ROTT’s developers had to repurpose the game’s concept. With an aging Wolf 3D engine, recycled assets and an inexperienced team, they were no match for id at their peak. ROTT’s belated release received a mild reception and it was quickly overshadowed by games around the same time such as Doom II and Duke Nukem 3D.&lt;/p&gt;

&lt;p&gt;Which is a great shame when you consider ROTT’s history, and what it achieved had it been built by an experienced team according to its original vision. Originally a sequel to the hit game Wolfenstein 3D, it had a respectable number of innovations, such as dynamic lighting, different player characters, smart enemies, zany traps like moving fire walls, jump pads, rocket jumping, and capture the flag. And yet its age also showed, in its entirely flat levels, tile-based, 90-degree walls, and overall bland game design.&lt;/p&gt;

&lt;p&gt;Unlike many games in this list, this one has a mostly happy epilogue. ROTT’s modest sales was enough to sustain development for Duke Nukem 3D, the big hit that cemented 3D Realms’ (nee Apogee) place in FPS history. Hall stayed at 3D Realms, later moving to Ion Storm with fellow id alum John Romero and produced a few hits too. ROTT itself enjoyed not just a remake in 2013, but also a remaster in 2023, which means there’s no better time to check this game out. For my money, any game with a gore level setting is worth getting.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;References&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://doomwiki.org/wiki/Rise_of_the_Triad&quot;&gt;Rise of the Triad - Doom Wiki&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20140512062915/http://www.gamasutra.com/view/feature/132501/20_years_of_evolution_scott_.php?print=1&quot;&gt;20 Years Of Evolution: Scott Miller And 3D Realms - Gamasutra&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/videogamepreservation/rott&quot;&gt;Rise of the Triad Source Code Release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://levelskip.com/first-person-shooters/Rise-of-the-Triad&quot;&gt;Classic Games Resurrected: “Rise of the Triad: Dark War (ROTT)” - LevelSkip&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/418/rise-of-the-triad-dark-war/&quot;&gt;Rise of the Triad: Dark War - MobyGames&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;wolfenstein-3d&quot;&gt;Wolfenstein 3D&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/screenshots/3089880-wolfenstein-3d-dos-episode-6.png&quot; alt=&quot;Wolfenstein 3D&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It is only natural that Doom would overshadow its predecessor, &lt;a href=&quot;https://en.wikipedia.org/wiki/Wolfenstein_3D&quot;&gt;Wolfenstein 3D&lt;/a&gt;. Released in mid-1992, little more than one year before Doom, it racked up game-of-the-year accolades, blew past sales projections, and gave id the confidence and funds to undertake Doom, their most ambitious project yet. It seems that everyone couldn’t get enough of the fast action, spectacular (for the time) 3D environment, and the sadistic joy of mowing down hordes with a chaingun.&lt;/p&gt;

&lt;p&gt;When Doom arrived on the scene, it stole the spotlight and everything changed. This is not surprising, because it seems Doom is everything Wolfenstein 3D was, but so much better, and so much more. Doom had projectile weapons, splash damage, shotguns, all with different kinds of ammo, Wolf 3D had a handful of hitscan weapons and one kind of ammo. Doom had a freakin’ chainsaw and a berserk powerup that let you punch demons to death, Wolf 3D had a pathetically weak stabby knife. Doom had angled walls, variable elevations, big courtyards and sky boxes, Wolf 3D was trapped indoors with grid-based 90-degree levels with a single flat colour for ceilings and floors. Doom had monster boxes, traps that turned off all the lights to scare the crap out of you, Wolf 3D had… push walls that slowly revealed a few secret items. Doom had you shooting demons, Wolf 3D let you kill Nazis and Hitler… oh wait, that’s pretty awesome actually.&lt;/p&gt;

&lt;p&gt;These days, especially for people who did not live through that era of gaming, Doom is so much more prominent than Wolf 3D. Most people have not even heard of Wolf 3D. And given how much better Doom is, this might seem well-deserved, except… have you given Wolf 3D a try lately? Doom holds up today, and Wolf 3D may not have aged well, but give it a go and you may be pleasantly surprised. Running around mowing down Nazi guards and hearing their broken German yelps is an experience few games give. These days you can play the game in your browser for free, in high-res with modern mouse controls and minimaps thanks to the &lt;a href=&quot;https://maniacsvault.net/ecwolf/&quot;&gt;ECWolf source port&lt;/a&gt;, or even as an easter egg in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Wolfenstein:_The_New_Order&quot;&gt;MachineGames sequels&lt;/a&gt;. The franchise is alive and well, but if you haven’t before, you owe it to yourself to check this classic out. Spear of Destiny is cool too - but give the mission packs a miss.&lt;/p&gt;

&lt;p&gt;Oh and shameless plug for C-Dogs SDL, which can &lt;a href=&quot;https://cxong.github.io/cdogs-sdl/release/2021/08/21/c-dogs-1.0.0.html&quot;&gt;play Wolf 3D but top-down&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/automelee.gif&quot; alt=&quot;Wolf 3D in C-Dogs SDL&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;blake-stone&quot;&gt;Blake Stone&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/screenshots/875554-blake-stone-aliens-of-gold-dos-this-guy-doesnt-look-too-tough.png&quot; alt=&quot;Blake Stone&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the closing days of 1993, a plucky new games studio released an innovative FPS named Blake Stone. Using the proven tech of Wolf 3D with some nifty enhancements, and a cool premise of a Bond-esque secret agent, it was a promising game, but fate would be immensely cruel - Doom released only a week later, and sales dropped off a cliff. Contemporary reviews were unkind too, given the inevitable comparisons with Doom. Doom made so many games yesterday’s news, and no other game exemplified this as much as Blake Stone.&lt;/p&gt;

&lt;p&gt;Yet if you examine Blake Stone’s feature list, it’s clear this is no cynical cash-grab game. It featured dialogue with neutral scientists, texture-mapped ceilings and floors, distance fog, food dispensers, and a minimap for the many players who complained about getting lost in Wolf 3D. It even came with a short comic. This was a labour of love, an honest attempt at making a great game. Given the numerous enhancements, I consider this to be the best representation of what a Wolf 3D sequel would have been like. I mean, RoTT is cool but it’s a bit too crazy.&lt;/p&gt;

&lt;p&gt;Had the game come out a few months before Doom and given some time to make an impact, I’m sure many would fondly remember the game today. And since we’re talking hypotheticals, imagine if the game had been a 007 game, it might have been very popular indeed. Sadly this game has been a permanent mainstay in bargain bins ever since the late 90’s. Today you can enjoy the game on the cheap and with some modern niceties with the &lt;a href=&quot;https://bibendovsky.github.io/bstone/&quot;&gt;BStone source port&lt;/a&gt;. But keep your eyes out, because the modern Wolf 3D engine &lt;a href=&quot;https://maniacsvault.net/ecwolf/&quot;&gt;ECWolf&lt;/a&gt; may one day promise Blake Stone support, and &lt;a href=&quot;https://github.com/cxong/cdogs-sdl/issues/714&quot;&gt;maybe some others too&lt;/a&gt;? This game is sorely awaiting a new generation of fans to rediscover it!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;References&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://legacy.3drealms.com/news/2006/03/the_apogee_legacy_12.html&quot;&gt;The Apogee Legacy #12 - Mike Maynard - 3D Realms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;marathon&quot;&gt;Marathon&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/promos/521429-marathon-screenshot.jpg&quot; alt=&quot;Marathon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Marathon_(video_game)&quot;&gt;Marathon&lt;/a&gt; is an obscure but competent FPS, which would have been even more obscure if not for the phenomenal success of its studio’s later flagship IP: Halo. Released in late 1994, although Doom was very well established by this point, &lt;a href=&quot;https://en.wikipedia.org/wiki/Bungie&quot;&gt;Bungie&lt;/a&gt; being a Mac-only studio at this point allowed them to avoid the bloodbath that was PC FPS games post-Doom, and enjoy relative success on an under-served platform. Many considered Marathon “Doom for Mac”, and deservedly so: it was technically advanced and had great gameplay.&lt;/p&gt;

&lt;p&gt;However it was a very different kind of FPS than Doom. Slow paced, dark, creepy, and filled with lore, it played more like a survival horror, and is more akin to later games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Half-Life_(video_game)&quot;&gt;Half-Life&lt;/a&gt;, in its atmosphere and storytelling via terminals. This all makes it hard to compare to Doom directly. We did get a sneak peek at what that might have been though: when the sequel &lt;a href=&quot;https://en.wikipedia.org/wiki/Marathon_2:_Durandal&quot;&gt;Marathon 2: Durandal&lt;/a&gt; was released for Windows 2 years later, with slight improvements but into a super-heated FPS market (by this time games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Quake_(video_game)&quot;&gt;Quake&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Duke_Nukem_3D&quot;&gt;Duke Nukem 3D&lt;/a&gt; were already out), sales were understandably modest.&lt;/p&gt;

&lt;p&gt;So it’s no surprise that, despite its developer’s calibre, Marathon was heavily overshadowed, perhaps by Doom and by its Mac-only release in equal parts. As of writing, Bungie is working on a game called Marathon, which will be set in the same universe but will be a PvP-only extraction shooter, so there’s little hope of any resemblance to the original. Fortunately the original trilogy is freely available via the &lt;a href=&quot;https://alephone.lhowon.org&quot;&gt;Aleph One&lt;/a&gt; project - open source, modernised, and with free assets, you can play them easily anywhere. For classic FPS aficionados that can tolerate a game that is a bit rough around the edges, and don’t expect a gameplay anything like Doom, it could be well worth checking out.&lt;/p&gt;

&lt;h1 id=&quot;kens-labyrinth&quot;&gt;Ken’s Labyrinth&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/promos/5349140-kens-labyrinth-screenshot.png&quot; alt=&quot;Ken&apos;s Labyrinth&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ken’s Labyrinth is a bit of a historical oddity, in that its creator and legacy are much better known than the game itself. The game is a very quirky Wolf 3D clone, where the main character is abducted by aliens and trapped in the eponymous labyrinth, battling weird bats, spiders and robots with jellies and bouncy balls, avoiding hazards like fans and holes, while collecting magic items like potions, invisibility cloaks, or money to use in vending machines and slot machines. Escape the labyrinth, or fail to do so and doom the human race into being zapped into coal - this is quite a weird game.&lt;/p&gt;

&lt;p&gt;The game itself is a mediocre experience, with amateurish design and artwork, although the music is charming. After a gentle first level, the game quickly reveals its labyrinthian nature, being more of a maze crawler than a fast-paced shoot-em-up like Wolf 3D. This kind of gameplay may have had its time but it has not aged well, with confusing map layouts, which even the many colourful and distinctive wall textures could not alleviate. Instead what’s most interesting is the technical prowess of the engine: without a clear design, creator &lt;a href=&quot;https://en.wikipedia.org/wiki/Ken_Silverman&quot;&gt;Ken Silverman&lt;/a&gt; added feature after feature, and the engine became perhaps the most interactive FPS engine of its time: destructible walls, interactive map objects like slot machines, bouncing projectiles, homing projectiles… it’s a very hobbyist kind of approach, making things just because you can.&lt;/p&gt;

&lt;p&gt;The game’s history is just as interesting. Written by Silverman as a mostly solo project, because he was bothered by his brother spending too much time playing Wolfenstein 3D (of all reasons), this 17-year-old coding whiz built a raycaster from scratch, and gradually added features, and with the good fortune of releasing the game in early 1993 - avoiding Doom - it sold quite well: around 100k copies. The ridiculous amount of interactivity in the engine added little to gameplay but seems to have paid off, as Silverman impressed and was later picked up by Apogee who wanted him to build the next generation of his engine - the Build engine - which went on to power Duke Nukem 3D, Blood and Shadow Warrior. Contemporary reviews raved about the amazing level of interactivity that the engine allowed, with working light switches, destructible dynamic lights, working pool tables and more. This was quite the success story, and many compared Silverman with id’s &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Carmack&quot;&gt;John Carmack&lt;/a&gt;. But Silverman soon left the commercial games industry and mostly out of the public’s eye, leaving many wondering what things could have been.&lt;/p&gt;

&lt;p&gt;Today you can play Ken’s Labyrinth free, with modern high-res ports available, although the game is still a rough experience, as the gameplay has not aged well. Unlike Wolf 3D which still has the raw fun of machine gunning baddies, Ken’s Labyrinth is a slower, maze-crawling affair. Unfortunately this game does not get as much love compared to Wolf 3D so the quality of its modern ports is not nearly as good, as it sorely needs features like an automap. As interesting as this game is, perhaps it shall remain as an interesting chapter in the pre-history of FPS games.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;References&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.advsys.net/ken/klab.htm&quot;&gt;The official Ken’s Labyrinth page&lt;/a&gt; - the game’s readmes include historical information from Silverman&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.doyoumaze.com/blog/kens-labyrinth-a-blast-from-the-past-fps-maze-game&quot;&gt;KEN’S LABYRINTH: A BLAST FROM THE PAST FPS MAZE GAME&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;operation-body-count--corridor-7&quot;&gt;Operation Body Count + Corridor 7&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/promos/7067956-operation-body-count-screenshot.png&quot; alt=&quot;Operation Body Count&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Having never played these games before, I went in with low expectations since they were preceded by their abysmal reputations - some say these were among the worst FPSs of all time! Instead I was very much surprised.&lt;/p&gt;

&lt;p&gt;Made by &lt;a href=&quot;https://en.wikipedia.org/wiki/Capstone_Software&quot;&gt;Capstone Software&lt;/a&gt; using the aging Wolf 3D engine, being released in 1994 set these games up for failure. Capstone were not known for quality games, and these two being released in quick succession certainly did not help dispel suspicions that these were cynical attempts at cashing in on the FPS bandwagon, albeit poorly timed using outdated tech when Doom was already out. However a closer look shows these games are quite a bit better than their reputations would imply.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/promos/7083600-corridor-7-alien-invasion-screenshot.png&quot; alt=&quot;Corridor 7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Being this late to the game, Capstone got to use an enhanced version of the Wolf 3D engine, which allowed newer effects like distance fog, animated textures, even transparent doors which allowed things like windows and portholes, as well as a cool arsenal of guns like rocket launchers and flame throwers. The games certainly look colourful and moody, and you can best see this in &lt;a href=&quot;https://en.wikipedia.org/wiki/Corridor_7:_Alien_Invasion&quot;&gt;Corridor 7&lt;/a&gt;, where animated textures and sprites are used almost to a fault, with blinkenlights adorning certain weapons and walls that look like electronic screens. And using the proven Wolf 3D engine means these games still play the same, with the same fast and satisfying FPS gameplay. They certainly don’t play like the worst FPSs of all time.&lt;/p&gt;

&lt;p&gt;This is not to say that these games were &lt;em&gt;good&lt;/em&gt;, however. Once the initial impression wears off, it’s quickly apparent that Capstone are simply not at the same level as top-tier game studios like id. The level designs are bland and confusing, the wall textures are varied but not distinctive nor used well, such that it’s very easy to get lost and would be near unplayable if not for the automap in the enhanced Wolf 3D engine. And &lt;a href=&quot;https://en.wikipedia.org/wiki/Operation_Body_Count&quot;&gt;Operation Body Count&lt;/a&gt;’s truly dumb idea of starting the game in a butt-ugly and bland sewer with rats as enemies - boy did Capstone not know how to make a good first impression.&lt;/p&gt;

&lt;p&gt;So should you bother with this game? Sadly not, since the games are not modernised at all. There is hope however, since support is on the roadmap for ECWolf, although that project moves very slowly. Until then, this game was mediocre at best for its time, and virtually unplayable today. Perhaps watch a Let’s Play if you’re really curious. Or in the words of some other reviewers, just try Blake Stone instead.&lt;/p&gt;

&lt;h1 id=&quot;cyclones&quot;&gt;CyClones&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/screenshots/1509837-cyclones-dos-in-game-shot-2.png&quot; alt=&quot;CyClones&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CyClones&quot;&gt;CyClones&lt;/a&gt; is a very obscure FPS game by venerable studio &lt;a href=&quot;https://en.wikipedia.org/wiki/Raven_Software&quot;&gt;Raven Software&lt;/a&gt;. At the time, Raven had just made the successful first person RPG &lt;a href=&quot;https://en.wikipedia.org/wiki/ShadowCaster&quot;&gt;ShadowCaster&lt;/a&gt;, using a pre-Doom engine from id. In anticipation of the upcoming Doom release, Raven split into two teams: one to make &lt;a href=&quot;https://en.wikipedia.org/wiki/Heretic_(video_game)&quot;&gt;Heretic&lt;/a&gt; with the Doom engine, and the other to make CyClones using older tech. Initially CyClones was planned to use the ShadowCaster engine, but it was already very outdated, so Raven made the decision to make their own in house engine.&lt;/p&gt;

&lt;p&gt;The result is a very mixed bag. CyClones has some impressive technical innovations compared to earlier games like ShadowCaster and Wolfenstein 3D, such as sloping floors, moving platforms, and was notably the first FPS to use a mouse-aiming reticle, separate to the moving direction. The game also has nice production values, with FMV, pre-rendered cutscenes, CD soundtrack and interesting lore. However the game’s old tech base still showed, in its grid-based 90-degree levels, and its sluggish speed. Bland and confusing level design did not help. The result is a slog of a game that looks interesting, but had no chance of comparing against Doom.&lt;/p&gt;

&lt;p&gt;Of course Raven itself did quite well despite CyClones; its sister effort in Heretic was wildly successful, and Raven will continue its long and fruitful collaboration with id in making a bunch of best-selling games. As for CyClones, I would say give it a skip; despite its few notable technical achievements, it is simply not fun to play, and is desperately in need of a modern engine refresh, to bump up its shortcomings like severely limited viewing distance and frame rates, and awkward control scheme.&lt;/p&gt;

&lt;h1 id=&quot;the-terminator-rampage&quot;&gt;The Terminator: Rampage&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/promos/1662056-the-terminator-rampage-screenshot.png&quot; alt=&quot;The Terminator: Rampage&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Terminator:_Rampage&quot;&gt;The Terminator: Rampage&lt;/a&gt; looks great in screenshots. Released in December 1993, it too shared the misfortune of coming out right around Doom and was instantly overshadowed, but imagine a pre-Doom world, if you compare it to Wolf 3D, it looks pretty good - texture-mapped floors and ceilings, more than half a dozen different weapons and different ammo types, a cool IP, and even some neat video sequences. Developer &lt;a href=&quot;https://en.wikipedia.org/wiki/Bethesda_Softworks&quot;&gt;Bethesda&lt;/a&gt; already had 2 Terminator-based games under their belt, so this third outing - using the &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena&quot;&gt;Elder Scrolls: Arena&lt;/a&gt; engine - should be pretty good, right?&lt;/p&gt;

&lt;p&gt;Unfortunately the game just doesn’t feel that great to play. At the time it had very high hardware requirements, lagging very badly on typical hardware. Although today you can easily emulate it using much more powerful hardware, the engine just isn’t that smooth, compared to Wolf 3D let alone Doom. The enemies are also quite bland, with very samey corridors and rooms forming the majority of levels. It seems that the studio was just not as good as id at making smooth and tight gameplay that is required for FPS games.&lt;/p&gt;

&lt;p&gt;Of course these days Bethesda are far better known for their open world RPGs, so it seems there is no interest in revisiting this historical artifact, which is just as well - it’s simply not that good, so give it a miss.&lt;/p&gt;

&lt;h1 id=&quot;super-3d-noahs-ark&quot;&gt;Super 3D Noah’s Ark&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.mobygames.com/screenshots/2121576-super-noahs-ark-3-d-snes-nighty-night.png&quot; alt=&quot;Super 3D Noah&apos;s Ark (SNES)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s one from left field: a Christian-themed Wolfenstein 3D! Ok, so this game is really easy to dunk on, being made by a Christian games studio known for making other cheap knockoff-like games sold mostly in Christian bookstores to kids who weren’t allowed to play the normal, violent games. And sure, it’s not unfair to say this is just a re-skinned Wolfenstein 3D. But you’re doing this game a disservice by dismissing it so readily.&lt;/p&gt;

&lt;p&gt;You see, Super 3D Noah’s Ark has a really interesting history. It was not conceived as a non-violent Christian game at all; the studio &lt;a href=&quot;https://en.wikipedia.org/wiki/Wisdom_Tree&quot;&gt;Wisdom Tree&lt;/a&gt;’s founder was a huge fan of &lt;a href=&quot;https://en.wikipedia.org/wiki/Hellraiser&quot;&gt;&lt;em&gt;Hellraiser&lt;/em&gt;&lt;/a&gt; (yeah, that super creepy horror movie), and spent big bucks to acquire licenses to both this and the Wolfenstein 3D engine to make a game. Having experience with unlicensed NES games, the studio aimed to release for this platform, which was incredibly ballsy given the severe technical challenges, and unfortunately could not overcome. Eventually id released Doom which pretty much killed this project, as it would have been hopelessly outdated. In an attempt to salvage some money from this project and avoid competition with Doom, Wisdom Tree decided to target the Super Nintendo with a bible-themed game that plays largely like Wolfenstein 3D. The result is quite unique - the only unlicensed SNES game, which used a pass-through cart to get around copy protection - you need to plug in a licensed cart on top of this cart, Sonic &amp;amp; Knuckles style.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://images.launchbox-app.com/5c739bf8-0acc-42e2-8874-ce6081a488ac.png&quot; alt=&quot;Super 3D Noah&apos;s Arc pass-through cart&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So how does the game play? Honestly, the game is mediocre at best, and naysayers are mostly right that this is like a cheap and bizarre Christian version of Wolfenstein 3D. But the game has a few surprisingly good points (and bad points). Being similar to Wolfenstein 3D, the game plays well and is generally fun. There are a few enhancements compared to vanilla Wolf 3D - a few big slingshot-like projectile weapons in addition to the hitscan slingshots (how does that work anyway), which kind of have an area of effect. The level design is generally good, roughly on par with Wolf 3D’s, which is a cut above other Wolf 3D clones. And the game has a new quiz-type powerup, where if you answer a Noah-related question correctly, you get a large bonus. But the game eschews machine guns and Nazis in favour of slingshots with piddly sound effects, and a slew of annoying animals that spit at you. The result is that the game is much less viscerally satisfying. It may be all the same gameplay, but machine gunning Nazis and hearing their dying yelps provides a raw joy that “feeding” animals until they fall asleep has no hope of matching.&lt;/p&gt;

&lt;p&gt;So should you check this game out? I’m of two minds. The game is simply not that fun; in addition to the above issues, it is bloody hard - towards the later episodes, the game is super stingy with ammo/health and loves siccing you with hidden ambushes, yet the bosses are mostly laughably easy. However, the game has a close association with the open source Wolf 3D engine ECWolf - buying Super 3D Noah’s Arc directly supports ECWolf development - and that alone is a worthy cause.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;References&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gamedeveloper.com/design/how-a-hellraiser-tie-in-became-i-super-3d-noah-s-ark-i-&quot;&gt;How a Hellraiser tie-in became Super 3D Noah’s Ark - Game Developer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.1morecastle.com/2014/01/top-10-questions-raised-by-the-super-3d-noahs-ark-press-release/&quot;&gt;Top 10 Questions Raised by the Super 3D Noah’s Ark Press Release - 1MoreCastle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;final-words&quot;&gt;Final Words&lt;/h1&gt;

&lt;p&gt;After reviewing these early FPS games, it struck me how large the shadow of Doom loomed, and it had such a destructive effect on many FPS games. Some were innovative in their own right, honest attempts at making a good game, while some were low-effort cash-ins on the FPS bandwagon, but none seemed to deserve having their sales crushed by Doom.&lt;/p&gt;

&lt;p&gt;A lot of gamers hold on to the notion of “A delayed game is eventually good, but a rushed game is forever bad” - misattributed to Shigeru Miyamoto, although similar sentiments have been expressed in various forms in many places. There’s definitely truth to this statement, but the games overshadowed by Doom show the harsh reality of totally ignoring timing too, and it somewhat vindicates all the rushes to release games before key shopping seasons. If there’s a single takeaway, it’s this: making games is hard.&lt;/p&gt;
</description>
				<pubDate>Sat, 16 Mar 2024 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2024/03/in-the-shadow-of-doom</link>
				<guid isPermaLink="true">https://cxong.github.io/2024/03/in-the-shadow-of-doom</guid>
			</item>
		
			<item>
				<title>Big Without Scale</title>
				<description>&lt;p&gt;Having big and interesting game worlds has been a holy grail of games since the beginning. In the early years, technical constraints meant that big worlds were simply infeasible, without heavy use of procedural generation - &lt;a href=&quot;https://en.wikipedia.org/wiki/Elite_(video_game)&quot;&gt;&lt;em&gt;Elite&lt;/em&gt;&lt;/a&gt; in 1984 for example boasted thousands of planets - but nowadays, the main constraint is dev effort. Put simply, to create lots of interesting content, you need to put in lots of work.&lt;/p&gt;

&lt;p&gt;But that doesn’t mean we can’t use clever techniques to get the most bang for buck.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/3/31/Arcelite_through_vipers.jpg&quot; alt=&quot;Elite&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;bigger-is-not-better&quot;&gt;Bigger is not Better&lt;/h1&gt;

&lt;p&gt;When we look at lists of &lt;a href=&quot;https://www.reddit.com/r/Games/comments/ehwyj8/sizes_of_the_largest_open_world_video_game_maps/&quot;&gt;biggest game worlds&lt;/a&gt;, space games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Elite_Dangerous&quot;&gt;&lt;em&gt;Elite Dangerous&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Starfield_(video_game)&quot;&gt;&lt;em&gt;Starfield&lt;/em&gt;&lt;/a&gt; dominate, but that’s not particularly insightful when you consider they are mostly empty space. A bit lower in the rankings you’ll find &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Elder_Scrolls_II:_Daggerfall&quot;&gt;&lt;em&gt;Daggerfall&lt;/em&gt;&lt;/a&gt;, which dwarfs other &lt;em&gt;Elder Scrolls&lt;/em&gt; game worlds while being much older than them - notably having “the size of Great Britain” - but again, isn’t interesting as most of the game is empty wilderness, sparsely filled with randomly generated towns.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/UvFdMax3wlA?si=WiYpCwuiHphb-vk2&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;!--more--&gt;
&lt;p&gt;Another mistake that some games make is by increasing the scale of their game worlds without maintaining the density of content, which makes things feel sparse. During the release of &lt;a href=&quot;https://en.wikipedia.org/wiki/Grand_Theft_Auto%3A_San_Andreas&quot;&gt;&lt;em&gt;GTA San Andreas&lt;/em&gt;&lt;/a&gt;, there was some hype about being able to enter lots of buildings, and while the game did make many improvements in density over its predecessors, most buildings were still off bounds or limited in interactivity, making the game feel less like a huge living city and still like a playground for driving cars around.&lt;/p&gt;

&lt;p&gt;So when it comes to feeling big, the raw numbers don’t tell the whole story. Bigger is not better if it is just sparse, more is not better if it is small variations of the same stuff. To truly feel big, we need things like variety, complexity, and content.&lt;/p&gt;

&lt;h1 id=&quot;pcg-is-not-a-panacea&quot;&gt;PCG is not a Panacea&lt;/h1&gt;

&lt;p&gt;Over the years various people have touted procedural content generation as the killer technology that will enable big and interesting game worlds on the cheap. In recent years, &lt;a href=&quot;https://en.wikipedia.org/wiki/No_Man&apos;s_Sky&quot;&gt;&lt;em&gt;No Man’s Sky&lt;/em&gt;&lt;/a&gt; suffered bad reviews due to not being able to live up to its hype; boasting quintillions of playable worlds, a press largely unfamiliar with PCG helped blow things out of proportion. The reality is that, although PCG is great for some things, it is no replacement for hand-crafted content in the same quantity; quintillions of worlds created by competent human artists (if such a thing were possible) would be so much more compelling than any algorithm could, and equating the two was ridiculous.&lt;/p&gt;

&lt;p&gt;More recently, generative AI has caused much disruption and threatened to replace human artists in many domains. It is still early days, but indications so far suggest that they cannot fully replace all human artists, but may be useful in some mundane tasks, provided we can sort out the legal issues.&lt;/p&gt;

&lt;p&gt;I view PCG and generative AI similarly - they are useful in limited areas, and work best when complementing hand-crafted art, as additional tools in an artist’s toolset. PCG for example works well in roguelikes or game randomisers to improve replayability, but still requires a great deal of effort and care in creating those worlds in the first place, and tuning the generators for the task. Generative AI has already proven useful in areas like prototyping and as filler content, but requires a lot of resources to train and tune, and cannot be the whole content pipeline alone.&lt;/p&gt;

&lt;p&gt;So although technology will make work easier, you still need to put in the work. But where do we focus our work on?&lt;/p&gt;

&lt;h1 id=&quot;a-world-that-feels-alive&quot;&gt;A World that Feels Alive&lt;/h1&gt;

&lt;p&gt;Stepping back a bit, we want big worlds they are immersive. When we reach the end of a small world, the illusion is shattered and we are rudely reminded of the artifice of the game, but if the world was big enough, we could continue to pretend that this was a virtual reality we could inhabit indefinitely.&lt;/p&gt;

&lt;p&gt;But we can do better than focusing solely on scale. By taking cities as an example, what makes a city feel “big” isn’t its geographic size; instead it’s:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;complexity&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;density&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;specialisation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By focusing on these, we can achieve worlds that feel big without excess effort, and avoid common pitfalls that make some worlds feel wrong.&lt;/p&gt;

&lt;h2 id=&quot;complexity&quot;&gt;Complexity&lt;/h2&gt;

&lt;p&gt;Real life big cities are incredibly complex places. They are where people live, work, play; where industry and commerce and many different sectors coexist in symbiotic ways. Lots of infrastructure and services are needed to keep it all working - transportation, sanitation, health, construction, emergency services, education, on and on. This amount of complexity really resists procedural generation, and a simulation approach would also be very difficult. Any given part of a city will contain amenities of different types, like religious temples mixed in between residential buildings. Cities resist uniformity, and this makes them endlessly interesting.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/stairwell_jinja.jpeg&quot; data-fancybox=&quot;gallery-complex&quot; data-caption=&quot;When space is at a premium but there&apos;s a need for certain amenities, any tiny bit of free space is fair game. Here is a Japanese Shinto shrine tucked underneath a stairwell.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/stairwell_jinja_th.jpeg&quot; alt=&quot;Sendai Station&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/mitsumine.jpeg&quot; data-fancybox=&quot;gallery-complex&quot; data-caption=&quot;Another Shinto shrine sandwiched by apartment buildings.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/mitsumine_th.jpeg&quot; alt=&quot;Mitsumine Shrine&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/shingen-ji.jpeg&quot; data-fancybox=&quot;gallery-complex&quot; data-caption=&quot;Religious buildings like this temple are used by the local residents who live nearby, but the architectural style is completely different.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/shingen-ji_th.jpeg&quot; alt=&quot;Shingen-ji&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cities are sometimes designed, but often organic entities, and this makes it resistant to clean delineations. Buildings are not simply just an “office building”, blocks are not simply a “commercial block”. Buildings can be owned by a single business, or multiple businesses. Successful businesses can expand to encompass multiple, adjacent buildings, connecting them so that when you enter them, you can seamlessly travel from one building to another as if it were a single building. Dominant businesses can buy up buildings in the same area - the Japanese electronics retailer &lt;a href=&quot;https://en.wikipedia.org/wiki/Yodobashi_Camera&quot;&gt;Yodobashi Camera&lt;/a&gt; owns a whopping &lt;a href=&quot;https://www.shinjukustation.com/yodobashi-camera-shinjuku/&quot;&gt;13 “pavilions” (buildings)&lt;/a&gt; in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nishi-Shinjuku&quot;&gt;West Shinjuku district&lt;/a&gt; of Tokyo alone.&lt;/p&gt;

&lt;p&gt;A city’s appearance reflects its history and culture. As a city grows, newer areas and buildings will have a different style than older areas. The distribution of businesses can also follow opposing dynamics. Recall what I wrote about cities not being uniform? Sometimes businesses cluster and you’ll find single buildings filled with the same type of business, shopping streets, or department stores designed to capture a specific type of clientele. Just as businesses and amenities may need to spread out to capture geographically dispersed users, they can also &lt;a href=&quot;https://en.wikipedia.org/wiki/Hotelling%27s_law&quot;&gt;cluster to capture users who are shopping around&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;density&quot;&gt;Density&lt;/h2&gt;

&lt;p&gt;Cities are much more than just villages or towns but extended out. Because of how desirable they are to be in, space becomes a premium and this drives up density. This can do some weird things - streets become narrower, buildings get higher. A newbie trap is to make everything bigger in cities, including streets, but density will lead to them becoming smaller, unless there are other forces at play.&lt;/p&gt;

&lt;p&gt;An example of where things aren’t quite right is &lt;a href=&quot;https://en.wikipedia.org/wiki/EarthBound&quot;&gt;EarthBound’s&lt;/a&gt; &lt;a href=&quot;https://wikibound.info/wiki/Twoson#Department_store&quot;&gt;Twoson Department Store&lt;/a&gt;. Although it does contain different shops on each level, which is realistic, it does two things wrong: 1. the slow escalators between each floor make it less convenient, and 2. the shops don’t actually have better selections than &lt;a href=&quot;https://wikibound.info/wiki/Onett#Businesses&quot;&gt;other towns&lt;/a&gt;. In reality, big city department stores should be more convenient and have better item selections.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/twoson.png&quot; alt=&quot;Twoson Department Store&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Compare this with Pokemon’s &lt;a href=&quot;https://bulbapedia.bulbagarden.net/wiki/Celadon_Department_Store&quot;&gt;Celadon Department Store&lt;/a&gt;. It has great item selection and its stairs and elevators are quite convenient.&lt;/p&gt;

&lt;p&gt;One consequence of extreme density and verticality is that it turns the space from 2D into 3D, which &lt;a href=&quot;http://cxong.github.io/2022/12/2d-vs-3d&quot;&gt;humans have trouble navigating&lt;/a&gt;. Underground spaces lack &lt;a href=&quot;https://theoryofthemeparks.blogspot.com/2015/08/wayfinding-in-themed-design-weenie.html&quot;&gt;weenies&lt;/a&gt;, and claustrophobic spaces limit sight lines. This all makes dense spaces incredibly hard to navigate, so there’s an over-reliance on signage, providing sensory overload.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/sendai.jpeg&quot; data-fancybox=&quot;gallery-dense&quot; data-caption=&quot;In very busy locations like major stations, the infrastructure needs to support multiple modes of transportation. Elevated walkways like this can help separate pedestrian traffic from road vehicles, and opens up more levels for shop fronts.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/sendai_th.jpeg&quot; alt=&quot;Sendai Station&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/panda_bridge.jpeg&quot; data-fancybox=&quot;gallery-dense&quot; data-caption=&quot;Multi-level pedestrian walkways and bridges effectively turns outdoor urban spaces into multi-level spaces too.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/panda_bridge_th.jpeg&quot; alt=&quot;Panda Bridge&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/namba_walk.jpeg&quot; data-fancybox=&quot;gallery-dense&quot; data-caption=&quot;This underground walkway stretches almost a kilometre long. Originating as a pedestrian connection between two stations, commerce can easily develop and turn utilitarian spaces like this into destinations.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/namba_walk_th.jpeg&quot; alt=&quot;Namba Walk&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/dotonbori.jpeg&quot; data-fancybox=&quot;gallery-dense&quot; data-caption=&quot;Density forces 3-dimensional spaces. Not just the fact that multi-level buildings exist, but vertical signage dominates the view, advertising businesses at different levels in each building.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/dotonbori_th.jpeg&quot; alt=&quot;Dotonbori&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/multilevel.jpeg&quot; data-fancybox=&quot;gallery-dense&quot; data-caption=&quot;An example of what extreme density can do: tiny multi-level buildings where each level contains a different, related business.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/multilevel_th.jpeg&quot; alt=&quot;Multilevel business building&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;specialisation&quot;&gt;Specialisation&lt;/h2&gt;

&lt;p&gt;When population density is high enough, more and more niches become viable, and here’s where we see lots of specialisation. Specialty stores in big cities sell all sorts of weird items for tiny interest groups, that are often baffling for lay people. Unique buildings, people of all sorts of subcultures comingle like colourful animals in a thick urban jungle. Cities are anything but boring and uniform.&lt;/p&gt;

&lt;p&gt;Recall Pokemon’s Celadon Department Store? It sells a lot of unique items, including strange ones like &lt;a href=&quot;https://bulbapedia.bulbagarden.net/wiki/Fresh_Water&quot;&gt;Fresh Water&lt;/a&gt;, a healing item can only be bought at a vending machine one at a time, it does exactly the same thing as the &lt;a href=&quot;https://bulbapedia.bulbagarden.net/wiki/Super_Potion&quot;&gt;Super Potion&lt;/a&gt;, yet it is much cheaper. In gameplay terms this makes little sense, but I love how items like this give the game extra life. You get the sense that this item was not made for the player, that the game’s world was inhabited by all sorts of different people who use this item for different purposes, and it just so happens to be useful to the player too.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/toshima.jpeg&quot; data-fancybox=&quot;gallery-special&quot; data-caption=&quot;Big cities have big infrastructure needs. This colossal chimney belongs to the Toshima Incineration Plant, located right next to a busy train station. Its size is required to clear the local skyscrapers.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/toshima_th.jpeg&quot; alt=&quot;Toshima Incineration Plant&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/sennichimae.jpeg&quot; data-fancybox=&quot;gallery-special&quot; data-caption=&quot;Big cities also have small infrastructure. This bustling shopping street is criss-crossed with phone lines, an reminder of the dense webs and networks that power the city.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/sennichimae_th.jpeg&quot; alt=&quot;Saita Building&quot; /&gt;
&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/saita_building.jpeg&quot; data-fancybox=&quot;gallery-special&quot; data-caption=&quot;We like to think that cities have a look, but its buildings are often distinctive. Prefabs and McMansions are for the suburbs.&quot;&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/cxong/cxong.github.io/master/_posts/saita_building_th.jpeg&quot; alt=&quot;Saita Building&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;making-big-worlds-is-hard&quot;&gt;Making Big Worlds is Hard&lt;/h1&gt;

&lt;p&gt;This is basically what I wanted to say with this post: making big worlds is hard, and you can’t cheat your way by copy-pasting content or using procedural generation. However by focusing on three elements: &lt;strong&gt;complexity&lt;/strong&gt;, &lt;strong&gt;density&lt;/strong&gt; and &lt;strong&gt;specialisation&lt;/strong&gt;, you can make the most of your efforts - some games do this well by making some locations feel bigger without actually being geographically bigger.&lt;/p&gt;

&lt;p&gt;This post does not cover exactly &lt;em&gt;how&lt;/em&gt; to go about building big worlds - this is a far too broad subject - but here’s a random list of items to consider:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Historical layering, old/new regions: tell the history of the world via the environment&lt;/li&gt;
  &lt;li&gt;Show construction: real cities/worlds are organic and always a work-in-progress&lt;/li&gt;
  &lt;li&gt;Unique landmarks: gives a place character, as well as aiding navigation&lt;/li&gt;
  &lt;li&gt;Multiple transportation modes&lt;/li&gt;
  &lt;li&gt;Specialty stores selling unique items&lt;/li&gt;
  &lt;li&gt;Content that is only tangentially useful for gameplay, but which make sense for the world&lt;/li&gt;
  &lt;li&gt;Verticality: undergrounds, overpasses&lt;/li&gt;
  &lt;li&gt;Mixed use buildings and districts: don’t use only single-use architecture!&lt;/li&gt;
  &lt;li&gt;Infrastructure: real cities can’t exist without it. Don’t completely forget the aqueducts, waste management plants, power lines!&lt;/li&gt;
  &lt;li&gt;Confusing navigation: in moderation, but dense cities are confusing places, so don’t be afraid to lean into it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As well as a few excellent reading materials:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gamedeveloper.com/design/a-beginner-s-guide-to-crafting-video-game-cities&quot;&gt;A Beginner’s Guide To Crafting Video Game Cities&lt;/a&gt; - argues that one should take a world-building approach to building cities. Make a realistic city first, then adapt it for the game: &lt;em&gt;it is, after all, not its size that differentiates a city from a village, but its functions&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gamedeveloper.com/design/urban-design-and-the-creation-of-videogame-cities&quot;&gt;Urban Design and the Creation of Videogame Cities&lt;/a&gt; - contains lots of pointers on how to make great cities. &lt;em&gt;Game cities must always make sense&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Tue, 14 Nov 2023 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2023/11/big-without-scale</link>
				<guid isPermaLink="true">https://cxong.github.io/2023/11/big-without-scale</guid>
			</item>
		
			<item>
				<title>A review of Golden Age RTS Music</title>
				<description>&lt;p&gt;I love games and music, and one of my favourite game genres is RTS. I don’t know which led to the other, but one thing’s for sure: &lt;strong&gt;RTS music slaps&lt;/strong&gt;. I would argue that it is one of the best genres for awesome, listenable music that you can put in your playlist. For example, RPGs have great music too but their soundtracks are too eclectic, as they are strongly themed to specific levels or characters. Action games can also have great music but they are very situational, with a mix of stealth, action and boss tracks. RTS games have a perfect blend of strong yet consistent themes, and the gameplay gives the music plenty of space to develop itself, not being dictated by the action onscreen.&lt;/p&gt;

&lt;p&gt;In this post we’ll review great RTS music from its golden age, from the mid-90’s to early-mid-00’s. We’ll see how diverse studios and composers take different approaches to what style of music to use, and how they serve the game.&lt;/p&gt;

&lt;h1 id=&quot;a-brief-history-of-golden-age-rts-music&quot;&gt;A brief history of golden age RTS music&lt;/h1&gt;

&lt;p&gt;The start of the RTS golden age (variously reckoned to be somewhere between &lt;a href=&quot;https://en.wikipedia.org/wiki/Dune_II&quot;&gt;&lt;em&gt;Dune II&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer_(1995_video_game)&quot;&gt;&lt;em&gt;Command and Conquer&lt;/em&gt;&lt;/a&gt;) coincided with the wide availability of CD technology, and RTS music rode this technological wave and showcased high-fidelity soundtracks. The genre is perfect for music, its 10-30 minute gameplay sessions allowing uninterrupted, extended play. While &lt;em&gt;Dune II&lt;/em&gt; had to use limited chiptune, by the time games like &lt;em&gt;Command and Conquer&lt;/em&gt; came around, everyone jumped onto the CD audio bandwagon, since music is so key to RTS games.&lt;/p&gt;

&lt;p&gt;The golden age is often characterized by the fierce rivalry between &lt;a href=&quot;https://en.wikipedia.org/wiki/Westwood_Studios&quot;&gt;Westwood&lt;/a&gt; (&lt;em&gt;Command and Conquer&lt;/em&gt;) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Blizzard_Entertainment&quot;&gt;Blizzard&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Warcraft&quot;&gt;&lt;em&gt;Warcraft&lt;/em&gt;&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/StarCraft_(video_game)&quot;&gt;&lt;em&gt;Starcraft&lt;/em&gt;&lt;/a&gt;), but was by no means a two-horse race, with quality releases from many other studios such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Ensemble_Studios&quot;&gt;Ensemble&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires&quot;&gt;&lt;em&gt;Age of Empires&lt;/em&gt;&lt;/a&gt;), &lt;a href=&quot;https://en.wikipedia.org/wiki/Relic_Entertainment&quot;&gt;Relic&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Homeworld_(series)&quot;&gt;&lt;em&gt;Homeworld&lt;/em&gt;&lt;/a&gt;, later &lt;a href=&quot;https://en.wikipedia.org/wiki/Warhammer_40,000:_Dawn_of_War&quot;&gt;&lt;em&gt;Dawn of War&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Company_of_Heroes&quot;&gt;&lt;em&gt;Company of Heroes&lt;/em&gt;&lt;/a&gt;), &lt;a href=&quot;https://en.wikipedia.org/wiki/Cavedog_Entertainment&quot;&gt;Cavedog&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Total_Annihilation&quot;&gt;&lt;em&gt;Total Annihilation&lt;/em&gt;&lt;/a&gt;), and not to mention the numerous clones and contenders. The best of these entries also had fantastic music.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Great RTS games continued being released into the 2000’s but the genre tapered off in prominence. The 2010’s saw a brief resurgence with &lt;a href=&quot;https://en.wikipedia.org/wiki/StarCraft_II&quot;&gt;&lt;em&gt;Starcraft II&lt;/em&gt;&lt;/a&gt; and various &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires_II#HD_Edition&quot;&gt;&lt;em&gt;Age of Empires&lt;/em&gt; remasters&lt;/a&gt;, but new titles became rare. Nevertheless, the genre is healthier than it seems, with dedicated followings and titles like &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires_II:_Definitive_Edition&quot;&gt;&lt;em&gt;Age of Empires 2&lt;/em&gt;&lt;/a&gt; and &lt;em&gt;Total War&lt;/em&gt; occasionally appearing in top-50 most played charts. And throughout the years, great music remained a hallmark of the genre.&lt;/p&gt;

&lt;p&gt;Let’s look at a few prominent composers/studios and how their music evolved.&lt;/p&gt;

&lt;h2 id=&quot;frank-klepacki--westwood&quot;&gt;Frank Klepacki / Westwood&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Frank_Klepacki&quot;&gt;Frank Klepacki&lt;/a&gt;, Westwood’s main composer for most of their RTS titles, started early with the studio, at 17 years of age. His early work included that of &lt;em&gt;Dune II&lt;/em&gt;, which adapted music from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dune_(1984_film)&quot;&gt;&lt;em&gt;Dune&lt;/em&gt;&lt;/a&gt; movie. The music recreates the orchestral, synth-heavy and bleak soundscapes, but is very much constrained by the chiptune technology of its time. The advent of CD audio definitely expanded the capabilities of the music, and its remake, &lt;a href=&quot;https://en.wikipedia.org/wiki/Dune_2000&quot;&gt;&lt;em&gt;Dune 2000&lt;/em&gt;&lt;/a&gt;, showcases the musical lineage much more clearly.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/dKzvUza1rmE&quot; title=&quot;Dune II - Rulers of Arrakis&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/bQ2mUSz-8W0&quot; title=&quot;Dune 2000 - Rise of the Harkonnen&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/ynNboEczYsM&quot; title=&quot;Dune - The floating fat man&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;The two Dune game tracks are not direct remakes but contain a lot of common elements. You can clearly identify the influence of the film score in the &lt;em&gt;Dune 2000&lt;/em&gt; version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Klepacki’s most notable work came with &lt;em&gt;Command and Conquer&lt;/em&gt; and its spinoff &lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer:_Red_Alert&quot;&gt;&lt;em&gt;Red Alert&lt;/em&gt;&lt;/a&gt;. These games established his signature style, mixing electronic sounds and samples with rock and metal riffs, styles that are difficult to achieve if not for high-fidelity CD audio. &lt;em&gt;Hell March&lt;/em&gt; is the breakout hit, wonderfully blending sounds of soldiers marching into a heavy metal beat, but &lt;em&gt;Act on Instinct&lt;/em&gt; is a better example of this signature style. Its mix of newscaster-style voice clips and industrial metal perfectly evokes the game’s modern, techno-thriller setting.&lt;/p&gt;

&lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/n4AUY-v1nsE&quot; title=&quot;Act on Instinct&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Compared to its contemporary strategy games, which were slow-paced and had staid or somewhat dorky fantasy settings, &lt;em&gt;Command and Conquer&lt;/em&gt; was fast, fresh and hip, thanks in no small part to its soundtrack.&lt;/p&gt;

&lt;div class=&quot;well infobox&quot;&gt;

&lt;h3&gt;Hell March&lt;/h3&gt;

&lt;i&gt;Red Alert&lt;/i&gt; was the spinoff that overshadowed the original, including in its music. Its title track &lt;i&gt;Hell March&lt;/i&gt; not only helped win several soundtrack-of-the-year awards, it also became the signature track for the game&apos;s sequels too, with remixed versions in each game. While each version is great in its own way, the contrast between the first and second is especially interesting.

&lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/e3YzmjmAGoI&quot; title=&quot;Hell March&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/cyDwuwwlXcQ&quot; title=&quot;Hell March 2&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

Despite being slower than the first, &lt;i&gt;Hell March 2&lt;/i&gt; manages to sound higher energy thanks to its richer layers and electronic styling. Showcasing Klepacki&apos;s maturing style and techniques, which closely resemble his self-described signature &lt;a href=&quot;https://en.wikipedia.org/wiki/Rocktronic&quot;&gt;&quot;rocktronic&quot;&lt;/a&gt; style, the &lt;i&gt;Red Alert 2&lt;/i&gt; soundtrack was a welcome return to form for many fans who had mixed feelings about &lt;i&gt;Tiberian Sun&lt;/i&gt;&apos;s slower, moodier turn.

&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer:_Tiberian_Sun&quot;&gt;&lt;em&gt;Tiberian Sun&lt;/em&gt;&lt;/a&gt; shifted the series to a darker, apocalyptic, and slower-paced setting, and this is reflected in its soundtrack. Gone are the pumping beats and voice samples, replaced by moody synths and lots of ambient sounds.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/2dSKUDnNijI&quot; title=&quot;What Lurks&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;&lt;em&gt;What Lurks&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this soundtrack Klepacki collaborated with &lt;a href=&quot;https://cnc-central.fandom.com/wiki/Jarrid_Mendelson&quot;&gt;Jarrid Mendelson&lt;/a&gt;, who really came into his own in &lt;a href=&quot;https://en.wikipedia.org/wiki/Emperor:_Battle_for_Dune&quot;&gt;&lt;em&gt;Emperor: Battle for Dune&lt;/em&gt;&lt;/a&gt;. An underrated game overshadowed by its contemporaries, &lt;em&gt;Emperor&lt;/em&gt; represented many firsts for Westwood’s RTS games: &lt;a href=&quot;https://en.wikipedia.org/wiki/SAGE_(game_engine)&quot;&gt;a truly 3D engine&lt;/a&gt;, &lt;a href=&quot;https://cxong.github.io/2017/08/three-factions&quot;&gt;3 radically different factions&lt;/a&gt;, and the use of different musical themes for each faction. Klepacki returns to the series for House Atreides, giving them a Dune-conventional theme, and prolific studio veteran &lt;a href=&quot;https://en.wikipedia.org/wiki/David_Arkenstone&quot;&gt;David Arkenstone&lt;/a&gt; contributes an excellent heavy metal soundtrack for House Harkonnen. Mendelson’s dark synth House Ordos soundtrack was a standout, perfectly capturing the faction’s cold, ever-scheming personality.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/NOmX6HmGp0U&quot; title=&quot;Not An Option&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;&lt;em&gt;Not An Option&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This per-faction soundtrack approach culminated with &lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer:_Generals&quot;&gt;&lt;em&gt;Generals&lt;/em&gt;&lt;/a&gt;, which - owing to being made by &lt;a href=&quot;https://en.wikipedia.org/wiki/EA_Pacific&quot;&gt;a studio that had just a small part of Westwood lineage&lt;/a&gt; - was created by a different, yet very capable team: industry veteran &lt;a href=&quot;https://en.wikipedia.org/wiki/Bill_Brown_(composer)&quot;&gt;Bill Brown&lt;/a&gt; and occasional collaborator &lt;a href=&quot;https://www.imdb.com/name/nm0761875/&quot;&gt;Mikael Sandgren&lt;/a&gt;. Brown’s experience with past award-winning soundtracks like &lt;a href=&quot;https://en.wikipedia.org/wiki/Tom_Clancy%27s_Rainbow_Six_(video_game)&quot;&gt;&lt;em&gt;Rainbow Six&lt;/em&gt;&lt;/a&gt; is on full display in the USA faction’s orchestral-electronic tracks, evoking the techno-thriller themes of the USA being the good guys fighting international terrorists using high tech. The bigger surprise is in the excellent tracks for the China and Global Liberation Army factions, which feature tastefully-used ethnic samples and styles. It’s the perfect accompaniment to a game whose factions have big, bombastic personalities.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/tGU55rKlTeU&quot; title=&quot;USA - Comanche Down&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/CSTRfIoJNoQ&quot; title=&quot;China - Runaway Train&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/sLriuOCFGA8&quot; title=&quot;GLA - Tides of Wrath&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;well infobox&quot;&gt;

&lt;h3&gt;Contenders and Pretenders&lt;/h3&gt;
It&apos;s hard to understate how dominant RTS games were in the late 90&apos;s. Westwood in particular once accounted for 5% of the video games market - all platforms. It&apos;s therefore no surprise that clones were aplenty. Some were more successful than others, but even the less successful clones had surprisingly good music.

&lt;a href=&quot;https://en.wikipedia.org/wiki/Beam_Software&quot;&gt;Melbourne House&lt;/a&gt; released &lt;a href=&quot;https://en.wikipedia.org/wiki/KKnD_(video_game)&quot;&gt;&lt;i&gt;Krush Kill &apos;n&apos; Destroy&lt;/i&gt;&lt;/a&gt; and sequels during this time, enjoying relative success in a few markets like its home market Australia and some unexpected ones like South Korea. Although mostly dismissed as inferior clones of &lt;i&gt;Command and Conquer&lt;/i&gt;, it did feature &lt;a href=&quot;https://kknd.fandom.com/wiki/Soundtrack&quot;&gt;great music from local artists&lt;/a&gt;.

&lt;iframe width=&quot;100%&quot; height=&quot;166&quot; scrolling=&quot;no&quot; frameborder=&quot;no&quot; allow=&quot;autoplay&quot; src=&quot;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/570548460&amp;amp;color=%23ff5500&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_comments=true&amp;amp;show_user=true&amp;amp;show_reposts=false&amp;amp;show_teaser=true&quot;&gt;&lt;/iframe&gt;&lt;div style=&quot;font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;&quot;&gt;&lt;a href=&quot;https://soundcloud.com/neurofox&quot; title=&quot;NeuroFox&quot; target=&quot;_blank&quot; style=&quot;color: #cccccc; text-decoration: none;&quot;&gt;NeuroFox&lt;/a&gt; · &lt;a href=&quot;https://soundcloud.com/neurofox/earth-blood-down-feat-brain-tuner-neurofox&quot; title=&quot;Earth Blood Down (feat. Brain Tuner, NeuroFox)&quot; target=&quot;_blank&quot; style=&quot;color: #cccccc; text-decoration: none;&quot;&gt;Earth Blood Down (feat. Brain Tuner, NeuroFox)&lt;/a&gt;&lt;/div&gt;
&lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/pDCcGFosgXw&quot; title=&quot;Rip Van Hippy - Diabet&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/Cz-XGKZLqS0&quot; title=&quot;Rip Van Hippy - How Hip Is A Computer&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;Post-golden-age, Westwood’s franchises enjoyed further quality releases in &lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer_3:_Tiberium_Wars&quot;&gt;&lt;em&gt;Command &amp;amp; Conquer 3&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer:_Red_Alert_3&quot;&gt;&lt;em&gt;Red Alert 3&lt;/em&gt;&lt;/a&gt;. For genre and music fans, &lt;a href=&quot;https://en.wikipedia.org/wiki/Command_%26_Conquer_Remastered_Collection&quot;&gt;&lt;em&gt;Command &amp;amp; Conquer Remastered Collection&lt;/em&gt;&lt;/a&gt; is particularly worth getting, with original and remixed versions of classic tracks. Meanwhile the fanbase continues to hope for a continuation of &lt;em&gt;Generals&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;cavedog-relic&quot;&gt;Cavedog, Relic&lt;/h2&gt;

&lt;p&gt;In the late 90’s, during the peak of the RTS golden age, two studios emerged with stunning RTS releases and a dramatic approach to its music: &lt;a href=&quot;https://en.wikipedia.org/wiki/Cavedog_Entertainment&quot;&gt;Cavedog&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Relic_Entertainment&quot;&gt;Relic&lt;/a&gt;. Both debuted with award-winning titles, and were lauded for their atmospheric music, which set new bars for video game music.&lt;/p&gt;

&lt;p&gt;Cavedog’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Total_Annihilation&quot;&gt;&lt;em&gt;Total Annihilation&lt;/em&gt;&lt;/a&gt;, a 3D game featuring vast robot battles, had an unusual musical direction. Composer &lt;a href=&quot;https://en.wikipedia.org/wiki/Jeremy_Soule&quot;&gt;Jeremy Soule&lt;/a&gt; took the &lt;a href=&quot;https://gaming.stackexchange.com/q/402649/47716&quot;&gt;unprecedented&lt;/a&gt; approach of using a real orchestra to perform the epic, sweeping themes, evoking imagery such as crashing waves, verdant forests and sombre wastelands. This helped the soundtrack stand out from its rivals, and paid off well, winning best music awards, and some reviews even singled out the music as a highlight of the game.&lt;/p&gt;

&lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/x22q2bjiurI&quot; title=&quot;Forest Green&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Relic’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Homeworld&quot;&gt;&lt;em&gt;Homeworld&lt;/em&gt;&lt;/a&gt; set new benchmarks for atmospheric gameplay. With a space opera story that deals with heavy themes like genocide and cosmic horror, and remarkable visuals made with the assistance of astronomist consultants, it is indeed high praise when many reviewers said that &lt;a href=&quot;https://en.wikipedia.org/wiki/Paul_Ruskay&quot;&gt;Paul Ruskay&lt;/a&gt;’s music was on par with the rest of the game’s quality. In addition to ambient space drones and a prominent use of &lt;a href=&quot;https://www.youtube.com/watch?v=fXRJBK8oJSA&quot;&gt;Samuel Barber’s &lt;em&gt;Adagio for Strings&lt;/em&gt;&lt;/a&gt;, Ruskay effectively uses the desert metaphor to describe space nomads, using Arabic and South Asian musical elements to evoke the utter isolation and desolation of space.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/hqWcm6MMiHk&quot; title=&quot;Kharak System&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/dTKakINXjl8&quot; title=&quot;Turanic Battle Music&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;p&gt;Although Cavedog met an untimely demise, Soule’s critically acclaimed works made him one of the most highly sought-after composers in the industry. His signature style of moving orchestral pieces brings some much needed colour to &lt;em&gt;Relic&lt;/em&gt;’s next RTS franchise, &lt;a href=&quot;https://en.wikipedia.org/wiki/Warhammer_40,000:_Dawn_of_War&quot;&gt;&lt;em&gt;Dawn of War&lt;/em&gt;&lt;/a&gt;. The game takes place on an otherwise conventional ground-based battlefield with small unit numbers, and it’s the haunting choirs in the soundtrack that remind the player that this was 40k, the grand, grimdark universe spanning millions of worlds. The Space Marine themes in particular give the faction its unique dignitas.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/IWELG_4CURI&quot; title=&quot;Blood Ravens Approach&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/hJq_dUxRPSU&quot; title=&quot;Force Commander Theme&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;p&gt;Post-golden-age, Relic reached newer heights with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Company_of_Heroes&quot;&gt;&lt;em&gt;Company of Heroes&lt;/em&gt;&lt;/a&gt; franchise, leaving the &lt;em&gt;Dawn of War&lt;/em&gt; and &lt;em&gt;Homeworld&lt;/em&gt; franchises in relative neglect with sporadic new releases. The creators of &lt;em&gt;Total Annihilation&lt;/em&gt; resurfaced to create the &lt;a href=&quot;https://en.wikipedia.org/wiki/Supreme_Commander_(video_game)&quot;&gt;&lt;em&gt;Supreme Commander&lt;/em&gt;&lt;/a&gt; series, which had its moment in the sun. Looking back, these were two studios who proved that RTS - and video games in general - can evoke dark, powerful emotions, through the power of music.&lt;/p&gt;

&lt;h2 id=&quot;blizzard&quot;&gt;Blizzard&lt;/h2&gt;

&lt;p&gt;The early golden age of RTS was dominated by Westwood and &lt;a href=&quot;https://en.wikipedia.org/wiki/Blizzard_Entertainment&quot;&gt;Blizzard’s&lt;/a&gt; rivalry. For a time the two studios released frequently, with each outdoing the other in rapid succession. The two studios also had very different philosophies, which engendered fierce loyalty among fans, and endless debates on which was superior. At least in terms of music, Blizzard started out behind - while &lt;a href=&quot;https://en.wikipedia.org/wiki/Warcraft_II:_Tides_of_Darkness&quot;&gt;&lt;em&gt;Warcraft II&lt;/em&gt;&lt;/a&gt; had a well-crafted, medieval-orchestral soundtrack, it was notably shorter and less varied than Westwood’s similar offerings. The belated release of &lt;a href=&quot;https://en.wikipedia.org/wiki/StarCraft&quot;&gt;&lt;em&gt;StarCraft&lt;/em&gt;&lt;/a&gt; saw a marked improvement. Here the composing team turned out a fantastic soundtrack, with distinct styles per faction. The Terran space cowboy themes were a standout, but the Zerg themes also deserve praise for the way dark synths and screaming guitars give a sinister, insect-like feel. One shortcoming is that the soundtrack is still rather short, at only 3 tracks per faction.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/mD4GbGmvNRc&quot; title=&quot;Terran Theme 1&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/__3eZfU8tjA&quot; title=&quot;Zerg Theme 3&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;p&gt;Blizzard took a big step up with &lt;a href=&quot;https://en.wikipedia.org/wiki/Warcraft_III:_Reign_of_Chaos&quot;&gt;&lt;em&gt;Warcraft III&lt;/em&gt;’s&lt;/a&gt; soundtrack, taking the winning formula from &lt;em&gt;StarCraft&lt;/em&gt; and notching it up to 4 unique faction themes. This time round the faction themes were done by different composers - like Westwood did earlier with &lt;em&gt;Emperor: Battle for Dune&lt;/em&gt; - with each composer putting their personal touch on the outstanding themes. The Undead themes were my favourite, with catchy beats yet creepy atonal riffs, reminiscent to music from &lt;em&gt;Diablo&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/sGLoa9mVjqU&quot; title=&quot;Blight (Undead)&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/i9XosmEvASI&quot; title=&quot;Awakening (Night Elf)&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;p&gt;Blizzard were known for quality yet infrequent releases, which is both a blessing and a curse. The only notable RTS contribution post &lt;em&gt;Warcraft III&lt;/em&gt; was &lt;em&gt;StarCraft II&lt;/em&gt;, which featured an overall greatly enhanced soundtrack, especially the Terran faction’s more faithful rendition of the space cowboy theme. With &lt;em&gt;Wings of Liberty&lt;/em&gt; being free to play, it is well worth checking out for RTS music fans.&lt;/p&gt;

&lt;h2 id=&quot;ensemble-studios&quot;&gt;Ensemble Studios&lt;/h2&gt;

&lt;p&gt;Ensemble’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires&quot;&gt;&lt;em&gt;Age of Empires&lt;/em&gt;&lt;/a&gt; series took a unique approach to RTS games. By leaning heavily into historical accuracy, they carved out a strong niche, starting with the great yet somewhat janky &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires_(video_game)&quot;&gt;&lt;em&gt;Age of Empires&lt;/em&gt;&lt;/a&gt;, and perfected with &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires_II&quot;&gt;&lt;em&gt;Age of Empires II&lt;/em&gt;&lt;/a&gt;, a game so compelling that its remakes continue strong to this day. This was followed by the interesting spinoff &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Mythology&quot;&gt;&lt;em&gt;Age of Mythology&lt;/em&gt;&lt;/a&gt; towards the end of the golden age.&lt;/p&gt;

&lt;p&gt;The games span thousands of years of human history, and this vast scope represented a big challenge for its music. How do you represent music from a time so distant and alien, and across dozens of different cultures around the globe, while still functioning well as game music for modern players? The music team headed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Stephen_Rippy&quot;&gt;Stephen Rippy&lt;/a&gt; seems to have chosen a middle path, combining the sounds and styles of ancient instruments with a modern sensibility to create unique soundtracks.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/XpSPsJj3080&quot; title=&quot;Age of Empires Rise of Rome Music 5&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/Rxbcp2AK-2Y&quot; title=&quot;Age of Empires 2: Age of Kings - Track 1&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without being familiar with historical music, I cannot fairly judge the success of this approach, but the quality of the music definitely advanced by leaps and bounds with every iteration; AoE’s music was passable yet interesting, AoE2 had some bangers mixed in with average ones, but AoM’s soundtrack was exceptional, with some reviewers stating it was one of the best of the year. It had diverse period instruments like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ney&quot;&gt;ney flute&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Tabla&quot;&gt;tabla drums&lt;/a&gt; mixed with modern electric basses, guitars and keyboards, with high production values that feature some live orchestral pieces.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/dmtW0EzA0yE&quot; title=&quot;Never Mind the Slacks and Bashers&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/1VeljJHk4HE&quot; title=&quot;Suture Self&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ensemble would go on to release &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Empires_III&quot;&gt;&lt;em&gt;Age of Empires III&lt;/em&gt;&lt;/a&gt; before fizzling out, but the franchise lived on stubbornly, enjoying remakes and expansions to this day. The Definitive Editions of the classic games are well worth checking out especially if you missed the originals, and look out for the same treatment for &lt;em&gt;Age of Mythology&lt;/em&gt;.&lt;/p&gt;

&lt;h1 id=&quot;tech-race&quot;&gt;Tech Race&lt;/h1&gt;

&lt;p&gt;The golden age of RTS saw rapid innovation as virtually every studio brought new features to the table. This was the case for music too; studios got better and better at creating good music, with new techniques and higher fidelity.&lt;/p&gt;

&lt;h2 id=&quot;audio-tech&quot;&gt;Audio Tech&lt;/h2&gt;

&lt;p&gt;Early RTS games like &lt;em&gt;Dune II&lt;/em&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Warcraft:_Orcs_%26_Humans&quot;&gt;&lt;em&gt;Warcraft&lt;/em&gt;&lt;/a&gt; used MIDI or &lt;a href=&quot;https://en.wikipedia.org/wiki/Yamaha_OPL&quot;&gt;AdLib-style chiptune&lt;/a&gt; music, but by &lt;em&gt;Warcraft II&lt;/em&gt;, released just two years later, Blizzard went with a &lt;a href=&quot;https://en.wikipedia.org/wiki/SoundFont&quot;&gt;&lt;em&gt;SoundFont&lt;/em&gt;-rendered&lt;/a&gt; orchestral soundtrack, with much more realistic instrument sounds. Westwood leap-frogged Blizzard in this regard, releasing &lt;em&gt;Command and Conquer&lt;/em&gt; earlier in the same year, but with high fidelity CD music with a mix of recorded and electronic instruments and samples, albeit in a totally different style. &lt;em&gt;Total Annihilation&lt;/em&gt; released the following year blew everything out of the water with a real orchestral score, and this represented a tech pinnacle: soon almost every studio followed suit, using real instruments and high quality digital alternatives and high fidelity audio.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/UVhsFgORbJc&quot; title=&quot;Humans Fall&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;Dune II (1992)&lt;/p&gt;

  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/ZHtua8wrFqg&quot; title=&quot;Orc 3&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;Warcraft (1994)&lt;/p&gt;

  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/AOIS1FIL-F4&quot; title=&quot;Orc 2&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;Warcraft II (1996)&lt;/p&gt;

  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/_k8LSCRrABg&quot; title=&quot;Just Do It Up&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;Command and Conquer (1996)&lt;/p&gt;

  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/ZDiZV8lenBA&quot; title=&quot;Brutal Battle&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

  &lt;p&gt;Total Annihilation (1997)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you consider that OPL was first released in the mid-80’s and gaming consoles did not get universal CD-quality audio until the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sixth_generation_of_video_game_consoles&quot;&gt;6th generation&lt;/a&gt; around 2000, RTS games managed to do in 3 years (&lt;em&gt;Warcraft&lt;/em&gt; to &lt;em&gt;Total Annihilation&lt;/em&gt;) what it took 15 years for the rest of the industry to do, for audio tech, which is simply astounding.&lt;/p&gt;

&lt;h2 id=&quot;production-values&quot;&gt;Production Values&lt;/h2&gt;

&lt;p&gt;The RTS golden age coincided with tremendous growth in the gaming industry. At the dawn of this time, studios were small and plucky, but by the early 00’s and the end of the golden age, staff and budgets ballooned to rival that of large Hollywood blockbuster productions. Music production value tracked this, going from a single in-house composer to multi-person teams producing high quality, multi-theme soundtracks, sometimes enlisting veteran composers that also worked in TV and film.&lt;/p&gt;

&lt;p&gt;The earliest RTS games like &lt;em&gt;Dune II&lt;/em&gt;, &lt;em&gt;Warcraft&lt;/em&gt; and &lt;em&gt;Command and Conquer&lt;/em&gt; featured a single in-house composer, producing music in a way that’s more or less the same as any other game project - a single, multi-track soundtrack, reflecting the theme of the whole game. &lt;em&gt;Warcraft II&lt;/em&gt; pioneered, and &lt;em&gt;StarCraft&lt;/em&gt; exemplified a new approach: &lt;strong&gt;per-faction soundtrack&lt;/strong&gt;, that reflected the unique factions and their character. RTS games have always had different factions, but before &lt;em&gt;StarCraft&lt;/em&gt;, their differences tended to be minor, with a few unique units, abilities, or stat differences. &lt;em&gt;StarCraft&lt;/em&gt; showed how factions could be mechanically distinct, changing the entire play-style, and this was complemented perfectly by the soundtrack. Of course multiple soundtracks also multiplies the music budget, and &lt;em&gt;StarCraft&lt;/em&gt; had two more composers assisting, yet had to make do with a smaller soundtrack per-faction. Other games with unique faction soundtracks followed, like Westwood’s &lt;em&gt;Emperor: Battle for Dune&lt;/em&gt; and &lt;em&gt;Generals&lt;/em&gt;, as well as Blizzard’s &lt;em&gt;Warcraft III&lt;/em&gt;, to great effect. Each required multiple composers to manage the load. You might think that Ensemble’s &lt;em&gt;Age of Empires&lt;/em&gt; series could also benefit with per-faction soundtracks, given the unique flavours of the civilisations, but the sheer number of factions made this unfeasible, and those games remained with the single-soundtrack approach.&lt;/p&gt;

&lt;p&gt;Ensemble experimented with other music techniques in &lt;em&gt;Age of Mythology&lt;/em&gt;. The excellent soundtrack also includes mellow versions of most of its in-game tracks, which are used in certain cutscenes and custom scenarios. This technique works quite well, to add variety to the game’s pacing, given the narrative-heavy nature of its campaign. The game also has another dynamic music technique: when a town centre is under attack, the music switches to a dramatic one, and fades away to the usual, chill soundtrack once the attack is over. This technique is somewhat less successful, given the jarring transition and how difficult it is to properly follow the tension of an RTS game - sometimes the most crucial moments are small skirmishes during key moments rather than large battles. Nevertheless it is interesting to see attempts at dynamic music in RTS.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/CtZzvHBKzw0&quot; title=&quot;Chocolate Outline&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;iframe width=&quot;200&quot; height=&quot;100&quot; src=&quot;https://www.youtube.com/embed/xfOZ8OishLA&quot; title=&quot;Chocolate Outline Mellow Mix&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;

&lt;h1 id=&quot;further-listening&quot;&gt;Further Listening&lt;/h1&gt;

&lt;p&gt;Music, like many other aspects of RTS games, have matured after its golden age, as the genre stagnated. But by examining its history, its key titles and soundtracks, we can learn a lot about how to make and enjoy great music for games. Many of the best soundtracks are highly listenable and can easily go into your playlist. For those who want to (re)visit some great soundtracks, here are my top recommendations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Command and Conquer: this series is all about Frank Klepacki’s signature “rocktronic” style, and if you haven’t checked it out yet, definitely find a copy of the &lt;em&gt;Command &amp;amp; Conquer Remastered Collection&lt;/em&gt;. Many tracks in this and the &lt;em&gt;Red Alert&lt;/em&gt; series were good from even the earliest games, but if for some reason you want more, check out some of Klepacki’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Rocktronic&quot;&gt;non-game work&lt;/a&gt; too.&lt;/li&gt;
  &lt;li&gt;StarCraft: the Terran faction’s space cowboy soundtrack is so iconic, and &lt;a href=&quot;https://www.mobygames.com/person/1034/glenn-stafford/&quot;&gt;Glenn Stafford&lt;/a&gt;’s prog-rock background keeps it fresh with the tracks constantly evolving. &lt;em&gt;StarCraft II&lt;/em&gt; is generally the better version, although &lt;em&gt;StarCraft&lt;/em&gt; is still very enjoyable. Same goes with the factions, although Terran music is the most well regarded, the Zerg faction is pretty cool too, but in a dark-synth kind of way.&lt;/li&gt;
  &lt;li&gt;Dune: for dark sci-fi this franchise’s unique setting offers the perfect thematic backdrop for some unique tunes. &lt;em&gt;Empire: Battle for Dune&lt;/em&gt;’s Ordos and Harkonnen soundtracks are top-notch, but &lt;em&gt;Dune 2000&lt;/em&gt; remains my favourite rendition of the kind of epic desert sci-fi war that exemplifies this setting. If only there was a new Dune RTS…&lt;/li&gt;
  &lt;li&gt;And last but not least, here are some of my single-title favourites: &lt;em&gt;Age of Mythology&lt;/em&gt; (looking forward to the remake), &lt;em&gt;KKND2&lt;/em&gt;, &lt;em&gt;Warhammer 40k: Dawn of War&lt;/em&gt;, &lt;em&gt;Total Annihilation&lt;/em&gt;, &lt;em&gt;Command &amp;amp; Conquer: Generals&lt;/em&gt; (sorely needs a sequel or remake)…&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sun, 17 Sep 2023 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2023/09/rts-music-review</link>
				<guid isPermaLink="true">https://cxong.github.io/2023/09/rts-music-review</guid>
			</item>
		
			<item>
				<title>The First 80%</title>
				<description>&lt;blockquote&gt;
  &lt;p&gt;[Most] games are awful for about 80 percent of the process—there’s no fun in the game until the very end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/David_Doak&quot;&gt;David “Dr. Doak” Doak&lt;/a&gt;, excerpt From &lt;a href=&quot;https://bossfightbooks.com/products/goldeneye-007-by-alyse-knorr&quot;&gt;&lt;em&gt;GoldenEye 007&lt;/em&gt; by &lt;em&gt;Alyse Knorr&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I recently read &lt;em&gt;Goldeneye 007&lt;/em&gt;, a terrific book covering the making of that classic game, and came across the above quote. I could not help but strongly agree with this observation, as I’ve seen it first hand countless times. Whether it’s making a game, or writing music, drawing art, or any creative activity, it always seems like the first 80% of the project is a slog. It feels like working on something that seems like utter crap and somehow refuses to come together, until the very end. It happens regardless of the type of project, the length, or even how challenging it is.&lt;/p&gt;

&lt;p&gt;So it was very heartening to learn how ubiquitous this problem is. Apart from knowing and accepting that most creative work will feel like crap, what other things can we take away?&lt;/p&gt;

&lt;h1 id=&quot;things-will-suck-until-they-dont&quot;&gt;Things will suck, until they don’t&lt;/h1&gt;

&lt;p&gt;Even my most successful projects did not break this first-80%-is-crap rule. When making &lt;a href=&quot;https://ldjam.com/events/ludum-dare/46/dunkman&quot;&gt;&lt;em&gt;Dunkman&lt;/em&gt; for &lt;em&gt;Ludum Dare&lt;/em&gt;&lt;/a&gt;, about half way through the jam, I posted this &lt;a href=&quot;https://ldjam.com/events/ludum-dare/46/dunkman/i-wanted-to-make-a-wholesome-basketball-game&quot;&gt;progress update&lt;/a&gt;:&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;https://static.jam.host/raw/cca/z/2b1e2.gif&quot; alt=&quot;Creepy hands for Dunkman&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This project had a very successful process - from the start I had a clear vision of what the game would be about: a silly send-up/homage to &lt;a href=&quot;https://en.wikipedia.org/wiki/Sh%C5%8Dnen_manga&quot;&gt;shonen&lt;/a&gt; sports anime. The game mechanics were simple so I could focus on polish: story, art, effects. But truth be told, until all the pieces were together, I was not sure if it would work, if the stylistic elements would overcome and elevate the simplistic gameplay. But they did come together - the &lt;a href=&quot;https://soundcloud.com/congus-bongus/keep-your-dream-alive&quot;&gt;upbeat music&lt;/a&gt;, &lt;a href=&quot;https://cxong.github.io/tic-80-examples/speed-lines&quot;&gt;anime speed lines&lt;/a&gt;, &lt;a href=&quot;https://cxong.github.io/tic-80-examples/ik-elbows&quot;&gt;silly elbow IK animation&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ch%C5%ABniby%C5%8D&quot;&gt;chunibyo&lt;/a&gt; dialogue, all made for a ridiculously compelling narrative, like you were playing an anime protagonist.&lt;/p&gt;

&lt;p&gt;So if you are a creator in that first 80% of the process, and everything seems to suck and it feels hopeless, take heart! Chances are you haven’t reached the last mile where things come together, like magic.&lt;/p&gt;

&lt;h1 id=&quot;finish-strong&quot;&gt;Finish Strong&lt;/h1&gt;

&lt;p&gt;When a project is near completion, things are coming together rapidly. The bang-for-buck of putting in work at the end is very high, given that the groundwork has already been put in place. This is where many make the mistake of racing to the finish line: they quickly put the missing pieces together, fix as many issues as they can, and ship the project as soon as possible. But so much value is being added during this last 20%, it often pays big to take your time adding polish and final touches, and you may reap unexpected rewards.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Goldeneye 007&lt;/em&gt; was a cultural phenomenon because of its multiplayer, giving it incredible replayability and contributed massively to its success. And yet, “…GoldenEye’s multiplayer mode almost never got made.” On account of the project being a year behind schedule, Nintendo forbid working on a multiplayer mode, but the dev team, who were given incredible autonomy, did so anyway, furiously hacking it together in just 6 weeks. The rest is history - &lt;em&gt;Goldeneye 007&lt;/em&gt;’s multiplayer was so good it overshadowed the already great single player campaign, and the game became one of the top-selling N64 games, revolutionising console FPS games.&lt;/p&gt;

&lt;p&gt;On the other hand, I worked on a jam game, &lt;a href=&quot;https://gamejolt.com/games/lasso-lassie/139981&quot;&gt;&lt;em&gt;Lasso Lassie&lt;/em&gt;&lt;/a&gt;, which turned out much less well than I had hoped. The process of making the game itself went extremely well. I spent a week researching music and made a pretty cool &lt;a href=&quot;https://soundcloud.com/congus-bongus/lasso-lady&quot;&gt;western-themed chiptune track&lt;/a&gt;. I had a clear vision for the game from the get-go, choosing to remake the criminally underrated early &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_Combat&quot;&gt;NES game &lt;em&gt;Field Combat&lt;/em&gt;&lt;/a&gt;. I made a solid plan and budget for all the dev tasks, such as implementing the gameplay, enemy logic, spawning waves, and finished on time having implemented everything I planned for. And yet the game just wasn’t that fun.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://m.gjcdn.net/game-screenshot/700/458902-ll-fqaujneu-v4.webp&quot; alt=&quot;Lasso Lassie&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In retrospect I believe I neglected to spend time fine tuning the gameplay. I had falsely assumed that since I was recreating an already fun game, all I had to do was tick all the checkboxes, put the game together, and it would just work. But things like game feel or “fun” can often be fickle and elusive. Sometimes the difference between a fun game and a boring one is a 20% difference in player speed, or slightly increased enemy density, or a clever level layout, who knows. You really have to sit down and play around with the game, tinker with it until it is just right.&lt;/p&gt;

&lt;p&gt;So here’s the take-away: if you have a deadline, or are planning out the phases of your project, don’t keep adding features up to the end. Plan for a &lt;a href=&quot;https://en.wikipedia.org/wiki/Freeze_(software_engineering)&quot;&gt;feature freeze&lt;/a&gt;, and leave ample time at the end for playtesting and polish. It will often pay off in spades. Personally, for jams I leave as much as a third of the time available for polish at the end, and it has worked out extremely well for me.&lt;/p&gt;

&lt;h1 id=&quot;finish-your-projects&quot;&gt;Finish Your Projects&lt;/h1&gt;

&lt;p&gt;This is very old and evergreen advice for amateur creators: stop starting new projects and &lt;a href=&quot;https://makegames.tumblr.com/post/1136623767/finishing-a-game&quot;&gt;finish&lt;/a&gt; more of them. The temptation to abandon your current project and start over is strong, especially when you are in the first 80%. All the sweet ideas you have for new projects will feel infinitely sexier than your current project, which sucks more than ever, even though when you started it it probably seemed like the coolest idea out of them all.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgflip.com/3pc68p.jpg&quot; width=&quot;50%&quot; height=&quot;50%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Well now that you know, that’s more reason to stop the foolish cycle of abandoning old projects, starting over, only to abandon them mid-way again. If you start over, the new project will become the next awful project and you are back where you started. But if you persevere with the current project, when you finally reach that last 20% things will be awesome. Not to mention all the benefits of finishing - having good projects to show off, proving that you can deliver, gaining crucial experience in those finishing steps.&lt;/p&gt;

&lt;p&gt;This is why I strongly advocate doing game jams. The tight schedule encourages people to finish games, limitations like secret themes encourage creativity, and feedback from fellow creators helps us learn what it takes to make a successful game project. Finishing games in such a short time puts you through that first 80% quickly, making it easy to power through and reap the fruits of that last 20%.&lt;/p&gt;

&lt;h1 id=&quot;non-creators-will-suck-at-providing-early-feedback-and-thats-ok&quot;&gt;Non-creators will suck at providing early feedback, and that’s OK&lt;/h1&gt;

&lt;p&gt;When working on our craft - often a lonely endeavour - it’s tempting to seek out approval for our work from friends and family, to share progress or something cool we just made. But the response is rarely positive or helpful, since this rough work is from that first 80% when everything is awful, but this has little to do with skill or artistry. If even creators have trouble seeing past the expected roughness of early work, how can we expect non-creators to do better?&lt;/p&gt;

&lt;p&gt;In most cases we should accept that feedback from lay people is not that useful. But what if we really do want to share something, if we’re proud of something we’ve done, how do we help them see it in the same light? My advice is to &lt;strong&gt;show finished work&lt;/strong&gt;. Show stuff that has already made it past the first 80%, and has been polished and put together. This doesn’t mean you have to put in lots of work before being able to show it off, it could be something small, but packaged well. This could be:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An &lt;a href=&quot;https://monikazagrobelna.com/2022/01/06/what-are-art-studies-and-how-to-do-them/&quot;&gt;art study&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Music loops&lt;/li&gt;
  &lt;li&gt;A small, completed gameplay prototype or demo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact, being good at sharing work, even to non-creators, is a great skill to have and hone. Getting good at creating and sharing little bits of finished work comes in really handy if you want to market your work, build a following, or put together a portfolio.&lt;/p&gt;

&lt;h1 id=&quot;getting-better-at-judging-early-work&quot;&gt;Getting better at judging early work&lt;/h1&gt;

&lt;p&gt;What if you’re working on a big project, going on for months (or years 😰), how do you judge how the project is going? The simple answer is to practice and gain experience. A master will be able to look at a piece of work, at any stage of progress, see past the whole and into the components that make it up, and judge the quality of craftsmanship. Drawing from their years of experience, they can tell whether the project shows promise, or if it is fundamentally flawed. But this answer isn’t useful for the rest of us. Is there anything we can do besides, without the benefit of being an expert? Here are my tips:&lt;/p&gt;

&lt;h2 id=&quot;make-vertical-slices-then-iterate&quot;&gt;Make vertical slices, then iterate&lt;/h2&gt;

&lt;p&gt;A &lt;a href=&quot;https://askagamedev.tumblr.com/post/77406994278/game-development-glossary-the-vertical-slice&quot;&gt;vertical slice&lt;/a&gt; is a usable, completed yet very small part of the project. If you’re making an action game, it could be having the player character run around and perform one interaction, with one win and one lose condition. If you’re making music, it could be one looping bar (say the chorus) with full instrumentation. If you’re making a video or animation, it could be one fully developed scene, with sound and special effects.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/311de2310c62d31e57b855a4a7a3d6dd/tumblr_inline_p83znrmX5w1r2xhmf_500.png&quot; alt=&quot;Vertical slice&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The point of doing this is to get all the components together as quickly as possible, to see how they work together. By front loading this, you get to that last 20% part sooner, and reap the benefits. Once this vertical slice is done, it’s easier to iteratively expand upon it, which can be done very flexibly, without compromising the feel or the vision of the project, since it’s already put together.&lt;/p&gt;

&lt;p&gt;One of the worst game jams I’ve done failed because we didn’t do this. I was on a new and inexperienced team, who did not know how to work well together. We scoped out the project and assigned separate tasks to everybody - art, music, level design, gameplay - hoping that we can just put it all together at the end. Unfortunately this is where things failed miserably. Not only were there technical issues integrating everyone’s work, it turns out everyone had a different idea of what the game would be, so that the work we did separately did not fit together, and lots of adjustments and cutting had to be done. For example, our 3D artist made really awesome character models and animations, but because the gameplay wasn’t ready, almost all that work had to be left out of the game.&lt;/p&gt;

&lt;p&gt;These days one of my mantras for game jams is to get a runnable prototype up as quick as possible - preferably in the first day. Get everyone working off this prototype, so they can independently add to it. Audio guys can add partial music and SFX in to get the mixing right. Gameplay designers can get the game feel right at the start, and add things like levels and enemies that fit with the game feel. Artists can gradually replace placeholder art and see how everything looks in game and not just in their concept art. This way even a large team can work towards a cohesive vision.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;img src=&quot;https://eu-images.contentstack.com/v3/assets/blt95b381df7c12c15d/bltdeb9347bce84a8a8/6125d4fd48bc413082bb90fd/2016-06-30_07-21-55.png?width=828&amp;amp;quality=80&amp;amp;format=webply&amp;amp;disable=upscale&quot; alt=&quot;Example schedule for 7-day jam&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;This example schedule for a 7-day jam from &lt;a href=&quot;https://www.gamedeveloper.com/design/7-tips-to-7-day-game-jams&quot;&gt;&lt;em&gt;7 Tips to 7-Day Game Jams&lt;/em&gt;&lt;/a&gt; gives similar advice: core game mechanics done at 1/3rd, feature complete at 2/3rd, and the last 1/3rd for testing and polish.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;finish-more-projects&quot;&gt;Finish More Projects&lt;/h2&gt;

&lt;p&gt;When you’re in the first 80%, good and bad projects will both seem awful. How can you get better at telling? By finishing more projects! Only by finishing will you get a complete retrospective on what went well and what didn’t, and you’ll get better at what makes or breaks a project. But if you abandon projects half-way, then there’s no way to be sure.&lt;/p&gt;

&lt;p&gt;One example: things often go wrong during a project, but they are not always fatal. Sometimes they can be worked around at the end. How can you tell? By sticking with the project until the end, and trying to overcome earlier mistakes. Another example is that projects can often fail because of a feature kept in, rather than a feature left out. A troubled feature can suck up development resources and jeopardise the project itself, but you won’t know this unless you let the project take its course.&lt;/p&gt;

&lt;p&gt;When making &lt;a href=&quot;https://congusbongus.itch.io/peppertown&quot;&gt;&lt;strong&gt;PepperTown&lt;/strong&gt;&lt;/a&gt;, an RPG-style &lt;a href=&quot;https://en.wikipedia.org/wiki/Incremental_game&quot;&gt;idle game&lt;/a&gt; where characters auto-battle enemies and you buy upgrades for them, I had no experience making idle games, so I wasn’t sure what features would be key vs nice-to-have. I thought that, being RPG themed, I would need at least some sort of interesting combat mechanics, such as magic spells, or at least different types of enemies, but it turns out that was unnecessary. The final game just has characters battling one type of enemy - a slime monster - and with basic attacks, bashing each other repeatedly. But what makes idle games such as this is the visceral sensations of hearing the hit sounds and the coins trickling in, and the satisfaction of waiting and buying upgrades and sensing them affect the game. Thus I learned more about a new genre of game and what makes it work.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cxong.github.io/images/peppertown.gif&quot; alt=&quot;PepperTown&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
				<link>https://cxong.github.io/2023/04/the-first-80</link>
				<guid isPermaLink="true">https://cxong.github.io/2023/04/the-first-80</guid>
			</item>
		
	</channel>
</rss>
