<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Grantovich.net &#187; gaming</title>
	<atom:link href="http://grantovich.net/posts/tag/gaming/feed/" rel="self" type="application/rss+xml" />
	<link>http://grantovich.net</link>
	<description>Updated with astounding infrequency</description>
	<lastBuildDate>Tue, 29 Jun 2010 01:38:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>&#8220;Object&#8221;-Oriented Programming in the Land of ZZT</title>
		<link>http://grantovich.net/posts/2009/08/object-oriented-programming-in-the-land-of-zzt/</link>
		<comments>http://grantovich.net/posts/2009/08/object-oriented-programming-in-the-land-of-zzt/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 23:08:26 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[nostalgia]]></category>
		<category><![CDATA[zzt]]></category>
		<category><![CDATA[zzt-oop]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=378</guid>
		<description><![CDATA[I sometimes say that QuickBASIC was the first programming language I ever learned. This is a half-truth; a shortcut that allows me to avoid a lengthy explanation of what ZZT-OOP is, and how it was really the first programming language I ever learned. But since this is my blog and not a casual conversation, we have a bit [...]]]></description>
			<content:encoded><![CDATA[<p>I sometimes say that QuickBASIC was the first programming language I ever learned. This is a half-truth; a shortcut that allows me to avoid a lengthy explanation of what <strong>ZZT-OOP</strong> is, and how <em>it</em> was really the first programming language I ever learned. But since this is my blog and not a casual conversation, we have a bit more room for exposition. Read on, if you&#8217;re curious about languages and game development: ZZT is quite an interesting piece of history.</p>
<p>The year was 1996ish; the family computer, a Windows 3.1 pizza box with a 486 processor and <a href="http://en.wikipedia.org/wiki/CompuServe">CompuServe</a> dial-up internet. In those days I would frequently monopolize it, sinking hours into whatever <a href="http://en.wikipedia.org/wiki/Apogee_Software">Apogee</a> and <a href="http://en.wikipedia.org/wiki/Epic_Games">Epic</a> shareware games I could get my hands on. But since I couldn&#8217;t tie up the phone line with game downloads for too long, my dad would occasionally find something for me with his fast connection at the office, and bring it home on a good old 3.5&#8243; floppy.</p>
<p>On one such occasion, I found myself the recipient of a well-worn disk with the cryptic string &#8220;ZZT 3.2&#8243; scrawled on the label. Into the drive it went, and after a brief configuration prompt&#8230;</p>
<p><img class="alignnone size-full wp-image-390"  src="http://grantovich.net/wp-uploads/p-zzt-town.png" alt="p-zzt-town" width="640" height="400" /></p>
<p>As you can probably tell from the above screenshot, <a href="http://en.wikipedia.org/wiki/ZZT">ZZT</a> is an <a href="http://en.wikipedia.org/wiki/ANSI_art">ANSI-graphics</a> top-down action-adventure-puzzle game. It was created in 1991 by <a href="http://en.wikipedia.org/wiki/Tim_Sweeney_(game_developer)">Tim Sweeney</a>, founder of Epic Games (then called Epic MegaGames), who went on to develop several notable shareware classics of the DOS era and became a key developer of the Unreal engine.</p>
<p>The registered version of ZZT came with four &#8220;worlds&#8221;, each a self-contained game that could be completed in a few hours. While these worlds remain iconic even today, and did much to establish the basic formula for &#8220;classic&#8221; ZZT gameplay, they are not the reason ZZT is so interesting.</p>
<p>Notice the <strong>Board Editor</strong> option in the screen above? If you haven&#8217;t guessed already, ZZT is in fact a complete game creation system. Using a wide variety of items, obstacles, and enemies, you can construct your own game worlds (stored in a &#8220;.zzt&#8221; file) and share them with others. You&#8217;re not limited to the built-in entities, either: ZZT has special generic entities called Objects that can take on any appearance, whose behavior is determined by a program written in <strong><a href="http://en.wikipedia.org/wiki/ZZT-oop">ZZT-OOP</a></strong>, the &#8220;Object&#8221;-Oriented Programming language.</p>
<p><img class="alignnone size-full wp-image-389"  src="http://grantovich.net/wp-uploads/p-zzt-editor.png" alt="p-zzt-editor" width="640" height="400" /></p>
<p>ZZT-OOP is a weird, restrictive little language. Among its oddities:</p>
<ul>
<li>You can&#8217;t create new objects at runtime; all the objects you want to use must already exist before the game starts (with one extremely limited exception)</li>
<li>There are no methods, functions, or anything else that would imply a call stack</li>
<li>The only flow control mechanism is &#8220;messages&#8221;, which are the equivalent of <a href="http://en.wikipedia.org/wiki/Goto">GOTO</a> statements&#8230; except that code in one object can send a message to another object, causing <em>that</em> object to unconditionally jump to a different point in its program</li>
<li>There are no statement blocks; the &#8220;if&#8221; command (which is the only method of conditional flow control) jumps to a specified program location if the condition is true, and falls through to the next statement if it&#8217;s false</li>
<li>The only variable type is boolean, and you can&#8217;t have more than ten of them set to true at the same time</li>
<li>All objects on a &#8220;board&#8221; (game screen) execute their code simultaneously, but objects on other boards cannot be accessed, since a board&#8217;s state is frozen when the player leaves it</li>
</ul>
<p>With this being the first programming language I learned, and QuickBASIC being the second, it&#8217;s a miracle I ever managed to wrap my brain around modern languages at all. But the truth is, ZZT showed me how much <em>fun</em> programming could be, by setting it in the context of a game. Type in some cryptic codes, press a key, and there&#8217;s a little smiley face running around trying to shoot you. Even the tiniest amount of effort yields instant results. This appealed to my ten-year-old attention span, and though I never finished any worlds of my own, ZZT permanently lodged a favorable impression of programming in the back of my brain.</p>
<p>Needless to say, I wasn&#8217;t the only ZZT fan out there. Since the game&#8217;s 1991 release, aspiring game creators have cooked up thousands of ZZT worlds, each one pushing the limits of the engine further than before. Glitches were discovered that, if properly exploited, allowed one to do previously impossible things, like making an object move diagonally or teleporting the player to an arbitrary location. The world file format was reverse-engineered and new editors were created, far surpassing the game&#8217;s built-in editor. Ingenious coders transformed ZZT from a top-down action-adventure game into a sidescroller, an RPG, a stealth game, and many other genres.</p>
<p><img class="alignnone size-full wp-image-429"  src="http://grantovich.net/wp-uploads/p-zzt-mercenary.png" alt="p-zzt-mercenary" width="640" height="400" /></p>
<p>As complex as some of the community&#8217;s later works were, I&#8217;d say the reason ZZT was so successful and long-lived was its simplicity. The simplicity of the text-mode graphics and <a href="http://en.wikipedia.org/wiki/PC_speaker">PC speaker</a> sound effects precluded the possibility of a lengthy media creation process. The extreme simplicity of the scripting language, and the existence of a pre-built engine with a lot of basic functionality included, meant that it was easy to ignore the gritty details of making a game and focus on the actual gameplay. All of these things might seem like severe limitations (they are), but they also dramatically lower the barrier to entry for new world builders.</p>
<p>Relatively few games today are based on user-generated content to the extent that ZZT was, and even fewer have built-in scripting languages. In a 2007 <a href="http://www.digitalmzx.net/forums/index.php?showtopic=12521">interview</a>, Tim Sweeney himself had these words to offer:</p>
<blockquote cite="http://www.digitalmzx.net/forums/index.php?showtopic=12521"><p><strong>Tim Sweeney said:</strong></p>
<p>I&#8217;ve always wanted to build a massive-multiplayer version of ZZT. In other words, a vast interlinked game world built and extended by users using simple ZZT-like tools. Like ZZT, it would be open-ended and community-driven. Players would be able to build their own levels and write scripts for objects, as well as play the game as a character, build up attributes and collect items.</p>
<p>Such a project would tackle all the key technical problems of MMO development without the complexity of a 3D environment. The data required for levels and motion data is also so simple that servers could be run by the community without significant bandwidth expense.</p>
<p>Alas, such a game wouldn&#8217;t be much of a Gears of War killer. <img src='http://grantovich.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  So don&#8217;t expect it to actually happen. But it would be interesting!</p></blockquote>
<p>Indeed it would, Tim. Indeed it would.</p>
<p> </p>
<p><strong>Some links for you:</strong><br />
<a href="http://zzt.belsambar.net/">Z2</a> is the largest archive of worlds and other ZZT-related downloads on the internet, though much of its textual content is outdated. Be sure to check the <a href="http://zzt.belsambar.net/?p=fg">Featured Games</a> list, which includes a lot of famous and influential games in ZZT&#8217;s history. <a href="http://dosbox.com/">DOSBox</a> comes in handy for running ZZT on modern machines (&gt;=10,000 cycles recommended). You might also want to check out ZZT&#8217;s vastly-more-powerful-but-also-more-complex spiritual successor, <a href="http://en.wikipedia.org/wiki/MegaZeux">MegaZeux</a>, which is still developed today.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2009/08/object-oriented-programming-in-the-land-of-zzt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eversion</title>
		<link>http://grantovich.net/posts/2009/06/eversion/</link>
		<comments>http://grantovich.net/posts/2009/06/eversion/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 00:53:34 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[retro]]></category>
		<category><![CDATA[sheer terror]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=295</guid>
		<description><![CDATA[I have just discovered what is quite possibly the most utterly terrifying videogame in existence. It is called Eversion, and it definitely should not be played alone in the middle of the night in a completely silent house (hint: I did this and immediately regretted it). Here is a screenshot: What&#8217;s that? You don&#8217;t believe me? [...]]]></description>
			<content:encoded><![CDATA[<p>I have just discovered what is quite possibly the most utterly terrifying videogame in existence. It is called <a href="http://zarat.us/tra/offline-games/eversion.html">Eversion</a>, and it definitely should <em>not</em> be played alone in the middle of the night in a completely silent house (hint: I did this and immediately regretted it). Here is a screenshot:</p>
<p><img class="alignnone size-full wp-image-296"  src="http://grantovich.net/wp-uploads/p-eversion-screenshot.png" alt="p-eversion-screenshot" width="639" height="480" /></p>
<p>What&#8217;s that? You don&#8217;t believe me? Well, it&#8217;s your funeral. Just make sure <em>all</em> the lights in your house are turned on before playing. Hell, go for all the lights on your <em>street</em>. It can&#8217;t hurt.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2009/06/eversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forgot to Make It Not Suck</title>
		<link>http://grantovich.net/posts/2009/05/forgot-to-make-it-not-suck/</link>
		<comments>http://grantovich.net/posts/2009/05/forgot-to-make-it-not-suck/#comments</comments>
		<pubDate>Tue, 26 May 2009 23:56:14 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[achievements]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[team fortress 2]]></category>
		<category><![CDATA[valve]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=252</guid>
		<description><![CDATA[Valve&#8217;s Team Fortress 2, a game which myself and a host of other CSHers are quite fond of playing, recently received a large update that not only included new unlockable equipment for all classes, but changed the method by which said equipment is awarded to players. This has resulted in a predictable amount of wailing [...]]]></description>
			<content:encoded><![CDATA[<p>Valve&#8217;s <a href="http://en.wikipedia.org/wiki/Team_Fortress_2">Team Fortress 2</a>, a game which myself and a host of other CSHers are quite fond of playing, recently received a <a href="http://www.teamfortress.com/sniper_vs_spy/">large update</a> that not only included new unlockable equipment for all classes, but changed the method by which said equipment is awarded to players. This has resulted in a predictable amount of wailing and gnashing of teeth from the game&#8217;s notoriously unpleasable fanbase, but in this case some of their complaints may actually be warranted.</p>
<p>The main reason for changing the unlockable system is that the old one, to be honest, really sucked. Valve, being Valve, struck out into uncharted gameplay territory and required players to grab a certain number of achievements in order to unlock each new piece of equipment. This turned out to suck for two reasons: On the one hand, impatient players who just wanted their new weapons NOW could easily knock off all the achievements in an afternoon using servers and maps designed expressly for the purpose. And on the other hand, those who wanted to earn their unlocks legitimately had to &#8220;grind&#8221; through numerous arbitrary tasks, many of which could only be completed by expressly focusing on the task itself rather than just playing the game and having fun.</p>
<p>For this new update released just last week, Valve promised to change everything. Unlockables would no longer be tied to achievements; and what&#8217;s more, the new system could not possibly be &#8220;cheated&#8221;, no matter how many custom maps or server hacks anyone created. And in those respects, they succeeded. Whether or not the new system actually has fewer problems than the old one is another matter entirely.</p>
<p>The new system is time-based: At certain time intervals while playing the game, any given player has a random chance of being handed a random piece of equipment. No other factors enter into it; number of items gotten increases linearly with amount of time played. Not everyone is entirely sure this is a good thing, especially those impatient players who are now unable to quickly grind out their unlocks on achievement servers.</p>
<p>But what&#8217;s really getting on everyone&#8217;s nerves is the fact that the new system <em>feels cheaper</em> than the old one, primarily because you can randomly be awarded a duplicate of an item you already have. Really hoping you get the Spy&#8217;s fancy new invisibility watch? Too bad; even though you&#8217;ve spent the past week playing TF2 and little else, all you&#8217;ve got to show for it are six pairs of boxing gloves, five flare guns, three Ubersaws, and a partridge in a pear tree. The new system may reward you for large time commitments, but there&#8217;s no way to actually work toward something you want.</p>
<p>The details of the new system, and  the rationale behind it, are explained by Valve <a href="http://www.teamfortress.com/post.php?id=2535">in this blog post</a>. Ironically, they say one of the features they plan on adding in a future update is the ability to trade items to other players. This completely ignores the fact that players are being awarded duplicate items <em>right now</em>, and don&#8217;t have any way to trade them; you&#8217;re at the mercy of a random number generator, and this makes the system feel incredibly cheap. Why Valve of all companies would stoop to this level of half-assery, I can only guess. They could have easily put off the whole thing until the next update (which would be a very Valve thing to do), and then they would have time to do all the features the system <em>should</em> have had right off the bat.</p>
<p>One can only hope that updates to the new item system will come earlier than the usual three-month waiting period between class packs. Otherwise, I can easily see new players being turned off by the arbitrary mechanics of item awarding. I&#8217;m personally not too perturbed over it, but only because I don&#8217;t take TF2 as seriously as most players do (the Steam forums will probably still be boiling with RAGE over this issue months from now).</p>
<p><strong>Update:</strong> A few days after I posted this entry, Valve issued an update that added milestone achievements for the Sniper and Spy. This seems like an extremely slapdash solution, because it brings back all the disadvantages of the old system, and resolves few of the issues with the new system. Unfortunately, since this is probably considered a &#8220;good enough&#8221; fix, it&#8217;s likely that we won&#8217;t see any major changes to the system until the next class update, three months from now.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2009/05/forgot-to-make-it-not-suck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
