<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.3" -->
<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/"
	>

<channel>
	<title>Doom-Ed</title>
	<link>http://doom-ed.com/blog</link>
	<description>Are you doom-ed?</description>
	<pubDate>Wed, 20 Oct 2004 09:26:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3</generator>
	<language>en</language>
			<item>
		<title>Half Life 2 goes Gold</title>
		<link>http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold</link>
		<comments>http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold#comments</comments>
		<pubDate>Wed, 20 Oct 2004 09:10:11 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold</guid>
		<description><![CDATA[When it&#8217;s done &#8230;
Half Life 2 is considered as one of the most important games in history. When the delay  last year was announced, analysts lowered their PC games growth forecasts.
According to Vivendi it will be on shelves November 16, just in time for the holiday season.
According to the PC Gamer November issue, Half [...]]]></description>
			<content:encoded><![CDATA[<p>When it&#8217;s done &#8230;</p>
<p>Half Life 2 is considered as one of the most important games in history. When the delay  last year was announced, analysts lowered their PC games growth forecasts.</p>
<p>According to Vivendi it will be on shelves November 16, just in time for the holiday season.</p>
<p>According to the PC Gamer November issue, Half Life 2 is a &#8220;must buy&#8221;. Maybe this is because the environment is leaned strongly towards Europe. The graphics engine may not have those spectacular light effects of a Doom 3, but at least most scenes are brightly lit and you don&#8217;t feel claustrophobic all the time. We hope that they still have duct tape in the not-too-far future Half Life 2 is settled in, so you don&#8217;t have to switch between flashlight and weapon, but instead can use both at a time.</p>
<p>It&#8217;s time for a new graphics card, since ATI Technologies Inc. and Nvidia Corp. have to sell their newest cards to someone. If there are still cards left over from the sales to Doom 3 players &#8230;</p>
<p>So the countdown starts for MIT graduate Gordon Freeman to shed some alien blood &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 SDK Released</title>
		<link>http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released</link>
		<comments>http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released#comments</comments>
		<pubDate>Sun, 17 Oct 2004 13:40:24 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released</guid>
		<description><![CDATA[The wait is over. You can download the Doom 3 SDK.  You&#8217;ll need Visual C++ 7 to play with it.
For an introduction take a look at id.sdk. It&#8217;s official information.
Have fun 
]]></description>
			<content:encoded><![CDATA[<p>The wait is over. You can download the <a href="ftp://ftp.idsoftware.com/idstuff/doom3/source/Doom3_SDK.exe">Doom 3 SDK</a>.  You&#8217;ll need Visual C++ 7 to play with it.</p>
<p>For an introduction take a look at <a href="http://www.iddevnet.com/">id.sdk</a>. It&#8217;s official information.</p>
<p>Have fun <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Packages</title>
		<link>http://doom-ed.com/blog/2004/10/07/half-life-2-packages</link>
		<comments>http://doom-ed.com/blog/2004/10/07/half-life-2-packages#comments</comments>
		<pubDate>Thu, 07 Oct 2004 07:59:10 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/07/half-life-2-packages</guid>
		<description><![CDATA[http://steampowered.com/forums/showthread.php?s=&#038;threadid=148079
shows a complete list of all packages Half Life 2 will be available.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://steampowered.com/forums/showthread.php?s=&#038;threadid=148079">http://steampowered.com/forums/showthread.php?s=&#038;threadid=148079</a><br />
shows a complete list of all packages Half Life 2 will be available.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/07/half-life-2-packages/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 on Linux</title>
		<link>http://doom-ed.com/blog/2004/10/06/doom-3-on-linux</link>
		<comments>http://doom-ed.com/blog/2004/10/06/doom-3-on-linux#comments</comments>
		<pubDate>Wed, 06 Oct 2004 06:39:11 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/06/doom-3-on-linux</guid>
		<description><![CDATA[When it&#8217;s done &#8230;
Finally you can play your game of choice on your OS of choice. With a (win32) retail version of the game, you can now download the Linux version and play away.
Plus there is the standalone Linux demo available.
Links broken? Looking for a Doom 3 patch? http://www.3dgamers.com/games/doom3/downloads/
For those of who who&#8217;d like to [...]]]></description>
			<content:encoded><![CDATA[<p>When it&#8217;s done &#8230;</p>
<p>Finally you can play your game of choice on your OS of choice. With a (win32) retail version of the game, you can now download the <a href="http://www.3dgamers.com/dlselect/games/doom3/doom3-linux-1.1.1282.x86.run.html">Linux version</a> and play away.</p>
<p>Plus there is the standalone <a href="http://www.3dgamers.com/dlselect/games/doom3/doom3-linux-1.1.1282-demo.x86.run.html">Linux demo</a> available.</p>
<p>Links broken? Looking for a Doom 3 patch? <a href="http://www.3dgamers.com/games/doom3/downloads/">http://www.3dgamers.com/games/doom3/downloads/</a></p>
<p>For those of who who&#8217;d like to build maps of their own, there is <a href="http://www.qeradiant.com/">GTKRadiant</a> available, based on QeRadiant, the official editor for Quake 2, on which the official Doom 3 editor is also based.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/06/doom-3-on-linux/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Release Date Set</title>
		<link>http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set</link>
		<comments>http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set#comments</comments>
		<pubDate>Sat, 02 Oct 2004 07:13:04 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set</guid>
		<description><![CDATA[It&#8217;ll be November 23rd in the US, November 26th.
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;ll be November 23rd in the US, November 26th.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Sex Video</title>
		<link>http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video</link>
		<comments>http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video#comments</comments>
		<pubDate>Sat, 02 Oct 2004 06:44:03 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video</guid>
		<description><![CDATA[I was startled this morning when I watched another site&#8217;s stats and saw it filled with requests for &#8220;half life 2 sex video&#8220;.
Further investigation showed that this is of course not a sex video, but nevertheless a very impressive video.
Some Mirrors:
Fileshack (looks like this server is overcrowded at the moment)
]]></description>
			<content:encoded><![CDATA[<p>I was startled this morning when I watched another site&#8217;s stats and saw it filled with requests for &#8220;<strong>half life 2 sex video</strong>&#8220;.</p>
<p>Further investigation showed that this is of course <strong>not a sex video</strong>, but nevertheless a very impressive video.</p>
<p>Some Mirrors:<br />
<a href="http://www.fileshack.com/file.x?fid=3619">Fileshack</a> (looks like this server is overcrowded at the moment)</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2: Counter-Strike: Source to be out next week</title>
		<link>http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week</link>
		<comments>http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week#comments</comments>
		<pubDate>Thu, 30 Sep 2004 17:41:27 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week</guid>
		<description><![CDATA[According to an announcement from Gabe Newell, the steam version of Counters-Strike: Source will be available around next week. The actual Half Life 2 (single player) will be locked until the legal issues concerning Valve and Vivendi Universal Games are solved.
]]></description>
			<content:encoded><![CDATA[<p>According to an announcement from Gabe Newell, the steam version of Counters-Strike: Source will be available around next week. The actual Half Life 2 (single player) will be locked until <a href="http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle">the legal issues concerning Valve and Vivendi Universal Games</a> are solved.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week/feed</wfw:commentRss>
		</item>
		<item>
		<title>No Multiplayer for Half Life 2</title>
		<link>http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2</link>
		<comments>http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2#comments</comments>
		<pubDate>Wed, 29 Sep 2004 06:02:29 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2</guid>
		<description><![CDATA[According to PC Gamer&#8217;s Chuck Osborn there won&#8217;t be a Half Life 2 multiplayer: &#8220;Counter-Strike Source is the multiplayer.&#8221;
]]></description>
			<content:encoded><![CDATA[<p>According to PC Gamer&#8217;s Chuck Osborn there won&#8217;t be a Half Life 2 multiplayer: &#8220;Counter-Strike Source is the multiplayer.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 1.1 Patch</title>
		<link>http://doom-ed.com/blog/2004/09/29/doom-3-11-patch</link>
		<comments>http://doom-ed.com/blog/2004/09/29/doom-3-11-patch#comments</comments>
		<pubDate>Wed, 29 Sep 2004 06:00:50 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/29/doom-3-11-patch</guid>
		<description><![CDATA[A Doom 3 patch has been released, updating your game to version 1.1. A number of improvements and fixes for both single player and multiplayer modes have been implemented, the patch is including a new &#8220;Dedicated Server&#8221; executable. The file is a moderate 17.4mb.
Mirrors:
Doom 3 Patch 1.1 Download
]]></description>
			<content:encoded><![CDATA[<p>A Doom 3 patch has been released, updating your game to version 1.1. A number of improvements and fixes for both single player and multiplayer modes have been implemented, the patch is including a new &#8220;Dedicated Server&#8221; executable. The file is a moderate 17.4mb.</p>
<p>Mirrors:<br />
<a href="http://www.filefront.com/?filepath=/gaminghorizon/patches/Doom3_1.1.exe">Doom 3 Patch 1.1 Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/29/doom-3-11-patch/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2: Final Preload</title>
		<link>http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload</link>
		<comments>http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload#comments</comments>
		<pubDate>Tue, 28 Sep 2004 07:40:43 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload</guid>
		<description><![CDATA[Looks like Valve has initiated phase 5 of Half Life 2 preload on the steam website. Of course, you can&#8217;t play it until it has been activated. Plus you can&#8217;t activate it until Half Life 2 boxes hit retail. Plus Half Life 2 won&#8217;t hit retail stores until the legal battles between Valve and Vivendi [...]]]></description>
			<content:encoded><![CDATA[<p>Looks like Valve has initiated phase 5 of Half Life 2 preload on the steam website. Of course, you can&#8217;t play it until it has been activated. Plus you can&#8217;t activate it until Half Life 2 boxes hit retail. Plus Half Life 2 won&#8217;t hit retail stores until the legal battles between Valve and Vivendi Universal Games have settled (kind of).</p>
<p>The moral of the story is that irrespective to all the hype about Half Life 2 preload, steam users won&#8217;t be playing the game any time earlier than ordinary buyers.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half-Life 2 Special Edition</title>
		<link>http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition</link>
		<comments>http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition#comments</comments>
		<pubDate>Sat, 25 Sep 2004 07:57:15 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition</guid>
		<description><![CDATA[The name is not very original, but for most people the content is what counts:
Half-Life 2 Special Edition at Gamespot.

]]></description>
			<content:encoded><![CDATA[<p>The name is not very original, but for most people the content is what counts:</p>
<p><a href="http://www.gamestop.com/product.asp?product_id=645921">Half-Life 2 Special Edition</a> at Gamespot.</p>
<p><img src="/media/half-life-2-special-edition.jpg" alt="Half-Life 2 Special Edition"/></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Delay due to court battle?</title>
		<link>http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle</link>
		<comments>http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle#comments</comments>
		<pubDate>Sat, 25 Sep 2004 07:45:27 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle</guid>
		<description><![CDATA[There is some speculation going on that Half Life 2 could be delayed for up to 6 months due to the publishing agreement between Valve and VU Games.
At least Steam users won&#8217;t get to download the game until it is made available at retail.
]]></description>
			<content:encoded><![CDATA[<p>There is some <a href="http://www.gamespot.com/news/2004/09/24/news_6108100.html">speculation going on</a> that Half Life 2 could be delayed for up to 6 months due to the publishing agreement between Valve and VU Games.</p>
<p>At least Steam users won&#8217;t get to download the game until it is made available at retail.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle/feed</wfw:commentRss>
		</item>
		<item>
		<title>Original Ideas?</title>
		<link>http://doom-ed.com/blog/2004/09/22/original-ideas</link>
		<comments>http://doom-ed.com/blog/2004/09/22/original-ideas#comments</comments>
		<pubDate>Wed, 22 Sep 2004 10:53:30 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/22/original-ideas</guid>
		<description><![CDATA[According to the Straits Times, only 2 out of the 10 best-selling games in this year&#8217;s first 6 months were based on original ideas. All others were sequels.
And there are some more coming. Half-Life 2, Grand Theft Auto San Andreas.
]]></description>
			<content:encoded><![CDATA[<p>According to the Straits Times, only 2 out of the 10 best-selling games in this year&#8217;s first 6 months were based on original ideas. All others were sequels.</p>
<p>And there are some more coming. Half-Life 2, Grand Theft Auto San Andreas.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/22/original-ideas/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 Pushes Demand for AGP8X Graphics Chips</title>
		<link>http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips</link>
		<comments>http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips#comments</comments>
		<pubDate>Wed, 22 Sep 2004 10:48:37 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips</guid>
		<description><![CDATA[According to internet sources, ATI has placed an additional order for 1,400 wafer starts at Taiwan Semiconductor Manufacturing Company (TSMC) to manufacture its Radeon 9800-series graphics chips.
With that order ATI is planning to bring the 9800 to market at price of under $200.
All the while Nvidia is announcing plans for a low-priced version of its [...]]]></description>
			<content:encoded><![CDATA[<p>According to internet sources, ATI has placed an additional order for 1,400 wafer starts at Taiwan Semiconductor Manufacturing Company (TSMC) to manufacture its Radeon 9800-series graphics chips.</p>
<p>With that order ATI is planning to bring the 9800 to market at price of under $200.</p>
<p>All the while Nvidia is announcing plans for a low-priced version of its GeForce FX5900-series in the fourth quarter.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Engine Licensed for Twilight War: After the Fall</title>
		<link>http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall</link>
		<comments>http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall#comments</comments>
		<pubDate>Tue, 21 Sep 2004 07:22:38 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall</guid>
		<description><![CDATA[Valve said today that it had licensed its Half Life 2 Source engine to Florida-based start-up Smiling Gator Productions. Smiling Gator will use the engine in a massively-multi-player role-playing game (MMORPG), Twilight War: After the Fall.
The other 2 licensees so far are Troika Games with Vampire: The Masquerade-Bloodlines,  and Arkane Studios, for an yet [...]]]></description>
			<content:encoded><![CDATA[<p>Valve said today that it had licensed its Half Life 2 Source engine to Florida-based start-up Smiling Gator Productions. Smiling Gator will use the engine in a massively-multi-player role-playing game (MMORPG), Twilight War: After the Fall.</p>
<p>The other 2 licensees so far are Troika Games with Vampire: The Masquerade-Bloodlines,  and Arkane Studios, for an yet to be specified upcoming title.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 Demo Released</title>
		<link>http://doom-ed.com/blog/2004/09/18/doom-3-demo-released</link>
		<comments>http://doom-ed.com/blog/2004/09/18/doom-3-demo-released#comments</comments>
		<pubDate>Sat, 18 Sep 2004 07:21:28 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/18/doom-3-demo-released</guid>
		<description><![CDATA[The Doom 3 demo can be downloaded at gamespot. Enjoy!
Other Mirrors:
3D Gamers
]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://dlx.gamespot.com/pc/doom3/moreinfo_6107855.html">Doom 3 demo</a> can be downloaded at gamespot. Enjoy!</p>
<p>Other Mirrors:<br />
<a href="http://www.3dgamers.com/dl/games/doom3/d3demo.exe.html">3D Gamers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/18/doom-3-demo-released/feed</wfw:commentRss>
		</item>
		<item>
		<title>John Carmack, creator of Doom and Quake</title>
		<link>http://doom-ed.com/blog/2004/09/09/john-carmack</link>
		<comments>http://doom-ed.com/blog/2004/09/09/john-carmack#comments</comments>
		<pubDate>Thu, 09 Sep 2004 11:21:31 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/09/john-carmack</guid>
		<description><![CDATA[This blog is dedicated to John Carmack, the creator of Games like Doom and Quake. It consists of his .plan file updates starting from 1997, converted into blog format.
]]></description>
			<content:encoded><![CDATA[<p>This blog is dedicated to John Carmack, the creator of Games like <a href="http://www.doom3.com/">Doom</a> and <a href="http://www.idsoftware.com/games/quake/quake/">Quake</a>. It consists of his .plan file updates starting from 1997, converted into blog format.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/09/john-carmack/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Release Date</title>
		<link>http://doom-ed.com/blog/2004/09/06/half-life-2-release-date</link>
		<comments>http://doom-ed.com/blog/2004/09/06/half-life-2-release-date#comments</comments>
		<pubDate>Mon, 06 Sep 2004 14:27:58 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/06/half-life-2-release-date</guid>
		<description><![CDATA[The last official release date was September 3rd 2004, but until now nothing has happended. Still no sign on the official Half-Life 2 site.
]]></description>
			<content:encoded><![CDATA[<p>The last official release date was September 3rd 2004, but until now nothing has happended. Still no sign on the official <a href="http://www.half-life.com/">Half-Life 2</a> site.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/06/half-life-2-release-date/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 Fortress</title>
		<link>http://doom-ed.com/blog/2004/09/06/doom-3-fortress</link>
		<comments>http://doom-ed.com/blog/2004/09/06/doom-3-fortress#comments</comments>
		<pubDate>Mon, 06 Sep 2004 14:23:11 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/06/doom-3-fortress</guid>
		<description><![CDATA[Granted, for a popular game-engine like the one of Doom 3 there will be a lot of so called mods. These are modifications to the original game, from minor tweaks to total conversion.
One of the most promising mods is Team Fortress. The makers were interviewed by planetdoom recently.
]]></description>
			<content:encoded><![CDATA[<p>Granted, for a popular game-engine like the one of Doom 3 there will be a lot of so called <em>mods</em>. These are modifications to the original game, from minor tweaks to total conversion.</p>
<p>One of the most promising mods is <a href="http://www.planetdoom.com/d3f">Team Fortress</a>. The makers were interviewed by planetdoom <a href="http://www.planetdoom.com/features/interviews/d3f_int_mod.shtml">recently</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/06/doom-3-fortress/feed</wfw:commentRss>
		</item>
		<item>
		<title>Disclaimer</title>
		<link>http://doom-ed.com/blog/2004/09/05/disclaimer</link>
		<comments>http://doom-ed.com/blog/2004/09/05/disclaimer#comments</comments>
		<pubDate>Sun, 05 Sep 2004 12:07:37 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[doom-ed]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/05/disclaimer</guid>
		<description><![CDATA[This blog contains a collection of .plan files from John Carmack, the co-creator of Doom, Quake and other blockbusters. It has been brought to life by a guy from Europe.
Posts signed with johnc are original .plan file updates, all other posts were made by other people.
I have given my best (and still doing it) to [...]]]></description>
			<content:encoded><![CDATA[<p>This blog contains a <a href="http://doom-ed.com/blog/category/doom-ed/john-carmack/">collection of .plan files from John Carmack</a>, the co-creator of Doom, Quake and other blockbusters. It has been brought to life by a <a href="http://www.uberdose.com/journal/">guy from Europe</a>.</p>
<p>Posts signed with <em>johnc</em> are original .plan file updates, all other posts were made by other people.</p>
<p>I have given my best (and still doing it) to conserve the exact time stamps of .plan updates to the second wherever possible. In most cases this is Central Standard Time.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/05/disclaimer/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3: The Movie</title>
		<link>http://doom-ed.com/blog/2004/08/27/doom-3-the-movie</link>
		<comments>http://doom-ed.com/blog/2004/08/27/doom-3-the-movie#comments</comments>
		<pubDate>Fri, 27 Aug 2004 13:15:08 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/27/doom-3-the-movie</guid>
		<description><![CDATA[In an interview Todd Hollenshead announced that the Doom movie script is close to final and that he becomes more and more confident that we will see DOOM at movie theaters before the end of next year.
]]></description>
			<content:encoded><![CDATA[<p>In an interview Todd Hollenshead announced that the <a href="http://general.gamerfeed.com/gf/news/7478/">Doom movie script <em>is close to final</em></a> and that he <em>becomes more and more confident that we will see DOOM at movie theaters before the end of next year</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/27/doom-3-the-movie/feed</wfw:commentRss>
		</item>
		<item>
		<title>QuakeCon 2004 &#8212; John Carmack Keynote Video</title>
		<link>http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video</link>
		<comments>http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video#comments</comments>
		<pubDate>Mon, 16 Aug 2004 07:34:43 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video</guid>
		<description><![CDATA[John Carmack&#8217;s keynote for QuakeCon 2004 is presented, just 2 days after his first son, Christopher Ryan Carmack (called Ryan by his parents), was born.

]]></description>
			<content:encoded><![CDATA[<p>John Carmack&#8217;s keynote for QuakeCon 2004 is presented, just 2 days after his first son, Christopher Ryan Carmack (called Ryan by his parents), was born.</p>
<p><a href="http://media.pc.gamespy.com/media/014/014934/vids_3.html"><img src="http://doom-ed.com/media/quakecon04_keynote_carmack_1092704511.jpg" alt="John Carmack Keynote Video" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake Kiddie Version</title>
		<link>http://doom-ed.com/blog/2004/08/14/quake-kiddie-version</link>
		<comments>http://doom-ed.com/blog/2004/08/14/quake-kiddie-version#comments</comments>
		<pubDate>Sat, 14 Aug 2004 07:24:31 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/14/quake-kiddie-version</guid>
		<description><![CDATA[In the midst of QuakeCon 2004 congratulations went to John Carmack and Anna Kang on the birth of their first child. Ryan was born this morning, weighing in at 6 pounds, 7 ounces.
It is hoped that Christopher Ryan Carmack will be a valuable addition for the next QuakeCons.
]]></description>
			<content:encoded><![CDATA[<p>In the midst of QuakeCon 2004 congratulations went to John Carmack and Anna Kang on the birth of their first child. Ryan was born this morning, weighing in at 6 pounds, 7 ounces.</p>
<p>It is hoped that Christopher Ryan Carmack will be a valuable addition for the next QuakeCons.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/14/quake-kiddie-version/feed</wfw:commentRss>
		</item>
		<item>
		<title>Wired News Review on Doom 3</title>
		<link>http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3</link>
		<comments>http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3#comments</comments>
		<pubDate>Tue, 10 Aug 2004 13:29:38 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3</guid>
		<description><![CDATA[Doom 3: A Helluva Tech Demo
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wired.com/news/games/0,2101,64524,00.html?tw=wn_story_top5">Doom 3: A Helluva Tech Demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>International Shipping at id Store</title>
		<link>http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store</link>
		<comments>http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store#comments</comments>
		<pubDate>Fri, 06 Aug 2004 13:11:19 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store</guid>
		<description><![CDATA[According to idsoftware.com, the id store is now shipping to the following countries:
Mexico, U.K., Ireland, Spain, Portugal, France, Switzerland, Iceland, Belgium, Finland, Sweden, Norway, Denmark, Austria, Czech Republic, The Netherlands, Italy, New Zealand, and Australia.
Not all countries from Europe are in the list, I&#8217;m inclined to blame censorship for that.
]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://www.idsoftware.com/">idsoftware.com</a>, the <a href="http://www.idsoftware.com/store">id store</a> is now shipping to the following countries:</p>
<p>Mexico, U.K., Ireland, Spain, Portugal, France, Switzerland, Iceland, Belgium, Finland, Sweden, Norway, Denmark, Austria, Czech Republic, The Netherlands, Italy, New Zealand, and Australia.</p>
<p>Not all countries from Europe are in the list, I&#8217;m inclined to blame censorship for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Official DOOM 3 [H]ardware Guide</title>
		<link>http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide</link>
		<comments>http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide#comments</comments>
		<pubDate>Thu, 29 Jul 2004 13:25:32 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide</guid>
		<description><![CDATA[id Software and HardOCP team up to publish a real-world DOOM 3 hardware guide that will help you understand and maximize your DOOM 3 gaming experience.
]]></description>
			<content:encoded><![CDATA[<p>id Software and HardOCP team up to publish a real-world <a href="http://www2.hardocp.com/article.html?art=NjQ0">DOOM 3 hardware guide</a> that <em>will help you understand and maximize your DOOM 3 gaming experience</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide/feed</wfw:commentRss>
		</item>
		<item>
		<title>Machinima Music Video</title>
		<link>http://doom-ed.com/blog/2003/02/07/machinima-music-video</link>
		<comments>http://doom-ed.com/blog/2003/02/07/machinima-music-video#comments</comments>
		<pubDate>Fri, 07 Feb 2003 14:30:12 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2003/02/07/machinima-music-video</guid>
		<description><![CDATA[The machinima music video that Fountainhead Entertainment (my wife&#8217;s company)
produced with Quake based tools is available for viewing and voting on at:
http://www.mtv.com/music/viewers_pick/ (&#8221;In the waiting line&#8221;)
I thought they did an excellent job of catering to the strengths of the
medium, and not attempting to make a game engine compete (poorly) as a
general purpose renderer.  In [...]]]></description>
			<content:encoded><![CDATA[<p>The machinima music video that Fountainhead Entertainment (my wife&#8217;s company)<br />
produced with Quake based tools is available for viewing and voting on at:<br />
http://www.mtv.com/music/viewers_pick/ (&#8221;In the waiting line&#8221;)</p>
<p>I thought they did an excellent job of catering to the strengths of the<br />
medium, and not attempting to make a game engine compete (poorly) as a<br />
general purpose renderer.  In watching the video, I did beat myself up a<br />
bit over the visible popping artifacts on the environment mapping, which are<br />
a direct result of the normal vector quantization in the md3 format.  While it<br />
isn&#8217;t the same issue (normals are full floating point already in Doom), it was<br />
the final factor that pushed me to do the per-pixel environment mapping for<br />
the new cards in the current engine.</p>
<p>The neat thing about the machinima aspect of the video is that they also have<br />
a little game you can play with the same media assets used to create the<br />
video.  Not sure when it will be made available publicly.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2003/02/07/machinima-music-video/feed</wfw:commentRss>
		</item>
		<item>
		<title>NV30 vs R300, current developments, etc</title>
		<link>http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc</link>
		<comments>http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc#comments</comments>
		<pubDate>Wed, 29 Jan 2003 14:32:09 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc</guid>
		<description><![CDATA[NV30 vs R300, current developments, etc
At the moment, the NV30 is slightly faster on most scenes in Doom than the
R300, but I can still find some scenes where the R300 pulls a little bit
ahead.  The issue is complicated because of the different ways the cards can
choose to run the game.
The R300 can run Doom [...]]]></description>
			<content:encoded><![CDATA[<p>NV30 vs R300, current developments, etc</p>
<p>At the moment, the NV30 is slightly faster on most scenes in Doom than the<br />
R300, but I can still find some scenes where the R300 pulls a little bit<br />
ahead.  The issue is complicated because of the different ways the cards can<br />
choose to run the game.</p>
<p>The R300 can run Doom in three different modes: ARB (minimum extensions, no<br />
specular highlights, no vertex programs), R200 (full featured, almost always<br />
single pass interaction rendering), ARB2 (floating point fragment shaders,<br />
minor quality improvements, always single pass).</p>
<p>The NV30 can run DOOM in five different modes: ARB, NV10 (full featured, five<br />
rendering passes, no vertex programs), NV20 (full featured, two or three<br />
rendering passes), NV30 ( full featured, single pass), and ARB2.</p>
<p>The R200 path has a slight speed advantage over the ARB2 path on the R300, but<br />
only by a small margin, so it defaults to using the ARB2 path for the quality<br />
improvements.  The NV30 runs the ARB2 path MUCH slower than the NV30 path.<br />
Half the speed at the moment.  This is unfortunate, because when you do an<br />
exact, apples-to-apples comparison using exactly the same API, the R300 looks<br />
twice as fast, but when you use the vendor-specific paths, the NV30 wins.</p>
<p>The reason for this is that ATI does everything at high precision all the<br />
time, while Nvidia internally supports three different precisions with<br />
different performances.  To make it even more complicated, the exact<br />
precision that ATI uses is in between the floating point precisions offered by<br />
Nvidia, so when Nvidia runs fragment programs, they are at a higher precision<br />
than ATI&#8217;s, which is some justification for the slower speed.  Nvidia assures<br />
me that there is a lot of room for improving the fragment program performance<br />
with improved driver compiler technology.</p>
<p>The current NV30 cards do have some other disadvantages:  They take up two<br />
slots, and when the cooling fan fires up they are VERY LOUD.  I&#8217;m not usually<br />
one to care about fan noise, but the NV30 does annoy me.</p>
<p>I am using an NV30 in my primary work system now, largely so I can test more<br />
of the rendering paths on one system, and because I feel Nvidia still has<br />
somewhat better driver quality (ATI continues to improve, though).  For a<br />
typical consumer, I don&#8217;t think the decision is at all clear cut at the<br />
moment.</p>
<p>For developers doing forward looking work, there is a different tradeoff &#8211;<br />
the NV30 runs fragment programs much slower, but it has a huge maximum<br />
instruction count.  I have bumped into program limits on the R300 already.</p>
<p>As always, better cards are coming soon.</p>
<p>&#8212;&#8212;&#8212;&#8212;-</p>
<p>Doom has dropped support for vendor-specific vertex programs<br />
(NV_vertex_program and EXT_vertex_shader), in favor of using<br />
ARB_vertex_program for all rendering paths.  This has been a pleasant thing to<br />
do, and both ATI and Nvidia supported the move.  The standardization process<br />
for ARB_vertex_program was pretty drawn out and arduous, but in the end, it is<br />
a just-plain-better API than either of the vendor specific ones that it<br />
replaced.  I fretted for a while over whether I should leave in support for<br />
the older APIs for broader driver compatibility, but the final decision was<br />
that we are going to require a modern driver for the game to run in the<br />
advanced modes.  Older drivers can still fall back to either the ARB or NV10<br />
paths.</p>
<p>The newly-ratified ARB_vertex_buffer_object extension will probably let me do<br />
the same thing for NV_vertex_array_range and ATI_vertex_array_object.</p>
<p>Reasonable arguments can be made for and against the OpenGL or Direct-X style<br />
of API evolution.  With vendor extensions, you get immediate access to new<br />
functionality, but then there is often a period of squabbling about exact<br />
feature support from different vendors before an industry standard settles<br />
down.  With central planning, you can have &#8220;phasing problems&#8221; between<br />
hardware and software releases, and there is a real danger of bad decisions<br />
hampering the entire industry, but enforced commonality does make life easier<br />
for developers.  Trying to keep boneheaded-ideas-that-will-haunt-us-for-years<br />
out of Direct-X is the primary reason I have been attending the Windows<br />
Graphics Summit for the past three years, even though I still code for OpenGL.</p>
<p>The most significant functionality in the new crop of cards is the truly<br />
flexible fragment programming, as exposed with ARB_fragment_program.  Moving<br />
from the &#8220;switches and dials&#8221; style of discrete functional graphics<br />
programming to generally flexible programming with indirection and high<br />
precision is what is going to enable the next major step in graphics engines.</p>
<p>It is going to require fairly deep, non-backwards-compatible modifications to<br />
an engine to take real advantage of the new features, but working with<br />
ARB_fragment_program is really a lot of fun, so I have added a few little<br />
tweaks to the current codebase on the ARB2 path:</p>
<p>High dynamic color ranges are supported internally, rather than with<br />
post-blending.  This gives a few more bits of color precision in the final<br />
image, but it isn&#8217;t something that you really notice.</p>
<p>Per-pixel environment mapping, rather than per-vertex.  This fixes a pet-peeve<br />
of mine, which is large panes of environment mapped glass that aren&#8217;t<br />
tessellated enough, giving that awful warping-around-the-triangulation effect<br />
as you move past them.</p>
<p>Light and view vectors normalized with math, rather than a cube map.  On<br />
future hardware this will likely be a performance improvement due to the<br />
decrease in bandwidth, but current hardware has the computation and bandwidth<br />
balanced such that it is pretty much a wash.  What it does (in conjunction<br />
with floating point math) give you is a perfectly smooth specular highlight,<br />
instead of the pixelish blob that we get on older generations of cards.</p>
<p>There are some more things I am playing around with, that will probably remain<br />
in the engine as novelties, but not supported features:</p>
<p>Per-pixel reflection vector calculations for specular, instead of an<br />
interpolated half-angle.  The only remaining effect that has any visual<br />
dependency on the underlying geometry is the shape of the specular highlight.<br />
Ideally, you want the same final image for a surface regardless of if it is<br />
two giant triangles, or a mesh of 1024 triangles.  This will not be true if<br />
any calculation done at a vertex involves anything other than linear math<br />
operations.  The specular half-angle calculation involves normalizations, so<br />
the interpolation across triangles on a surface will be dependent on exactly<br />
where the vertexes are located.  The most visible end result of this is that<br />
on large, flat, shiny surfaces where you expect a clean highlight circle<br />
moving across it, you wind up with a highlight that distorts into an L shape<br />
around the triangulation line.</p>
<p>The extra instructions to implement this did have a noticeable performance<br />
hit, and I was a little surprised to see that the highlights not only<br />
stabilized in shape, but also sharpened up quite a bit, changing the scene<br />
more than I expected.  This probably isn&#8217;t a good tradeoff today for a gamer,<br />
but it is nice for any kind of high-fidelity rendering.</p>
<p>Renormalization of surface normal map samples makes significant quality<br />
improvements in magnified textures, turning tight, blurred corners into shiny,<br />
smooth pockets, but it introduces a huge amount of aliasing on minimized<br />
textures.  Blending between the cases is possible with fragment programs, but<br />
the performance overhead does start piling up, and it may require stashing<br />
some information in the normal map alpha channel that varies with mip level.<br />
Doing good filtering of a specularly lit normal map texture is a fairly<br />
interesting problem, with lots of subtle issues.</p>
<p>Bump mapped ambient lighting will give much better looking outdoor and<br />
well-lit scenes.  This only became possible with dependent texture reads, and<br />
it requires new designer and tool-chain support to implement well, so it isn&#8217;t<br />
easy to test globally with the current Doom datasets, but isolated demos are<br />
promising.</p>
<p>The future is in floating point framebuffers.  One of the most noticeable<br />
thing this will get you without fundamental algorithm changes is the ability<br />
to use a correct display gamma ramp without destroying the dark color<br />
precision.  Unfortunately, using a floating point framebuffer on the current<br />
generation of cards is pretty difficult, because no blending operations are<br />
supported, and the primary thing we need to do is add light contributions<br />
together in the framebuffer.  The workaround is to copy the part of the<br />
framebuffer you are going to reference to a texture, and have your fragment<br />
program explicitly add that texture, instead of having the separate blend unit<br />
do it.  This is intrusive enough that I probably won&#8217;t hack up the current<br />
codebase, instead playing around on a forked version.</p>
<p>Floating point framebuffers and complex fragment shaders will also allow much<br />
better volumetric effects, like volumetric illumination of fogged areas with<br />
shadows and additive/subtractive eddy currents.</p>
<p>John Carmack</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc/feed</wfw:commentRss>
		</item>
		<item>
		<title>More graphics card notes:</title>
		<link>http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes</link>
		<comments>http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes#comments</comments>
		<pubDate>Thu, 27 Jun 2002 19:18:25 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes</guid>
		<description><![CDATA[More graphics card notes:
I need to apologize to Matrox &#8212; their implementation of hardware displacement
mapping is NOT quad based. I was thinking about a certain other companies
proposed approach. Matrox&#8217;s implementation actually looks quite good, so even
if we don&#8217;t use it because of the geometry amplification issues, I think it
will serve the noble purpose of killing [...]]]></description>
			<content:encoded><![CDATA[<p>More graphics card notes:</p>
<p>I need to apologize to Matrox &#8212; their implementation of hardware displacement<br />
mapping is NOT quad based. I was thinking about a certain other companies<br />
proposed approach. Matrox&#8217;s implementation actually looks quite good, so even<br />
if we don&#8217;t use it because of the geometry amplification issues, I think it<br />
will serve the noble purpose of killing dead any proposal to implement a quad<br />
based solution.</p>
<p>I got a 3Dlabs P10 card in last week, and yesterday I put it through its<br />
paces. Because my time is fairly over committed, first impressions often<br />
determine how much work I devote to a given card. I didn&#8217;t speak to ATI for<br />
months after they gave me a beta 8500 board last year with drivers that<br />
rendered the console incorrectly. <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I was duly impressed when the P10 just popped right up with full functional<br />
support for both the fallback ARB_ extension path (without specular<br />
highlights), and the NV10 NVidia register combiners path. I only saw two<br />
issues that were at all incorrect in any of our data, and one of them is<br />
debatable. They don&#8217;t support NV_vertex_program_1_1, which I use for the NV20<br />
path, and when I hacked my programs back to 1.0 support for testing, an<br />
issue did show up, but still, this is the best showing from a new board from<br />
any company other than Nvidia.</p>
<p>It is too early to tell what the performance is going to be like, because they<br />
don&#8217;t yet support a vertex object extension, so the CPU is hand feeding all<br />
the vertex data to the card at the moment. It was faster than I expected for<br />
those circumstances.</p>
<p>Given the good first impression, I was willing to go ahead and write a new<br />
back end that would let the card do the entire Doom interaction rendering in<br />
a single pass. The most expedient sounding option was to just use the Nvidia<br />
extensions that they implement, NV_vertex_program and NV_register_combiners,<br />
with seven texture units instead of the four available on GF3/GF4. Instead, I<br />
decided to try using the prototype OpenGL 2.0 extensions they provide.</p>
<p>The implementation went very smoothly, but I did run into the limits of their<br />
current prototype compiler before the full feature set could be implemented.<br />
I like it a lot. I am really looking forward to doing research work with this<br />
programming model after the compiler matures a bit. While the shading<br />
languages are the most critical aspects, and can be broken out as extensions<br />
to current OpenGL, there are a lot of other subtle-but-important things that<br />
are addressed in the full OpenGL 2.0 proposal.</p>
<p>I am now committed to supporting an OpenGL 2.0 renderer for Doom through all<br />
the spec evolutions. If anything, I have been somewhat remiss in not pushing<br />
the issues as hard as I could with all the vendors. Now really is the<br />
critical time to start nailing things down, and the decisions may stay with<br />
us for ten years.</p>
<p>A GL2 driver won&#8217;t give any theoretical advantage over the current back ends<br />
optimized for cards with 7+ texture capability, but future research work will<br />
almost certainly be moving away from the lower level coding practices, and if<br />
some new vendor pops up (say, Rendition back from the dead) with a next-gen<br />
card, I would strongly urge them to implement GL2 instead of proprietary<br />
extensions.</p>
<p>I have not done a detailed comparison with Cg. There are a half dozen C-like<br />
graphics languages floating around, and honestly, I don&#8217;t think there is a<br />
hell of a lot of usability difference between them at the syntax level. They<br />
are all a whole lot better than the current interfaces we are using, so I hope<br />
syntax quibbles don&#8217;t get too religious. It won&#8217;t be too long before all real<br />
work is done in one of these, and developers that stick with the lower level<br />
interfaces will be regarded like people that write all-assembly PC<br />
applications today. (I get some amusement from the all-assembly crowd, and it<br />
can be impressive, but it is certainly not effective)</p>
<p>I do need to get up on a soapbox for a long discourse about why the upcoming<br />
high level languages MUST NOT have fixed, queried resource limits if they are<br />
going to reach their full potential. I will go into a lot of detail when I<br />
get a chance, but drivers must have the right and responsibility to multipass<br />
arbitrarily complex inputs to hardware with smaller limits. Get over it.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Matrox Parhelia Report</title>
		<link>http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report</link>
		<comments>http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report#comments</comments>
		<pubDate>Tue, 25 Jun 2002 13:38:48 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report</guid>
		<description><![CDATA[The Matrox Parhelia Report:
The executive summary is that the Parhelia will run Doom, but it is not
performance competitive with Nvidia or ATI.
Driver issue remain, so it is not perfect yet, but I am confident that Matrox
will resolve them.
The performance was really disappointing for the first 256 bit DDR card. I
tried to set up a &#8220;poster [...]]]></description>
			<content:encoded><![CDATA[<p>The Matrox Parhelia Report:</p>
<p>The executive summary is that the Parhelia will run Doom, but it is not<br />
performance competitive with Nvidia or ATI.</p>
<p>Driver issue remain, so it is not perfect yet, but I am confident that Matrox<br />
will resolve them.</p>
<p>The performance was really disappointing for the first 256 bit DDR card. I<br />
tried to set up a &#8220;poster child&#8221; case that would stress the memory subsystem<br />
above and beyond any driver or triangle level inefficiencies, but I was<br />
unable to get it to ever approach the performance of a GF4.</p>
<p>The basic hardware support is good, with fragment flexibility better than GF4<br />
(but not as good as ATI 8500), but it just doesn&#8217;t keep up in raw performance.<br />
With a die shrink, this chip could probably be a contender, but there are<br />
probably going to be other chips out by then that will completely eclipse<br />
this generation of products.</p>
<p>None of the special features will be really useful for Doom:</p>
<p>The 10 bit color framebuffer is nice, but Doom needs more than 2 bits of<br />
destination alpha when a card only has four texture units, so we can&#8217;t use it.</p>
<p>Anti aliasing features are nice, but it isn&#8217;t all that fast in minimum feature<br />
mode, so nobody is going to be turning on AA. The same goes for &#8220;surround<br />
gaming&#8221;. While the framerate wouldn&#8217;t be 1/3 the base, it would still<br />
probably be cut in half.</p>
<p>Displacement mapping. Sigh. I am disappointed that the industry is still<br />
pursuing any quad based approaches. Haven&#8217;t we learned from the stellar<br />
success of 3DO, Saturn, and NV1 that quads really suck? In any case, we can&#8217;t<br />
use any geometry amplification scheme (including ATI&#8217;s truform) in conjunction<br />
with stencil shadow volumes.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report/feed</wfw:commentRss>
		</item>
		<item>
		<title>Shadow Volume</title>
		<link>http://doom-ed.com/blog/2002/03/15/shadow-volume</link>
		<comments>http://doom-ed.com/blog/2002/03/15/shadow-volume#comments</comments>
		<pubDate>Fri, 15 Mar 2002 17:36:02 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/03/15/shadow-volume</guid>
		<description><![CDATA[Mark Kilgard and Cass Everitt at Nvidia have released a paper on shadow volume
rendering with several interesting bits in it. They also include a small
document that I wrote a couple years ago about my discovery process during
the development of some of the early Doom technology.
http://developer.nvidia.com/view.asp?IO=robust_shadow_volumes
8:50 pm addendum: Mark Kilgard at Nvidia said that the current [...]]]></description>
			<content:encoded><![CDATA[<p>Mark Kilgard and Cass Everitt at Nvidia have released a paper on shadow volume<br />
rendering with several interesting bits in it. They also include a small<br />
document that I wrote a couple years ago about my discovery process during<br />
the development of some of the early Doom technology.</p>
<p>http://developer.nvidia.com/view.asp?IO=robust_shadow_volumes</p>
<p>8:50 pm addendum: Mark Kilgard at Nvidia said that the current drivers already<br />
support the vertex program option to be invarint with the fixed function path,<br />
and that it turned out to be one instruction FASTER, not slower.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/03/15/shadow-volume/feed</wfw:commentRss>
		</item>
		<item>
		<title>Nvidia vs. ATI</title>
		<link>http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati</link>
		<comments>http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati#comments</comments>
		<pubDate>Mon, 11 Feb 2002 13:43:58 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati</guid>
		<description><![CDATA[Last month I wrote the Radeon 8500 support for Doom. The bottom line is that
it will be a fine card for the game, but the details are sort of interesting.
I had a pre-production board before Siggraph last year, and we were discussing
the possibility of letting ATI show a Doom demo behind closed doors on it. [...]]]></description>
			<content:encoded><![CDATA[<p>Last month I wrote the Radeon 8500 support for Doom. The bottom line is that<br />
it will be a fine card for the game, but the details are sort of interesting.</p>
<p>I had a pre-production board before Siggraph last year, and we were discussing<br />
the possibility of letting ATI show a Doom demo behind closed doors on it. We<br />
were all very busy at the time, but I took a shot at bringing up support over<br />
a weekend. I hadn&#8217;t coded any of the support for the custom ATI extensions<br />
yet, but I ran the game using only standard OpenGL calls (this is not a<br />
supported path, because without bump mapping everything looks horrible) to see<br />
how it would do. It didn&#8217;t even draw the console correctly, because they had<br />
driver bugs with texGen. I thought the odds were very long against having all<br />
the new, untested extensions working properly, so I pushed off working on it<br />
until they had revved the drivers a few more times.</p>
<p>My judgment was colored by the experience of bringing up Doom on the original<br />
Radeon card a year earlier, which involved chasing a lot of driver bugs. Note<br />
that ATI was very responsive, working closely with me on it, and we were able<br />
to get everything resolved, but I still had no expectation that things would<br />
work correctly the first time.</p>
<p>Nvidia&#8217;s OpenGL drivers are my &#8220;gold standard&#8221;, and it has been quite a while<br />
since I have had to report a problem to them, and even their brand new<br />
extensions work as documented the first time I try them. When I have a<br />
problem on an Nvidia, I assume that it is my fault. With anyone else&#8217;s<br />
drivers, I assume it is their fault. This has turned out correct almost all<br />
the time. I have heard more anecdotal reports of instability on some systems<br />
with Nivida drivers recently, but I track stability separately from<br />
correctness, because it can be influenced by so many outside factors.</p>
<p>ATI had been patiently pestering me about support for a few months, so last<br />
month I finally took another stab at it. The standard OpenGL path worked<br />
flawlessly, so I set about taking advantage of all the 8500 specific features.<br />
As expected, I did run into more driver bugs, but ATI got me fixes rapidly,<br />
and we soon had everything working properly. It is interesting to contrast<br />
the Nvidia and ATI functionality:</p>
<p>The vertex program extensions provide almost the same functionality. The ATI<br />
hardware is a little bit more capable, but not in any way that I care about.<br />
The ATI extension interface is massively more painful to use than the text<br />
parsing interface from nvidia. On the plus side, the ATI vertex programs are<br />
invariant with the normal OpenGL vertex processing, which allowed me to reuse<br />
a bunch of code. The Nvidia vertex programs can&#8217;t be used in multipass<br />
algorithms with standard OpenGL passes, because they generate tiny differences<br />
in depth values, forcing you to implement EVERYTHING with vertex programs.<br />
Nvidia is planning on making this optional in the future, at a slight speed<br />
cost.</p>
<p>I have mixed feelings about the vertex object / vertex array range extensions.<br />
ATI&#8217;s extension seems more &#8220;right&#8221; in that it automatically handles<br />
synchronization by default, and could be implemented as a wire protocol, but<br />
there are advantages to the VAR extension being simply a hint. It is easy to<br />
have a VAR program just fall back to normal virtual memory by not setting the<br />
hint and using malloc, but ATI&#8217;s extension requires different function calls<br />
for using vertex objects and normal vertex arrays.</p>
<p>The fragment level processing is clearly way better on the 8500 than on the<br />
Nvidia products, including the latest GF4. You have six individual textures,<br />
but you can access the textures twice, giving up to eleven possible texture<br />
accesses in a single pass, and the dependent texture operation is much more<br />
sensible. This wound up being a perfect fit for Doom, because the standard<br />
path could be implemented with six unique textures, but required one texture<br />
(a normalization cube map) to be accessed twice. The vast majority of Doom<br />
light / surface interaction rendering will be a single pass on the 8500, in<br />
contrast to two or three passes, depending on the number of color components<br />
in a light, for GF3/GF4 (*note GF4 bitching later on).</p>
<p>Initial performance testing was interesting. I set up three extreme cases to<br />
exercise different characteristics:</p>
<p>A test of the non-textured stencil shadow speed showed a GF3 about 20% faster<br />
than the 8500. I believe that Nvidia has a slightly higher performance memory<br />
architecture.</p>
<p>A test of light interaction speed initially had the 8500 significantly slower<br />
than the GF3, which was shocking due to the difference in pass count. ATI<br />
identified some driver issues, and the speed came around so that the 8500 was<br />
faster in all combinations of texture attributes, in some cases 30+% more.<br />
This was about what I expected, given the large savings in memory traffic by<br />
doing everything in a single pass.</p>
<p>A high polygon count scene that was more representative of real game graphics<br />
under heavy load gave a surprising result. I was expecting ATI to clobber<br />
Nvidia here due to the much lower triangle count and MUCH lower state change<br />
functional overhead from the single pass interaction rendering, but they came<br />
out slower. ATI has identified an issue that is likely causing the unexpected<br />
performance, but it may not be something that can be worked around on current<br />
hardware.</p>
<p>I can set up scenes and parameters where either card can win, but I think that<br />
current Nvidia cards are still a somewhat safer bet for consistent performance<br />
and quality.</p>
<p>On the topic of current Nvidia cards:</p>
<p>Do not buy a GeForce4-MX for Doom.</p>
<p>Nvidia has really made a mess of the naming conventions here. I always<br />
thought it was bad enough that GF2 was just a speed bumped GF1, while GF3 had<br />
significant architectural improvements over GF2. I expected GF4 to be the<br />
speed bumped GF3, but calling the NV17 GF4-MX really sucks.</p>
<p>GF4-MX will still run Doom properly, but it will be using the NV10 codepath<br />
with only two texture units and no vertex shaders. A GF3 or 8500 will be<br />
much better performers. The GF4-MX may still be the card of choice for many<br />
people depending on pricing, especially considering that many games won&#8217;t use<br />
four textures and vertex programs, but damn, I wish they had named it<br />
something else.</p>
<p>As usual, there will be better cards available from both Nvidia and ATI by the<br />
time we ship the game.</p>
<p>8:50 pm addendum: Mark Kilgard at Nvidia said that the current drivers already<br />
support the vertex program option to be invarint with the fixed function path,<br />
and that it turned out to be one instruction FASTER, not slower.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 2 Source Code</title>
		<link>http://doom-ed.com/blog/2001/12/21/quake-2-source-code</link>
		<comments>http://doom-ed.com/blog/2001/12/21/quake-2-source-code#comments</comments>
		<pubDate>Fri, 21 Dec 2001 17:07:50 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2001/12/21/quake-2-source-code</guid>
		<description><![CDATA[The Quake 2 source code is now available for download, licensed under the GPL.
ftp://ftp.idsoftware.com/idstuff/source/quake2.zip
As with previous source code releases, the game data remains under the
original copyright and license, and cannot be freely distributed. If you
create a true total conversion, you can give (or sell) a complete package
away, as long as you abide by the GPL [...]]]></description>
			<content:encoded><![CDATA[<p>The Quake 2 source code is now available for download, licensed under the GPL.</p>
<p>ftp://ftp.idsoftware.com/idstuff/source/quake2.zip</p>
<p>As with previous source code releases, the game data remains under the<br />
original copyright and license, and cannot be freely distributed. If you<br />
create a true total conversion, you can give (or sell) a complete package<br />
away, as long as you abide by the GPL source code license. If your projects<br />
use the original Quake 2 media, the media must come from a normal, purchased<br />
copy of the game.</p>
<p>I&#8217;m sure I will catch some flack about increased cheating after the source<br />
release, but there are plenty of Q2 cheats already out there, so you are<br />
already in the position of having to trust the other players to a degree. The<br />
problem is really only solvable by relying on the community to police itself,<br />
because it is a fundamentally unwinnable technical battle to make a completely<br />
cheat proof game of this type. Play with your friends.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2001/12/21/quake-2-source-code/feed</wfw:commentRss>
		</item>
		<item>
		<title>Driver Optimization</title>
		<link>http://doom-ed.com/blog/2001/11/16/driver-optimization</link>
		<comments>http://doom-ed.com/blog/2001/11/16/driver-optimization#comments</comments>
		<pubDate>Fri, 16 Nov 2001 21:22:17 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2001/11/16/driver-optimization</guid>
		<description><![CDATA[Driver optimizations have been discussed a lot lately because of the quake3
name checking in ATI&#8217;s recent drivers, so I am going to lay out my
position on the subject.
There are many driver optimizations that are pure improvements in all cases,
with no negative effects. The difficult decisions come up when it comes to
&#8220;trades&#8221; of various kinds, where [...]]]></description>
			<content:encoded><![CDATA[<p>Driver optimizations have been discussed a lot lately because of the quake3<br />
name checking in ATI&#8217;s recent drivers, so I am going to lay out my<br />
position on the subject.</p>
<p>There are many driver optimizations that are pure improvements in all cases,<br />
with no negative effects. The difficult decisions come up when it comes to<br />
&#8220;trades&#8221; of various kinds, where a change will give an increase in<br />
performance, but at a cost.</p>
<p>Relative performance trades. Part of being a driver writer is being able to<br />
say &#8220;I don&#8217;t care if stippled, anti-aliased points with texturing go slow&#8221;,<br />
and optimizing accordingly. Some hardware features, like caches and<br />
hierarchical buffers, may be advantages on some apps, and disadvantages on<br />
others. Command buffer sizes often tune differently for different<br />
applications.</p>
<p>Quality trades. There is a small amount of wiggle room in the specs for pixel<br />
level variability, and some performance gains can be had by leaning towards<br />
the minimums. Most quality trades would actually be conformance trades,<br />
because the results are not exactly conformant, but they still do &#8220;roughly&#8221;<br />
the right thing from a visual standpoint. Compressing textures automatically,<br />
avoiding blending of very faint transparent pixels, using a 16 bit depth<br />
buffer, etc. A good application will allow the user to make most of these<br />
choices directly, but there is good call for having driver preference panels<br />
to enable these types of changes on naive applications. Many drivers now<br />
allow you to quality trade in an opposite manner &#8212; slowing application<br />
performance by turning on anti-aliasing or anisotropic texture filtering.</p>
<p>Conformance trades. Most conformance trades that happen with drivers are<br />
unintentional, where the slower, more general fallback case just didn&#8217;t get<br />
called when it was supposed to, because the driver didn&#8217;t check for a certain<br />
combination to exit some specially optimized path. However, there are<br />
optimizations that can give performance improvements in ways that make it<br />
impossible to remain conformant. For example, a driver could choose to skip<br />
storing of a color value before it is passed on to the hardware, which would<br />
save a few cycles, but make it impossible to correctly answer<br />
glGetFloatv( GL_CURRENT_COLOR, buffer ).</p>
<p>Normally, driver writers will just pick their priorities and make the trades,<br />
but sometimes there will be a desire to make different trades in different<br />
circumstances, so as to get the best of both worlds.</p>
<p>Explicit application hints are a nice way to offer different performance<br />
characteristics, but that requires cooperation from the application, so it<br />
doesn&#8217;t help in an ongoing benchmark battle. OpenGL&#8217;s glHint() call is the<br />
right thought, but not really set up as flexibly as you would like. Explicit<br />
extensions are probably the right way to expose performance trades, but it<br />
isn&#8217;t clear to me that any conformant trade will be a big enough difference<br />
to add code for.</p>
<p>End-user selectable optimizations. Put a selection option in the driver<br />
properties window to allow the user to choose which application class they<br />
would like to be favored in some way. This has been done many times, and is a<br />
reasonable way to do things. Most users would never touch the setting, so<br />
some applications may be slightly faster or slower than in their &#8220;optimal<br />
benchmark mode&#8221;.</p>
<p>Attempt to guess the application from app names, window strings, etc. Drivers<br />
are sometimes forced to do this to work around bugs in established software,<br />
and occasionally they will try to use this as a cue for certain optimizations.</p>
<p>My positions:</p>
<p>Making any automatic optimization based on a benchmark name is wrong. It<br />
subverts the purpose of benchmarking, which is to gauge how a similar class of<br />
applications will perform on a tested configuration, not just how the single<br />
application chosen as representative performs.</p>
<p>It is never acceptable to have the driver automatically make a conformance<br />
tradeoff, even if they are positive that it won&#8217;t make any difference. The<br />
reason is that applications evolve, and there is no guarantee that a future<br />
release won&#8217;t have different assumptions, causing the upgrade to misbehave.<br />
We have seen this in practice with Quake3 and derivatives, where vendors<br />
assumed something about what may or may not be enabled during a compiled<br />
vertex array call. Most of these are just mistakes, or, occasionally,<br />
laziness.</p>
<p>Allowing a driver to present a non-conformant option for the user to select is<br />
an interesting question. I know that as a developer, I would get hate mail<br />
from users when a point release breaks on their whiz-bang optimized driver,<br />
just like I do with overclocked CPUs, and I would get the same &#8220;but it works<br />
with everything else!&#8221; response when I tell them to put it back to normal. On<br />
the other hand, being able to tweak around with that sort of think is fun for<br />
technically inclined users. I lean towards frowning on it, because it is a<br />
slippery slope from there down in to &#8220;cheating drivers&#8221; of the see-through-<br />
walls variety.</p>
<p>Quality trades are here to stay, with anti-aliasing, anisotropic texture<br />
filtering, and other options being positive trades that a user can make, and<br />
allowing various texture memory optimizations can be a very nice thing for a<br />
user trying to get some games to work well. However, it is still important<br />
that it start from a completely conformant state by default. This is one area<br />
where application naming can be used reasonably by the driver, to maintain<br />
user selected per-application modifiers.</p>
<p>I&#8217;m not fanatical on any of this, because the overriding purpose of software<br />
is to be useful, rather than correct, but the days of game-specific mini-<br />
drivers that can just barely cut it are past, and we should demand more from<br />
the remaining vendors.</p>
<p>Also, excessive optimization is the cause of quite a bit of ill user<br />
experience with computers. Byzantine code paths extract costs as long as they<br />
exist, not just as they are written.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2001/11/16/driver-optimization/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 on a GeForce 3</title>
		<link>http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3</link>
		<comments>http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3#comments</comments>
		<pubDate>Thu, 22 Feb 2001 19:02:26 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3</guid>
		<description><![CDATA[I just got back from Tokyo, where I demonstrated our new engine
running under MacOS-X with a GeForce 3 card. We had quite a bit of
discussion about whether we should be showing anything at all,
considering how far away we are from having a title on the shelves, so
we probably aren&#8217;t going to be showing it anywhere [...]]]></description>
			<content:encoded><![CDATA[<p>I just got back from Tokyo, where I demonstrated our new engine<br />
running under MacOS-X with a GeForce 3 card. We had quite a bit of<br />
discussion about whether we should be showing anything at all,<br />
considering how far away we are from having a title on the shelves, so<br />
we probably aren&#8217;t going to be showing it anywhere else for quite<br />
a while.</p>
<p>We do run a bit better on a high end wintel system, but the Apple<br />
performance is still quite good, especially considering the short amount<br />
of time that the drivers had before the event.</p>
<p>It is still our intention to have a simultaneous release of the next<br />
product on Windows, MacOS-X, and Linux.</p>
<p>Here is a dump on the GeForce 3 that I have been seriously working<br />
with for a few weeks now:</p>
<p>The short answer is that the GeForce 3 is fantastic. I haven&#8217;t had such an<br />
impression of raising the performance bar since the Voodoo 2 came out, and<br />
there are a ton of new features for programmers to play with.</p>
<p>Graphics programmers should run out and get one at the earliest possible<br />
time. For consumers, it will be a tougher call. There aren&#8217;t any<br />
applications our right now that take proper advantage of it, but you should<br />
still be quite a bit faster at everything than GF2, especially with<br />
anti-aliasing. Balance that against whatever the price turns out to be.</p>
<p>While the Radeon is a good effort in many ways, it has enough shortfalls<br />
that I still generally call the GeForce 2 ultra the best card you can buy<br />
right now, so Nvidia is basically dethroning their own product.</p>
<p>It is somewhat unfortunate that it is labeled GeForce 3, because GeForce<br />
2 was just a speed bump of GeForce, while GF3 is a major architectural<br />
change. I wish they had called the GF2 something else.</p>
<p>The things that are good about it:</p>
<p>Lots of values have additional internal precision, like texture coordinates<br />
and rasterization coordinates. There are only a few places where this<br />
matters, but it is nice to be cleaning up. Rasterization precision is about<br />
the last thing that the multi-thousand dollar workstation boards still do<br />
any better than the consumer cards.</p>
<p>Adding more texture units and more register combiners is an obvious<br />
evolutionary step.</p>
<p>An interesting technical aside: when I first changed something I was<br />
doing with five single or dual texture passes on a GF to something that<br />
only took two quad texture passes on a GF3, I got a surprisingly modest<br />
speedup. It turned out that the texture filtering and bandwidth was the<br />
dominant factor, not the frame buffer traffic that was saved with more<br />
texture units. When I turned off anisotropic filtering and used<br />
compressed textures, the GF3 version became twice as fast.</p>
<p>The 8x anisotropic filtering looks really nice, but it has a 30%+ speed<br />
cost. For existing games where you have speed to burn, it is probably a<br />
nice thing to force on, but it is a bit much for me to enable on the current<br />
project. Radeon supports 16x aniso at a smaller speed cost, but not in<br />
conjunction with trilinear, and something is broken in the chip that<br />
makes the filtering jump around with triangular rasterization<br />
dependencies.</p>
<p>The depth buffer optimizations are similar to what the Radeon provides,<br />
giving almost everything some measure of speedup, and larger ones<br />
available in some cases with some redesign.</p>
<p>3D textures are implemented with the full, complete generality. Radeon<br />
offers 3D textures, but without mip mapping and in a non-orthogonal<br />
manner (taking up two texture units).</p>
<p>Vertex programs are probably the most radical new feature, and, unlike<br />
most &#8220;radical new features&#8221;, actually turn out to be pretty damn good.<br />
The instruction language is clear and obvious, with wonderful features<br />
like free arbitrary swizzle and negate on each operand, and the obvious<br />
things you want for graphics like dot product instructions.</p>
<p>The vertex program instructions are what SSE should have been.</p>
<p>A complex setup for a four-texture rendering pass is way easier to<br />
understand with a vertex program than with a ton of texgen/texture<br />
matrix calls, and it lets you do things that you just couldn&#8217;t do hardware<br />
accelerated at all before. Changing the model from fixed function data<br />
like normals, colors, and texcoords to generalized attributes is very<br />
important for future progress.</p>
<p>Here, I think Microsoft and DX8 are providing a very good benefit by<br />
forcing a single vertex program interface down all the hardware<br />
vendor&#8217;s throats.</p>
<p>This one is truly stunning: the drivers just worked for all the new<br />
features that I tried. I have tested a lot of pre-production 3D cards, and it<br />
has never been this smooth.</p>
<p>The things that are indifferent:</p>
<p>I&#8217;m still not a big believer in hardware accelerated curve tessellation.<br />
I&#8217;m not going to go over all the reasons again, but I would have rather<br />
seen the features left off and ended up with a cheaper part.</p>
<p>The shadow map support is good to get in, but I am still unconvinced<br />
that a fully general engine can be produced with acceptable quality using<br />
shadow maps for point lights. I spent a while working with shadow<br />
buffers last year, and I couldn&#8217;t get satisfactory results. I will revisit<br />
that work now that I have GeForce 3 cards, and directly compare it with my<br />
current approach.</p>
<p>At high triangle rates, the index bandwidth can get to be a significant<br />
thing. Other cards that allow static index buffers as well as static vertex<br />
buffers will have situations where they provide higher application speed.<br />
Still, we do get great throughput on the GF3 using vertex array range<br />
and glDrawElements.</p>
<p>The things that are bad about it:</p>
<p>Vertex programs aren&#8217;t invariant with the fixed function geometry paths.<br />
That means that you can&#8217;t mix vertex program passes with normal<br />
passes in a multipass algorithm. This is annoying, and shouldn&#8217;t have<br />
happened.</p>
<p>Now we come to the pixel shaders, where I have the most serious issues.<br />
I can just ignore this most of the time, but the way the pixel shader<br />
functionality turned out is painfully limited, and not what it should have<br />
been.</p>
<p>DX8 tries to pretend that pixel shaders live on hardware that is a lot<br />
more general than the reality.</p>
<p>Nvidia&#8217;s OpenGL extensions expose things much more the way they<br />
actually are: the existing register combiners functionality extended to<br />
eight stages with a couple tweaks, and the texture lookup engine is<br />
configurable to interact between textures in a list of specific ways.</p>
<p>I&#8217;m sure it started out as a better design, but it apparently got cut and cut<br />
until it really looks like the old BumpEnvMap feature writ large: it does<br />
a few specific special effects that were deemed important, at the expense<br />
of a properly general solution.</p>
<p>Yes, it does full bumpy cubic environment mapping, but you still can&#8217;t<br />
just do some math ops and look the result up in a texture. I was<br />
disappointed on this count with the Radeon as well, which was just<br />
slightly too hardwired to the DX BumpEnvMap capabilities to allow<br />
more general dependent texture use.</p>
<p>Enshrining the capabilities of this mess in DX8 sucks. Other companies<br />
had potentially better approaches, but they are now forced to dumb them<br />
down to the level of the GF3 for the sake of compatibility. Hopefully<br />
we can still see some of the extra flexibility in OpenGL extensions.</p>
<p>The future:</p>
<p>I think things are going to really clean up in the next couple years. All<br />
of my advocacy is focused on making sure that there will be a<br />
completely clean and flexible interface for me to target in the engine<br />
after DOOM, and I think it is going to happen.</p>
<p>The market may have shrunk to just ATI and Nvidia as significant<br />
players. Matrox, 3D labs, or one of the dormant companies may surprise<br />
us all, but the pace is pretty frantic.</p>
<p>I think I would be a little more comfortable if there was a third major<br />
player competing, but I can&#8217;t fault Nvidia&#8217;s path to success.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Birth of Doom 3</title>
		<link>http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3</link>
		<comments>http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3#comments</comments>
		<pubDate>Thu, 01 Jun 2000 00:51:45 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3</guid>
		<description><![CDATA[Well, this is going to be an interesting .plan update.
Most of this is not really public business, but if some things aren&#8217;t stated
explicitly, it will reflect unfairly on someone.
As many people have heard discussed, there was quite a desire to remake DOOM
as our next project after Q3. Discussing it brought an almost palpable thrill
to most [...]]]></description>
			<content:encoded><![CDATA[<p>Well, this is going to be an interesting .plan update.</p>
<p>Most of this is not really public business, but if some things aren&#8217;t stated<br />
explicitly, it will reflect unfairly on someone.</p>
<p>As many people have heard discussed, there was quite a desire to remake DOOM<br />
as our next project after Q3. Discussing it brought an almost palpable thrill<br />
to most of the employees, but Adrian had a strong enough dislike for the idea<br />
that it was shot down over and over again.</p>
<p>Design work on an alternate game has been going on in parallel with the<br />
mission pack development and my research work.</p>
<p>Several factors, including a general lack of enthusiasm for the proposed plan,<br />
the warmth that Wolfenstien was met with at E3, and excitement about what<br />
we can do with the latest rendering technology were making it seem more and<br />
more like we weren&#8217;t going down the right path.</p>
<p>I discussed it with some of the other guys, and we decided that it was<br />
important enough to drag the company through an unpleasant fight over it.</p>
<p>An ultimatum was issued to Kevin and Adrian(who control >50% of the company):<br />
We are working on DOOM for the next project unless you fire us.</p>
<p>Obviously no fun for anyone involved, but the project direction was changed,<br />
new hires have been expedited, and the design work has begun.</p>
<p>It wasn&#8217;t planned to announce this soon, but here it is: We are working on a<br />
new DOOM game, focusing on the single player game experience, and using brand<br />
new technology in almost every aspect of it. That is all we are prepared to<br />
say about the game for quite some time, so don&#8217;t push for interviews. We<br />
will talk about it when things are actually built, to avoid giving<br />
misleading comments.</p>
<p>It went smoother than expected, but the other shoe dropped yesterday.</p>
<p>Kevin and Adrian fired Paul Steed in retaliation, over my opposition.</p>
<p>Paul has certainly done things in the past that could be grounds for<br />
dismissal, but this was retaliatory for him being among the &#8220;conspirators&#8221;.</p>
<p>I happen to think Paul was damn good at his job, and that he was going to be<br />
one of the most valuable contributors to DOOM.</p>
<p>We need to hire two new modeler/animator/cinematic director types. If you<br />
have a significant commercial track record in all three areas, and consider<br />
yourself at the top of your field, send your resume to Kevin Cloud.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>Comments on the Latest Cards</title>
		<link>http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards</link>
		<comments>http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards#comments</comments>
		<pubDate>Wed, 17 May 2000 21:10:18 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards</guid>
		<description><![CDATA[I have gotten a lot of requests for comments on the latest crop of video
cards, so here is my initial technical evaluation. We have played with
some early versions, but this is a paper evaluation. I am not in a position
to judge 2D GDI issues or TV/DVD issues, so this is just 3D commentary.
Nvidia
Marketing silliness: saying [...]]]></description>
			<content:encoded><![CDATA[<p>I have gotten a lot of requests for comments on the latest crop of video<br />
cards, so here is my initial technical evaluation. We have played with<br />
some early versions, but this is a paper evaluation. I am not in a position<br />
to judge 2D GDI issues or TV/DVD issues, so this is just 3D commentary.</p>
<p>Nvidia<br />
Marketing silliness: saying &#8220;seven operations on a pixel&#8221; for a dual texture<br />
chip. Yes, I like NV_register_combiners a lot, but come on&#8230;</p>
<p>The DDR GeForce is the reining champ of 3D cards. Of the shipping boards, it<br />
is basically better than everyone at every aspect of 3D graphics, and<br />
pioneered some features that are going to be very important: signed pixel<br />
math, dot product blending, and cubic environment maps.</p>
<p>The GeForce2 is just a speed bumped GeForce with a few tweaks, but that&#8217;s not<br />
a bad thing. Nvidia will have far and away the tightest drivers for quite<br />
some time, and that often means more than a lot of new features in the real<br />
world.</p>
<p>The nvidia register combiners are highly programmable, and can often save a<br />
rendering pass or allow a somewhat higher quality calculation, but on the<br />
whole, I would take ATI&#8217;s third texture for flexibility.</p>
<p>Nvidia will probably continue to hit the best framerates in benchmarks at low<br />
resolution, because they have flexible hardware with geometry acceleration<br />
and well-tuned drivers.</p>
<p>GeForce is my baseline for current rendering work, so I can wholeheartedly<br />
recommend it.</p>
<p>ATI<br />
Marketing silliness: &#8220;charisma engine&#8221; and &#8220;pixel tapestry&#8221; are silly names<br />
for vertex and pixel processing that are straightforward improvements over<br />
existing methods. Sony is probably to blame for starting that.</p>
<p>The Radeon has the best feature set available, with several advantages over<br />
GeForce:</p>
<p>A third texture unit per pixel<br />
Three dimensional textures<br />
Dependent texture reads (bump env map)<br />
Greater internal color precision.<br />
User clip planes orthogonal to all rasterization modes.<br />
More powerful vertex blending operations.<br />
The shadow id map support may be useful, but my work with shadow buffers have<br />
shown them to have significant limitations for global use in a game.</p>
<p>On paper, it is better than GeForce in almost every way except that it is<br />
limited to a maximum of two pixels per clock while GeForce can do four. This<br />
comes into play when the pixels don&#8217;t do as much memory access, for example<br />
when just drawing shadow planes to the depth/stencil buffer, or when drawing<br />
in roughly front to back order and many of the later pixels depth fail,<br />
avoiding the color buffer writes.</p>
<p>Depending on the application and algorithm, this can be anywhere from<br />
basically no benefit when doing 32 bit blended multi-pass, dual texture<br />
rendering to nearly double the performance for 16 bit rendering with<br />
compressed textures. In any case, a similarly clocked GeForce(2) should<br />
somewhat outperform a Radeon on today&#8217;s games when fill rate limited. Future<br />
games that do a significant number of rendering passes on the entire world<br />
may go back in ATI&#8217;s favor if they can use the third texture unit, but I doubt<br />
it will be all that common.</p>
<p>The real issue is how quickly ATI can deliver fully clocked production boards,<br />
bring up stable drivers, and wring all the performance out of the hardware.<br />
This is a very different beast than the Rage128. I would definitely recommend<br />
waiting on some consumer reviews to check for teething problems before<br />
upgrading to a Radeon, but if things go well, ATI may give nvidia a serious<br />
run for their money this year.</p>
<p>3DFX<br />
Marketing silliness: Implying that a voodoo 5 is of a different class than a<br />
voodoo 4 isn&#8217;t right. Voodoo 4 max / ultra / SLI / dual / quad or something<br />
would have been more forthright.</p>
<p>Rasterization feature wise, voodoo4 is just catching up to the original TNT.<br />
We finally have 32 bit color and stencil. Yeah.</p>
<p>There aren&#8217;t any geometry features.</p>
<p>The T buffer is really nothing more than an accumulation buffer that is<br />
averaged together during video scanout. This same combining of separate<br />
buffers can be done by any modern graphics card if they are set up for it<br />
(although they will lose two bits of color precision in the process). At<br />
around 60 fps there is a slight performance win by doing it at video scannout<br />
time, but at 30 fps it is actually less memory traffic to do it explicitly.<br />
Video scan tricks also usually don&#8217;t work in windowed modes.</p>
<p>The real unique feature of the voodoo5 is subpixel jittering during<br />
rasterization, which can&#8217;t reasonably be emulated by other hardware. This<br />
does indeed improve the quality of anti-aliasing, although I think 3dfx might<br />
be pushing it a bit by saying their 4 sample jittering is as good as 16<br />
sample unjittered.</p>
<p>The saving grace of the voodoo5 is the scalability. Because it only uses SDR<br />
ram, a dual chip Voodoo5 isn&#8217;t all that much faster than some other single<br />
chip cards, but the quad chip card has over twice the pixel fill rate of the<br />
nearest competitor. That is a huge increment. Voodoo5 6000 should win every<br />
benchmark that becomes fill rate limited.</p>
<p>I haven&#8217;t been able to honestly recommend a voodoo3 to people for a long<br />
time, unless they had a favorite glide game or wanted early linux Xfree 4.0<br />
3D support. Now (well, soon), a Voodoo5 6000 should make all of today&#8217;s<br />
games look better than any other card. You can get over twice as many pixel<br />
samples, and have them jittered and blended together for anti-aliasing.</p>
<p>It won&#8217;t be able to hit Q3 frame rates as high as GeForce, but if you have a<br />
high end processor there really may not be all that much difference for you<br />
between 100fps and 80fps unless you are playing hardcore competitive and<br />
can&#8217;t stand the occasional drop below 60fps.</p>
<p>There are two drawbacks: it&#8217;s expensive, and it won&#8217;t take advantage of the<br />
new rasterization features coming in future games. It probably wouldn&#8217;t be<br />
wise to buy a voodoo5 if you plan on keeping it for two years.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mojave Desert</title>
		<link>http://doom-ed.com/blog/2000/05/14/mojave-desert</link>
		<comments>http://doom-ed.com/blog/2000/05/14/mojave-desert#comments</comments>
		<pubDate>Sun, 14 May 2000 07:13:45 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/14/mojave-desert</guid>
		<description><![CDATA[I stayed a couple days after E3 to attend the SORAC amateur rocket launch.
I have provided some sponsorship to two of the teams competing for the CATS
(Cheap Access to Space) rocketry prize, and it was a nice opportunity to get
out and meet some of the people.
It is interesting how similar the activity is around an [...]]]></description>
			<content:encoded><![CDATA[<p>I stayed a couple days after E3 to attend the SORAC amateur rocket launch.<br />
I have provided some sponsorship to two of the teams competing for the CATS<br />
(Cheap Access to Space) rocketry prize, and it was a nice opportunity to get<br />
out and meet some of the people.</p>
<p>It is interesting how similar the activity is around an experimental rocket<br />
launch, going to a race track with an experimental car, and putting out a<br />
beta version of new software is. Lots of &#8220;twenty more minutes!&#8221;, and lots<br />
of well-wishers waiting around while the people on the critical path sweat<br />
over what they are doing.</p>
<p>Mere minutes before we absolutely, positively needed to leave to catch our<br />
plane flight, they started the countdown. The rocket launched impressively,<br />
but broke apart at a relatively low altitude. Ouch. It was a hybrid, so<br />
there wasn&#8217;t really an explosion, but watching the debris rain down wasn&#8217;t<br />
very heartening. Times like that, I definitely appreciate working in<br />
software. &#8220;Run it again, with a breakpoint!&#8221;</p>
<p>Note to self: pasty-skinned programmers ought not stand out in the Mojave<br />
desert for multiple hours.</p>
<p>http://www.space-frontier.org/Events/CATSPRIZE_1/<br />
http://www.energyrs.com/sorac/sorac.htm<br />
http://www.jpaerospace.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/14/mojave-desert/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 1 Utilities</title>
		<link>http://doom-ed.com/blog/2000/05/09/quake-1-utilities</link>
		<comments>http://doom-ed.com/blog/2000/05/09/quake-1-utilities#comments</comments>
		<pubDate>Tue, 09 May 2000 18:02:51 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/09/quake-1-utilities</guid>
		<description><![CDATA[And the Q1 utilities are now also available under the GPL in
source/q1tools_gpl.tgz.
]]></description>
			<content:encoded><![CDATA[<p>And the Q1 utilities are now also available under the GPL in<br />
source/q1tools_gpl.tgz.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/09/quake-1-utilities/feed</wfw:commentRss>
		</item>
		<item>
		<title>QC Files</title>
		<link>http://doom-ed.com/blog/2000/05/08/qc-files</link>
		<comments>http://doom-ed.com/blog/2000/05/08/qc-files#comments</comments>
		<pubDate>Tue, 09 May 2000 00:41:25 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/08/qc-files</guid>
		<description><![CDATA[The .qc files for quake1/quakeworld are now available under the GPL
in source/qw-qc.tar.gx on out ftp site. This was an oversight on my
part in the original release.
Thanks to the QuakeForge team for doing the grunt work of the preparation.
]]></description>
			<content:encoded><![CDATA[<p>The .qc files for quake1/quakeworld are now available under the GPL<br />
in source/qw-qc.tar.gx on out ftp site. This was an oversight on my<br />
part in the original release.</p>
<p>Thanks to the QuakeForge team for doing the grunt work of the preparation.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/08/qc-files/feed</wfw:commentRss>
		</item>
		<item>
		<title>More Bits per Color</title>
		<link>http://doom-ed.com/blog/2000/04/29/more-bits-per-color</link>
		<comments>http://doom-ed.com/blog/2000/04/29/more-bits-per-color#comments</comments>
		<pubDate>Sat, 29 Apr 2000 05:23:08 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/04/29/more-bits-per-color</guid>
		<description><![CDATA[We need more bits per color component in our 3D accelerators.
I have been pushing for a couple more bits of range for several years now,
but I now extend that to wanting full 16 bit floating point colors throughout
the graphics pipeline. A sign bit, ten bits of mantissa, and five bits of
exponent (possibly trading a bit [...]]]></description>
			<content:encoded><![CDATA[<p>We need more bits per color component in our 3D accelerators.</p>
<p>I have been pushing for a couple more bits of range for several years now,<br />
but I now extend that to wanting full 16 bit floating point colors throughout<br />
the graphics pipeline. A sign bit, ten bits of mantissa, and five bits of<br />
exponent (possibly trading a bit or two between the mantissa and exponent).<br />
Even that isn&#8217;t all you could want, but it is the rational step.</p>
<p>It is turning out that I need a destination alpha channel for a lot of the<br />
new rendering algorithms, so intermediate solutions like 10/12/10 RGB<br />
formats aren&#8217;t a good idea. Higher internal precision with dithering to 32<br />
bit pixels would have some benefit, but dithered intermediate results can<br />
easily start piling up the errors when passed over many times, as we have<br />
seen with 5/6/5 rendering.</p>
<p>Eight bits of precision isn&#8217;t enough even for full range static image<br />
display. Images with a wide range usually come out fine, but restricted<br />
range images can easily show banding on a 24-bit display. Digital television<br />
specifies 10 bits of precision, and many printing operations are performed<br />
with 12 bits of precision.</p>
<p>The situation becomes much worse when you consider the losses after multiple<br />
operations. As a trivial case, consider having multiple lights on a wall,<br />
with their contribution to a pixel determined by a texture lookup. A single<br />
light will fall off towards 0 some distance away, and if it covers a large<br />
area, it will have visible bands as the light adds one unit, two units, etc.<br />
Each additional light from the same relative distance stacks its contribution<br />
on top of the earlier ones, which magnifies the amount of the step between<br />
bands: instead of going 0,1,2, it goes 0,2,4, etc. Pile a few lights up like<br />
this and look towards the dimmer area of the falloff, and you can believe you<br />
are back in 256-color land.</p>
<p>There are other more subtle issues, like the loss of potential result values<br />
from repeated squarings of input values, and clamping issues when you sum up<br />
multiple incident lights before modulating down by a material.</p>
<p>Range is even more clear cut. There are some values that have intrinsic<br />
ranges of 0.0 to 1.0, like factors of reflection and filtering. Normalized<br />
vectors have a range of -1.0 to 1.0. However, the most central quantity in<br />
rendering, light, is completely unbounded. We want a LOT more than a 0.0 to<br />
1.0 range. Q3 hacks the gamma tables to sacrifice a bit of precision to get<br />
a 0.0 to 2.0 range, but I wanted more than that for even primitive rendering<br />
techniques. To accurately model the full human sensable range of light<br />
values, you would need more than even a five bit exponent.</p>
<p>This wasn&#8217;t much of an issue even a year ago, when we were happy to just<br />
cover the screen a couple times at a high framerate, but realtime graphics<br />
is moving away from just &#8220;putting up wallpaper&#8221; to calculating complex<br />
illumination equations at each pixel. It is not at all unreasonable to<br />
consider having twenty textures contribute to the final value of a pixel.<br />
Range and precision matter.</p>
<p>A few common responses to this pitch:</p>
<p>&#8220;64 bits per pixel??? Are you crazy???&#8221; Remember, it is exactly the same<br />
relative step as we made from 16 bit to 32 bit, which didn&#8217;t take all<br />
that long.</p>
<p>Yes, it will be slower. That&#8217;s ok. This is an important point: we can&#8217;t<br />
continue to usefully use vastly greater fill rate without an increase in<br />
precision. You can always crank the resolution and multisample anti-alaising<br />
up higher, but that starts to have diminishing returns well before you use of<br />
the couple gigatexels of fill rate we are expected to have next year. The<br />
cool and interesting things to do with all that fill rate involves many<br />
passes composited into less pixels, making precision important.</p>
<p>&#8220;Can we just put it in the texture combiners and leave the framebuffer at 32<br />
bits?&#8221; No. There are always going to be shade trees that overflow a given<br />
number of texture units, and they are going to be the ones that need the<br />
extra precision. Scales and biases between the framebuffer and the higher<br />
precision internal calculations can get you some mileage (assuming you can<br />
bring the blend color into your combiners, which current cards can&#8217;t), but<br />
its still not what you want. There are also passes which fundamentally<br />
aren&#8217;t part of a single surface, but still combine to the same pixels, as<br />
with all forms of translucency, and many atmospheric effects.</p>
<p>&#8220;Do we need it in textures as well?&#8221; Not for most image textures, but it<br />
still needs to be supported for textures that are used as function look<br />
up tables.</p>
<p>&#8220;Do we need it in the front buffer?&#8221; Probably not. Going to a 64 bit front<br />
buffer would probably play hell with all sorts of other parts of the system.<br />
It is probably reasonable to stay with 32 bit front buffers with a blit from<br />
the 64 bit back buffer performing a lookup or scale and bias operation before<br />
dithering down to 32 bit. Dynamic light adaptation can also be done during<br />
this copy. Dithering can work quite well as long as you are only performing<br />
a single pass.</p>
<p>I used to be pitching this in an abstract &#8220;you probably should be doing this&#8221;<br />
form, but two significant things have happened that have moved this up my hit<br />
list to something that I am fairly positive about.</p>
<p>Mark Peercy of SGI has shown, quite surprisingly, that all Renderman surface<br />
shaders can be decomposed into multi-pass graphics operations if two<br />
extensions are provided over basic OpenGL: the existing pixel texture<br />
extension, which allows dependent texture lookups (matrox already supports a<br />
form of this, and most vendors will over the next year), and signed, floating<br />
point colors through the graphics pipeline. It also makes heavy use of the<br />
existing, but rarely optimized, copyTexSubImage2D functionality for<br />
temporaries.</p>
<p>This is a truly striking result. In retrospect, it seems obvious that with<br />
adds, multiplies, table lookups, and stencil tests that you can perform any<br />
computation, but most people were working under the assumption that there<br />
were fundamentally different limitations for &#8220;realtime&#8221; renderers vs offline<br />
renderers. It may take hundreds or thousands of passes, but it clearly<br />
defines an approach with no fundamental limits. This is very important.<br />
I am looking forward to his Siggraph paper this year.</p>
<p>Once I set down and started writing new renderers targeted at GeForce level<br />
performance, the precision issue has started to bite me personally. There<br />
are quite a few times where I have gotten visible banding after a set of<br />
passes, or have had to worry about ordering operations to avoid clamping.<br />
There is nothing like actually dealing with problems that were mostly<br />
theoretical before&#8230;</p>
<p>64 bit pixels. It is The Right Thing to do. Hardware vendors: don&#8217;t you be<br />
the company that is the last to make the transition.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/04/29/more-bits-per-color/feed</wfw:commentRss>
		</item>
		<item>
		<title>A Trip Down The Graphics Pipeline</title>
		<link>http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline</link>
		<comments>http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline#comments</comments>
		<pubDate>Thu, 06 Apr 2000 11:43:29 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline</guid>
		<description><![CDATA[Whenever I start a new graphics engine, I always spend a fair amount of time
flipping back through older graphics books. It is always interesting to see
how your changed perspective with new experience impacts your appreciation of
a given article.
I was skimming through Jim Blinn&#8217;s &#8220;A Trip Down The Graphics Pipeline&#8221;
tonight, and I wound up laughing out [...]]]></description>
			<content:encoded><![CDATA[<p>Whenever I start a new graphics engine, I always spend a fair amount of time<br />
flipping back through older graphics books. It is always interesting to see<br />
how your changed perspective with new experience impacts your appreciation of<br />
a given article.</p>
<p>I was skimming through Jim Blinn&#8217;s &#8220;A Trip Down The Graphics Pipeline&#8221;<br />
tonight, and I wound up laughing out loud twice.</p>
<p>From the book:</p>
<p>P73: I then empirically found that I had to scale by -1 in x instead of in z,<br />
and also to scale the xa and xf values by -1. (Basically I just put in enough<br />
minus signs after the fact to make it work.) Al Barr refers to this technique<br />
as &#8220;making sure you have made an even number of sign errors.&#8221;</p>
<p>P131: The only lines that generate w=0 after clipping are those that pass<br />
through the z axis, the valley of the trough. These lines are lines that<br />
pass exactly through the eyepoint. After which you are dead and don&#8217;t care<br />
about divide-by-zero errors.</p>
<p>If you laughed, you are a graphics geek.</p>
<p>My first recollection of a Jim Blinn article many years ago was my skimming<br />
over it and thinking &#8220;My god, what ridiculously picky minutia.&#8221; Over the last<br />
couple years, I found myself haranguing people over some fairly picky issues,<br />
like the LSB errors with cpu vs rasterizer face culling and screen edge<br />
clipping with guard band bit tests. After one of those pitches, I quite<br />
distinctly thought to myself &#8220;My god, I&#8217;m turning into Jim Blinn!&#8221; <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline/feed</wfw:commentRss>
		</item>
		<item>
		<title>Startlight Foundation</title>
		<link>http://doom-ed.com/blog/2000/03/27/startlight-foundation</link>
		<comments>http://doom-ed.com/blog/2000/03/27/startlight-foundation#comments</comments>
		<pubDate>Mon, 27 Mar 2000 08:39:12 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/03/27/startlight-foundation</guid>
		<description><![CDATA[Two years ago, Id was contacted by the Startlight Foundation, an organization
that tries to grant wishes to seriously ill kids. (www.starlight.org)
There was a young man with Hodgkin&#8217;s Lymphoma that, instead of wanting to go
to Disneyland or other traditional wishes, wanted to visit Id and talk with
me about programming.
It turned out that Seumas McNally was already [...]]]></description>
			<content:encoded><![CDATA[<p>Two years ago, Id was contacted by the Startlight Foundation, an organization<br />
that tries to grant wishes to seriously ill kids. (www.starlight.org)</p>
<p>There was a young man with Hodgkin&#8217;s Lymphoma that, instead of wanting to go<br />
to Disneyland or other traditional wishes, wanted to visit Id and talk with<br />
me about programming.</p>
<p>It turned out that Seumas McNally was already an accomplished developer.<br />
His family company, Longbow Digital Arts (www.longbowdigitalarts.com), had<br />
been doing quite respectably selling small games directly over the internet.<br />
It bore a strong resemblance to the early shareware days of Apogee and Id.</p>
<p>We spent the evening talking about graphics programmer things &#8212; the relative<br />
merits of voxels and triangles, procedurally generated media, level of detail<br />
management, API and platforms.</p>
<p>We talked at length about the balance between technology and design, and all<br />
the pitfalls that lie in the way of shipping a modern product.</p>
<p>We also took a dash out in my ferrari, thinking &#8220;this is going to be the best<br />
excuse a cop will ever hear if we get pulled over&#8221;.</p>
<p>Longbow continued to be successful, and eventually the entire family was<br />
working full time on &#8220;Treadmarks&#8221;, their new 3D tank game.</p>
<p>Over email about finishing the technology in Treadmarks, Seumas once said<br />
&#8220;I hope I can make it&#8221;. Not &#8220;be a huge success&#8221; or &#8220;beat the competition&#8221;.<br />
Just &#8220;make it&#8221;.</p>
<p>That is a yardstick to measure oneself by.</p>
<p>It is all too easy to lose your focus or give up with just the ordinary<br />
distractions and disappointments that life brings. This wasn&#8217;t ordinary.<br />
Seumas had cancer. Whatever problems you may be dealing with in your life,<br />
they pale before having problems drawing your next breath.</p>
<p>He made it.</p>
<p>Treadmarks started shipping a couple months ago, and was entered in the<br />
Independent Games Festival at the Game Developer&#8217;s Conference this last month.<br />
It came away with the awards for technical excellence, game design, and the<br />
grand prize.</p>
<p>I went out to dinner with the McNally family the next day, and had the<br />
opportunity to introduce Anna to them. One of the projects at Anna&#8217;s new<br />
company, Fountainhead Entertainment (www.fountainheadent.com), is a<br />
documentary covering gaming, and she had been looking forward to meeting<br />
Seumas after hearing me tell his story a few times. The McNallys invited<br />
her to bring a film crew up to Canada and talk with everyone whenever she<br />
could.</p>
<p>Seumas died the next week.</p>
<p>I am proud to have been considered an influence in Seumas&#8217; work, and I think<br />
his story should be a good example for others. Through talent and<br />
determination, he took something he loved and made a success out of it in<br />
many dimensions.</p>
<p>http://www.gamedev.net/community/memorial/seumas/ for more information.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/03/27/startlight-foundation/feed</wfw:commentRss>
		</item>
		<item>
		<title>Virtualized Video Card Local Memory is The Right Thing</title>
		<link>http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing</link>
		<comments>http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing#comments</comments>
		<pubDate>Wed, 08 Mar 2000 04:47:56 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing</guid>
		<description><![CDATA[This is something I have been preaching for a couple years, but I
finally got around to setting all the issues down in writing.
First, the statement:
Virtualized video card local memory is The Right Thing.
Now, the argument (and a whole bunch of tertiary information):
If you had all the texture density in the world, how much texture
memory would [...]]]></description>
			<content:encoded><![CDATA[<p>This is something I have been preaching for a couple years, but I<br />
finally got around to setting all the issues down in writing.</p>
<p>First, the statement:</p>
<p>Virtualized video card local memory is The Right Thing.</p>
<p>Now, the argument (and a whole bunch of tertiary information):</p>
<p>If you had all the texture density in the world, how much texture<br />
memory would be needed on each frame?</p>
<p>For directly viewed textures, mip mapping keeps the amount of<br />
referenced texels between one and one quarter of the drawn pixels.<br />
When anisotropic viewing angles and upper level clamping are taken into<br />
account, the number gets smaller. Take 1/3 as a conservative estimate.</p>
<p>Given a fairly aggressive six texture passes over the entire screen,<br />
that equates to needing twice as many texels as pixels. At 1024&#215;768<br />
resolution, well under two million texels will be referenced, no matter<br />
what the finest level of detail is. This is the worst case, assuming<br />
completely unique texturing with no repeating. More commonly, less<br />
than one million texels are actually needed.</p>
<p>As anyone who has tried to run certain Quake 3 levels in high quality<br />
texture mode on an eight or sixteen meg card knows, it doesn’t work out<br />
that way in practice. There is a fixable part and some more<br />
fundamental parts to the fall-over-dead-with-too-many-textures problem.</p>
<p>The fixable part is that almost all drivers perform pure LRU (least<br />
recently used) memory management. This works correctly as long as the<br />
total amount of textures needed for a given frame fits in the card’s<br />
memory after they have been loaded. As soon as you need a tiny bit<br />
more memory than fits on the card, you fall off of a performance cliff.<br />
If you need 14 megs of textures to render a frame, and your graphics<br />
card has 12 megs available after its frame buffers, you wind up loading<br />
14 megs of texture data over the bus every frame, instead of just the 2<br />
megs that don’t fit. Having the cpu generate 14 megs of command<br />
traffic can drop you way into the single digit frame rates on most<br />
drivers.</p>
<p>If an application makes reasonable effort to group rendering by<br />
texture, and there is some degree of coherence in the order of texture<br />
references between frames, much better performance can be gotten with a<br />
swapping algorithm that changes its behavior instead of going into a<br />
full thrash:</p>
<p>While ( memory allocation for new texture fails )<br />
Find the least recently used texture.<br />
If the LRU texture was not needed in the previous frame,<br />
Free it<br />
Else<br />
Free the most recently used texture that isn’t bound to an<br />
active texture unit</p>
<p>Freeing the MRU texture seems counterintuitive, but what it does is<br />
cause the driver to use the last bit of memory as a sort of scratchpad<br />
that gets constantly overwritten when there isn’t enough space. Pure<br />
LRU plows over all the other textures that are very likely going to be<br />
needed at the beginning of the next frame, which will then plow over<br />
all the textures that were loaded on top of them.</p>
<p>If an application uses textures in a completely random order, any given<br />
replacement policy has the some effect…</p>
<p>Texture priority for swapping is a non-feature. There is NO benefit to<br />
attempting to statically prioritize textures for swapping. Either a<br />
texture is going to be referenced in the next frame, or it isn’t.<br />
There aren’t any useful gradations in between. The only hint that<br />
would be useful would be a notice that a given texture is not going to<br />
be in the next frame, and that just doesn’t come up very often or cover<br />
very many texels.</p>
<p>With the MRU-on-thrash texture swapping policy, things degrade<br />
gracefully as the total amount of textures increase but due to several<br />
issues, the total amount of textures calculated and swapped is far<br />
larger than the actual amount of texels referenced to draw pixels.</p>
<p>The primary problem is that textures are loaded as a complete unit,<br />
from the smallest mip map level all the way up to potentially a 2048 by<br />
2048 top level image. Even if you are only seeing 16 pixels of it off<br />
in the distance, the entire 12 meg stack might need to be loaded.</p>
<p>Packing can also cause some amount of wasted texture memory. When you<br />
want to load a two meg texture, it is likely going to require a lot<br />
more than just two megs of free texture memory, because a lot of it is<br />
going to be scattered around in 8k to 64k blocks. At the pathological<br />
limit, this can waste half your texture memory, but more reasonably it<br />
is only going to be 10% or so, and cause a few extra texture swap outs.</p>
<p>On a frame at a time basis, there are often significant amounts of<br />
texels even in referenced mip levels that are not seen. The back sides<br />
of characters, and large textures on floors can often have less than<br />
50% of their texels used during a frame. This is only an issue as they<br />
are being swapped in, because they will very likely be needed within<br />
the next few frames. The result is one big hitch instead of a steady<br />
loading.</p>
<p>There are schemes that can help with these problems, but they have<br />
costs.</p>
<p>Packing losses can be addressed with compaction, but that has rarely<br />
proven to be worthwhile in the history of memory management. A 128-bit<br />
graphics accelerator could compact and sort 10 megs of texture memory<br />
in about 10 msec if desired.</p>
<p>The problems with large textures can be solved by just not using large<br />
textures. Both packing losses, and non- referenced texels can be<br />
reduced by chopping everything up into 64&#215;64 or 128&#215;128 textures. This<br />
requires preprocessing, adds geometry, and requires messy overlap of<br />
the textures to avoid seaming problems.</p>
<p>It is possible to estimate which mip levels will actually be needed and<br />
only swap those in. An application can’t calculate exactly the mip<br />
map levels that will be referenced by the hardware, because there are<br />
slight variations between chips and the slope calculation would add<br />
significant processing overhead. A conservative upper bound can be<br />
taken by looking at the minimum normal distance of any vertex<br />
referencing a given texture in a frame. This will overestimate the<br />
required textures by 2x or so and still leave a big hit when the top<br />
mip level loads for big textures, but it can allow giant cathedral<br />
style scenes to render without swapping.</p>
<p>Clever programmers can always work harder to overcome obstacles, but in<br />
this case, there is a clear hardware solution that gives better<br />
performance than anything possible with software and just makes<br />
everyone’s lives easier: virtualize the card’s view of its local<br />
memory.</p>
<p>With page tables, address fragmentation isn’t an issue, and with the<br />
graphics rasterizer only causing a page load when something from that<br />
exact 4k block is needed, the mip level problems and hidden texture<br />
problems just go away. Nothing sneaky has to be done by the<br />
application or driver, you just manage page indexes.</p>
<p>The hardware requirements are not very heavy. You need translation<br />
lookaside buffers (TLB) on the graphics chip, the ability to<br />
automatically load the TLB from a page table set up in local memory,<br />
and the ability to move a page from AGP or PCI into graphics memory and<br />
update the page tables and reference counts. You don’t even need that<br />
many TLB, because graphics access patterns don’t hop all over the place<br />
like CPU access can. Even with only a single TLB for each texture<br />
bilerp unit, reloads would only account for about 1/32 of the memory<br />
access if the textures were 4k blocked. All you would really want at<br />
the upper limit would be enough TLB for each texture unit to cover the<br />
texels referenced on a typical rasterization scan line.</p>
<p>Some programmers will say “I don’t want the system to manage the<br />
textures, I want full control!” There are a couple responses to that.<br />
First, a page level management scheme has flexibility that you just<br />
can’t get with a software only scheme, so it is a set of brand new<br />
capabilities. Second, you can still just choose to treat it as a fixed<br />
size texture buffer and manage everything yourself with updates.<br />
Third, even if it WAS slower than the craftiest possible software<br />
scheme (and I seriously doubt it), so much of development is about<br />
willingly trading theoretical efficiency for quicker, more robust<br />
development. We don’t code overlays in assembly language any more…</p>
<p>Some hardware designers will say something along the lines of “But<br />
the graphics engine goes idle when you are pulling the page over from<br />
AGP!” Sure, you are always better off to just have enough texture<br />
memory and never swap, and this feature wouldn’t let you claim any more<br />
megapixels or megatris, but every card winds up not having enough<br />
memory at some point. Ignoring those real world cases isn’t helping<br />
your customers. In any case, it goes idle a hell of a lot less than if<br />
you were loading the entire texture over the command fifo.</p>
<p>3Dlabs is supposed to have some form of virtual memory management in<br />
the permedia 3, but I am not familiar with the details (if anyone from<br />
3dlabs wants to send me the latest register specs, I would appreciate<br />
it!).</p>
<p>A mouse controlled first person shooter is fairly unique in how quickly<br />
it can change the texture composition of a scene. A 180-degree snap<br />
turn can conceivably bring in a completely different set of textures on<br />
a subsequent frame. Almost all other graphics applications bring<br />
textures in at a much steadier pace.</p>
<p>So, given that 180-degree snap turn to a completely different and<br />
uniquely textured scene, what would be the worst case performance? An<br />
AGP 2x bus is theoretically supposed to have over 500 mb/sec of<br />
bandwidth. It doesn’t get that high in practice, but linear 4k block<br />
reads would give it the best possible conditions, and even at 300<br />
mb/sec, reloading the entire texture working set would only take 10<br />
msec.</p>
<p>Rendering is not likely to be buffered sufficiently to overlap<br />
appreciably with page loading, and the command transport for a complex<br />
scene will take significant time by itself, so it shows that a worst<br />
case scene will often not be able to be rendered in 1/60th of a second.</p>
<p>This is roughly the same lower bound that you get from a chip texturing<br />
directly from AGP memory. A direct AGP texture gains the benefit of<br />
fine-grained rendering overlap, but loses the benefit of subsequent<br />
references being in faster memory (outside of small on-chip caches).<br />
A direct AGP texture engine doesn’t have the higher upper bounds of a<br />
cached texture engine, though. It’s best and worst case are similar<br />
(generally a good thing), but the cached system can bring several times<br />
more bandwidth to bear when it isn’t forced to swap anything in.</p>
<p>The important point is that the lower performance bound is almost an<br />
order of magnitude faster than swapping in the textures as a unit by<br />
the driver.</p>
<p>If you just positively couldn’t deal with the chance of that much worst<br />
case delay, some form of mip level biasing could be made to kick in, or<br />
you could try and do pre-touching, but I don’t think it would ever be<br />
worth it. The worst imaginable case is acceptable, and you just won’t<br />
hit that case very often.</p>
<p>Unless a truly large number of TLB are provided, the textures would<br />
need to be blocked. The reason is that with a linear texture, a 4k<br />
page maps to only a couple scan lines on very large textures. If you<br />
are going with the grain you get great reuse, but if you go across it,<br />
you wind up referencing a new page every couple texel accesses. What<br />
is wanted is an addressing mechanism that converts a 4k page into a<br />
square area in the texture, so the page access is roughly constant for<br />
all orientations. There is also a benefit from having a 128 bit access<br />
also map to a square block of pixels, which several existing cards<br />
already do. The same interleaving-of-low-order-bits approach can just<br />
be extended a few more bits.</p>
<p>Dealing with blocked texture patterns is a hassle for a driver writer,<br />
but most graphics chips have a host blit capability that should let the<br />
chip deal with changing a linear blit into blocked writes. Application<br />
developers should never know about it, in any case.</p>
<p>There are some other interesting things that could be done if the page<br />
tables could trigger a cpu interrupt in addition to being automatically<br />
backed by AGP or PCI memory. Textures could be paged in directly from<br />
disk for truly huge settings, or decompressed from jpeg blocks, or even<br />
procedurally generated. Even the size limits of the AGP aperture could<br />
usefully be avoided if the driver wanted to manage each page’s<br />
allocation.</p>
<p>Aside from all the basic swapping issue, there are a couple of other<br />
hardware trends that push things this way.</p>
<p>Embedded dram should be a driving force. It is possible to put several<br />
megs of extremely high bandwidth dram on a chip or die with a video<br />
controller, but won’t be possible (for a while) to cram a 64 meg<br />
geforce in. With virtualized texturing, the major pressure on memory<br />
is drastically reduced. Even an 8mb card would be sufficient for 16<br />
bit 1024&#215;768 or 32 bit 800&#215;600 gaming, no matter what the texture load.</p>
<p>The only thing that prevents a geometry processor based card from<br />
turning almost any set of commands in a display list into a single<br />
static dma buffer is the fact that textures may be swapped in and out,<br />
causing the register programming in the buffer to be wrong. With<br />
virtual texture addressing, a texture’s address never changes, and an<br />
arbitrarily complex model can be described in a static dma buffer.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing/feed</wfw:commentRss>
		</item>
		<item>
		<title>Wrecking Slade&#8217;s Development System</title>
		<link>http://doom-ed.com/blog/2000/02/24/wrecking-slades-development-system</link>
		<comments>http://doom-ed.com/blog/2000/02/24/wrecking-slades-development-system#comments</comments>
		<pubDate>Thu, 24 Feb 2000 21:35:26 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/02/24/wrecking-slades-development-system</guid>
		<description><![CDATA[Some people took it upon themselves to remotely wreck Slade&#8217;s development
system. That is no more defensible than breaking into Id and smashing
something.
The idea isn&#8217;t to punish anyone, it is to have them comply with the license
and continue to contribute. QuakeLives has quite a few happy users, and it
is in everyone&#8217;s best interest to have development [...]]]></description>
			<content:encoded><![CDATA[<p>Some people took it upon themselves to remotely wreck Slade&#8217;s development<br />
system. That is no more defensible than breaking into Id and smashing<br />
something.</p>
<p>The idea isn&#8217;t to punish anyone, it is to have them comply with the license<br />
and continue to contribute. QuakeLives has quite a few happy users, and it<br />
is in everyone&#8217;s best interest to have development continue. It just has to<br />
be by the rules.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/02/24/wrecking-slades-development-system/feed</wfw:commentRss>
		</item>
		<item>
		<title>QuakeLives</title>
		<link>http://doom-ed.com/blog/2000/02/23/quakelives</link>
		<comments>http://doom-ed.com/blog/2000/02/23/quakelives#comments</comments>
		<pubDate>Wed, 23 Feb 2000 21:53:31 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/02/23/quakelives</guid>
		<description><![CDATA[This is a public statement that is also being sent directly to Slade at
QuakeLives regarding
http://www.quakelives.com/main/ql.cgi?section=dlagreement&#038;file=qwcl-win32/
I see both sides of this. Your goals are positive, and I understand the issues
and the difficulties that your project has to work under because of the GPL.
I have also seen some GPL zealots acting petty and immature towards you very
early [...]]]></description>
			<content:encoded><![CDATA[<p>This is a public statement that is also being sent directly to Slade at<br />
QuakeLives regarding<br />
http://www.quakelives.com/main/ql.cgi?section=dlagreement&#038;file=qwcl-win32/</p>
<p>I see both sides of this. Your goals are positive, and I understand the issues<br />
and the difficulties that your project has to work under because of the GPL.<br />
I have also seen some GPL zealots acting petty and immature towards you very<br />
early on (while it is within everyone&#8217;s rights to DEMAND code under the GPL, it<br />
isn&#8217;t necessarily the best attitude to take), which probably colors some of your<br />
views on the subject.</p>
<p>We discussed several possible legal solutions to the issues.</p>
<p>This isn&#8217;t one of them.</p>
<p>While I doubt your &#8220;give up your rights&#8221; click through would hold up in court,<br />
I am positive that you are required to give the source to anyone that asks for<br />
it that got a binary from someone else. This doesn&#8217;t provide the obscurity<br />
needed for a gaming level of security.</p>
<p>I cut you a lot of slack because I honestly thought you intended to properly<br />
follow through with the requirements of the GPL, and you were just trying to<br />
get something fun out ASAP. It looks like I was wrong.</p>
<p>If you can&#8217;t stand to work under the GPL, you should release the code to your<br />
last binary and give up your project. I would prefer that you continue your<br />
work, but abide by the GPL.</p>
<p>If necessary, I will pay whatever lawyer the Free Software Foundation<br />
reccomends to pursue this.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/02/23/quakelives/feed</wfw:commentRss>
		</item>
		<item>
		<title>Anti-Cheat QW Proxy</title>
		<link>http://doom-ed.com/blog/1999/12/30/anti-cheat-qw-proxy</link>
		<comments>http://doom-ed.com/blog/1999/12/30/anti-cheat-qw-proxy#comments</comments>
		<pubDate>Thu, 30 Dec 1999 20:10:19 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/12/30/anti-cheat-qw-proxy</guid>
		<description><![CDATA[Several people have mentioned an existing anti-cheat QW proxy that
should also be applicable to modified versions:
http://www.students.tut.fi/~zibbo/qizmo/
]]></description>
			<content:encoded><![CDATA[<p>Several people have mentioned an existing anti-cheat QW proxy that<br />
should also be applicable to modified versions:</p>
<p>http://www.students.tut.fi/~zibbo/qizmo/</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/12/30/anti-cheat-qw-proxy/feed</wfw:commentRss>
		</item>
		<item>
		<title>Q3 on a 28.8 Modem</title>
		<link>http://doom-ed.com/blog/1999/12/29/q3-on-a-288-modem</link>
		<comments>http://doom-ed.com/blog/1999/12/29/q3-on-a-288-modem#comments</comments>
		<pubDate>Wed, 29 Dec 1999 23:47:15 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/12/29/q3-on-a-288-modem</guid>
		<description><![CDATA[I have been playing a lot of Q3 on a 28.8 modem for the last several days.
I finally found a case of the stuck-at-awaiting-gamestate problem that
turned out to be a continuous case of a fragment of the gamestate getting
dropped. I have changed the net code to space out the sending of the
fragments based on rate.
Note [...]]]></description>
			<content:encoded><![CDATA[<p>I have been playing a lot of Q3 on a 28.8 modem for the last several days.</p>
<p>I finally found a case of the stuck-at-awaiting-gamestate problem that<br />
turned out to be a continuous case of a fragment of the gamestate getting<br />
dropped. I have changed the net code to space out the sending of the<br />
fragments based on rate.</p>
<p>Note that there have been a few different things that result in stuck<br />
at gamestate or stuck at snapshot problems. We have fixed a few of them,<br />
but there may well still be other things that we haven&#8217;t found yet.</p>
<p>You can still have a fun game on a 28.8 modem. It is a significant<br />
disadvantage, no question about it, but you can still have a good game if<br />
you play smart. If there is someone that knows what they are doing on a<br />
server with a ping in the low 100s, there won&#8217;t usually be much you can<br />
do, but a skilled modem player can still beat up on unskilled T1 players&#8230;</p>
<p>Make sure your modem rate is set correctly. If you have it set too high,<br />
large amounts of data can get buffered up and you can wind up with multiple<br />
seconds of screwed up delays.</p>
<p>Only play on servers with good pings. My connection gives me a couple dozen<br />
servers with mid 200 pings. 56k modems often see servers with sub 200 pings.<br />
If you ignore the ping and just look for your favorite map, you will probably<br />
have a crappy game.</p>
<p>If you have a good basic connection to the server, the thing that will mess<br />
up your game is too much visible activity. This is a characteristic of the<br />
number of players, the openness of the level, and the weapons in use.</p>
<p>Don&#8217;t play on madhouse levels with tons of players. None of the normal Q3<br />
maps were really designed for more than eight players, and many were only<br />
designed for four.</p>
<p>Don&#8217;t play in the wide open maps unless there are only a couple other<br />
players. Four very active players in a wide open area are enough to bog<br />
down a modem connection.</p>
<p>I just implemented &#8220;sv_minPing&#8221; / &#8220;sv_maxPing&#8221; options so servers can restrict<br />
themselves to only low ping or high ping players. This is done based on the<br />
ping of the challenge response packet, rather than any in-game pings. There<br />
are a few issues with that &#8212; a LPB may occasionally get into a HPB server<br />
if they happen to get a network hiccup at just the right time, and the number<br />
used as a gate will be closer to the number shown in the server list, rather<br />
than the number seen in gameplay. I would reccomend &#8220;sv_minPing 200&#8243; as a<br />
reasonable breakpoint.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/12/29/q3-on-a-288-modem/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 1 Source Code and Cheating</title>
		<link>http://doom-ed.com/blog/1999/12/25/quake-1-source-code-and-cheating</link>
		<comments>http://doom-ed.com/blog/1999/12/25/quake-1-source-code-and-cheating#comments</comments>
		<pubDate>Sun, 26 Dec 1999 03:58:32 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/12/25/quake-1-source-code-and-cheating</guid>
		<description><![CDATA[There are a number of people upset about the Quake 1 source
code release, because it is allowing cheating in existing games.
There will be a sorting out period as people figure out what directions
the Quake1 world is going to go in with the new capabilities, but it
will still be possible to have cheat free games after [...]]]></description>
			<content:encoded><![CDATA[<p>There are a number of people upset about the Quake 1 source<br />
code release, because it is allowing cheating in existing games.</p>
<p>There will be a sorting out period as people figure out what directions<br />
the Quake1 world is going to go in with the new capabilities, but it<br />
will still be possible to have cheat free games after a few things get<br />
worked out.</p>
<p>Here&#8217;s what needs to be done:</p>
<p>You have to assume the server is trusted. Because of the wau quake<br />
mods work, It has always been possible to have server side cheats<br />
along the lines of &#8220;if name == mine, scale damage by 75%&#8221;. You have<br />
to trust the server operator.</p>
<p>So, the problem then becomes a matter of making sure the clients are<br />
all playing with an acceptable version before allowing them to connect<br />
to the server. You obviously can&#8217;t just ask the client, because if it<br />
is hacked it can just tell you what you want to hear. Because of the<br />
nature of the GPL, you can&#8217;t just have a hidden part of the code to do<br />
verification.</p>
<p>What needs to be done is to create two closed source programs that act<br />
as executable loaders / verifiers and communication proxies for the<br />
client and server. These would need to be produced for each platform<br />
the game runs on. Some modifications will need to be done to the<br />
open source code to allow it to (optionally) communicate with these<br />
proxies.</p>
<p>These programs would perform a robust binary digest of the programs they<br />
are loading and communicate with their peer in a complex encrypted<br />
protocol before allowing the game connection to start. It may be<br />
possible to bypass the proxy for normal packets to avoid adding any<br />
scheduling or latency issues, but it will need to be involved to some<br />
degree to prevent a cheater from hijacking the connection once it is<br />
created.</p>
<p>The server operator would determine which versions of the game are to<br />
be allowed to connect to their server if they wish to enforce proxy<br />
protection. The part of the community that wants to be competetive<br />
will have to agree to some reasonable schedule of adoption of new<br />
versions.</p>
<p>Nothing in online games is cheat-proof (there is allways the device<br />
driver level of things to hack on), but that would actually be more<br />
secure than the game as it originally shipped, because hex edited patches<br />
wouldn&#8217;t work any more. Someone could still in theory hack the closed<br />
source programs, but that is the same situation everyone was in with<br />
the original game.</p>
<p>People can start working on this immediately. There is some prior art<br />
in various unix games that would probably be helpfull. It would also<br />
be a good idea to find some crypto hackers to review proposed proxy<br />
communication strategies.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/12/25/quake-1-source-code-and-cheating/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 1 Source Code</title>
		<link>http://doom-ed.com/blog/1999/12/21/quake-1-source-code</link>
		<comments>http://doom-ed.com/blog/1999/12/21/quake-1-source-code#comments</comments>
		<pubDate>Wed, 22 Dec 1999 01:24:07 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/12/21/quake-1-source-code</guid>
		<description><![CDATA[The Q3 game source code is getting pushed back a bit because we had to do
some rearranging in the current codebase to facilitate the release, and
we don&#8217;t want to release in-progress code before the official binary point
release.
We still have a Christmas present for the coders, though:
http://www.idsoftware.com/q1source/
Happy holidays!
]]></description>
			<content:encoded><![CDATA[<p>The Q3 game source code is getting pushed back a bit because we had to do<br />
some rearranging in the current codebase to facilitate the release, and<br />
we don&#8217;t want to release in-progress code before the official binary point<br />
release.</p>
<p>We still have a Christmas present for the coders, though:</p>
<p>http://www.idsoftware.com/q1source/</p>
<p>Happy holidays!</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/12/21/quake-1-source-code/feed</wfw:commentRss>
		</item>
		<item>
		<title>Honeymoon with Anna Kang</title>
		<link>http://doom-ed.com/blog/1999/12/15/honeymoon-with-anna-kang</link>
		<comments>http://doom-ed.com/blog/1999/12/15/honeymoon-with-anna-kang#comments</comments>
		<pubDate>Wed, 15 Dec 1999 13:38:45 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/12/15/honeymoon-with-anna-kang</guid>
		<description><![CDATA[Anna Kang left Id a couple weeks ago to found her own company -
Fountainhead Entertainment.
It wasn&#8217;t generally discussed during her time at Id, but we had been going
out when she joined the company, and we were engaged earlier this year.
We are getting married next month, and honeymooning in Hawaii. At her
thoughtful suggestion, we are shipping [...]]]></description>
			<content:encoded><![CDATA[<p>Anna Kang left Id a couple weeks ago to found her own company -<br />
Fountainhead Entertainment.</p>
<p>It wasn&#8217;t generally discussed during her time at Id, but we had been going<br />
out when she joined the company, and we were engaged earlier this year.<br />
We are getting married next month, and honeymooning in Hawaii. At her<br />
thoughtful suggestion, we are shipping a workstation out with us, so I don&#8217;t<br />
fall into some programming-deprivation state. How great is that? <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Now that Q3A has shipped, the official winner of her Id Software figurine<br />
chess set contest is Rowan Crawford for his prose and art.</p>
<p>An honorable mention goes to Reine Hogberg and Peder Hardings for their Q3A<br />
Blair Witch Project. They will receive silver Q3A medallions.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/12/15/honeymoon-with-anna-kang/feed</wfw:commentRss>
		</item>
		<item>
		<title>Independant OpenGL Conformance Nazi</title>
		<link>http://doom-ed.com/blog/1999/12/12/independant-opengl-conformance-nazi</link>
		<comments>http://doom-ed.com/blog/1999/12/12/independant-opengl-conformance-nazi#comments</comments>
		<pubDate>Mon, 13 Dec 1999 04:42:02 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/12/12/independant-opengl-conformance-nazi</guid>
		<description><![CDATA[WANTED: Independant OpenGL conformance nazi
I think there is a strong need for a proactive, vendor-neutral
OpenGL watchdog, or even a small group, especially in the linux space.
I have been working on the utah-GLX team for quite a while now, and while
I have been very pleased with the results, I would like to see more effort
spent on [...]]]></description>
			<content:encoded><![CDATA[<p>WANTED: Independant OpenGL conformance nazi</p>
<p>I think there is a strong need for a proactive, vendor-neutral<br />
OpenGL watchdog, or even a small group, especially in the linux space.</p>
<p>I have been working on the utah-GLX team for quite a while now, and while<br />
I have been very pleased with the results, I would like to see more effort<br />
spent on doing things as right as possible. Because the developers (me<br />
included) are basically just doing the work in their spare time, testing<br />
usually only consists of running their favorite OpenGL application, and a<br />
few of the mesa demos, or some of the xscreensaver hacks.</p>
<p>Recently I did the initial bringup of a RagePro driver on linux, and I was<br />
much more conscious of the large untested feature space, and the tunnel<br />
vision I was using to get it to the point of running Q3.</p>
<p>What we need is someone, or a group of someones, who can really exercise<br />
different implementations through all corners of the OpenGL specification<br />
and provide detailed lists of faults with minimal test cases to reproduce<br />
the behavior.</p>
<p>In most cases, the bugs could then be fixed, but even if it is decided that<br />
the incorrect behavior is going to stay (to avoid a software fallback in a<br />
common accelerated case), there would be clear documentation of it.</p>
<p>I consider performance on the matrox driver right now to be &#8220;good enough&#8221;.<br />
There is definately more performance oriented work going on, but given a<br />
choice of tasks to work on, I would rather improve quality and coverage<br />
instead of kicking a few more fps out of Q3.</p>
<p>One of Alex St. John&#8217;s valid points was that &#8220;The drivers are always broken&#8221;.<br />
There are a lot of factors that contribute to it, including fierce<br />
benchmarking competition causing driver writers to do some debatable things<br />
and diminish focus on quality. With open source drivers, some of those<br />
factors go away. Sure, it is nice to beat windows drivers on some benchmarks,<br />
but I wouldn&#8217;t let pursuit of that goal introduce dumb things into the code.</p>
<p>Some of the windows IHVs have good testing proceedures and high quality<br />
drivers, but even there, it would be nice to have someone hounding them about<br />
things beyond how well quake releated games run.</p>
<p>The same goes for Apple, especially now that there is both ATI and 3dfx<br />
support.</p>
<p>Conformance would be my primary interest, but characterizing the performance<br />
of different drivers would also be usefull, especially for edge cases that may<br />
or may not be accelerated, like glDrawPixels.</p>
<p>On linux right now, we have:</p>
<p>The traditional fullscreen 3dfx mesa driver<br />
The DRI-GLX based banshee/voodoo3 driver<br />
The utah-GLX matrox G200/G400 driver<br />
The temporary utah-GLX nvidia driver<br />
The newly born utah-GLX ATI Rage Pro driver</p>
<p>If anyone is interested, join the developer list off of:<br />
http://glx.on.openprojects.net/</p>
<p>Doing a proper job would require a really good knowledge of the OpenGL<br />
specification, and a meticulous style, but it wouldn&#8217;t require hardcore<br />
registers-and-dma driver writing skills, only basic glut programming.</p>
<p>If someone does wind up developing a good suite of tools and procedures and<br />
gives one of the drivers a really good set of feedback, I would be happy to<br />
provide extra video cards so they could beat up all the implementations.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/12/12/independant-opengl-conformance-nazi/feed</wfw:commentRss>
		</item>
		<item>
		<title>Research</title>
		<link>http://doom-ed.com/blog/1999/11/22/research</link>
		<comments>http://doom-ed.com/blog/1999/11/22/research#comments</comments>
		<pubDate>Tue, 23 Nov 1999 00:47:28 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/22/research</guid>
		<description><![CDATA[d:\>mkdir research
Ahhhh&#8230;.
I am very happy with how Q3 turned out. Probably more than any
game we have done before, it&#8217;s final form was very close to its
initial envisioning.
I will be getting all the Q3 code we are going to release together
over the next week or so. I will write some overview documentation
to give a little context, [...]]]></description>
			<content:encoded><![CDATA[<p>d:\>mkdir research</p>
<p>Ahhhh&#8230;.</p>
<p>I am very happy with how Q3 turned out. Probably more than any<br />
game we have done before, it&#8217;s final form was very close to its<br />
initial envisioning.</p>
<p>I will be getting all the Q3 code we are going to release together<br />
over the next week or so. I will write some overview documentation<br />
to give a little context, and since you can do game mods without<br />
needing a commercial compiler now, I will write a brief step-by-step<br />
to modifying the game code.</p>
<p>I&#8217;m looking forward to what comes out of the community with Q3.</p>
<p>The rough outline of what I am going to be working on now:</p>
<p>We will be supporting Q3 for quite some time. Any problems<br />
we have will get fixed, and some new features my sneak in.</p>
<p>I have two rendering technologies that I intend to write research<br />
engines for.</p>
<p>I am going to spend some time on computer vision problems. I think<br />
the cheap little web cams have some interesting possibilities.</p>
<p>I am going to explore some possibilities with generalizing 3D game<br />
engines into more powerful environments with broader uses. I think<br />
that a lot of trends are coming to the point where a &#8220;cyberspace&#8221; as<br />
it is often imagined is begining to be feasible.</p>
<p>I am going to spend more time on some Free Software projects. I have<br />
been stealing a few hours here and there to work on the matrox glx<br />
project for a while now, and it has been pretty rewarding.<br />
People with an interest in the guts of a 3D driver might want to look<br />
at the project archives at http://glx.on.openprojects.net/.<br />
The web pages aren&#8217;t very up to date, but the mailing list covers some<br />
good techie information.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/22/research/feed</wfw:commentRss>
		</item>
		<item>
		<title>Not-Telefragging Bug</title>
		<link>http://doom-ed.com/blog/1999/11/21/not-telefragging-bug</link>
		<comments>http://doom-ed.com/blog/1999/11/21/not-telefragging-bug#comments</comments>
		<pubDate>Mon, 22 Nov 1999 04:44:04 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/21/not-telefragging-bug</guid>
		<description><![CDATA[* fixed not-telefragging bug
* disabled flood protection with local clients
* fixed headoffset and gender on some model changes
* init cg_autoswitch cvars in cl
* fixed clearing of vm bss on restart
* fixed hang when looped part of song isn&#8217;t found
* fixed two NAT clients connecting to same server
* fixed warning on random once only triggers
* added [...]]]></description>
			<content:encoded><![CDATA[<p>* fixed not-telefragging bug<br />
* disabled flood protection with local clients<br />
* fixed headoffset and gender on some model changes<br />
* init cg_autoswitch cvars in cl<br />
* fixed clearing of vm bss on restart<br />
* fixed hang when looped part of song isn&#8217;t found<br />
* fixed two NAT clients connecting to same server<br />
* fixed warning on random once only triggers<br />
* added &#8220;g_allowVote 0&#8243;<br />
* added developer background sound underrun warning<br />
* move sound loading before clients so low memory<br />
defer works across maps<br />
* changed cgame load failure to a drop</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/21/not-telefragging-bug/feed</wfw:commentRss>
		</item>
		<item>
		<title>Linux Version</title>
		<link>http://doom-ed.com/blog/1999/11/19/linux-version</link>
		<comments>http://doom-ed.com/blog/1999/11/19/linux-version#comments</comments>
		<pubDate>Fri, 19 Nov 1999 07:48:18 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/19/linux-version</guid>
		<description><![CDATA[Linux version isn&#8217;t going to make it tonight. We got
too busy with other things. Sorry. Tomorrow.
* shrink zone, grow hunk
* flush memory on an error
* fixed crash pasting from clipboard
* test all compiler optimizations &#8212; 5% speedup
* fixed major slowdown in team games with large
numbers of players and location markers
]]></description>
			<content:encoded><![CDATA[<p>Linux version isn&#8217;t going to make it tonight. We got<br />
too busy with other things. Sorry. Tomorrow.</p>
<p>* shrink zone, grow hunk<br />
* flush memory on an error<br />
* fixed crash pasting from clipboard<br />
* test all compiler optimizations &#8212; 5% speedup<br />
* fixed major slowdown in team games with large<br />
numbers of players and location markers</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/19/linux-version/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mac Version is Out</title>
		<link>http://doom-ed.com/blog/1999/11/18/mac-version-is-out</link>
		<comments>http://doom-ed.com/blog/1999/11/18/mac-version-is-out#comments</comments>
		<pubDate>Thu, 18 Nov 1999 06:59:57 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/18/mac-version-is-out</guid>
		<description><![CDATA[The mac version is out. Go to www.quake3arena.com for links.
The mac version going out has the executable fixes that we
have made in the last couple days, but most of the fixes
have been in code that runs in the virtual machine, and we
can&#8217;t update that without making it incomptable with the
pc version.
The game remains very marginal [...]]]></description>
			<content:encoded><![CDATA[<p>The mac version is out. Go to www.quake3arena.com for links.</p>
<p>The mac version going out has the executable fixes that we<br />
have made in the last couple days, but most of the fixes<br />
have been in code that runs in the virtual machine, and we<br />
can&#8217;t update that without making it incomptable with the<br />
pc version.</p>
<p>The game remains very marginal in playability on 266mhz imacs<br />
and iBooks.</p>
<p>A 333mhz imac should be playable for a casual gamer if the<br />
graphics options are turned down to the &#8220;fastest&#8221; setting.</p>
<p>There is still a lot of room for improvement on ATI&#8217;s side<br />
with the RagePro drivers. Almost all the effort so far<br />
has been on the Rage128 drivers.</p>
<p>The G3 systems run fine, but a little slower than a pc of<br />
equal mhz</p>
<p>The rage128 cards in the G3s are only clocked at 75mhz, so<br />
you can&#8217;t run too high of a resolution, but you can get<br />
very nice image quality. I usually play with these settings:<br />
r_mode 2 // 512*284 res<br />
r_colorbits 32 // 32 bit color<br />
r_texturemode gl_linear_mipmap_linear // trilinear filtering</p>
<p>I haven&#8217;t played on one of the new iMacs or G4&#8217;s but they<br />
both use the rage128 driver, which is fairly high quality<br />
now, so they should perform well.</p>
<p>We found a fairly significant problem with inputSprockets and<br />
mouse control (motion is dropped after 40msec). I have done a<br />
little working around it, so mouse control should be somewhat<br />
better in this version, but it will hopefully be fixed<br />
properly by Apple in the next IS rev. It isn&#8217;t an issue if<br />
your framerate is high enough, but iMacs never see that<br />
framerate on their very best days&#8230;</p>
<p>Linux version tomorrow night, if nothing horrible happens.</p>
<p>Some advance warning about something that is sure to stir<br />
up some argument:</p>
<p>We should be handing off the masters for all three platforms<br />
within a day or two of each other, but they aren&#8217;t going to<br />
show up in stores at the same time. Publishers, distributers,<br />
and stores are willing to go out of their way to expedite the<br />
arrival of the pc version, but they just won&#8217;t go to the<br />
same amount of trouble for mac and linux boxes.</p>
<p>THE EXECUTABLES FOR ALL PLATFORMS WILL NOT BE AVAILABLE FOR<br />
DOWNLOAD UNTIL AFTER CHRISTMAS. This means that if you want<br />
to play on the mac or linux, don&#8217;t pick up a copy of the pc<br />
version and expect to download the other executables.</p>
<p>Our first update to the game will be for all platforms, and<br />
will allow any version to be converted into any other, but<br />
we intend to hold that off for a little while.</p>
<p>We are doing this at the request of the distributors. The<br />
fear is that everyone will just grab a windows version,<br />
and the separate boxes will be ignored.</p>
<p>A lot of companies are going to be watching the sales<br />
figures for the mac and linux versions of Q3 to see if<br />
the platforms are actually worth supporting. If everyone<br />
bought a windows version and the other boxes sold like crap<br />
in comparison, that would be plenty of evidence for most<br />
executives to can any cross platform development.</p>
<p>I know there are a lot of people that play in both windows<br />
and linux, and this may be a bit of an inconvenience in<br />
the short term, but this is an ideal time to cast a vote<br />
as a consumer.</p>
<p>Its all the same to Id (I like hybrid CD&#8217;s), and our continued<br />
support of linux and mac (OS X for the next title) is basically<br />
a foregone conclusion, but the results will probably influence<br />
other companies.</p>
<p>* fixed getting your own dropped / kicked message<br />
* added developer print for all file open write&#8217;s<br />
* fixed occasional bad color on connecting background<br />
* fixed occasional telefrag at start of skirmish game<br />
* fix not being able to ready at intermission if<br />
you were following a bot<br />
* never timelimit during tourney warmup<br />
* fixed local timer on map_restart<br />
* offset sorlag&#8217;s head model for status bar<br />
* added g_gametype to the votable commands:<br />
map, map_restart, kick, g_gametype<br />
* changed sound registration sequence to fix losing<br />
default sound<br />
* &#8220;sv_floodProtect 0&#8243; to turn off flood protection<br />
* converted sequenced messages to static arrays<br />
* fixed custom skin reassignment on all LOD</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/18/mac-version-is-out/feed</wfw:commentRss>
		</item>
		<item>
		<title>Demo Servers Flood-Protection</title>
		<link>http://doom-ed.com/blog/1999/11/16/demo-servers-flood-protection</link>
		<comments>http://doom-ed.com/blog/1999/11/16/demo-servers-flood-protection#comments</comments>
		<pubDate>Wed, 17 Nov 1999 03:22:02 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/16/demo-servers-flood-protection</guid>
		<description><![CDATA[The demo servers have general purpose flood-protection that has
caused some confusion.
Clients are only allowed to make one command a second of any kind.
This prevents excessive flooding by chats, model / name changes,
and any other command that could possibly be exploited. The
command streams are stalled, so it doesn&#8217;t have any effect on
processing order or reliability.
This means [...]]]></description>
			<content:encoded><![CDATA[<p>The demo servers have general purpose flood-protection that has<br />
caused some confusion.</p>
<p>Clients are only allowed to make one command a second of any kind.<br />
This prevents excessive flooding by chats, model / name changes,<br />
and any other command that could possibly be exploited. The<br />
command streams are stalled, so it doesn&#8217;t have any effect on<br />
processing order or reliability.</p>
<p>This means that if you issue two commands immediately after one<br />
another, there will be a one second stall before the second<br />
command and all movement clears. You see this on the lagometer<br />
as yellow spiking up for a second, then dropping away.</p>
<p>Hitting tab for the scoreboard sends a command, so you trigger<br />
the flood protection if you bang tab a couple times. This has<br />
been fixed so that the scoreboard will never send more than<br />
one update request every two seconds, but you will need to<br />
watch out for it in the existing demo.</p>
<p>The defered model loading has also caused some confusion, but<br />
that is a feature, not a bug. <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In previous tests, you hitched for a second or two whenever a<br />
client with a new model or skin joined a game.</p>
<p>In the demo, when a client joins the game they will be given<br />
the model and skin of someone else temporarily, so there is<br />
no hitch. The only time it will hitch on entry is if it is<br />
a team game and there isn&#8217;t anyone on the team they join. I<br />
make sure the skin color is correct, even if the model isn&#8217;t.</p>
<p>These &#8220;defered&#8221; clients will be loaded when you bring up the<br />
scoreboard. You can do this directly by hitting tab, or you<br />
can have it happen for you when you die.</p>
<p>The point is: you died BEFORE it hitched, not as a result of<br />
the hitch.</p>
<p>The scoreboard header is up, but it is still a bit easy to miss.</p>
<p>* fixed high server idle cpu usage<br />
(it was spinning in place until maxfps was used!)<br />
* fixed g_password, which is crashing in the demo<br />
* moved svs.snapshotEntities to the hunk<br />
* enable lagometer whenever running a non-local game<br />
* cg_drawTeamOverlay cvar, set to 0 by default<br />
* finished authorize work<br />
* better reporting of unused highwater memory</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/16/demo-servers-flood-protection/feed</wfw:commentRss>
		</item>
		<item>
		<title>Vertex Lighting in the Existing Demos</title>
		<link>http://doom-ed.com/blog/1999/11/15/vertex-lighting-in-the-existing-demos</link>
		<comments>http://doom-ed.com/blog/1999/11/15/vertex-lighting-in-the-existing-demos#comments</comments>
		<pubDate>Mon, 15 Nov 1999 10:02:28 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/15/vertex-lighting-in-the-existing-demos</guid>
		<description><![CDATA[The way vertex lighting is working in the existing demos is that
only two pass shaders (lightmap * texture) were collapsed to a
single pass, all other shaders stayed the same.
Xian added some chrome and energy effects to parts of q3tourney2,
which changed them from two pass to three pass shaders. We felt
that that 50% increase on those [...]]]></description>
			<content:encoded><![CDATA[<p>The way vertex lighting is working in the existing demos is that<br />
only two pass shaders (lightmap * texture) were collapsed to a<br />
single pass, all other shaders stayed the same.</p>
<p>Xian added some chrome and energy effects to parts of q3tourney2,<br />
which changed them from two pass to three pass shaders. We felt<br />
that that 50% increase on those polygons was justified in normal<br />
play, but as people have pointed out, when you are playing with<br />
vertex lighting, that three passes stays three passes instead<br />
of collapsing to a single pass, resulting in a 300% increase<br />
on those polygons over the way it was before. Still faster than<br />
lightmap mode, but a large variance over other parts of the level.</p>
<p>Today I wrote new code to address that, and improve on top of it.</p>
<p>Now when r_vertexlight is on, I force every single shader to a<br />
single pass. In the cases where it isn&#8217;t a simple light*texture<br />
case, I try and intelligently pick the most representative pass<br />
and do some fixups on the shader modulations.</p>
<p>This works our great, and brings the graphics load down to the<br />
minimum we can do with the data sets.</p>
<p>Performance is still going to be down a couple msec a frame due to<br />
using dynamic compilation instead of dll&#8217;s for the cgame, but that<br />
is an intentional tradeoff. You can obviously slow things down by<br />
running a lot of bots, but that is to be expected.</p>
<p>I am still investigating the high idle dedicated server cpu utilization<br />
and a few other issues. The server cpu time will definately be<br />
higher than 1.08 due to the dynamic compiler, but again, that is<br />
an intentional tradeoff.</p>
<p>A set of go-fast-and-look-ugly options:<br />
r_mode 2<br />
r_colorbits 16<br />
r_texturemode GL_LINEAR_MIPMAP_NEAREST<br />
r_vertexlighting 1<br />
r_subdivisions 999<br />
r_lodbias 2<br />
cg_gibs 0<br />
cg_draw3dicons 0<br />
cg_brassTime 0<br />
cg_marks 0<br />
cg_shadows 0<br />
cg_simpleitems 1<br />
cg_drawAttacker 0</p>
<p>* icons for bot skills on scoreboard<br />
* r_vertexlight is now &#8220;force single pass&#8221; for all shaders<br />
* modified cd key check to be fire and forget on the client<br />
* file handle debugging info in path command<br />
* network address type of NA_BAD for failed resolves<br />
* better command line variable overriding<br />
* cache scoreboard for two seconds<br />
* sync sound system before starting cinematics<br />
* fixed many escapes disconnect from server exiting the game<br />
* fixed shotgun pellets underwater expending all temp entities</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/15/vertex-lighting-in-the-existing-demos/feed</wfw:commentRss>
		</item>
		<item>
		<title>Q3 Demo Test</title>
		<link>http://doom-ed.com/blog/1999/11/14/q3-demo-test</link>
		<comments>http://doom-ed.com/blog/1999/11/14/q3-demo-test#comments</comments>
		<pubDate>Mon, 15 Nov 1999 00:41:13 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/14/q3-demo-test</guid>
		<description><![CDATA[The demo test is built. It should go up in a couple
hours if nothing explodes.
Mac and linux builds won&#8217;t be out tonight.
* clear SVF_BOT when exiting follow mode
* render temp memory
* new mac GL initialization code
* no zone memory use in music thread
* added check for trash past zone block
* explicitly flush journal data file [...]]]></description>
			<content:encoded><![CDATA[<p>The demo test is built. It should go up in a couple<br />
hours if nothing explodes.</p>
<p>Mac and linux builds won&#8217;t be out tonight.</p>
<p>* clear SVF_BOT when exiting follow mode<br />
* render temp memory<br />
* new mac GL initialization code<br />
* no zone memory use in music thread<br />
* added check for trash past zone block<br />
* explicitly flush journal data file after a write<br />
* added FS_Flush</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/14/q3-demo-test/feed</wfw:commentRss>
		</item>
		<item>
		<title>Graphic for Defer</title>
		<link>http://doom-ed.com/blog/1999/11/13/graphic-for-defer</link>
		<comments>http://doom-ed.com/blog/1999/11/13/graphic-for-defer#comments</comments>
		<pubDate>Sat, 13 Nov 1999 07:14:16 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/13/graphic-for-defer</guid>
		<description><![CDATA[* graphic for defer
* don&#8217;t set any systeminfo vars from demos
* A3D fix
* spectator follow clients that disconnect
* stop follow mode before going to intermission so you can ready
* use (fullbright) vertex lighting if the bsp file doesn&#8217;t have lightmaps
* auto set demo keyword on servers
* finished cd key authorization
* fixed symbol table loading for [...]]]></description>
			<content:encoded><![CDATA[<p>* graphic for defer<br />
* don&#8217;t set any systeminfo vars from demos<br />
* A3D fix<br />
* spectator follow clients that disconnect<br />
* stop follow mode before going to intermission so you can ready<br />
* use (fullbright) vertex lighting if the bsp file doesn&#8217;t have lightmaps<br />
* auto set demo keyword on servers<br />
* finished cd key authorization<br />
* fixed symbol table loading for interpreter<br />
* reconnect command<br />
* removed limit on number of completed commands<br />
* changed default name to &#8220;UnnamedPlayer&#8221;<br />
* awards over people&#8217;s heads in multiplayer<br />
* fixed global powerup announcements</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/13/graphic-for-defer/feed</wfw:commentRss>
		</item>
		<item>
		<title>Teamplay Menu Comment</title>
		<link>http://doom-ed.com/blog/1999/11/11/teamplay-menu-comment</link>
		<comments>http://doom-ed.com/blog/1999/11/11/teamplay-menu-comment#comments</comments>
		<pubDate>Thu, 11 Nov 1999 08:15:27 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/11/teamplay-menu-comment</guid>
		<description><![CDATA[* teamplay menu comment
* shrank and moved &#8220;RECORDING demo:&#8221; text
* identified and worked around Apple input queue issue
* properly send configstring resets on map_restart
* don&#8217;t clip sound buffer on file writes
* don&#8217;t draw scoreboard during warmup
* auto load added bots in single player
* swapped order of map_restart and warmup configstring
* disable dynamic lights on riva128 [...]]]></description>
			<content:encoded><![CDATA[<p>* teamplay menu comment<br />
* shrank and moved &#8220;RECORDING demo:&#8221; text<br />
* identified and worked around Apple input queue issue<br />
* properly send configstring resets on map_restart<br />
* don&#8217;t clip sound buffer on file writes<br />
* don&#8217;t draw scoreboard during warmup<br />
* auto load added bots in single player<br />
* swapped order of map_restart and warmup configstring<br />
* disable dynamic lights on riva128 due to lack of blend mode<br />
* put frags left warning back in all gametypes<br />
* removed joystick button debug prints</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/11/teamplay-menu-comment/feed</wfw:commentRss>
		</item>
		<item>
		<title>Spinning Barrel on Respawn</title>
		<link>http://doom-ed.com/blog/1999/11/09/spinning-barrel-on-respawn</link>
		<comments>http://doom-ed.com/blog/1999/11/09/spinning-barrel-on-respawn#comments</comments>
		<pubDate>Wed, 10 Nov 1999 03:08:54 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/09/spinning-barrel-on-respawn</guid>
		<description><![CDATA[* fixed spinning barrel on respawn issue
* clear eflags before intermission
* shutdown menu on starting a cinematic
* mask name colors to 0-7 range
* fixed jpeg loading alpha channel
* try for not-nearest spawn twice instead of once
* made unzoomed exactly identity mouse modifier
* cl_debugmove [1/2]
* m_filter
* fixed time warnings
* allow timelimits to hit with only a [...]]]></description>
			<content:encoded><![CDATA[<p>* fixed spinning barrel on respawn issue<br />
* clear eflags before intermission<br />
* shutdown menu on starting a cinematic<br />
* mask name colors to 0-7 range<br />
* fixed jpeg loading alpha channel<br />
* try for not-nearest spawn twice instead of once<br />
* made unzoomed exactly identity mouse modifier<br />
* cl_debugmove [1/2]<br />
* m_filter<br />
* fixed time warnings<br />
* allow timelimits to hit with only a single player<br />
* filter local games with different protocol versions<br />
* fixed bad arg 0 after sysinfo configstring<br />
* removed unneeded svc_servercommand at start of command strings<br />
* fixed redundantly loaded level bug<br />
* fixed journal playback from demo build<br />
* removed background image from viewlog window</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/09/spinning-barrel-on-respawn/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bad Weapon Number</title>
		<link>http://doom-ed.com/blog/1999/11/05/bad-weapon-number</link>
		<comments>http://doom-ed.com/blog/1999/11/05/bad-weapon-number#comments</comments>
		<pubDate>Sat, 06 Nov 1999 03:01:44 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/05/bad-weapon-number</guid>
		<description><![CDATA[* check for bad weapon number in non-3d ammo icon on death
* fixed plane catagorization
* error command does an ERR_DROP if given a parm
* don&#8217;t load high LOD models if r_lodbias
* nobots/nohumans options for player spawn spots
* prevent voice rewards on frag that enters intermission
* dissallow native dll loading if sv_pure
* loaddefered cgame command, issued [...]]]></description>
			<content:encoded><![CDATA[<p>* check for bad weapon number in non-3d ammo icon on death<br />
* fixed plane catagorization<br />
* error command does an ERR_DROP if given a parm<br />
* don&#8217;t load high LOD models if r_lodbias<br />
* nobots/nohumans options for player spawn spots<br />
* prevent voice rewards on frag that enters intermission<br />
* dissallow native dll loading if sv_pure<br />
* loaddefered cgame command, issued on addbot<br />
* drop the weapon you are changing TO if you only had a<br />
MG or gauntlet<br />
* fixed bounce pad event prediction for all angles<br />
* allow empty tokens in map files<br />
* fixed infos exceeded warning on bot parse<br />
* warning on mismatched mipmap/picmip/wrapclamp image reuse<br />
* fixed pain echo sound after predicted falling damage<br />
* move sound to hunk<br />
* move vm to hunk<br />
* restart game vm in place for map_restarts<br />
* avoid all lightmaps entirely when using vertex light<br />
* pretouch all images after registration<br />
* pretouch all known in-use memory before starting a game<br />
* on error, shutdown client before server, to be more likely<br />
to get out of fullscreen before a recursive error<br />
* new pre-allocated memmory manager to crutch up mac<br />
* meminfo command replaces hunk_stats and z_stats<br />
* adjusted scoreboard titles<br />
* no guantlet reward on corpses<br />
* fixed snd_restart when paused<br />
* PRE_RELEASE_DEMO hack</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/05/bad-weapon-number/feed</wfw:commentRss>
		</item>
		<item>
		<title>Cd Check in Single Player</title>
		<link>http://doom-ed.com/blog/1999/11/03/cd-check-in-single-player</link>
		<comments>http://doom-ed.com/blog/1999/11/03/cd-check-in-single-player#comments</comments>
		<pubDate>Wed, 03 Nov 1999 07:52:25 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/03/cd-check-in-single-player</guid>
		<description><![CDATA[* cd check in single player
* removed drop shadow on console input line
* swapped mynx pain sounds
* fixed cleared music buffer on track loop again
* force skins on spectators in team games to prevent having a
default waste memory
* only defer to a model with same team skin
* fixed grenade-disappearing-at-floor bug when about to explode
* draw [...]]]></description>
			<content:encoded><![CDATA[<p>* cd check in single player<br />
* removed drop shadow on console input line<br />
* swapped mynx pain sounds<br />
* fixed cleared music buffer on track loop again<br />
* force skins on spectators in team games to prevent having a<br />
default waste memory<br />
* only defer to a model with same team skin<br />
* fixed grenade-disappearing-at-floor bug when about to explode<br />
* draw reward medals during gameplay<br />
* added &#8220;humiliation&#8221; feedback for gauntlet kills<br />
* spread respawn times to prevent pattern running:<br />
#define RESPAWN_ARMOR 25<br />
#define RESPAWN_TEAM_WEAPON 30<br />
#define RESPAWN_HEALTH 35<br />
#define RESPAWN_AMMO 40<br />
#define RESPAWN_HOLDABLE 60<br />
#define RESPAWN_MEGAHEALTH 120<br />
#define RESPAWN_POWERUP 120</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/03/cd-check-in-single-player/feed</wfw:commentRss>
		</item>
		<item>
		<title>Remove Grapple from Give All</title>
		<link>http://doom-ed.com/blog/1999/11/02/remove-grapple-from-give-all</link>
		<comments>http://doom-ed.com/blog/1999/11/02/remove-grapple-from-give-all#comments</comments>
		<pubDate>Tue, 02 Nov 1999 06:59:56 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/02/remove-grapple-from-give-all</guid>
		<description><![CDATA[* remove grapple from give all
* fixed pick-up-two-healths-even-if-you-don&#8217;t-need-the-second bug
* moved wrap/clamp to image generation function and added to imagelist
fixed an improper clamp on macs
* different menuback for ragepro
* fixed mac button problems with OS9 and wheel mice
* teamplay rule mods:
less MG damage (5 instead of 7)
weapons always have a full load of ammo
don&#8217;t drop powerups
* [...]]]></description>
			<content:encoded><![CDATA[<p>* remove grapple from give all<br />
* fixed pick-up-two-healths-even-if-you-don&#8217;t-need-the-second bug<br />
* moved wrap/clamp to image generation function and added to imagelist<br />
fixed an improper clamp on macs<br />
* different menuback for ragepro<br />
* fixed mac button problems with OS9 and wheel mice<br />
* teamplay rule mods:<br />
less MG damage (5 instead of 7)<br />
weapons always have a full load of ammo<br />
don&#8217;t drop powerups<br />
* changed low detail r_subdivisions to 25 to prevent poke through<br />
* removed warning on empty servercommand when systeminfo changes<br />
* g_debugDamage<br />
* when a vote is tied with all votes in, immediately fail it<br />
* haste smoke puffs</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/02/remove-grapple-from-give-all/feed</wfw:commentRss>
		</item>
		<item>
		<title>Play Chat Sound During Votes</title>
		<link>http://doom-ed.com/blog/1999/11/01/play-chat-sound-during-votes</link>
		<comments>http://doom-ed.com/blog/1999/11/01/play-chat-sound-during-votes#comments</comments>
		<pubDate>Mon, 01 Nov 1999 19:43:08 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/11/01/play-chat-sound-during-votes</guid>
		<description><![CDATA[* play chat sound during votes
* draw 2D icon for ammo if cg_draw3dicons 0
* fixed losing input on menu vid_restart
* made &#8220;vote&#8221; and &#8220;callvote&#8221; completable
* remove mac about dialog
* fixed demos skipping inital time due to loading
* fixed timing on timedemo startup
* don&#8217;t flash attacker when damaging self
* display capturelimit instead of fraglimit on score [...]]]></description>
			<content:encoded><![CDATA[<p>* play chat sound during votes<br />
* draw 2D icon for ammo if cg_draw3dicons 0<br />
* fixed losing input on menu vid_restart<br />
* made &#8220;vote&#8221; and &#8220;callvote&#8221; completable<br />
* remove mac about dialog<br />
* fixed demos skipping inital time due to loading<br />
* fixed timing on timedemo startup<br />
* don&#8217;t flash attacker when damaging self<br />
* display capturelimit instead of fraglimit on score tabs in ctf<br />
* recursive mirror/portal changed to a developer warning<br />
* fixed bug with follow mode spectators<br />
* battle suit shader<br />
* notsingle spawn option<br />
* separated torso and legs priority animation coutners<br />
so gesture doesn&#8217;t mess with legs<br />
* adjusted value to prevent missed launch sound<br />
on accelerator pads<br />
* setviewpos x y z yaw<br />
same parms as viewpos command<br />
* stop sound on file access<br />
* fixed developer prints from renderer<br />
* defered client media loading, only load models and sounds for<br />
new players when you die or bring up the scoreboard<br />
* fix for double colliding against same plane and getting stuck<br />
* dropped LG damage to 160 pts / sec<br />
* don&#8217;t snap predicted player entity, smooths deaths and movers<br />
* all sine movers are instant kill on block<br />
* fixed items riding on bobbers</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/11/01/play-chat-sound-during-votes/feed</wfw:commentRss>
		</item>
		<item>
		<title>Robert Duffy</title>
		<link>http://doom-ed.com/blog/1999/10/23/robert-duffy</link>
		<comments>http://doom-ed.com/blog/1999/10/23/robert-duffy#comments</comments>
		<pubDate>Sat, 23 Oct 1999 20:37:05 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/10/23/robert-duffy</guid>
		<description><![CDATA[An announcement:
We have hired Robert Duffy as a full time employee, starting in
December.
He has been maintaining the level editor since the release of Q2,
but a number of things have convinced me it is time to have a
full time tool-guy at id.
The original QE4 editor was my very first ever Win32 program, and
while Robert has done [...]]]></description>
			<content:encoded><![CDATA[<p>An announcement:</p>
<p>We have hired Robert Duffy as a full time employee, starting in<br />
December.</p>
<p>He has been maintaining the level editor since the release of Q2,<br />
but a number of things have convinced me it is time to have a<br />
full time tool-guy at id.</p>
<p>The original QE4 editor was my very first ever Win32 program, and<br />
while Robert has done a good job of keeping it on life support<br />
through necessary extensions and evolutions, it really is past<br />
its designated lifespan.</p>
<p>I want to take a shot at making the level editor cross platform,<br />
so it can be used on linux and mac systems. I&#8217;m not exactly<br />
confident that it will work out, but I want to try.</p>
<p>Many of the content creation tasks seem to be fairly stabilized<br />
over the last several years, and our next product is going to be<br />
pretty content directed, so I can justify more engineering<br />
effort on writing better tools.</p>
<p>It is time for a re-think of the relationships between editor,<br />
utilities, and game. I am still an opponent of in-game editors,<br />
but I want to rearrange a lot of things so that some subsystems<br />
can be shared.</p>
<p>All of that added up to more than I was going to be able to do<br />
in the time left after the various research, graphics, and<br />
networking things I want to pursue.</p>
<p>* added r_speeds timing info to cinematic texture uploads<br />
* fixed loop sounds on movers<br />
* new bfg sound<br />
* &#8220;sv_pure 1&#8243; as default, requires clients to only get data from<br />
pk3 files the server is using<br />
* fixed fog pass on inside of textured fog surfaces<br />
* properly fog sprites<br />
* graphics for scoreboard headers<br />
* show colored names on attacker display and scoreboard<br />
* made &#8220;no such frame&#8221; a developer only warning<br />
* count a disconnect while losing in tournement mode as a win<br />
for the other player<br />
* fixed running with jump held down runs slow<br />
* draw &#8220;connection problems&#8221; in center of screen in addition<br />
to phone jack icon<br />
* cut marks properly on non-convex faces<br />
* fixed bug with command completion partial match and case sensitivity<br />
* fixed console dropping on level start<br />
* fixed frags left feedback after restarts<br />
* fog after dlight<br />
* removed fogged stages from shader, dynamically generate<br />
* removed fogonly shader keyword, infer from surfaceparm<br />
* removed uneeded reinit of shader system on vid_restart</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/10/23/robert-duffy/feed</wfw:commentRss>
		</item>
		<item>
		<title>Full &#8220;Demo&#8221; Release for Quake 3</title>
		<link>http://doom-ed.com/blog/1999/10/17/full-demo-release-for-quake-3</link>
		<comments>http://doom-ed.com/blog/1999/10/17/full-demo-release-for-quake-3#comments</comments>
		<pubDate>Mon, 18 Oct 1999 02:36:10 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/10/17/full-demo-release-for-quake-3</guid>
		<description><![CDATA[The next release will be the full &#8220;demo&#8221; release for quake 3.
It will include bots and a new, simple level that is suitable for
complete beginners to play, as well as the existing q3test maps.
The timing just didn&#8217;t work out right for another test before we
complete the game.
We plan on releasing the demo after code freeze, [...]]]></description>
			<content:encoded><![CDATA[<p>The next release will be the full &#8220;demo&#8221; release for quake 3.<br />
It will include bots and a new, simple level that is suitable for<br />
complete beginners to play, as well as the existing q3test maps.</p>
<p>The timing just didn&#8217;t work out right for another test before we<br />
complete the game.</p>
<p>We plan on releasing the demo after code freeze, when the entire<br />
game is in final testing, which will give us a few days time to<br />
fix any last minute problems that show up before golden master.</p>
<p>No, I don&#8217;t have an actual date when that will be.</p>
<p>&#8212;</p>
<p>I got an iBook in on friday. It is sort of neat (I need to go<br />
buy an AirPort, then it will definately be neat), but it is<br />
currently way too slow to play Q3 on.</p>
<p>Apple&#8217;s high end G3 and G4 systems with rage128/rage128pro cards<br />
and latest drivers are just about as fast as equivelant wintel systems,<br />
but the rest of the product line is still suffering a noticable<br />
speed disadvantage.</p>
<p>The new iMac has a rage128, but it is only an 8mb/64bit version. Still,<br />
with agp texturing it is a solid platform with performance that is<br />
certainly good enough to play the game well on.</p>
<p>Existing iMacs have 6mb ragePro video. ATI&#8217;s windows drivers for<br />
the pro have come a long ways, and Q3 is plenty playbale on<br />
windows with a rage pro (ugly, but playable). On apple systems<br />
(iMacs and beige G3&#8217;s), the performance is sometimes as low as HALF<br />
the windows platform. The lack of AGP contributes some to this, but<br />
it is mostly just a case of the drivers not being optimzed yet. The<br />
focus has been on the rage128 so far.</p>
<p>The iBook is also ragePro based, but it is an ultra-cheap 32 bit<br />
version. It does texture over AGP, but it is slooooow. I suspect it<br />
is still driver issues, because it is still very slow even at 320&#215;240,<br />
so that leaves hope that it can be improved.</p>
<p>Another issue with the Apple systems is that Apple 16 bit color is<br />
actually 15 bit. I never used to think it made much difference, but<br />
I have been doing a lot of side by side comparying, and it does turn<br />
out to be a noticable loss of quality.</p>
<p>* new lg splash<br />
* added channel number for local sounds so feedbacks<br />
don&#8217;t override announcers<br />
* remvoed scoreup feedback sound<br />
* expand score tabs as needed for large scores<br />
* fixed bfg obit<br />
* fixed swimming off floors<br />
* fixed swim animation when jumping in shallow water<br />
* fixed first weapopn switch problem<br />
* convert all joystick axis to button events (twist is now bindable)</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/10/17/full-demo-release-for-quake-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>Make Sure Video is Shutfown</title>
		<link>http://doom-ed.com/blog/1999/10/14/make-sure-video-is-shutfown</link>
		<comments>http://doom-ed.com/blog/1999/10/14/make-sure-video-is-shutfown#comments</comments>
		<pubDate>Thu, 14 Oct 1999 22:08:15 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/10/14/make-sure-video-is-shutfown</guid>
		<description><![CDATA[* make sure video is shutfown for errors on startup
* automatic fallback to vm if dll load fails
* compressed jump tables for qvm
* removed common qfiles.h and surfaceflags.h from utils and game
* don&#8217;t load qvm symbols if not running with developer
* &#8220;quake3 safe&#8221; will run the game without loading q3config.cfg
* ignore network packets when in [...]]]></description>
			<content:encoded><![CDATA[<p>* make sure video is shutfown for errors on startup<br />
* automatic fallback to vm if dll load fails<br />
* compressed jump tables for qvm<br />
* removed common qfiles.h and surfaceflags.h from utils and game<br />
* don&#8217;t load qvm symbols if not running with developer<br />
* &#8220;quake3 safe&#8221; will run the game without loading q3config.cfg<br />
* ignore network packets when in single player mode<br />
* dedicated server memory optimizations. Tips:<br />
com_hunkMegs 4<br />
sv_maxclients 3<br />
bot_enable 0<br />
* fixed logfile on mac<br />
* new time drifting code<br />
* fixed file handle leak with compressed pk3 files<br />
* q3data changed to remove shader references from player models<br />
* throw a fatal error if drop errors are streaming in<br />
* fixed com_hunkMegs as command line parm<br />
* spawn spectators at intermission point<br />
(info_spectator_start has been removed)<br />
* new sound channel for local sounds<br />
* fixed follow toggle on bots<br />
* don&#8217;t write to games.log in single player<br />
* fixed improper case sensitivity in S_FindName</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/10/14/make-sure-video-is-shutfown/feed</wfw:commentRss>
		</item>
		<item>
		<title>Handle Window Close Events Properly</title>
		<link>http://doom-ed.com/blog/1999/10/11/handle-window-close-events-properly</link>
		<comments>http://doom-ed.com/blog/1999/10/11/handle-window-close-events-properly#comments</comments>
		<pubDate>Mon, 11 Oct 1999 20:00:36 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/10/11/handle-window-close-events-properly</guid>
		<description><![CDATA[* handle window close events properly
* enable r_displayRefresh selection and feedback on mac
* avoid AGEN_IDENTITY when CGEN_DIFFUSE_LIGHTING
* colorized railgun muzzle flash, impact flash, and mark
* exactly synced animating textures with waveforms and collapsed
all explosion sequences into single shaders
* removed unneeded black pass on hell skies
* fixed grenades sticking to steep slopes
* scan for next highest [...]]]></description>
			<content:encoded><![CDATA[<p>* handle window close events properly<br />
* enable r_displayRefresh selection and feedback on mac<br />
* avoid AGEN_IDENTITY when CGEN_DIFFUSE_LIGHTING<br />
* colorized railgun muzzle flash, impact flash, and mark<br />
* exactly synced animating textures with waveforms and collapsed<br />
all explosion sequences into single shaders<br />
* removed unneeded black pass on hell skies<br />
* fixed grenades sticking to steep slopes<br />
* scan for next highest fullscreen resolution when exact<br />
mode fails (fixes SGI flat panel failing to init)<br />
* all cgame cvars now have a cg_ prefix (crosshair, fov, etc)<br />
* clear clientinfo before parsing configstring<br />
* make all feedback voiceovers share the same channel<br />
* fixed nodraw curves<br />
* fixed obits from shooter entities<br />
* fixed chat char issue<br />
* separate gentity_t fields into sharedEntity_t<br />
* reintegrated q_mathsys with q_math<br />
* cg_forcemodel also forces player sounds<br />
* unknown cmd commands don&#8217;t chat<br />
* fixed strip order on text quads</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/10/11/handle-window-close-events-properly/feed</wfw:commentRss>
		</item>
		<item>
		<title>R_primitives 3 Path for Non-Vertex Array Testing</title>
		<link>http://doom-ed.com/blog/1999/10/07/r_primitives-3-path-for-non-vertex-array-testing</link>
		<comments>http://doom-ed.com/blog/1999/10/07/r_primitives-3-path-for-non-vertex-array-testing#comments</comments>
		<pubDate>Thu, 07 Oct 1999 05:09:31 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/10/07/r_primitives-3-path-for-non-vertex-array-testing</guid>
		<description><![CDATA[* r_primitives 3 path for non-vertex array testing
* specify sex in model animation.cfg file
* proper dropping of failed bot inits
* removed identical pain sounds
* serverTime strictly increasing across levels
* added GL_DECAL multitexture collapse
* windowed mouse on mac
* fixed byte order issue with curve clipping on mac
* made com_defaultextension buffer safe
* fixed levelshot and added antialiasing [...]]]></description>
			<content:encoded><![CDATA[<p>* r_primitives 3 path for non-vertex array testing<br />
* specify sex in model animation.cfg file<br />
* proper dropping of failed bot inits<br />
* removed identical pain sounds<br />
* serverTime strictly increasing across levels<br />
* added GL_DECAL multitexture collapse<br />
* windowed mouse on mac<br />
* fixed byte order issue with curve clipping on mac<br />
* made com_defaultextension buffer safe<br />
* fixed levelshot and added antialiasing to image<br />
* don&#8217;t clear bot names before kick message<br />
* made servercommand sequences strictly increasing across<br />
level changes<br />
* unpause on vid_restart</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/10/07/r_primitives-3-path-for-non-vertex-array-testing/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fixed Steady Snapshot Test</title>
		<link>http://doom-ed.com/blog/1999/10/05/fixed-steady-snapshot-test</link>
		<comments>http://doom-ed.com/blog/1999/10/05/fixed-steady-snapshot-test#comments</comments>
		<pubDate>Wed, 06 Oct 1999 04:14:51 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/10/05/fixed-steady-snapshot-test</guid>
		<description><![CDATA[* fixed steady snapshot test
* fixed incorrect 0 ping if past client messages
* fixed loser-disconnecting-at-tourney-intermission
sorting problem
* general purpose flood protection, limiting all user
commands to one a second by stalling the client,
so the commands don&#8217;t actually get dropped, but
are delayed as needed
* replace headnode overflow with lastCluster
* fixed bad extrapolation on unpausing
* fixed player twitch on [...]]]></description>
			<content:encoded><![CDATA[<p>* fixed steady snapshot test<br />
* fixed incorrect 0 ping if past client messages<br />
* fixed loser-disconnecting-at-tourney-intermission<br />
sorting problem<br />
* general purpose flood protection, limiting all user<br />
commands to one a second by stalling the client,<br />
so the commands don&#8217;t actually get dropped, but<br />
are delayed as needed<br />
* replace headnode overflow with lastCluster<br />
* fixed bad extrapolation on unpausing<br />
* fixed player twitch on unpausing<br />
* print client names on loading screen</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/10/05/fixed-steady-snapshot-test/feed</wfw:commentRss>
		</item>
		<item>
		<title>The New G3 Mac Hardware</title>
		<link>http://doom-ed.com/blog/1999/01/10/the-new-g3-mac-hardware</link>
		<comments>http://doom-ed.com/blog/1999/01/10/the-new-g3-mac-hardware#comments</comments>
		<pubDate>Sun, 10 Jan 1999 21:48:12 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1999/01/10/the-new-g3-mac-hardware</guid>
		<description><![CDATA[Ok, many of you have probably heard that I spoke at the macworld
keynote on tuesday. Some information is probably going to get
distorted in the spinning and retelling, so here is an info
dump straight from me:
Q3test, and later the full commercial Quake3: Arena, will be simultaniously
released on windows, mac, and linux platforms.
I think Apple is doing [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, many of you have probably heard that I spoke at the macworld<br />
keynote on tuesday. Some information is probably going to get<br />
distorted in the spinning and retelling, so here is an info<br />
dump straight from me:</p>
<p>Q3test, and later the full commercial Quake3: Arena, will be simultaniously<br />
released on windows, mac, and linux platforms.</p>
<p>I think Apple is doing a lot of things right. A lot of what they are<br />
doing now is catch-up to wintel, but if they can keep it up for the next<br />
year, they may start making a really significant impact.</p>
<p>I still can&#8217;t give the mac an enthusiastic reccomendation for sophisticated<br />
users right now because of the operating system issues, but they are working<br />
towards correcting that with MacOS X.</p>
<p>The scoop on the new G3 mac hardware:</p>
<p>Basically, its a great system, but Apple has oversold its<br />
performance reletive to intel systems. In terms of timedemo scores,<br />
the new G3 systems should be near the head of the pack, but there<br />
will be intel systems outperforming them to some degree. The mac has<br />
not instantly become a &#8220;better&#8221; platform for games than wintel, it<br />
has just made a giant leap from the back of the pack to near the<br />
front.</p>
<p>I wish Apple would stop quoting &#8220;Bytemarks&#8221;. I need to actually<br />
look at the contents of that benchmark and see how it can be so<br />
misleading. It is pretty funny listening to mac evangelist types<br />
try to say that an iMac is faster than a pentium II-400. Nope.<br />
Not even close.</p>
<p>From all of my tests and experiments, the new mac systems are<br />
basically as fast as the latest pentium II systems for general<br />
cpu and memory performance. This is plenty good, but it doesn&#8217;t<br />
make the intel processors look like slugs.</p>
<p>Sure, an in-cache, single precision, multiply-accumulate loop could<br />
run twice as fast as a pentium II of the same clock rate, but<br />
conversly, a double precision add loop would run twice as fast<br />
on the pentium II.</p>
<p>Spec95 is a set of valid benchmarks in my opinion, and I doubt the<br />
PPC systems significantly (if at all) outperform the intel systems.</p>
<p>The IO system gets mixed marks. The 66 mhz video slot is a good step<br />
up from 33 mhz pci in previous products, but that&#8217;s still half the<br />
bandwidth of AGP 2X, and it can&#8217;t texture from main memory. This<br />
will have a small effect on 3D gaming, but not enough to push it<br />
out of its class.</p>
<p>The 64 bit pci slots are a good thing for network and storage cards,<br />
but the memory controller doesn&#8217;t come close to getting peak<br />
utilization out of it. Better than normal pci, though.</p>
<p>The video card is almost exactly what you will be able to get on<br />
the pc side: a 16 mb rage-128. Running on a 66mhz pci bus, it&#8217;s<br />
theoretical peak performance will be midway between the pci and<br />
agp models on pc systems for command traffic limited scenes. Note<br />
that current games are not actually command traffic limited, so the<br />
effect will be significantly smaller. The fill rates will be identical.</p>
<p>The early systems are running the card at 75 mhz, which does put<br />
it at a slight disadvantage to the TNT, but faster versions are<br />
expected later. As far as I can tell, the rage-128 is as perfect<br />
as the TNT feature-wise. The 32 mb option is a feature ATI can<br />
hold over TNT.</p>
<p>Firewire is cool.</p>
<p>Its a simple thing, but the aspect of the new G3 systems that<br />
struck me the most was the new case design. Not the flashy plastic<br />
exterior, but the functional structure of it. The side of the<br />
system just pops open, even with the power on, and lays the<br />
motherboard and cards down flat while the disks and power supply<br />
stay in the encloser. It really is a great design, and the benefits<br />
were driven home yesterday when I had to scavenge some ram out of old<br />
wintel systems yesterday &#8212; most case designs suck really bad.</p>
<p>&#8212;</p>
<p>I could gripe a bit about the story of our (lack of) involvement<br />
with Apple over the last four years or so, but I&#8217;m calling that<br />
water under the bridge now.</p>
<p>After all the past fiascos, I had been basically planning on ignoring Apple<br />
until MacOS X (rhapsody) shipped, which would then turn it into a platform<br />
that I was actually interested in.</p>
<p>Recently, Apple made a strategic corporate decision that games were a<br />
fundamental part of a consumer oriented product line (duh). To help that<br />
out, Apple began an evaluation of what it needed to do to help game<br />
developers.</p>
<p>My first thought was &#8220;throw out MacOS&#8221;, but they are already in the process<br />
of doing that, and its just not going to be completed overnight.</p>
<p>Apple has decent APIs for 2D graphics, input, sound, and networking,<br />
but they didn&#8217;t have a solid 3D graphics strategy.</p>
<p>Rave was sort of ok. Underspecified and with no growth path, but<br />
sort of ok. Pursuing a proprietary api that wasn&#8217;t competetive with<br />
other offerings would have been a Very Bad Idea. They could have tried<br />
to make it better, or even invent a brand new api, but Apple doesn&#8217;t have<br />
much credebility in 3D programming.</p>
<p>For a while, it was looking like Apple might do something stupid,<br />
like license DirectX from microsoft and be put into a guaranteed<br />
trailing edge position behind wintel.</p>
<p>OpenGL was an obvious direction, but there were significant issues with<br />
the licensing and implementation that would need to be resolved.</p>
<p>I spent a day at apple with the various engineering teams and executives,<br />
laying out all the issues.</p>
<p>The first meeting didn&#8217;t seem like it went all that well, and there wasn&#8217;t<br />
a clear direction visible for the next two months. Finally, I got the all<br />
clear signal that OpenGL was a go and that apple would be getting both the<br />
sgi codebase and the conix codebease and team (the best possible arrangement).</p>
<p>So, I got a mac and started developing on it. My first weekend of<br />
effort had QuakeArena limping along while held together with duct<br />
tape, but weekend number two had it properly playable, and weekend<br />
number three had it brought up to full feature compatability. I<br />
still need to do some platform specific things with odd configurations<br />
like multi monitor and addon controlers, but basically now its<br />
just a matter of compiling on the mac to bring it up to date.</p>
<p>This was important to me, because I felt that Quake2 had slipped a bit in<br />
portability because it had been natively developed on windows. I like the<br />
discipline of simultanious portable development.</p>
<p>After 150 hours or so of concentrated mac development, I learned a<br />
lot about the platform.</p>
<p>CodeWarrior is pretty good. I was comfortable devloping there<br />
almost immediately. I would definately say VC++ 6.0 is a more powerful<br />
overall tool, but CW has some nice little aspects that I like. I<br />
am definately looking forward to CW for linux. Unix purists may<br />
be aghast, but I have allways liked gui dev environments more than<br />
a bunch of xterms running vi and gdb.</p>
<p>The hardware (even the previous generation stuff) is pretty good.</p>
<p>The OpenGL performance is pretty good. There is a lot of work<br />
underway to bring the OpenGL performance to the head of the pack,<br />
but the existing stuff works fine for development.</p>
<p>The low level operating systems SUCKS SO BAD it is hard to believe.</p>
<p>The first order problem is lack of memory management / protection.</p>
<p>It took me a while to figure out that the zen of mac development is<br />
&#8220;be at peace while rebooting&#8221;. I rebooted my mac system more times<br />
the first weekend than I have rebooted all the WinNT systems I<br />
have ever owned. True, it has gotten better now that I know my<br />
way around a bit more, and the codebase is fully stable, but there<br />
is just no excuse for an operating system in this day and age to<br />
act like it doesn&#8217;t have access to memory protection.</p>
<p>The first thing that bit me was the static memory allocation for<br />
the program. Modern operating systems just figure out how much<br />
memory you need, but because the mac was originally dsigned for<br />
systems without memory management, significant things have to be<br />
laid out ahead of time.</p>
<p>Porting a win32 game to the mac will probably involve more work<br />
dealing with memory than any other aspect. Graphics, sound, and<br />
networking have reasonable analogues, but you just can&#8217;t rely<br />
on being able to malloc() whatever you want on the mac.</p>
<p>Sure, game developers can manage their own memory, but an operating<br />
system that has proper virtual memory will let you develop<br />
a lot faster.</p>
<p>The lack of memory protection is the worst aspect of mac development.<br />
You can just merrily write all over other programs, the development<br />
environment, and the operating system from any application.</p>
<p>I remember that. From dos 3.3 in 1990.</p>
<p>Guard pages will help catch simple overruns, but it won&#8217;t do anything<br />
for all sorts of other problems.</p>
<p>The second order problem is lack of preemptive multitasking.</p>
<p>The general responsiveness while working with multiple apps<br />
is significantly worse than windows, and you often run into<br />
completely modal dialogs that don&#8217;t let you do anything else at all.</p>
<p>A third order problem is that a lot of the interfaces are fairly<br />
clunky.</p>
<p>There are still many aspects of the mac that clearly show design<br />
decisions based on a 128k 68000 based machine. Wintel has grown<br />
a lot more than the mac platform did. It may have been because the<br />
intel architecture didn&#8217;t evolve gracefully and that forced the<br />
software to reevaluate itself more fully, or it may just be that<br />
microsoft pushed harder.</p>
<p>Carbon sanitizes the worst of the crap, but it doesn&#8217;t turn it<br />
into anything particularly good looking.</p>
<p>MacOS X nails all these problems, but thats still a ways away.</p>
<p>I did figure one thing out &#8212; I was always a little curious why<br />
the early BeOS advocates were so enthusiastic. Coming from a<br />
NEXTSTEP background, BeOS looked to me like a fairly interesting<br />
little system, but nothing special. To a mac developer, it must<br />
have looked like the promised land&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1999/01/10/the-new-g3-mac-hardware/feed</wfw:commentRss>
		</item>
		<item>
		<title>64 Bit Pointer Environments</title>
		<link>http://doom-ed.com/blog/1998/12/30/64-bit-pointer-environments</link>
		<comments>http://doom-ed.com/blog/1998/12/30/64-bit-pointer-environments#comments</comments>
		<pubDate>Wed, 30 Dec 1998 21:31:02 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/12/30/64-bit-pointer-environments</guid>
		<description><![CDATA[I got several vague comments about being able to read &#8220;stuff&#8221; from shared
memory, but no concrete examples of security problems.
However, Gregory Maxwell pointed out that it wouldn&#8217;t work cross platform
with 64 bit pointer environments like linux alpha. That is a killer, so
I will be forced to do everything the hard way. Its probably for the
best, [...]]]></description>
			<content:encoded><![CDATA[<p>I got several vague comments about being able to read &#8220;stuff&#8221; from shared<br />
memory, but no concrete examples of security problems.</p>
<p>However, Gregory Maxwell pointed out that it wouldn&#8217;t work cross platform<br />
with 64 bit pointer environments like linux alpha. That is a killer, so<br />
I will be forced to do everything the hard way. Its probably for the<br />
best, from a design standpoint anyway, but it will take a little more effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/12/30/64-bit-pointer-environments/feed</wfw:commentRss>
		</item>
		<item>
		<title>Virtual Machine Implementation</title>
		<link>http://doom-ed.com/blog/1998/12/29/virtual-machine-implementation</link>
		<comments>http://doom-ed.com/blog/1998/12/29/virtual-machine-implementation#comments</comments>
		<pubDate>Tue, 29 Dec 1998 21:57:54 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/12/29/virtual-machine-implementation</guid>
		<description><![CDATA[I am considering taking a shortcut with my virtual machine implementation
that would make the integration a bit easier, but I&#8217;m not sure that it
doesn&#8217;t compromise the integrity of the base system.
I am considering allowing the interpreted code to live in the global address
space, instead of a private 0 based address space of its own. Store
instructions [...]]]></description>
			<content:encoded><![CDATA[<p>I am considering taking a shortcut with my virtual machine implementation<br />
that would make the integration a bit easier, but I&#8217;m not sure that it<br />
doesn&#8217;t compromise the integrity of the base system.</p>
<p>I am considering allowing the interpreted code to live in the global address<br />
space, instead of a private 0 based address space of its own. Store<br />
instructions from the VM would be confined to the interpreter&#8217;s address<br />
space, but loads could access any structures.</p>
<p>On the positive side:</p>
<p>This would allow full speed (well, full interpreted speed) access to variables<br />
shared between the main code and the interpreted modules. This allows system<br />
calls to return pointers, instead of filling in allocated space in the<br />
interpreter&#8217;s address space.</p>
<p>For most things, this is just a convenience that will cut some development<br />
time. Most of the shared accesses could be recast as &#8220;get&#8221; system calls,<br />
and it is certainly arguable that that would be a more robust programming<br />
style.</p>
<p>The most prevelent change this would prevent is all the cvar_t uses. Things<br />
could stay in the same style as Q2, where cvar accesses are free and<br />
transparantly updated. If the interpreter lives only in its own address<br />
space, then cvar access would have to be like Q1, where looking up a<br />
variable is a potentially time consuming operation, and you wind up adding<br />
lots of little cvar caches that are updated every from or restart.</p>
<p>On the negative side:</p>
<p>A client game module with a bug could cause a bus error, which would not be<br />
possible with a pure local address space interpreter.</p>
<p>I can&#8217;t think of any exploitable security problems that read only access to<br />
the entire address space opens, but if anyone thinks of something, let me<br />
know.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/12/29/virtual-machine-implementation/feed</wfw:commentRss>
		</item>
		<item>
		<title>Binary DLLs plus Interpreted Code</title>
		<link>http://doom-ed.com/blog/1998/11/04/binary-dlls-plus-interpreted-code</link>
		<comments>http://doom-ed.com/blog/1998/11/04/binary-dlls-plus-interpreted-code#comments</comments>
		<pubDate>Thu, 05 Nov 1998 00:54:20 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/11/04/binary-dlls-plus-interpreted-code</guid>
		<description><![CDATA[More extensive comments on the interpreted-C decision later, but a quick
note: the plan is to still allow binary dll loading so debuggers can be
used, but it should be interchangable with the interpreted code. Client
modules can only be debugged if the server is set to allow cheating, but
it would be possible to just use the binary [...]]]></description>
			<content:encoded><![CDATA[<p>More extensive comments on the interpreted-C decision later, but a quick<br />
note: the plan is to still allow binary dll loading so debuggers can be<br />
used, but it should be interchangable with the interpreted code. Client<br />
modules can only be debugged if the server is set to allow cheating, but<br />
it would be possible to just use the binary interface for server modules<br />
if you wanted to sacrifice portability. Most mods will be able to be<br />
implemented with just the interpreter, but some mods that want to do<br />
extensive file access or out of band network communications could still<br />
be implemented just as they are in Q2. I will not endorse any use of<br />
binary client modules, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/11/04/binary-dlls-plus-interpreted-code/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Frag</title>
		<link>http://doom-ed.com/blog/1998/11/03/the-frag</link>
		<comments>http://doom-ed.com/blog/1998/11/03/the-frag#comments</comments>
		<pubDate>Tue, 03 Nov 1998 10:29:17 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/11/03/the-frag</guid>
		<description><![CDATA[This was the most significant thing I talked about at The Frag, so here it
is for everyone else.
The way the QA game architecture has been developed so far has been as two
seperate binary dll&#8217;s: one for the server side game logic, and one for the
client side presentation logic.
While it was easiest to begin development like [...]]]></description>
			<content:encoded><![CDATA[<p>This was the most significant thing I talked about at The Frag, so here it<br />
is for everyone else.</p>
<p>The way the QA game architecture has been developed so far has been as two<br />
seperate binary dll&#8217;s: one for the server side game logic, and one for the<br />
client side presentation logic.</p>
<p>While it was easiest to begin development like that, there are two crucial<br />
problems with shipping the game that way: security and portability.</p>
<p>It&#8217;s one thing to ask the people who run dedicated servers to make informed<br />
decisions about the safety of a given mod, but its a completely different<br />
matter to auto-download a binary image to a first time user connecting to a<br />
server they found.</p>
<p>The quake 2 server crashing attacks have certainly proven that there are<br />
hackers that enjoy attacking games, and shipping around binary code would<br />
be a very tempting opening for them to do some very nasty things.</p>
<p>With quake and Quake 2, all game modifications were strictly server side,<br />
so any port of the game could connect to any server without problems.<br />
With Quake 2&#8217;s binary server dll&#8217;s not all ports could necessarily run a<br />
server, but they could all play.</p>
<p>With significant chunks of code now running on the client side, if we stuck<br />
with binary dll&#8217;s then the less popular systems would find that they could<br />
not connect to new servers because the mod code hadn&#8217;t been ported. I<br />
considered having things set up in such a way that client game dll&#8217;s could<br />
be sort of forwards-compatable, where they could always connect and play,<br />
but new commands and entity types just might now show up. We could also<br />
GPL the game code to force mod authors to release source with the binaries,<br />
but that would still be inconvenient to deal with all the porting.</p>
<p>Related both issues is client side cheating. Certain cheats are easy to do<br />
if you can hack the code, so the server will need to verify which code the<br />
client is running. With multiple ported versions, it wouldn&#8217;t be possible<br />
to do any binary verification.</p>
<p>If we were willing to wed ourselves completely to the windows platform, we<br />
might have pushed ahead with some attempt at binary verification of dlls,<br />
but I ruled that option out. I want QuakeArena running on every platform<br />
that has hardware accelerated OpenGL and an internet connection.</p>
<p>The only real solution to these problems is to use an interpreted language<br />
like Quake 1 did. I have reached the conclusion that the benefits of a<br />
standard language outweigh the benefits of a custom language for our<br />
purposes. I would not go back and extend QC, because tThat stretches the<br />
effort from simply system and interpreter design to include language design,<br />
and there is already plenty to do.</p>
<p>I had been working under the assumption that Java was the right way to go,<br />
but recently I reached a better conclusion.</p>
<p>The programming language for QuakeArena mods is interpreted ANSI C. (well,<br />
I am dropping the double data type, but otherwise it should be pretty<br />
conformant)</p>
<p>The game will have an interpreter for a virtual RISC-like CPU. This should<br />
have a minor speed benefit over a byte-coded, stack based java interpreter.<br />
Loads and stores are confined to a preset block of memory, and access to all<br />
external system facilities is done with system traps to the main game code,<br />
so it is completely secure.</p>
<p>The tools necessary for building mods will all be freely available: a<br />
modified version of LCC and a new program called q3asm. LCC is a wonderful<br />
project &#8212; a cross platform, cross compiling ANSI C compiler done in under<br />
20K lines of code. Anyone interested in compilers should pick up a copy of<br />
&#8220;A retargetable C compiler: design and implementation&#8221; by Fraser and Hanson.</p>
<p>You can&#8217;t link against any libraries, so every function must be resolved.<br />
Things like strcmp, memcpy, rand, etc. must all be implemented directly. I<br />
have code for all the ones I use, but some people may have to modify their<br />
coding styles or provide implementations for other functions.</p>
<p>It is a fair amount of work to restructure all the interfaces to not share<br />
pointers between the system and the games, but it is a whole lot easier<br />
than porting everything to a new language. The client game code is about<br />
10k lines, and the server game code is about 20k lines.</p>
<p>The drawback is performance. It will probably perform somewhat like QC.<br />
Most of the heavy lifting is still done in the builtin functions for path<br />
tracing and world sampling, but you could still hurt yourself by looping<br />
over tons of objects every frame. Yes, this does mean more load on servers,<br />
but I am making some improvements in other parts that I hope will balance<br />
things to about the way Q2 was on previous generation hardware.</p>
<p>There is also the amusing avenue of writing hand tuned virtual assembly<br />
assembly language for critical functions&#8230;</p>
<p>I think this is The Right Thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/11/03/the-frag/feed</wfw:commentRss>
		</item>
		<item>
		<title>Problems with .plan Updates</title>
		<link>http://doom-ed.com/blog/1998/10/14/problems-with-plan-updates</link>
		<comments>http://doom-ed.com/blog/1998/10/14/problems-with-plan-updates#comments</comments>
		<pubDate>Wed, 14 Oct 1998 08:50:34 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/10/14/problems-with-plan-updates</guid>
		<description><![CDATA[It has been difficult to write .plan updates lately. Every time I start
writing something, I realize that I&#8217;m not going to be able to cover it
satisfactorily in the time I can spend on it. I have found that terse
little comments either get misinterpreted, or I get deluged by email
from people wanting me to expand upon [...]]]></description>
			<content:encoded><![CDATA[<p>It has been difficult to write .plan updates lately. Every time I start<br />
writing something, I realize that I&#8217;m not going to be able to cover it<br />
satisfactorily in the time I can spend on it. I have found that terse<br />
little comments either get misinterpreted, or I get deluged by email<br />
from people wanting me to expand upon it.</p>
<p>I wanted to do a .plan about my evolving thoughts on code quality<br />
and lessons learned through quake and quake 2, but in the interest<br />
of actually completing an update, I decided to focus on one change<br />
that was intended to just clean things up, but had a surprising<br />
number of positive side effects.</p>
<p>Since DOOM, our games have been defined with portability in mind.<br />
Porting to a new platform involves having a way to display output,<br />
and having the platform tell you about the various relevant inputs.<br />
There are four principle inputs to a game: keystrokes, mouse moves,<br />
network packets, and time. (If you don&#8217;t consider time an input<br />
value, think about it until you do &#8212; it is an important concept)</p>
<p>These inputs were taken in separate places, as seemed logical at the<br />
time. A function named Sys_SendKeyEvents() was called once a<br />
frame that would rummage through whatever it needed to on a<br />
system level, and call back into game functions like Key_Event( key,<br />
down ) and IN_MouseMoved( dx, dy ). The network system<br />
dropped into system specific code to check for the arrival of packets.<br />
Calls to Sys_Milliseconds() were littered all over the code for<br />
various reasons.</p>
<p>I felt that I had slipped a bit on the portability front with Q2 because<br />
I had been developing natively on windows NT instead of cross<br />
developing from NEXTSTEP, so I was reevaluating all of the system<br />
interfaces for Q3.</p>
<p>I settled on combining all forms of input into a single system event<br />
queue, similar to the windows message queue. My original intention<br />
was to just rigorously define where certain functions were called and<br />
cut down the number of required system entry points, but it turned<br />
out to have much stronger benefits.</p>
<p>With all events coming through one point (The return values from<br />
system calls, including the filesystem contents, are &#8220;hidden&#8221; inputs<br />
that I make no attempt at capturing, ), it was easy to set up a<br />
journalling system that recorded everything the game received. This<br />
is very different than demo recording, which just simulates a network<br />
level connection and lets time move at its own rate. Realtime<br />
applications have a number of unique development difficulties<br />
because of the interaction of time with inputs and outputs.</p>
<p>Transient flaw debugging. If a bug can be reproduced, it can be<br />
fixed. The nasty bugs are the ones that only happen every once in a<br />
while after playing randomly, like occasionally getting stuck on a<br />
corner. Often when you break in and investigate it, you find that<br />
something important happened the frame before the event, and you<br />
have no way of backing up. Even worse are realtime smoothness<br />
issues &#8212; was that jerk of his arm a bad animation frame, a network<br />
interpolation error, or my imagination?</p>
<p>Accurate profiling. Using an intrusive profiler on Q2 doesn&#8217;t give<br />
accurate results because of the realtime nature of the simulation. If<br />
the program is running half as fast as normal due to the<br />
instrumentation, it has to do twice as much server simulation as it<br />
would if it wasn&#8217;t instrumented, which also goes slower, which<br />
compounds the problem. Aggressive instrumentation can slow it<br />
down to the point of being completely unplayable.</p>
<p>Realistic bounds checker runs. Bounds checker is a great tool, but<br />
you just can&#8217;t interact with a game built for final checking, its just<br />
waaaaay too slow. You can let a demo loop play back overnight, but<br />
that doesn&#8217;t exercise any of the server or networking code.</p>
<p>The key point: Journaling of time along with other inputs turns a<br />
realtime application into a batch process, with all the attendant<br />
benefits for quality control and debugging. These problems, and<br />
many more, just go away. With a full input trace, you can accurately<br />
restart the session and play back to any point (conditional<br />
breakpoint on a frame number), or let a session play back at an<br />
arbitrarily degraded speed, but cover exactly the same code paths..</p>
<p>I&#8217;m sure lots of people realize that immediately, but it only truly sunk<br />
in for me recently. In thinking back over the years, I can see myself<br />
feeling around the problem, implementing partial journaling of<br />
network packets, and included the &#8220;fixedtime&#8221; cvar to eliminate most<br />
timing reproducibility issues, but I never hit on the proper global<br />
solution. I had always associated journaling with turning an<br />
interactive application into a batch application, but I never<br />
considered the small modification necessary to make it applicable to<br />
a realtime application.</p>
<p>In fact, I was probably blinded to the obvious because of one of my<br />
very first successes: one of the important technical achievements<br />
of Commander Keen 1 was that, unlike most games of the day, it<br />
adapted its play rate based on the frame speed (remember all those<br />
old games that got unplayable when you got a faster computer?). I<br />
had just resigned myself to the non-deterministic timing of frames<br />
that resulted from adaptive simulation rates, and that probably<br />
influenced my perspective on it all the way until this project.</p>
<p>Its nice to see a problem clearly in its entirety for the first time, and<br />
know exactly how to address it.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/10/14/problems-with-plan-updates/feed</wfw:commentRss>
		</item>
		<item>
		<title>Dual-Processor Acceleration for QuakeArena</title>
		<link>http://doom-ed.com/blog/1998/09/10/dual-processor-acceleration-for-quakearena</link>
		<comments>http://doom-ed.com/blog/1998/09/10/dual-processor-acceleration-for-quakearena#comments</comments>
		<pubDate>Thu, 10 Sep 1998 08:43:36 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/09/10/dual-processor-acceleration-for-quakearena</guid>
		<description><![CDATA[I recently set out to start implementing the dual-processor acceleration
for QA, which I have been planning for a while. The idea is to have one
processor doing all the game processing, database traversal, and lighting,
while the other processor does absolutely nothing but issue OpenGL calls.
This effectively treats the second processor as a dedicated geometry
accelerator for the [...]]]></description>
			<content:encoded><![CDATA[<p>I recently set out to start implementing the dual-processor acceleration<br />
for QA, which I have been planning for a while. The idea is to have one<br />
processor doing all the game processing, database traversal, and lighting,<br />
while the other processor does absolutely nothing but issue OpenGL calls.</p>
<p>This effectively treats the second processor as a dedicated geometry<br />
accelerator for the 3D card. This can only improve performance if the<br />
card isn&#8217;t the bottleneck, but voodoo2 and TNT cards aren&#8217;t hitting their<br />
limits at 640*480 on even very fast processors right now.</p>
<p>For single player games where there is a lot of cpu time spent running the<br />
server, there could conceivably be up to an 80% speed improvement, but for<br />
network games and timedemos a more realistic goal is a 40% or so speed<br />
increase. I will be very satisfied if I can makes a dual pentium-pro 200<br />
system perform like a pII-300.</p>
<p>I started on the specialized code in the renderer, but it struck me that<br />
it might be possible to implement SMP acceleration with a generic OpenGL<br />
driver, which would allow Quake2 / sin / halflife to take advantage of it<br />
well before QuakeArena ships.</p>
<p>It took a day of hacking to get the basic framework set up: an smpgl.dll<br />
that spawns another thread that loads the original oepngl32.dll or<br />
3dfxgl.dll, and watches a work que for all the functions to call.</p>
<p>I get it basically working, then start doing some timings. Its 20%<br />
slower than the single processor version.</p>
<p>I go in and optimize all the queing and working functions, tune the<br />
communications facilities, check for SMP cache collisions, etc.</p>
<p>After a day of optimizing, I finally squeak out some performance gains on<br />
my tests, but they aren&#8217;t very impressive: 3% to 15% on one test scene,<br />
but still slower on the another one.</p>
<p>This was fairly depressing. I had always been able to get pretty much<br />
linear speedups out of the multithreaded utilities I wrote, even up to<br />
sixteen processors. The difference is that the utilities just split up<br />
the work ahead of time, then don&#8217;t talk to each other until they are done,<br />
while here the two threads work in a high bandwidth producer / consumer<br />
relationship.</p>
<p>I finally got around to timing the actual communication overhead, and I was<br />
appalled: it was taking 12 msec to fill the que, and 17 msec to read it out<br />
on a single frame, even with nothing else going on. I&#8217;m surprised things<br />
got faster at all with that much overhead.</p>
<p>The test scene I was using created about 1.5 megs of data to relay all the<br />
function calls and vertex data for a frame. That data had to go to main<br />
memory from one processor, then back out of main memory to the other.<br />
Admitedly, it is a bitch of a scene, but that is where you want the<br />
acceleration&#8230;</p>
<p>The write times could be made over twice as fast if I could turn on the<br />
PII&#8217;s write combining feature on a range of memory, but the reads (which<br />
were the gating factor) can&#8217;t really be helped much.</p>
<p>Streaming large amounts of data to and from main memory can be really grim.<br />
The next write may force a cache writeback to make room for it, then the<br />
read from memory to fill the cacheline (even if you are going to write over<br />
the entire thing), then eventually the writeback from the cache to main<br />
memory where you wanted it in the first place. You also tend to eat one<br />
more read when your program wants to use the original data that got evicted<br />
at the start.</p>
<p>What is really needed for this type of interface is a streaming read cache<br />
protocol that performs similarly to the write combining: three dedicated<br />
cachelines that let you read or write from a range without evicting other<br />
things from the cache, and automatically prefetching the next cacheline as<br />
you read.</p>
<p>Intel&#8217;s write combining modes work great, but they can&#8217;t be set directly<br />
from user mode. All drivers that fill DMA buffers (like OpenGL ICDs&#8230;)<br />
should definately be using them, though.</p>
<p>Prefetch instructions can help with the stalls, but they still don&#8217;t prevent<br />
all the wasted cache evictions.</p>
<p>It might be possible to avoid main memory alltogether by arranging things<br />
so that the sending processor ping-pongs between buffers that fit in L2,<br />
but I&#8217;m not sure if a cache coherent read on PIIs just goes from one L2<br />
to the other, or if it becomes a forced memory transaction (or worse, two<br />
memory transactions). It would also limit the maximum amount of overlap<br />
in some situations. You would also get cache invalidation bus traffic.</p>
<p>I could probably trim 30% of my data by going to a byte level encoding of<br />
all the function calls, instead of the explicit function pointer / parameter<br />
count / all-parms-are-32-bits that I have now, but half of the data is just<br />
raw vertex data, which isn&#8217;t going to shrink unless I did evil things like<br />
quantize floats to shorts.</p>
<p>Too much effort for what looks like a reletively minor speedup. I&#8217;m giving<br />
up on this aproach, and going back to explicit threading in the renderer so<br />
I can make most of the communicated data implicit.</p>
<p>Oh well. It was amusing work, and I learned a few things along the way.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/09/10/dual-processor-acceleration-for-quakearena/feed</wfw:commentRss>
		</item>
		<item>
		<title>Nvidia TNT / Blackjack No More</title>
		<link>http://doom-ed.com/blog/1998/09/08/nvidia-tnt-blackjack-no-more</link>
		<comments>http://doom-ed.com/blog/1998/09/08/nvidia-tnt-blackjack-no-more#comments</comments>
		<pubDate>Tue, 08 Sep 1998 06:54:17 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/09/08/nvidia-tnt-blackjack-no-more</guid>
		<description><![CDATA[I just got a production TNT board installed in my Dolch today.
The riva-128 was a troublesome part. It scored well on benchmarks, but it had
some pretty broken aspects to it, and I never reccomended it (you are better
off with an intel I740).
There aren&#8217;t any troublesome aspects to TNT. Its just great. Good work, Nvidia.
In terms [...]]]></description>
			<content:encoded><![CDATA[<p>I just got a production TNT board installed in my Dolch today.</p>
<p>The riva-128 was a troublesome part. It scored well on benchmarks, but it had<br />
some pretty broken aspects to it, and I never reccomended it (you are better<br />
off with an intel I740).</p>
<p>There aren&#8217;t any troublesome aspects to TNT. Its just great. Good work, Nvidia.</p>
<p>In terms of raw speed, a 16 bit color multitexture app (like quake / quake 2)<br />
should still run a bit faster on a voodoo2, and an SLI voodoo2 should be faster<br />
for all 16 bit color rendering, but TNT has a lot of other things going for it:</p>
<p>32 bit color and 24 bit z buffers. They cost speed, but it is usually a better<br />
quality tradeoff to go one resolution lower but with twice the color depth.</p>
<p>More flexible multitexture combine modes. Voodoo can use its multitexture for<br />
diffuse lightmaps, but not for the specular lightmaps we offer in QuakeArena.<br />
If you want shiny surfaces, voodoo winds up leaving half of its texturing<br />
power unused (you can still run with diffuse lightmaps for max speed).</p>
<p>Stencil buffers. There aren&#8217;t any apps that use it yet, but stencil allows<br />
you to do a lot of neat tricks.</p>
<p>More texture memory. Even more than it seems (16 vs 8 or 12), because all of the<br />
TNT&#8217;s memory can be used without restrictions. Texture swapping is the voodoo&#8217;s<br />
biggest problem.</p>
<p>3D in desktop applications. There is enough memory that you don&#8217;t have to worry<br />
about window and desktop size limits, even at 1280*1024 true color resolution.</p>
<p>Better OpenGL ICD. 3dfx will probably do something about that, though.</p>
<p>This is the shape of 3D boards to come. Professional graphics level<br />
rendering quality with great performance at a consumer price.</p>
<p>We will be releasing preliminary QuakeArena benchmarks on all the new boards<br />
in a few weeks. Quake 2 is still a very good benchmark for moderate polygon<br />
counts, so our test scenes for QA involve very high polygon counts, which<br />
stresses driver quality a lot more. There are a few surprises in the current<br />
timings&#8230;</p>
<p>&#8212;</p>
<p>A few of us took a couple days off in vegas this weekend. After about<br />
ten hours at the tables over friday and saturday, I got a tap on the shoulder&#8230;</p>
<p>Three men in dark suits introduced themselves and explained that I was welcome<br />
to play any other game in the casino, but I am not allowed to play<br />
blackjack anymore.</p>
<p>Ah well, I guess my blackjack days are over. I was actually down a bit for<br />
the day when they booted me, but I made +$32k over five trips to vegas in the<br />
past two years or so.</p>
<p>I knew I would get kicked out sooner or later, because I don&#8217;t play &#8220;safely&#8221;.<br />
I sit at the same table for several hours, and I range my bets around 10 to 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/09/08/nvidia-tnt-blackjack-no-more/feed</wfw:commentRss>
		</item>
		<item>
		<title>HDTV Style QuakeArena</title>
		<link>http://doom-ed.com/blog/1998/08/17/hdtv-style-quakearena</link>
		<comments>http://doom-ed.com/blog/1998/08/17/hdtv-style-quakearena#comments</comments>
		<pubDate>Tue, 18 Aug 1998 04:13:28 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/08/17/hdtv-style-quakearena</guid>
		<description><![CDATA[I added support for HDTV style wide screen displays in QuakeArena, so
24&#8243; and 28&#8243; monitors can now cover the entire screen with game graphics.
On a normal 4:3 aspect ratio screen, a 90 degree horizontal field of view
gives a 75 degree vertical field of view. If you keep the vertical fov
constant and run on a wide [...]]]></description>
			<content:encoded><![CDATA[<p>I added support for HDTV style wide screen displays in QuakeArena, so<br />
24&#8243; and 28&#8243; monitors can now cover the entire screen with game graphics.</p>
<p>On a normal 4:3 aspect ratio screen, a 90 degree horizontal field of view<br />
gives a 75 degree vertical field of view. If you keep the vertical fov<br />
constant and run on a wide screen, you get a 106 degree horizontal fov.</p>
<p>Because we specify fov with the horizontal measurement, you need to change<br />
fov when going into or out of a wide screen mode. I am considering changing<br />
fov to be the vertical measurement, but it would probably cause a lot of<br />
confusion if &#8220;fov 90&#8243; becomes a big fisheye.</p>
<p>Many video card drivers are supporting the ultra high res settings<br />
like 1920 * 1080, but hopefully they will also add support for lower<br />
settings that can be good for games, like 856 * 480.</p>
<p>I spent a day out at apple last week going over technical issues.</p>
<p>I&#8217;m feeling a lot better about MacOS X. Almost everything I like about<br />
rhapsody will be there, plus some solid additions.</p>
<p>I presented the OpenGL case directly to Steve Jobs as strongly as possible.</p>
<p>If Apple embraces OpenGL, I will be strongly behind them. I like OpenGL more<br />
than I dislike MacOS. <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8212;</p>
<p>Last friday I got a phone call: &#8220;want to make some exhibition runs at the<br />
import / domestic drag wars this sunday?&#8221;. It wasn&#8217;t particularly good<br />
timing, because the TR had a slipping clutch and the F50 still hasn&#8217;t gotten<br />
its computer mapping sorted out, but we got everything functional in time.</p>
<p>The tech inspector said that my cars weren&#8217;t allowed to run in the 11s<br />
at the event because they didn&#8217;t have roll cages, so I was supposed to go<br />
easy.</p>
<p>The TR wasn&#8217;t running its best, only doing low 130 mph runs. The F50 was<br />
making its first sorting out passes at the event, but it was doing ok. My<br />
last pass was an 11.8(oops) @ 128, but we still have a ways to go to get the<br />
best times out of it.</p>
<p>I&#8217;m getting some racing tires on the F50 before I go back. It sucked watching<br />
a tiny honda race car jump ahead of me off the line. <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I think ESPN took some footage at the event.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/08/17/hdtv-style-quakearena/feed</wfw:commentRss>
		</item>
		<item>
		<title>Twin Turbo Vitamins</title>
		<link>http://doom-ed.com/blog/1998/07/29/twin-turbo-vitamins</link>
		<comments>http://doom-ed.com/blog/1998/07/29/twin-turbo-vitamins#comments</comments>
		<pubDate>Wed, 29 Jul 1998 21:37:11 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/07/29/twin-turbo-vitamins</guid>
		<description><![CDATA[My F50 took some twin turbo vitamins.
Rear wheel numbers:
602 HP @ 8200 rpm
418 ft-lb @ 7200 rpm
This is very low boost, but I got the 50% power increase I was looking for,
and hopefully it won&#8217;t be making any contributions to my piston graveyard.
There will be an article in Turbo magazine about it, and several other [...]]]></description>
			<content:encoded><![CDATA[<p>My F50 took some twin turbo vitamins.</p>
<p>Rear wheel numbers:<br />
602 HP @ 8200 rpm<br />
418 ft-lb @ 7200 rpm</p>
<p>This is very low boost, but I got the 50% power increase I was looking for,<br />
and hopefully it won&#8217;t be making any contributions to my piston graveyard.</p>
<p>There will be an article in Turbo magazine about it, and several other car<br />
magazines want to test it out. They usually start out with &#8220;He did WHAT<br />
to an F50???&#8221; <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Brian is getting a nitrous kit installed in his viper, and Cash just got his<br />
suspension beefed up, so we will be off to the dragstrip again next month to<br />
sort everything out again.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/07/29/twin-turbo-vitamins/feed</wfw:commentRss>
		</item>
		<item>
		<title>Rhapsody DR2</title>
		<link>http://doom-ed.com/blog/1998/07/16/rhapsody-dr2</link>
		<comments>http://doom-ed.com/blog/1998/07/16/rhapsody-dr2#comments</comments>
		<pubDate>Thu, 16 Jul 1998 08:57:05 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/07/16/rhapsody-dr2</guid>
		<description><![CDATA[I have spent the last two days working with Apple&#8217;s Rhapsody DR2, and I like
it a lot.
I was dissapointed with the original DR1 release. It was very slow and
seemed to have added the worst elements of the mac experience (who the hell
came up with that windowshade minimizing?) while taking away some of the
strengths of NEXTSTEP.
Things [...]]]></description>
			<content:encoded><![CDATA[<p>I have spent the last two days working with Apple&#8217;s Rhapsody DR2, and I like<br />
it a lot.</p>
<p>I was dissapointed with the original DR1 release. It was very slow and<br />
seemed to have added the worst elements of the mac experience (who the hell<br />
came up with that windowshade minimizing?) while taking away some of the<br />
strengths of NEXTSTEP.</p>
<p>Things are a whole lot better in the latest release. General speed is up,<br />
memory consumption is down, and the UI feels consistant and productive.</p>
<p>Its still not as fast as windows, and probably never will be, but I think the<br />
tradeoffs are valid.</p>
<p>There are so many things that are just fundamentally better in the rhapsody<br />
design than in windows: frameworks, the yellow box apis, fat binaries,<br />
buffered windows, strong multi user support, strong system / local seperation,<br />
netinfo, etc.</p>
<p>Right now, I think WindowsNT is the best place to do graphics development work,<br />
but if the 3D acceleration issue was properly addressed on rhapsody, I think that<br />
I could be happy using it as my primary development platform.</p>
<p>I ported the current Quake codebase to rhapsody to test out conix&#8217;s beta OpenGL.<br />
The game isn&#8217;t really playable with the software emulated OpenGL, but it<br />
functions properly, and it makes a fine dedicated server.</p>
<p>We are going to try to stay on top of the portability a little better for QA.<br />
Quake 2 slid a bit because we did the development on NT instead of NEXTSTEP,<br />
and that made the irix port a lot more of a hassle than the original glquake port.</p>
<p>I plan on using the rhapsody system as a dedicated server during development,<br />
and Brian will be using an Alpha-NT system for a lot of testing, which should<br />
give us pretty good coverage of the portability issues.</p>
<p>I&#8217;m supposed to go out and have a bunch of meetings at apple next month to cover<br />
games, graphics, and hardware. Various parts of apple have scheduled<br />
meetings with me on three seperate occasions over the past couple years, but they<br />
have always been canceled for one reason or another (they laid off the people<br />
I was going to meet with once&#8230;).</p>
<p>I have said some negative things about MacOs before, but my knowledge of<br />
the mac is five years old. There was certainly the possibility that things<br />
had improved since then, so I spent some time browsing mac documentation<br />
recently. I was pretty amused. A stack sniffer. Patching trap vectors.<br />
Cooperative multitasking. Application memory partitions. Heh.</p>
<p>I&#8217;m scared of MacOS X. As far as I can tell, The basic plan is to take rhapsody<br />
and bolt all the MacOS APIs into the kernel. I understand that that may well<br />
be a sensible biz direction, but I fear it.</p>
<p>In other operating system news, Be has glquake running hardware accelerated on<br />
their upcoming OpenGL driver architecture. I gave them access to the glquake and<br />
quake 2 codebases for development purposes, and I expect we will work out an<br />
agreement for distribution of the ports.</p>
<p>Any X server vendors working on hardware accelerated OpenGL should get in touch<br />
with Zoid about interfacing and tuning with the Id OpenGL games on linux.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/07/16/rhapsody-dr2/feed</wfw:commentRss>
		</item>
		<item>
		<title>Flag Movement Styles</title>
		<link>http://doom-ed.com/blog/1998/07/05/flag-movement-styles</link>
		<comments>http://doom-ed.com/blog/1998/07/05/flag-movement-styles#comments</comments>
		<pubDate>Sun, 05 Jul 1998 22:47:26 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/07/05/flag-movement-styles</guid>
		<description><![CDATA[I am not opposed to adding a flag to control the movement styles. I was
rather expecting it to be made optional in 3.17, but I haven&#8217;t been directly
involved in the last few releases.
The way this played out in public is a bit unfortunate. Everyone at Id is
busy full time with the new product, so we [...]]]></description>
			<content:encoded><![CDATA[<p>I am not opposed to adding a flag to control the movement styles. I was<br />
rather expecting it to be made optional in 3.17, but I haven&#8217;t been directly<br />
involved in the last few releases.</p>
<p>The way this played out in public is a bit unfortunate. Everyone at Id is<br />
busy full time with the new product, so we just weren&#8217;t paying enough attention<br />
to the Quake 2 modifications. Some people managed to read into my last update<br />
that we were blaming Zoid for things. Uh, no. I think he was acting within<br />
his charter (catering to the community) very well, it just interfered with an<br />
aspect of the game that shouldn&#8217;t have been modified. We just never made it<br />
explicitly clear that it shouldn&#8217;t have been modified.</p>
<p>It is a bit amusing how after the QuakeArena anouncement, I got flamed by<br />
lots of people for abandoning single player play (even though we aren&#8217;t, really)<br />
but after I say that Quake 2 can&#8217;t forget that it is a single player game, I get<br />
flamed by a different set of people who think it is stupid to care about single<br />
player anymore when all &#8220;everyone&#8221; plays is multiplayer. The joy of having a<br />
wide audience that knows your email address.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/07/05/flag-movement-styles/feed</wfw:commentRss>
		</item>
		<item>
		<title>Movement Physics</title>
		<link>http://doom-ed.com/blog/1998/07/04/movement-physics</link>
		<comments>http://doom-ed.com/blog/1998/07/04/movement-physics#comments</comments>
		<pubDate>Sat, 04 Jul 1998 22:40:20 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/07/04/movement-physics</guid>
		<description><![CDATA[Here is the real story on the movement physics changes.
Zoid changed the movement code in a way that he felt improved gameplay in the
3.15 release.
We don&#8217;t directly supervise most of the work Zoid does. One of the main
reasons we work with him is that I respect his judgment, and I feel that his
work benefits the [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the real story on the movement physics changes.</p>
<p>Zoid changed the movement code in a way that he felt improved gameplay in the<br />
3.15 release.</p>
<p>We don&#8217;t directly supervise most of the work Zoid does. One of the main<br />
reasons we work with him is that I respect his judgment, and I feel that his<br />
work benefits the community quite a bit with almost no effort on my part. If<br />
I had to code review every change he made, it wouldn&#8217;t be worth the effort.</p>
<p>Zoid has &#8220;ownership&#8221; of the Quake, Glquake, and QuakeWorld codebases. We don&#8217;t<br />
intend to do any more modifications at Id on those sources, so he has pretty<br />
free rein within his discretion.</p>
<p>We passed over the Quake 2 codebase to him for the addition of new features<br />
like auto download, but it might have been a bit premature, because official<br />
mission packs were still in development, and unlike glquake and quakeworld,<br />
Q2 is a product that must remain official and supported, so the scope of his<br />
freedoms should have been spelled out a little more clearly.</p>
<p>The air movement code wasn&#8217;t a good thing to change in Quake 2, because the<br />
codebase still had to support all the commercial single player levels, and<br />
subtle physics changes can have lots of unintended effects.</p>
<p>QuakeWorld didn&#8217;t support single player maps, so it was a fine place to<br />
experiment with physics changes.</p>
<p>QuakeArena is starting with fresh new data, so it is also a good place to<br />
experiment with physics changes.</p>
<p>Quake 2 cannot be allowed to evolve in a way that detracts from the commercial<br />
single player levels.</p>
<p>The old style movement should not be refered to as &#8220;real world physics&#8221;. None<br />
of the quake physics are remotely close to real world physics, so I don&#8217;t think<br />
one way is significantly more &#8220;real&#8221; than the other. In Q2, you accelerate from<br />
0 to 27 mph in 1/30 of a second, which just as unrealistic as being able to<br />
accelerate in midair&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/07/04/movement-physics/feed</wfw:commentRss>
		</item>
		<item>
		<title>Birth of Quake 3 Arena</title>
		<link>http://doom-ed.com/blog/1998/06/16/birth-of-quake-3-arena</link>
		<comments>http://doom-ed.com/blog/1998/06/16/birth-of-quake-3-arena#comments</comments>
		<pubDate>Tue, 16 Jun 1998 23:16:28 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/06/16/birth-of-quake-3-arena</guid>
		<description><![CDATA[My last two .plan updates have described efforts that were not in our original
plan for quake 3, which was &#8220;quake 2 game and network technology with a new
graphics engine&#8221;.
We changed our minds.
The new product is going to be called &#8220;Quake Arena&#8221;, and will consist
exclusively of deathmatch style gaming (including CTF and other derivatives).
The single player [...]]]></description>
			<content:encoded><![CDATA[<p>My last two .plan updates have described efforts that were not in our original<br />
plan for quake 3, which was &#8220;quake 2 game and network technology with a new<br />
graphics engine&#8221;.</p>
<p>We changed our minds.</p>
<p>The new product is going to be called &#8220;Quake Arena&#8221;, and will consist<br />
exclusively of deathmatch style gaming (including CTF and other derivatives).<br />
The single player game will just be a progression through a ranking ladder<br />
against bot AIs. We think that can still be made an enjoyable game, but<br />
it is definately a gamble.</p>
<p>In the past, we have always been designing two games at once, the single<br />
player game and the multi player game, and they often had conflicting goals.<br />
For instance, the client-server communications channel discouraged massive<br />
quantities of moving entities that would have been interesting in single<br />
player, while the maps and weapons designed for single player were not ideal<br />
for multiplayer. The largest conflict was just raw development time. Time<br />
spent on monsters is time not spent on player movement. Time spent on unit<br />
goals is time not spent on game rules.</p>
<p>There are many wonderful gaming experiences in single player FPS, but we are<br />
choosing to leave them behind to give us a purity of focus that will let us<br />
make significant advances in the multiplayer experience.</p>
<p>The emphasis will be on making every aspect as robust and high quality as<br />
possible, rather than trying to add every conceivable option anyone could<br />
want. We will not be trying to take the place of every mod ever produced, but<br />
we hope to satisfy a large part of the network gaming audience with the out of<br />
box experience.</p>
<p>There is a definite effect on graphics technology decisions. Much of the<br />
positive feedback in a single player FPS is the presentation of rich visual<br />
scenes, which are often at the expense of framerate. A multiplayer level<br />
still needs to make a good first impression, but after you have seen it a<br />
hundred times, the speed of the game is more important. This means that there<br />
are many aggressive graphics technologies that I will not pursue because they<br />
are not apropriate to the type of game we are creating.</p>
<p>The graphics engine will still be OpenGL only, with significant new features<br />
not seen anywhere before, but it will also have fallback modes to render at<br />
roughly Quake-2 quality and speed.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/06/16/birth-of-quake-3-arena/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Client as a Dumb Terminal</title>
		<link>http://doom-ed.com/blog/1998/06/16/the-client-as-a-dumb-terminal</link>
		<comments>http://doom-ed.com/blog/1998/06/16/the-client-as-a-dumb-terminal#comments</comments>
		<pubDate>Tue, 16 Jun 1998 06:59:14 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/06/16/the-client-as-a-dumb-terminal</guid>
		<description><![CDATA[I am giving up on one of my cherished networking concepts &#8212; the client as a
dumb terminal.
With sub 200 msec network connections of reasonable bandwidth, pure
interpolating is a reasonable solution that is very robust and elegant.
With modem based internet connections having 300+ msec pings and patchy
delivery quality, pure interpolation just doesn&#8217;t give a good enough [...]]]></description>
			<content:encoded><![CDATA[<p>I am giving up on one of my cherished networking concepts &#8212; the client as a<br />
dumb terminal.</p>
<p>With sub 200 msec network connections of reasonable bandwidth, pure<br />
interpolating is a reasonable solution that is very robust and elegant.</p>
<p>With modem based internet connections having 300+ msec pings and patchy<br />
delivery quality, pure interpolation just doesn&#8217;t give a good enough game<br />
play experience.</p>
<p>Quake 1 had all entities in the world strictly interpolated (with a 20 hz<br />
default clock), but had several aspects of the game hard coded on the client,<br />
like the view bobbing, damage flashes, and status bar.</p>
<p>QuakeWorld was my experimentation with adding a lot of specialized logic to<br />
improve network play. An advantage I had was that the gameplay was all done,<br />
so I didn&#8217;t mind adding quite hardcoded things to improve nailguns and<br />
shotguns, among other things. The largest change was adding client side<br />
movement prediction, which basically threw out the notion of the general<br />
purpose client.</p>
<p>Quake 2 was intended to be more general and flexible than Q1/QW, with almost<br />
everything completely configurable by the server. At the time of q2test, it<br />
was (with a fixed 10 hz clock).</p>
<p>Before shipping, I wound up integrated client side movement prediction like<br />
QW. Having gone that far, I really should have moved the simulation of a lot<br />
of the other view presentation logic (head bobs / kicks, etc) back to the<br />
client. Because these are still run on the server, a lagged connection will<br />
give you odd effects like falling off a cliff, running away, then having the<br />
head kick and the landing crunch happen when you are 50 feet away from the<br />
point of impact.</p>
<p>So basically I wound up losing the elegance, but I didn&#8217;t reap all the<br />
benefits I could have.</p>
<p>I am still holding to my stronger networking belief, though &#8212; centralized,<br />
authoritative servers, as opposed to peer to peer interaction. I REALLY<br />
think distributed simulation among clients is a VERY BAD idea for networked<br />
games. Yes, there are some theoretical advantages to being able to hand off<br />
the simulation of some objects, but I have plenty of reasons to not want to<br />
do it. Client side movement prediction is simulation, but it has no bearing<br />
on the server, it is strictly to give a better presentation of the data the<br />
server has provided.</p>
<p>The new paradigm is that the server controls all information necessary for<br />
the rules of the game to function, but the client controls all presentation<br />
of that information to the user through models, audio, and motion.</p>
<p>There were moves in that direction visible in Quake 2 &#8212; the temp entities<br />
and entity events that combined sounds and model animations run entirely on<br />
the client side. Everything will soon be like this.</p>
<p>This saves some degree of network bandwidth, because instead of specifying<br />
the model, skin, frame, etc, we can just say what type of entity it is, and<br />
the client can often determine everything else by itself. This also enables<br />
more aggressive multi-part entities that would have been unreasonable to do<br />
if they each had to be sent seperately over the network connection.</p>
<p>Almost all cycling animations can be smoother. If the client knows that the<br />
character is going through his death animation for instance, it can advance<br />
the frames itself, rather than having the server tell it when every single<br />
frame changes.</p>
<p>Motion of projectiles can be predicted accurately on the client side.</p>
<p>All aspects of your own characters movement and presentation should be<br />
completely smooth until acted upon (shot) by an outside entity.</p>
<p>All the clever coding in the world can&#8217;t teleport bits from other computers,<br />
so lag doesn&#8217;t go away, but most of the other hitchy effects of network play<br />
can be resolved. Lag reduction is really a seperate topic. QuakeWorld had<br />
instant response packets, because it was designed for a dedicated server<br />
only, which helped quite a bit.</p>
<p>During the projects development, the client side code will be in a C DLL, but<br />
I intend to Do The Right Thing and make it java based before shipping. I<br />
absolutely refuse to download binary code to a client.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/06/16/the-client-as-a-dumb-terminal/feed</wfw:commentRss>
		</item>
		<item>
		<title>Limits of Input under Windows</title>
		<link>http://doom-ed.com/blog/1998/06/08/limits-of-input-under-windows</link>
		<comments>http://doom-ed.com/blog/1998/06/08/limits-of-input-under-windows#comments</comments>
		<pubDate>Mon, 08 Jun 1998 06:46:17 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/06/08/limits-of-input-under-windows</guid>
		<description><![CDATA[I spent quite a while investigating the limits of input under windows
recently. I foudn out a few interesting things:
Mouse sampling on win95 only happens every 25ms. It doesn&#8217;t matter if you
check the cursor or use DirectInput, the values will only change 40 times
a second.
This means that with normal checking, the mouse control will feel slightly
stuttery [...]]]></description>
			<content:encoded><![CDATA[<p>I spent quite a while investigating the limits of input under windows<br />
recently. I foudn out a few interesting things:</p>
<p>Mouse sampling on win95 only happens every 25ms. It doesn&#8217;t matter if you<br />
check the cursor or use DirectInput, the values will only change 40 times<br />
a second.</p>
<p>This means that with normal checking, the mouse control will feel slightly<br />
stuttery whenever the framerate is over 20 fps, because on some frames you<br />
will be getting one input sample, and on other frames you will be getting<br />
two. The difference between two samples and three isn&#8217;t very noticable, so<br />
it isn&#8217;t much of an issue below 20 fps. Above 40 fps it is a HUGE issue,<br />
because the frames will be bobbing between one sample and zero samples.</p>
<p>I knew there were some sampling quantization issues early on, so I added<br />
the &#8220;m_filter 1&#8243; variable, but it really wasn&#8217;t an optimal solution. It<br />
averaged together the samples collected at the last two frames, which<br />
worked out ok if the framerate stayed consistantly high and you were only<br />
averaging together one to three samples, but when the framerate dropped to<br />
10 fps or so, you wound up averaging together a dozen more samples than<br />
were really needed, giving the &#8220;rubber stick&#8221; feel to the mouse control.</p>
<p>I now have three modes of mouse control:</p>
<p>in_mouse 1:<br />
Mouse control with standard win-32 cursor calls, just like Quake 2.</p>
<p>in_mouse 2:<br />
Mouse control using DirectInput to sample the mouse reletive counters<br />
each frame. This behaves like winquake with -dinput. There isn&#8217;t a lot<br />
of difference between this and 1, but you get a little more precision, and<br />
you never run into window clamping issues. If at some point in the future<br />
microsoft changes the implementation of DirectInput so that it processes<br />
all pending mouse events exactly when the getState call happens, this will<br />
be the ideal input mode.</p>
<p>in_mouse 3:<br />
Processes DirectInput mouse movement events, and filters the amount of<br />
movement over the next 25 milliseconds. This effectively adds about 12 ms<br />
of latency to the mouse control, but the movement is smooth and consistant<br />
at any variable frame rate. This will be the default for Quake 3, but some<br />
people may want the 12ms faster (but rougher) response time of mode 2.</p>
<p>It takes a pretty intense player to even notice the difference in most<br />
cases, but if you have a setup that can run a very consistant 30 fps you<br />
will probably apreciate the smoothness. At 60 fps, anyone can tell the<br />
difference, but rendering speeds will tend to cause a fair amount of<br />
jitter at those rates no matter what the mouse is doing.</p>
<p>DirectInput on WindowsNT does not log mouse events as they happen, but<br />
seems to just do a poll when called, so they can&#8217;t be filtered properly.</p>
<p>Keyboard sampling appears to be millisecond precise on both OS, though.</p>
<p>In doing this testing, it has become a little bit more tempting to try to<br />
put in more leveling optimizations to allow 60 hz framerates on the highest<br />
end hardware, but I have always shied away from targeting very high<br />
framerates as a goal, because when you miss by a tiny little bit, the drop<br />
from 60 to 30 ( 1 to 2 vertical retraces ) fps is extremely noticable.</p>
<p>&#8211;</p>
<p>I have also concluded that the networking architecture for Quake 2 was<br />
just not the right thing. The interpolating 10 hz server made a lot of<br />
animation easier, which fit with the single player focus, but it just<br />
wasn&#8217;t a good thing for internet play.</p>
<p>Quake 3 will have an all new entity communication mechanism that should<br />
be solidly better than any previous system. I have some new ideas that go<br />
well beyond the previous work that I did on QuakeWorld.</p>
<p>Its tempting to try to roll the new changes back into Quake 2, but a lot<br />
of them are pretty fundamental, and I&#8217;m sure we would bust a lot of<br />
important single player stuff while gutting the network code.</p>
<p>(Yes, we made some direction changes in Quake 3 since the original<br />
announcement when it was to be based on the Quake 2 game and networking<br />
with just a new graphics engine)</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/06/08/limits-of-input-under-windows/feed</wfw:commentRss>
		</item>
		<item>
		<title>Unreal</title>
		<link>http://doom-ed.com/blog/1998/05/22/unreal</link>
		<comments>http://doom-ed.com/blog/1998/05/22/unreal#comments</comments>
		<pubDate>Fri, 22 May 1998 20:29:13 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/05/22/unreal</guid>
		<description><![CDATA[Congratulations to Epic, Unreal looks very good.
]]></description>
			<content:encoded><![CDATA[<p>Congratulations to Epic, Unreal looks very good.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/05/22/unreal/feed</wfw:commentRss>
		</item>
		<item>
		<title></title>
		<link>http://doom-ed.com/blog/1998/05/19</link>
		<comments>http://doom-ed.com/blog/1998/05/19#comments</comments>
		<pubDate>Wed, 20 May 1998 05:01:08 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/05/19</guid>
		<description><![CDATA[A 94 degree day at the dragstrip today. Several 3drealms and Norwood
Autocraft folk also showed up to run. We got to weigh most of the cars on
the track scales, which gives us a few more data points.
11.6 @ 125 Bob Norwood&#8217;s ferrari P4 race car (2200 lbs)
11.9 @ 139 John Carmack&#8217;s twin turbo testarossa (3815 [...]]]></description>
			<content:encoded><![CDATA[<p>A 94 degree day at the dragstrip today. Several 3drealms and Norwood<br />
Autocraft folk also showed up to run. We got to weigh most of the cars on<br />
the track scales, which gives us a few more data points.</p>
<p>11.6 @ 125 Bob Norwood&#8217;s ferrari P4 race car (2200 lbs)<br />
11.9 @ 139 John Carmack&#8217;s twin turbo testarossa (3815 lbs)<br />
11.9 @ 117 Paul Steed&#8217;s YZF600R bike<br />
12.1 @ 122 John Carmack&#8217;s F50 (3205 lbs)<br />
12.3 @ 117 Brian&#8217;s Viper GTS (3560 lbs)<br />
13.7 @ 103 John Cash&#8217;s supercharged M3<br />
14.8 @ ??? Someone&#8217;s lexus GS400<br />
15.0 @ ??? Someone&#8217;s volkswagon GTI<br />
15.1 @ ??? Christian&#8217;s boxter (with Tim driving)</p>
<p>Weight is the key for good ETs. The TR has considerably better power<br />
to weight ratio than the P4, but it can&#8217;t effectively use most of the power<br />
until it gets into third gear. The viper is actually making more power than<br />
the F50, (Brian got a big kick out of that after his dyno run) but 350 lbs<br />
more than compensated for it.</p>
<p>I wanted to hit 140 in the TR, but the clutch started slipping on the last<br />
run and I called it a day.</p>
<p>I was actually surprised the F50 ran 122 mph, which is the same the F40 did<br />
on a 25 degree cooler day. I was running with the top off, so it might<br />
even be capable of going a bit faster with it on.</p>
<p>The F50 and the viper were both very consistant performers, but the TR and<br />
the supercharged M3 were all over the place with their runs.</p>
<p>Brian nocked over a tenth off of his times even in spite of the heat, due to<br />
launch practice and some inlet modifications. He also power shifted on<br />
his best run.</p>
<p>It was pretty funny watching the little volkswagon consistantly beat up on<br />
a tire shredding trans-am.</p>
<p>George Broussard had his newly hopped up 911 turbo, but it broke the trans<br />
on its very first run. We were expecting him to be in the 11&#8217;s.</p>
<p>We probably won&#8217;t run again until either I get the F50 souped up, or my<br />
GTO gets finished.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/05/19/feed</wfw:commentRss>
		</item>
		<item>
		<title>Drag Strip Day</title>
		<link>http://doom-ed.com/blog/1998/05/19/drag-strip-day</link>
		<comments>http://doom-ed.com/blog/1998/05/19/drag-strip-day#comments</comments>
		<pubDate>Wed, 20 May 1998 05:01:08 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/05/19/drag-strip-day</guid>
		<description><![CDATA[A 94 degree day at the dragstrip today. Several 3drealms and Norwood
Autocraft folk also showed up to run. We got to weigh most of the cars on
the track scales, which gives us a few more data points.
11.6 @ 125 Bob Norwood&#8217;s ferrari P4 race car (2200 lbs)
11.9 @ 139 John Carmack&#8217;s twin turbo testarossa (3815 [...]]]></description>
			<content:encoded><![CDATA[<p>A 94 degree day at the dragstrip today. Several 3drealms and Norwood<br />
Autocraft folk also showed up to run. We got to weigh most of the cars on<br />
the track scales, which gives us a few more data points.</p>
<p>11.6 @ 125 Bob Norwood&#8217;s ferrari P4 race car (2200 lbs)<br />
11.9 @ 139 John Carmack&#8217;s twin turbo testarossa (3815 lbs)<br />
11.9 @ 117 Paul Steed&#8217;s YZF600R bike<br />
12.1 @ 122 John Carmack&#8217;s F50 (3205 lbs)<br />
12.3 @ 117 Brian&#8217;s Viper GTS (3560 lbs)<br />
13.7 @ 103 John Cash&#8217;s supercharged M3<br />
14.0 @ 96 Scott Miller&#8217;s lexus GS400<br />
15.0 @ ??? Someone&#8217;s volkswagon GTI<br />
15.1 @ ??? Christian&#8217;s boxter (with Tim driving)</p>
<p>Weight is the key for good ETs. The TR has considerably better power<br />
to weight ratio than the P4, but it can&#8217;t effectively use most of the power<br />
until it gets into third gear. The viper is actually making more power than<br />
the F50, (Brian got a big kick out of that after his dyno run) but 350 lbs<br />
more than compensated for it.</p>
<p>I wanted to hit 140 in the TR, but the clutch started slipping on the last<br />
run and I called it a day.</p>
<p>I was actually surprised the F50 ran 122 mph, which is the same the F40 did<br />
on a 25 degree cooler day. I was running with the top off, so it might<br />
even be capable of going a bit faster with it on.</p>
<p>The F50 and the viper were both very consistant performers, but the TR and<br />
the supercharged M3 were all over the place with their runs.</p>
<p>Brian nocked over a tenth off of his times even in spite of the heat, due to<br />
launch practice and some inlet modifications. He also power shifted on<br />
his best run.</p>
<p>It was pretty funny watching the little volkswagon consistantly beat up on<br />
a tire shredding trans-am.</p>
<p>George Broussard had his newly hopped up 911 turbo, but it broke the trans<br />
on its very first run. We were expecting him to be in the 11&#8217;s.</p>
<p>We probably won&#8217;t run again until either I get the F50 souped up, or my<br />
GTO gets finished.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/05/19/drag-strip-day/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bad Programming in Quake</title>
		<link>http://doom-ed.com/blog/1998/05/17/bad-programming-in-quake</link>
		<comments>http://doom-ed.com/blog/1998/05/17/bad-programming-in-quake#comments</comments>
		<pubDate>Mon, 18 May 1998 03:18:05 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/05/17/bad-programming-in-quake</guid>
		<description><![CDATA[Here is an example of some bad programming in quake:
There are three places where text input is handled in the game: the console,
the chat line, and the menu fields. They all used completely different code
to manage the input line and display the output. Some allowed pasting from
the system clipboard, some allowed scrolling, some accepted unix [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an example of some bad programming in quake:</p>
<p>There are three places where text input is handled in the game: the console,<br />
the chat line, and the menu fields. They all used completely different code<br />
to manage the input line and display the output. Some allowed pasting from<br />
the system clipboard, some allowed scrolling, some accepted unix control<br />
character commands, etc. A big mess.</p>
<p>Quake 3 will finally have full support for international keyboards and<br />
character sets. This turned out to be a bit more trouble than expected<br />
because of the way Quake treated keys and characters, and it led to a<br />
rewrite of a lot of the keyboard handling, including the full cleanup and<br />
improvement of text fields.</p>
<p>A similar cleanup of the text printing hapened when Cash implemented general<br />
colored text: we had at least a half dozen different little loops to print<br />
strings with slightly different attributes, but now we have a generalized one<br />
that handles embedded color commands or force-to-color printing.</p>
<p>Amidst all the high end graphics work, sometimes it is nice to just fix up<br />
something elementary.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/05/17/bad-programming-in-quake/feed</wfw:commentRss>
		</item>
		<item>
		<title>New Technologies for Quake3/Trinity</title>
		<link>http://doom-ed.com/blog/1998/05/04/new-technologies-for-quake3trinity</link>
		<comments>http://doom-ed.com/blog/1998/05/04/new-technologies-for-quake3trinity#comments</comments>
		<pubDate>Mon, 04 May 1998 09:10:55 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/05/04/new-technologies-for-quake3trinity</guid>
		<description><![CDATA[Here are some notes on a few of the technologies that I researched in
preparing for the Quake3/trinity engine. I got a couple months of pretty
much wide open research done at the start, but it turned out that none of
the early research actually had any bearing on the directions I finally
decided on. Ah well, I learned [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some notes on a few of the technologies that I researched in<br />
preparing for the Quake3/trinity engine. I got a couple months of pretty<br />
much wide open research done at the start, but it turned out that none of<br />
the early research actually had any bearing on the directions I finally<br />
decided on. Ah well, I learned a lot, and it will probably pay off at<br />
some later time.</p>
<p>I spent a little while doing some basic research with lummigraphs, which<br />
are sort of a digital hologram. The space requirements are IMMENSE, on<br />
the order of several gigs uncompressed for even a single full sized room.<br />
I was considering the possibility of using very small lumigraph fragments<br />
(I called them &#8220;lumigraphlets&#8221;) as imposters for large clusters of areas,<br />
similar to aproximating an area with a texture map, but it would effectively<br />
be a view dependent texture.</p>
<p>The results were interesting, but transitioning seamlessly would be difficult,<br />
the memory was still large, and it has all the same caching issues that any<br />
impostor scheme has.</p>
<p>Another aproach I worked on was basically extending the sky box code style of<br />
rendering from quake 2 into a complete rendering system. Take a large number<br />
of environment map snapshots, and render a view by interpolating between up<br />
to four maps (if in a tetrahedral arangement) based on the view position.</p>
<p>A simple image based interpolating doesn&#8217;t convey a sense of motion, because<br />
it basically just ghosts between seperate points unless the maps are VERY<br />
close together reletive to the nearest point visible in the images.</p>
<p>If the images that make up the environment map cube also contain depth values<br />
at some (generally lower) resolution, instead of rendering the environment<br />
map as six big flat squares at infinity, you can render it as a lot of little<br />
triangles at the proper world coordinates for the individual texture points.<br />
A single environment map like this can be walked around in and gives a sense<br />
of motion. If you have multiple maps from nearby locations, they can be<br />
easily blended together. Some effort should be made to nudge the mesh<br />
samples so that as many points are common between the maps as possible, but<br />
even a regular grid works ok.</p>
<p>You get texture smearing when occluded detail should be revealed, and if you<br />
move too far from the original camera point the textures blur out a lot, but<br />
it is still a very good effect, is completely complexity insensitive, and is<br />
aliasing free except when the view position causes a silhouette crease in<br />
the depth data.</p>
<p>Even with low res environment maps like in Quake2, each snapshot would consume<br />
700k, so taking several hundred environment images throughout a level would<br />
generate too much data. Obviously there is a great deal of redundancy &#8212; you<br />
will have several environment maps that contain the same wall image, for<br />
instance. I had an interesting idea for compressing it all. If you ignore<br />
specular lighting and atmospheric effects, any surface that is visible in<br />
multiple environment maps can be represented by a single copy of it and<br />
perspective transformation of that image. Single image, transformations,<br />
sounds like&#8230; fractal compression. Normal fractal compression only deals<br />
with affine maps, but the extension to projective maps seems logical.</p>
<p>I think that a certain type of game could be done with a technology like that,<br />
but in the end, I didn&#8217;t think it was the right direction for a first person<br />
shooter.</p>
<p>There is a tie in between lummigraphs, multiple environment maps, specularity,<br />
convolution, and dynamic indirect lighting. Its nagging at me, but it hasn&#8217;t<br />
come completely clear.</p>
<p>Other topics for when I get the time to write more:</p>
<p>Micro environment map based model lighting. Convolutions of environment maps<br />
by phong exponent, exponent of one with normal vector is diffuse lighting.</p>
<p>Full surface texture representation. Interior antaliasing with edge<br />
matched texels.</p>
<p>Octree represented surface voxels. Drawing and tracing.</p>
<p>Bump mapping, and why most of the aproaches being suggested for hardware<br />
are bogus.</p>
<p>Parametric patches vs implicit functions vs subdivision surfaces.</p>
<p>Why all analytical boundary representations basically suck.</p>
<p>Finite element radiosity vs photon tracing.</p>
<p>etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/05/04/new-technologies-for-quake3trinity/feed</wfw:commentRss>
		</item>
		<item>
		<title>Rcon Backdoor</title>
		<link>http://doom-ed.com/blog/1998/05/02/rcon-backdoor</link>
		<comments>http://doom-ed.com/blog/1998/05/02/rcon-backdoor#comments</comments>
		<pubDate>Sun, 03 May 1998 00:30:17 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/05/02/rcon-backdoor</guid>
		<description><![CDATA[The rcon backdoor was added to help the development of QuakeWorld (It is
not present in Quake 1). At the time, attacking Quake servers with
spoofed packets was not the popular sport it seems to have become with
Quake 2, so I didn&#8217;t think much about the potential for exploitation.
The many forced releases of Quake 2 due to [...]]]></description>
			<content:encoded><![CDATA[<p>The rcon backdoor was added to help the development of QuakeWorld (It is<br />
not present in Quake 1). At the time, attacking Quake servers with<br />
spoofed packets was not the popular sport it seems to have become with<br />
Quake 2, so I didn&#8217;t think much about the potential for exploitation.</p>
<p>The many forced releases of Quake 2 due to hacker attacks has certainly<br />
taught me to be a lot more wary.</p>
<p>It was a convenient feature for us, but it turned out to be irresponsible.<br />
Sorry.</p>
<p>There will be new releases of QuakeWorld and Quake 2 soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/05/02/rcon-backdoor/feed</wfw:commentRss>
		</item>
		<item>
		<title>F50 vs. F40</title>
		<link>http://doom-ed.com/blog/1998/04/22/f50-vs-f40</link>
		<comments>http://doom-ed.com/blog/1998/04/22/f50-vs-f40#comments</comments>
		<pubDate>Wed, 22 Apr 1998 22:00:29 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/04/22/f50-vs-f40</guid>
		<description><![CDATA[F50 pros and cons vs F40:
The front and rear views are definately cooler on the F50, but I think I
like the F40 side view better. I haven&#8217;t taken the top off the F50 yet,
though (its supposed to be a 40 minute job&#8230;).
Adjustable front suspension. Press a button and it raises two inches,
which means you can [...]]]></description>
			<content:encoded><![CDATA[<p>F50 pros and cons vs F40:</p>
<p>The front and rear views are definately cooler on the F50, but I think I<br />
like the F40 side view better. I haven&#8217;t taken the top off the F50 yet,<br />
though (its supposed to be a 40 minute job&#8230;).</p>
<p>Adjustable front suspension. Press a button and it raises two inches,<br />
which means you can actually drive it up into strip malls. The F40 had<br />
to be driven into my garage at an angle to keep the front from rubbing.<br />
This makes the car actually fairly practical for daily driving.</p>
<p>Drastically better off idle torque. You have to rev the F40 a fair amount<br />
to even get it moving, and if you are moving at 2000 rpm in first gear,<br />
a honda can pull away from you until it starts making boost at 3500 rpm.<br />
The f50 has enough torque that you don&#8217;t even need to rev to get moving,<br />
and it goes quite well by just flooring it after you are moving. No need<br />
to wreck a clutch by slipping it out from 4000 rpm.</p>
<p>Much nicer clutch. The F40 clutch was a very low-tech single disk clutch<br />
that required more effort than on my crazy TR with over twice the torque.</p>
<p>Better rearward visibility. The F40&#8217;s lexan fastback made everything to<br />
your rear a blur.</p>
<p>Better shifting. A much smoother six speed than the F40&#8217;s five speed.</p>
<p>Better suspension. Some bumps that would upset the F40 badly are handled<br />
without any problems.</p>
<p>Better aerodynamics. A flat underbody with tunnels is a good thing if you<br />
are going to be moving at very high speeds.</p>
<p>I beleive the F50 could probably lap a road coarse faster than the F40, but<br />
in a straight line, the F40 is faster. The F50 felt a fair amount slower,<br />
but I was chalking that up to the lack of non-linear turbo rush. Today I<br />
drove it down to the dyno and we got real numbers.</p>
<p>It only made 385 hp at the rear wheels, which is maybe 450 at the crank if<br />
you are being generous. The F40 made 415, but that was with the boost<br />
cranked up a bit over stock.</p>
<p>We&#8217;re going to have to do something about that.</p>
<p>I&#8217;m thinking that a mild twin-turbo job will do the trick. Six pounds of<br />
boost should get it up to a health 500 hp at the rear wheels, which will<br />
keep me happy. I don&#8217;t want to turn it into a science project like my<br />
TR, I just want to make sure it is well out of the range of any normal<br />
cars.</p>
<p>I may put that in line after my GTO gets finished.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/04/22/f50-vs-f40/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bought an F50</title>
		<link>http://doom-ed.com/blog/1998/04/17/bought-an-f50</link>
		<comments>http://doom-ed.com/blog/1998/04/17/bought-an-f50#comments</comments>
		<pubDate>Sat, 18 Apr 1998 04:04:59 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/04/17/bought-an-f50</guid>
		<description><![CDATA[Yes, I bought an F50. No, I don&#8217;t want a McLaren.
We will be going back to the dragstrip in a couple weeks, and I will be
exercising both the F50 and the TR there. Cash&#8217;s supercharged M3 will
probably show some of the porsches a thing or two, as well.
I&#8217;ll probably rent a road coarse sometime soon, [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I bought an F50. No, I don&#8217;t want a McLaren.</p>
<p>We will be going back to the dragstrip in a couple weeks, and I will be<br />
exercising both the F50 and the TR there. Cash&#8217;s supercharged M3 will<br />
probably show some of the porsches a thing or two, as well.</p>
<p>I&#8217;ll probably rent a road coarse sometime soon, but I&#8217;m not in too much of<br />
a hurry to run the F50 into the weeds.</p>
<p>My TR finally got put back together after a terrific nitrous explosion<br />
just before the last dragstrip. It now makes 1000.0 hp at the rear wheels.<br />
Contrast that with the 415 rear wheel hp that the F40 made. Of cource, a<br />
loaded testarossa does weigh about 4000 lbs&#8230;</p>
<p>My project car is somewhat nearing completion. My mechanic says it will<br />
be running in six weeks, but mechanics can be even more optimistic than<br />
software developers. <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> I&#8217;m betting on fall. It should really be something<br />
when completed: a carbon fiber bodied ferrari GTO with a custom, one-of-a<br />
kind billet alluminum 4 valve DOHC 5.2L V12 with twin turbos running<br />
around 30 lbs of boost. It should be good for quite a bit more hp than my<br />
TR, and the entire car will only weigh 2400 lbs.</p>
<p>&#8212;&#8212;&#8212;</p>
<p>The distance between a cool demo and production code is vast. Two months<br />
ago, I had some functional demos of several pieces of the Quake 3 rendering<br />
tech, but today it still isn&#8217;t usable as a full replacement for ref_gl yet.</p>
<p>Writing a modern game engine is a lot of work.</p>
<p>The new architecture is turning out very elegent. Not having to support<br />
software rendering or color index images is helping a lot, but it is also<br />
nice to reflect on just how much I have learned in the couple years since<br />
the original Quake renderer was written.</p>
<p>My C coding style has changed for Quake 3, which is going to give me a nice<br />
way of telling at a glance which code I have or haven&#8217;t touched since<br />
Quake 2. In fact, there have been enough evolutions in my style that you<br />
can usually tell what year I wrote a piece of code by just looking at<br />
a single function:</p>
<p>/*<br />
=============<br />
=<br />
= Function headers like this are DOOM or earlier<br />
=<br />
=============<br />
*/</p>
<p>/*<br />
=============<br />
Function Headers like this are Quake or later<br />
=============<br />
*/</p>
<p>{<br />
// comments not indented were written on NEXTSTEP<br />
// (quake 1)</p>
<p>// indented comments were written on<br />
// Visual C++ (glquake / quakeworld, quake2)<br />
}</p>
<p>for (testnum=0 ; testnum&lt;4 ; testnum++)<br />
{ // older coding style<br />
}</p>
<p>for (testNumber = 0 ; testNumber < 4 ; testNumber++) {<br />
// quake 3 coding style<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/04/17/bought-an-f50/feed</wfw:commentRss>
		</item>
		<item>
		<title>What&#8217;s in an F50</title>
		<link>http://doom-ed.com/blog/1998/04/16/whats-in-a-f50</link>
		<comments>http://doom-ed.com/blog/1998/04/16/whats-in-a-f50#comments</comments>
		<pubDate>Fri, 17 Apr 1998 01:14:27 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/04/16/whats-in-a-f50</guid>
		<description><![CDATA[F40 + $465,000 = F50
]]></description>
			<content:encoded><![CDATA[<p>F40 + $465,000 = F50</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/04/16/whats-in-a-f50/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 3 Engine</title>
		<link>http://doom-ed.com/blog/1998/04/08/quake-3-engine</link>
		<comments>http://doom-ed.com/blog/1998/04/08/quake-3-engine#comments</comments>
		<pubDate>Thu, 09 Apr 1998 05:28:42 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/04/08/quake-3-engine</guid>
		<description><![CDATA[Things are progressing reasonably well on the Quake 3 engine.
Not being limited to supporting a 320*240 256 color screen is
very, very nice, and will make everyone&#8217;s lives a lot easier.
All of our new source artwork is being done in 24 bit TGA files,
but the engine will continue to load .wal files and .pcx files
for developer&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Things are progressing reasonably well on the Quake 3 engine.</p>
<p>Not being limited to supporting a 320*240 256 color screen is<br />
very, very nice, and will make everyone&#8217;s lives a lot easier.</p>
<p>All of our new source artwork is being done in 24 bit TGA files,<br />
but the engine will continue to load .wal files and .pcx files<br />
for developer&#8217;s convenience. Each pcx can have its own palette<br />
now though, because it is just converted to 24 bit at load time.</p>
<p>Q3 is going to have a fixed virtual screen coordinate system,<br />
independant of resolution. I tried that back in the original<br />
glquake, but the fixed coordinate system was only 320*200, which<br />
was excessively low. Q2 went with a dynamic layout at different<br />
resolutions, which was a pain, and won&#8217;t scale to the high resolutions<br />
that very fast cards will be capable of running at next year.</p>
<p>All screen drawing is now done assuming the screen is 640*480, and<br />
everything is just scaled as you go higher or lower. This makes<br />
laying out status bars and HUDs a ton easier, and will let us<br />
do a lot cooler looking screens.</p>
<p>There will be an interface to let game dlls draw whatever they want<br />
on the screen, precisely where they want it. You can suck up a lot<br />
of network bandwidth doing that though, so some care will be needed.</p>
<p>&#8211;</p>
<p>Going to the completely opposite end of the hardware spectrum from<br />
quake 3&#8230;</p>
<p>I have been very pleased with the fallout from the release of the<br />
DOOM source code.</p>
<p>At any given spot in design space, there are different paths you<br />
can take to move forward. I have usually chosen to try to make a<br />
large step to a completely new area, but the temptation is there<br />
to just clean up and improve in the same area, continuously<br />
polishing the same program.</p>
<p>I am enjoying seeing several groups pouring over DOOM, fixing it<br />
up and enhancing it. Cleaning up long standing bugs. Removing<br />
internal limitations. Orthogonalizing feature sets. Etc.</p>
<p>The two that I have been following closest are Team TNT&#8217;s BOOM<br />
engine project, which is a clear headed, well engineered<br />
improvement on the basic DOOM technical decisions, and Bruce Lewis&#8217;<br />
glDoom project.</p>
<p>Any quakers feeling nostalgic should browse around:</p>
<p>http://www.doomworld.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/04/08/quake-3-engine/feed</wfw:commentRss>
		</item>
		<item>
		<title>Drag Strip Again</title>
		<link>http://doom-ed.com/blog/1998/04/02/drag-strip-again</link>
		<comments>http://doom-ed.com/blog/1998/04/02/drag-strip-again#comments</comments>
		<pubDate>Fri, 03 Apr 1998 00:16:51 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/04/02/drag-strip-again</guid>
		<description><![CDATA[Drag strip day! Most of the id guys, John Romero from ION,
and George and Alan from 3drealms headed to the Ennis
dragstrip today.
Nobody broke down, and some good times were posted.
11.9 @ 122 John Carmack F40
12.2 @ 122 George Broussard custom turbo 911
12.4 @ 116 Brian Hook Viper GTS
13.4 @ 106 John Romero custom turbo testarossa
13.6 [...]]]></description>
			<content:encoded><![CDATA[<p>Drag strip day! Most of the id guys, John Romero from ION,<br />
and George and Alan from 3drealms headed to the Ennis<br />
dragstrip today.</p>
<p>Nobody broke down, and some good times were posted.</p>
<p>11.9 @ 122 John Carmack F40<br />
12.2 @ 122 George Broussard custom turbo 911<br />
12.4 @ 116 Brian Hook Viper GTS<br />
13.4 @ 106 John Romero custom turbo testarossa<br />
13.6 @ 106 Todd Hollenshead &#8216;vette<br />
13.9 @ 100 Paul Steed 911<br />
14.0 @ 99 Tim Willits 911<br />
14.3 @ 101 Bear Turbo Supra<br />
14.4 @ 98 Alan Blum turbo rx-7<br />
14.7 @ 92 Brandon James M3<br />
15.3 @ 92 Christian Boxster<br />
15.5 @ 93 Jen (Hook&#8217;s Chick) Turbo Volvo<br />
16.1 @ 89 Ms. Donna Mustang GT<br />
17.4 @ 82 Anna (Carmack&#8217;s Chick) Honda Accord<br />
18.1 @ 75 Jennifer (Jim Molinets&#8217; Chick) Saturn</p>
<p>We had three significant no-shows for various reasons: my TR,<br />
Adrian&#8217;s viper, and Cash&#8217;s supercharged M3 were all in the shop.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/04/02/drag-strip-again/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 3 Suggestions</title>
		<link>http://doom-ed.com/blog/1998/03/26/quake-3-suggestions</link>
		<comments>http://doom-ed.com/blog/1998/03/26/quake-3-suggestions#comments</comments>
		<pubDate>Thu, 26 Mar 1998 18:29:07 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/1998/03/26/quake-3-suggestions</guid>
		<description><![CDATA[I haven&#8217;t even seen the &#8220;BeOS port of Quake&#8221;. Stop emailing me about
aproving it. I told one of the Lion developers he could port it to
BeOS in his spare time, but I haven&#8217;t seen any results from it.
&#8211;
There is a public discussion / compilation going on at openquake for
suggestions to improve technical aspects of quake [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t even seen the &#8220;BeOS port of Quake&#8221;. Stop emailing me about<br />
aproving it. I told one of the Lion developers he could port it to<br />
BeOS in his spare time, but I haven&#8217;t seen any results from it.</p>
<p>&#8211;</p>
<p>There is a public discussion / compilation going on at openquake for<br />
suggestions to improve technical aspects of quake 3:</p>
<p>http://www.openquake.org/q3suggest/</p>
<p>This is sooo much better than just dropping me an email when a thought<br />
hits you. There are many, many thousands of you out there, and there<br />
needs to be some filtering process so we can get the information<br />
efficiently.</p>
<p>We will read and evaluate everything that makes it through the<br />
discussion process. There are two possible reasons why features<br />
don&#8217;t make it into our games &#8212; either we decide that the effort is<br />
better spent elsewhere, or we just don&#8217;t think about it. Sometimes the<br />
great ideas are completely obvious when suggested, but were just missed.<br />
That is what I most hope to see.</p>
<p>When the suggestions involve engineering tradeoffs and we have to<br />
consider the implementation effort of a feature vs its benefits, the<br />
best way to convince us to pursue it is to specify EXACTLY what benefits<br />
would be gained by undertaking the work, and specifying a clean interface<br />
to the feature from the file system data and the gamex86 code.</p>
<p>We hack where necessary, but I am much more willing to spend my time on<br />
an elegant extension that has multiple uses, rather than adding api bulk<br />
for specific features. Point out things that are clunky and inelegant<br />
in the current implementation. Even if it doesn&#8217;t make any user visible<br />
difference, restructuring api for cleanliness is still a worthwhile goal.</p>
<p>We have our own ideas about game play features, so we may just disagree<br />
with you. Even if you-and-all-your-friends are SURE that your<br />
suggestions will make the game a ton better, we may not think it<br />
fits with our overall direction. We aren&#8217;t going to be all things to<br />
all people, and we don&#8217;t design by committee.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/1998/03/26/quake-3-suggestions/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
