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

<channel>
	<title>Paradice Software &#187; Windows</title>
	<atom:link href="http://www.paradicesoftware.com/blog/index.php/tag/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paradicesoftware.com/blog</link>
	<description>Developing a role-playing game since 1981</description>
	<lastBuildDate>Tue, 22 Jun 2010 08:23:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Scary Windows development stories</title>
		<link>http://www.paradicesoftware.com/blog/index.php/2009/11/scary-windows-development-stories/</link>
		<comments>http://www.paradicesoftware.com/blog/index.php/2009/11/scary-windows-development-stories/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 08:44:20 +0000</pubDate>
		<dc:creator>Lawrence</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Good coding guidelines]]></category>
		<category><![CDATA[Taxes]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.paradicesoftware.com/blog/?p=148</guid>
		<description><![CDATA[I&#8217;m currently reading a book about the evolution of Windows. One of the most interesting things I keep finding is how stupid some 3rd party application developers must have been&#8230;. for example, it seems to have been common practice that if you wanted your app to grab a particular Windows setting (let&#8217;s say the Fonts [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently reading a book about the evolution of Windows. One of the most interesting things I keep finding is how stupid some 3rd party application developers must have been&#8230;. for example, it seems to have been common practice that if you wanted your app to grab a particular Windows setting (let&#8217;s say the Fonts directory), instead of a quick MSDN search, which turns up both the <em>SHGetFolderPath</em> and <em>SHGetKnownFolderPath</em> functions (either of which is exactly what you want), these programmers fired up RegEdit and searched for the path of their own Fonts folder&#8230; the first key they found, they used as the parameter for a call to  <em>RegOpenKeyEx</em> and they read the value that way.</p>
<p>To me, that is not only a frighteningly ignorant and dangerous way to develop software (you&#8217;re not going to discover caveats &#038; usage notes by browsing RegEdit!) but <strong>of course</strong> this is not the supported way to do it (how could any sane developer think otherwise?), and <strong>of course</strong> that app would have broken immediately on any new of Windows had MS not added a compatibility shim to watch for that program checking that buggy key, and substituting in a quick call to obtain the real value&#8230;</p>
<p>This isn&#8217;t backyard programmers writing in VBA in Excel to accomplish some one-off business task, either.. it&#8217;s commercial software that did this, written by professional developers and sold to unsuspecting customers for big cash. Scary stuff.</p>
<p>The only question worth pondering here is: was this &#8216;grab something promising out of the Registry&#8217; technique better or worse than just hard-coding &#8220;C:\Windows\Fonts\&#8221; into the application? (I&#8217;m not 100% sure but it seems very likely there&#8217;s a shim out there for programs that did that, too.) </p>
]]></content:encoded>
			<wfw:commentRss>http://www.paradicesoftware.com/blog/index.php/2009/11/scary-windows-development-stories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game Golden Rule #1: Support Windowed-mode</title>
		<link>http://www.paradicesoftware.com/blog/index.php/2009/11/game-golden-rule-1-support-windowed-mode/</link>
		<comments>http://www.paradicesoftware.com/blog/index.php/2009/11/game-golden-rule-1-support-windowed-mode/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 06:50:43 +0000</pubDate>
		<dc:creator>Lawrence</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Game Golden Rules]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Taxes]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.paradicesoftware.com/blog/?p=141</guid>
		<description><![CDATA[I thought I&#8217;d cover this rule first, because I listed it as number one and also because it&#8217;s probably one of the most controversial. Let&#8217;s begin: a simple Why/Why Not argument should suffice for this one:
Why Allow Windowed-mode:
It&#8217;s more convenient for your users. Some users multitask (gasp!), even while playing games. This is much harder [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I&#8217;d cover this rule first, because I listed it as number one and also because it&#8217;s probably one of the most controversial. Let&#8217;s begin: a simple Why/Why Not argument should suffice for this one:</p>
<h3>Why Allow Windowed-mode:</h3>
<p><strong>It&#8217;s more convenient for your users.</strong> Some users multitask (gasp!), even while playing games. This is much harder to do when your game is Fullscreen. I suspect this is a part of why games like Minesweeper and Solitaire get so much play-time. They&#8217;re built into the OS, sure, but you can also fire them up and play while you&#8217;re waiting for something to download/compile/whatever. Very handy!</p>
<p><strong>It&#8217;s more convenient for you.</strong> Debugging is hard, and debugging fullscreen is harder! My own game engine (in debug builds) has a feature to throw a debugging/log window up so I can watch internal game messages etc: you can&#8217;t do this if your game is always fullscreen. Not only that, but if your game crashes at some Direct3D stuff (which can happen in early builds, before you lock down your video interface code), it&#8217;s very tricky to find a cause when you&#8217;re staring at a blank screen. A blank window on the desktop gives you more context and options.</p>
<p><strong>It makes paying certain Windows taxes more obvious.</strong> If you&#8217;re running in Windowed mode while developing, you&#8217;re going to be hitting the titlebar close button, you&#8217;ll be minimising/maximising your game Window, or maybe just clicking other apps, stealing your game&#8217;s focus. Because you&#8217;re doing these things, you&#8217;re much more likely to take the time to ensure your game handles them correctly. Fullscreen games are required to handle these situations too, you know: but some of them never get around to it! (Civilization 3, which is always &#8220;fullscreen&#8221;, can experience a rather ugly crash if I dare to click something on my second monitor while I&#8217;m playing).</p>
<p><strong>It&#8217;s future proof.</strong> You might think your fullscreen game is pretty cool, what with it supporting resolutions right up to 1920&#215;1080, but who knows what the future holds? How well will your fullscreen game look on some giant desktop running 12,000&#215;12,000 pixels? Or do you just expect no one will be playing it then? (if you don&#8217;t, then code this way: you&#8217;re sure to be correct). Windowed mode doesn&#8217;t solve this completely, but it gives your users more options.</p>
<p>Ok, hopefully you can that there are always scenarios where that option would be valuable, but you might not be convinced to allow it in <strong>your</strong> game. Let&#8217;s take a look at some reasons why not:</p>
<h3>Why NOT allow Windowed-mode:</h3>
<p><strong>It&#8217;s hard to code.</strong> Oh no, now all of your video code has two scenarios to account for! Well, actually, no it doesn&#8217;t. Once you&#8217;ve initialised Direct3D correctly, none of your other code even needs to *know* it&#8217;s drawing to a windowed area of the desktop. And initialising Direct3D to support either Windowed or Fullscreen mode is <strong>easy</strong>! I&#8217;ll bet you $5 that the sum total of video code required to support this option is LESS than the amount of code required to present the option to the user and store the result.</p>
<p><strong>Fullscreen is more atmospheric. Atmosphere is important in my game!</strong> By all means then, make fullscreen the default. Plenty of games do. I&#8217;m just asking for the <strong>option!</strong></p>
<p><strong>But I want to retain control.</strong> Fuck off! The user is in control: it&#8217;s their computer. Besides, if the user really wants to window you, they can do it: they can fire up a virtual machine and lock you inside it: good luck getting into fullscreen mode then. Of course, if it&#8217;s that important to them, they&#8217;re more likely to just uninstall you and go play something with a windowed option.</p>
<p>And there you have it. Why I believe every game should support Windowed-mode!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paradicesoftware.com/blog/index.php/2009/11/game-golden-rule-1-support-windowed-mode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paying your Windows Taxes</title>
		<link>http://www.paradicesoftware.com/blog/index.php/2009/11/paying-your-windows-taxes/</link>
		<comments>http://www.paradicesoftware.com/blog/index.php/2009/11/paying-your-windows-taxes/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 05:09:57 +0000</pubDate>
		<dc:creator>Lawrence</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Game Golden Rules]]></category>
		<category><![CDATA[Taxes]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.paradicesoftware.com/blog/?p=123</guid>
		<description><![CDATA[In Windows (like every operating system), when you&#8217;re writing an application or game there are certain things that your application is responsible for handling: some of them are easy, some of them take a little bit more effort. On his excellent blog, Microsoft&#8217;s Raymond Chen calls these responsibilities &#8220;Taxes&#8221;, and there are good reasons why [...]]]></description>
			<content:encoded><![CDATA[<p>In Windows (like every operating system), when you&#8217;re writing an application or game there are certain things that your application is responsible for handling: some of them are easy, some of them take a little bit more effort. On his excellent blog, Microsoft&#8217;s <a href="http://blogs.msdn.com/oldnewthing/archive/2005/08/22/454487.aspx">Raymond Chen</a> calls these responsibilities &#8220;Taxes&#8221;, and there are good reasons why you should pay them. Windows taxes include things like:</p>
<ul>
<li>Respond to Windows messages correctly</li>
<li>Respect user action (don&#8217;t silently cancel a Sleep request)</li>
<li>Non-standard installs (don&#8217;t assume C:\Windows!)</li>
<li>Run fine as a Standard User</li>
<li>Respect the user&#8217;s settings</li>
</ul>
<p>Raymond talks about more complex taxes too (internationalisation, heirarchical file systems), but I&#8217;m sticking to what I&#8217;m comfortable with!</p>
<p>Unfortunately, amongst all applications, games appear to be the worst at being good Windows citizens, there are far too many games out there (not just freeware ones either) that don&#8217;t pay <strong>any</strong> of the above taxes, and (to sustain the metaphor) some start trying &#8216;tax-fraud&#8217; schemes like:</p>
<ul>
<li>Trying to disable Alt-Tab</li>
<li>Refusing to be minimised (automatically restoring themselves after 1 sec)</li>
<li>Preventing the system from shutting down</li>
</ul>
<p>I might make this another series because there&#8217;s plenty to talk about, and most of it&#8217;s not even that difficult these days: you just have to be aware of the situation, and what the correct behaviour is. (I must admit I never gave thought to multi-monitor situations before I got my second monitor).</p>
<p>For now though, I will limit myself to a list of ten &#8216;golden rules&#8217; which I believe all games should obey, at a minimum (not all of them are Windows taxes &#8211; some of them are just treating your users properly). In fact I will expand on some of these in later posts too, because they&#8217;re worth talking about.</p>
<h3>Top ten Golden rules for Games: being a good Windows application</h3>
<ol>
<li>1. Fullscreen games: <strong>always</strong> allow an option to run in a Window.</li>
<li>2. Provide gamma and volume controls, and separate music from sound.</li>
<li>3. Always allow your game to be paused, saved and quit. At any time.</li>
<li>4. Provide a way to skip <strong>anything</strong> non-interactive: from cutscenes to credits.</li>
<li>5. Respect multi-monitor: If you were dragged to monitor 2, next time open on monitor 2.</li>
<li>6. Respect the filesystem: don&#8217;t open files in Read/Write mode if you only want to read from them.</li>
<li>7. Respect security: A game <strong>does not</strong> need an Administrator account to play!</li>
<li>8. Respect UI settings: if the user has selected &#8216;Use Large Fonts&#8217; in Windows, use larger fonts in your game!</li>
<li>9. Respect sessions: if the user logs off/hibernates/shuts down, handle it gracefully. Don&#8217;t try to block the action, and don&#8217;t lose their progress.</li>
<li>10. Adapt to a changing system: if you last opened on 1680&#215;1050, but the system now says the monitor can&#8217;t support that, open in a res it <strong>can</strong> support.</li>
</ol>
<p>I&#8217;ll talk about how to implement some of these (and why they&#8217;re so important) in future posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paradicesoftware.com/blog/index.php/2009/11/paying-your-windows-taxes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minimum requirements</title>
		<link>http://www.paradicesoftware.com/blog/index.php/2009/11/minimum-requirements/</link>
		<comments>http://www.paradicesoftware.com/blog/index.php/2009/11/minimum-requirements/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 08:11:56 +0000</pubDate>
		<dc:creator>Lawrence</dc:creator>
				<category><![CDATA[Icefall]]></category>
		<category><![CDATA[Decision]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.paradicesoftware.com/blog/?p=114</guid>
		<description><![CDATA[What&#8217;s a reasonable minimum spec to aim for these days?
With Icefall, I&#8217;ve already taken the decision to target Direct3D9 &#8211; I get a lot of extra capabilities compared to DirectX8, and it still works with Windows XP unlike 10 or 11&#8230; a pretty simple decision.
But what about in terms of video memory? And system RAM? [...]]]></description>
			<content:encoded><![CDATA[<p>What&#8217;s a reasonable minimum spec to aim for these days?</p>
<p>With Icefall, I&#8217;ve already taken the decision to target Direct3D9 &#8211; I get a lot of extra capabilities compared to DirectX8, and it still works with Windows XP unlike 10 or 11&#8230; a pretty simple decision.</p>
<p>But what about in terms of video memory? And system RAM? What&#8217;s a realistic minimum these days? Icefall is a freeware, turn-based RPG, so by rights it shouldn&#8217;t require a leading edge PC, but I need a specific target to prevent limiting myself unnescessarily. </p>
<p>Howzabout 32mb video, and 512mb RAM? I think that fits most every PC you could buy in the last few years&#8230; and should be enough for some reasonable effects. Anyone got any thoughts on this?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paradicesoftware.com/blog/index.php/2009/11/minimum-requirements/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>To install or not to install?</title>
		<link>http://www.paradicesoftware.com/blog/index.php/2009/11/to-install-or-not-to-install/</link>
		<comments>http://www.paradicesoftware.com/blog/index.php/2009/11/to-install-or-not-to-install/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 04:55:32 +0000</pubDate>
		<dc:creator>Lawrence</dc:creator>
				<category><![CDATA[Icefall]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.paradicesoftware.com/blog/?p=102</guid>
		<description><![CDATA[Should Icefall come with an Installer/Setup program?
My previous games (like the Five Hundred card game) didn&#8217;t require any installation at all: it assumed you had DirectX7 (the game just failed if you didn&#8217;t), and all of the files it needed were in the same directory as the EXE itself. You just unzipped it to wherever [...]]]></description>
			<content:encoded><![CDATA[<p>Should Icefall come with an Installer/Setup program?</p>
<p>My previous games (like the Five Hundred card game) didn&#8217;t require any installation at all: it assumed you had DirectX7 (the game just failed if you didn&#8217;t), and all of the files it needed were in the same directory as the EXE itself. You just unzipped it to wherever you liked, and double clicked the EXE to play. To uninstall, you just delete the folder.</p>
<p>Icefall is a little bit more complicated. All of the game&#8217;s data is still a relative path from the EXE itself, but this time it needs a specific Direct3D9 library installed (one that doesn&#8217;t ship by default with the rest of DirectX, but that other games may have already installed). So I need to include the DX Installer. </p>
<p>The Microsoft DX installer is smart enough to not overwrite a newer version of the same library (and you can only include the needed library &#8211; I don&#8217;t have to include the full DX9 100mb installer!), so I don&#8217;t need to worry about that stuff, but the question is, should I include this as an &#8216;optional&#8217; installer that the user can run if Icefall doesn&#8217;t run immediately, or would it be less confusing to just make a full install program that all users run, and call this as a part of it (I could throw out options for the Start Menu etc. at the same time).</p>
<p>I&#8217;m leaning towards making a full installer, mainly because the DirectX library is designed to never be uninstalled (it&#8217;s a shared library, and other D3D9 apps might use it), and it would be very confusing for users to have an installer with no corresponding uninstaller&#8230; also, I may as well get with the program and use the Start Menu, registry etc. the way Windows programs are supposed to. Does anyone have any opinions on this?</p>
<p>Bonus trivia: I get quite regular emails about my Five Hundred game, since it made it onto lots of the large &#8216;freeware games&#8217; websites and was quite well received at the time. One of the common questions people ask these days is &#8220;how do I uninstall it? It&#8217;s not in Add/Remove programs&#8221;. They must have forgotten that they never installed it in the first place, just unzipped. A few of them are still confused when I tell them to just delete it, so it&#8217;s clearly not what today&#8217;s users are expecting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paradicesoftware.com/blog/index.php/2009/11/to-install-or-not-to-install/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 7 compatibility</title>
		<link>http://www.paradicesoftware.com/blog/index.php/2009/10/windows-7-compatibility/</link>
		<comments>http://www.paradicesoftware.com/blog/index.php/2009/10/windows-7-compatibility/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 08:35:51 +0000</pubDate>
		<dc:creator>Lawrence</dc:creator>
				<category><![CDATA[Amusing]]></category>
		<category><![CDATA[Icefall]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.paradicesoftware.com/blog/?p=59</guid>
		<description><![CDATA[I&#8217;m working on the follow up to my Object-Oriented Programming post, but in the meantime I had to share this:
I tested Icefall on Windows 7 for the first time today (having developed &#38; tested exclusively on Windows XP SP 3 up until now). It worked perfectly, in fact it ran a little more smoothly than [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on the follow up to my Object-Oriented Programming post, but in the meantime I had to share this:</p>
<p>I tested Icefall on Windows 7 for the first time today (having developed &amp; tested exclusively on Windows XP SP 3 up until now). It worked perfectly, in fact it ran a little more smoothly than it does on the same computer on XP.</p>
<p>It&#8217;s always reassuring when your application turns out to be forward-compatible, it&#8217;s a good sign my low-level code isn&#8217;t performing any horrendous unsupported operations, <a href="http://weblogs.asp.net/rosherove/archive/2004/06/18/158620.aspx">SimCity-style</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paradicesoftware.com/blog/index.php/2009/10/windows-7-compatibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
