<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18868839</id><updated>2012-01-19T03:40:35.077-08:00</updated><title type='text'>Me::Programmer.class</title><subtitle type='html'>The trials and tribulations of an amateur game programmer.  Please tell him where he is going wrong.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default?start-index=101&amp;max-results=100'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>201</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18868839.post-6880958433215177725</id><published>2012-01-19T03:38:00.000-08:00</published><updated>2012-01-19T03:40:35.085-08:00</updated><title type='text'>Android Bitmap Idiosyncrasies</title><content type='html'>Whilst improving my Android app &lt;a href="https://market.android.com/details?id=com.scs.chromakey.main.full"&gt;Chromakey Photo Edit&lt;/a&gt;, I've come across a few idiosyncrasies with Android Bitmaps which I thought I'd share for reference:-&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bitmap.createScaledBitmap() always returns a bitmap of type RGB_565, regardless of the source bitmap.&amp;nbsp; See http://code.google.com/p/android/issues/detail?id=13038&lt;/li&gt;&lt;li&gt;ARGB_4444 is now depreciated, so you'll always need to use ARGB_8888 if you want to store transparency information.&lt;/li&gt;&lt;li&gt; When using BitmapFactory.decodeFile(), always try to pass a BitmapFactory.Options().inPreferredConfig to ensure you get a bitmap in the format you need.&amp;nbsp; By default, bitmaps loaded this way are always immutable (editable), so you'll need to do a Bitmap.copy() if you need to make it mutable.&lt;/li&gt;&lt;li&gt;Bitmap.recycle() is not neccesarily required, but can help improve the garbage collection.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6880958433215177725?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6880958433215177725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6880958433215177725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6880958433215177725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6880958433215177725'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2012/01/android-bitmap-idiosyncrasies.html' title='Android Bitmap Idiosyncrasies'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5997551999469003977</id><published>2011-09-21T03:52:00.000-07:00</published><updated>2011-09-21T03:52:42.477-07:00</updated><title type='text'>Fixing GRUB</title><content type='html'>Grub seems to be a constant source of problems.&amp;nbsp; After updating my Ubuntu I got an error along the lines of "grub may need sorting out for various reasons".&amp;nbsp; I hate it when it does that, because if it does go wrong, you're usually stuck without a computer and are thus unable to browse the internet to find out how to solve the problem, a'la Catch-22.&amp;nbsp; Needless to say, when I rebooted, I just got a completely blank screen, not even a cursor flashing in the corner.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway, for my own reference, here's what I did (after booting from a LiveCD - what did we do before LiveCD's?)&lt;br /&gt;&lt;br /&gt;Mount the disk:&lt;br /&gt;&lt;pre&gt;sudo mount /dev/sdX /mnt&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Re-install Grub:&lt;br /&gt;&lt;pre&gt;sudo grub-install --root-directory=/mnt /dev/sdX&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;Obviously, change the sdX bit to point to your HD.&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;If you're a real masochist, you could try reading &lt;a href="https://help.ubuntu.com/community/Grub2#update-grub_complains_about_missing_devices"&gt;this&lt;/a&gt;.&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5997551999469003977?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5997551999469003977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5997551999469003977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5997551999469003977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5997551999469003977'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/09/fixing-grub.html' title='Fixing GRUB'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5322481077994522580</id><published>2011-09-06T03:12:00.001-07:00</published><updated>2011-09-06T03:28:06.065-07:00</updated><title type='text'>How to be a productive programmer</title><content type='html'>Here's my humble checklist of what I think are the most important requirements for being the kind of programmer that can create something ultra-quickly.&lt;br /&gt;&lt;br /&gt;* A stock of library code, built up over years so that simple and common tasks are already covered by a pre-written function or two.&lt;br /&gt;* Be either the only programmer on the project or have your area clearly defined, and not be dependant on someone elses code that is still being produced.&lt;br /&gt;* Have it clear in your head exactly what you are creating and how it is generally going to work.&lt;br /&gt;* You have already "solved" any major technical hurdles that you know you are going to encounter.&lt;br /&gt;* A quiet-ish place to work.&lt;br /&gt;* A desire to actually create this program.&lt;br /&gt;* Access to the internet to solve those niggly problems or to copy-and-paste code from websites.&lt;br /&gt;* As a bonus, have a similar project that you previously created that can be easily subverted to the new task.&lt;br /&gt;&lt;br /&gt;If you've got the above covered then you should be able to churn stuff out quickly, and then you can spend the rest of your time writing your own more interesting projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5322481077994522580?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5322481077994522580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5322481077994522580' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5322481077994522580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5322481077994522580'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/09/how-to-be-productive-programmer.html' title='How to be a productive programmer'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8517771581024065497</id><published>2011-08-16T06:39:00.000-07:00</published><updated>2011-08-16T06:46:41.207-07:00</updated><title type='text'>Megaproject #2: Worldcrafter</title><content type='html'>I call it a "megaproject" since I'm pretty convinced I can see this one through to the end without getting bored or sidetracked onto something else.&lt;br /&gt;&lt;br /&gt;It's called &lt;a href="http://worldcrafter-android.blogspot.com/"&gt;Worldcrafter&lt;/a&gt;.  In a nutshell, it's a 2D Minecraft-style game for Android. Yes!  Another one!  This is what it looks like so far, after about 5 days since I started (most of those days being spent trying to decide what to call it):-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-HVtie3f7J3Q/Tkpzcsu8Y7I/AAAAAAAAAY8/RyPi9pS6Pks/s1600/worldcrafter_ss2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 191px;" src="http://3.bp.blogspot.com/-HVtie3f7J3Q/Tkpzcsu8Y7I/AAAAAAAAAY8/RyPi9pS6Pks/s320/worldcrafter_ss2.png" alt="" id="BLOGGER_PHOTO_ID_5641448420116554674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Does the world need another Minecraft game? I'll let the world decide.   What I like about writing this kind of game (and what I like about &lt;a href="http://www.stellarforces.com/"&gt;Stellar Forces&lt;/a&gt;) is that it's almost "modular".  You (i.e. me) can play a bit, then think "ooh, wouldn't it be good if it did this".  And then add it.  However,  the basic game is quite easy to get up and running, and that's the important bit when starting a new project: have something playable ASA-goddam-P.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8517771581024065497?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8517771581024065497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8517771581024065497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8517771581024065497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8517771581024065497'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/08/megaproject-2-worldcrafter.html' title='Megaproject #2: Worldcrafter'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-HVtie3f7J3Q/Tkpzcsu8Y7I/AAAAAAAAAY8/RyPi9pS6Pks/s72-c/worldcrafter_ss2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8426989209375642710</id><published>2011-08-12T00:53:00.000-07:00</published><updated>2011-08-13T05:02:11.003-07:00</updated><title type='text'>Domain Squatters Can Die!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.webmasterstuff.com/wp-content/uploads/2011/07/cybersquatting.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 350px; height: 225px;" src="http://www.webmasterstuff.com/wp-content/uploads/2011/07/cybersquatting.jpg" alt="" border="0" /&gt;&lt;/a&gt;If you've ever tried finding a domain name for your new project, no doubt you'll have come across the problem of &lt;a href="http://en.wikipedia.org/wiki/Cybersquatting"&gt;cybersquatters&lt;/a&gt;, the vermin that polute the internet with ad-farms by buying up any and all domains that might be remotely useful for anyone.  The rest of us have to try and think up obscure domain names that still try and relate to whatever subject our website is about, and hope people will still be able to find our site on the net.&lt;br /&gt;&lt;br /&gt;Of course, you can usually buy a domain back from them if you want, using one of the their very helpful "make us an offer" forms.  Gee, thanks.  You're doing mankind a service.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8426989209375642710?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8426989209375642710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8426989209375642710' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8426989209375642710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8426989209375642710'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/08/domain-squatter-can-die.html' title='Domain Squatters Can Die!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1282785907543814499</id><published>2011-07-29T02:04:00.000-07:00</published><updated>2011-07-29T02:09:05.787-07:00</updated><title type='text'>Software Patents Metaphor</title><content type='html'>I'm a chef, and I've just patented a new recipe: chips with &lt;span style="font-weight: bold; font-style: italic;"&gt;*2*&lt;/span&gt; sprinkles of salt over them.  So if I see anyone sprinkling between 1 and 3 sprinkles of salt over their chips, expect a letter from my lawyer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Update --&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've just had an amazing idea: chips with 3!  Yes 3!  sprinkles of salt over them!  I don't know how I do it.  I might start to sell this new recipe over the internet, but of course it will take you more than &lt;a href="http://en.wikipedia.org/wiki/1-Click"&gt;1-click&lt;/a&gt; to buy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1282785907543814499?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1282785907543814499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1282785907543814499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1282785907543814499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1282785907543814499'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/07/software-patents-metaphor.html' title='Software Patents Metaphor'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7585388032707936659</id><published>2011-07-21T06:14:00.000-07:00</published><updated>2011-07-21T06:50:08.153-07:00</updated><title type='text'>Tower Invaders: Hints'n'Tips</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-WVz32wsD564/TigtKrfMm4I/AAAAAAAAAYI/wd6daWdJGGw/s1600/lg_promo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 156px;" src="http://1.bp.blogspot.com/-WVz32wsD564/TigtKrfMm4I/AAAAAAAAAYI/wd6daWdJGGw/s320/lg_promo.jpg" alt="" id="BLOGGER_PHOTO_ID_5631800995522321282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It was my deliberate intention to make &lt;a href="https://market.android.com/details?id=com.scs.towerinvaders.main.lite"&gt;Tower Invaders&lt;/a&gt; quite difficult from the start.  I didn't want players to have to wade through loads of screens of baddies before they got to the challenging bit.&lt;br /&gt;&lt;br /&gt;Anyway, here are some quick hints'n' tips for those who might be having some problems defeating the invaders.  I like to think of the game as more of a puzzle or even strategy game.   There is a lot of strategy involved in what at first seems to most  simple of choices:-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-size:130%;"&gt;Position of towers is important!&lt;/span&gt;&lt;br /&gt;Even though the invaders move from left to right (and back, and so on) covering the whole width, the position of the towers is still very important.  Statistically, the invaders will be mostly above the middle of the screen, so that is the best area to place your pulse lasers.  However, this also means that this is where the most bullets are going to fall; if you have the full version, shields are a good idea, especially on towers you've spent a lot of creds on upgrading.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;* Sell towers that are about to be destroyed!&lt;/span&gt;&lt;br /&gt;You will get the same amount of money back for a brand new tower as for one that's about to crumble.  You do get more for upgraded towers, though obviously not as much as you paid for them.  Wait until a tower is about to go belly-up before selling it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;* Keep Zappers to the side!&lt;/span&gt;&lt;br /&gt;Since Zappers will always hit an invader, keep them out of the way of bullets.  As mentioned earlier, the most bullets will fall in the middle of the screen, so you might as well build Zappers to the far sides, where they will have much less chance of being hit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;* Upgrade towers to limit your exposure!&lt;/span&gt;&lt;br /&gt;It costs the same to buy two towers as it does to buy one and upgrade it.  Even though an upgraded tower will shoot about 10% less than two basic towers, those two basic towers cover twice as much area, so they have twice as much chance of being hit by a bullet.  Also, you'll need 2 shields to protect them.  Of course, they will be able to incur twice as much damage, so things aren't always so clear cut.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7585388032707936659?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7585388032707936659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7585388032707936659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7585388032707936659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7585388032707936659'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/07/tower-invaders-hintsntips.html' title='Tower Invaders: Hints&apos;n&apos;Tips'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-WVz32wsD564/TigtKrfMm4I/AAAAAAAAAYI/wd6daWdJGGw/s72-c/lg_promo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8465024656986418374</id><published>2011-07-14T02:39:00.001-07:00</published><updated>2011-07-14T02:43:23.786-07:00</updated><title type='text'>Android Apps: Minimum Price</title><content type='html'>After putting my first &lt;a href="https://market.android.com/details?id=com.scs.towerinvaders.main.full"&gt;paid-for app&lt;/a&gt; on the market place, I noticed that the minimum price you can sell an app for in the US is 99c.  This is strange, since it's possible to sell it for 50p, which is less than 99c.  Isn't it usually the UK that gets the raw deal where price conversion is concerned?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8465024656986418374?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8465024656986418374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8465024656986418374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8465024656986418374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8465024656986418374'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/07/android-apps-minimum-price.html' title='Android Apps: Minimum Price'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-973349631517821353</id><published>2011-07-12T03:40:00.001-07:00</published><updated>2011-07-12T03:44:55.824-07:00</updated><title type='text'>My First Android Game!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-JsBmtS5bylw/ThwkwUU_SVI/AAAAAAAAAXY/ITncOuiUaJ8/s1600/ss2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://3.bp.blogspot.com/-JsBmtS5bylw/ThwkwUU_SVI/AAAAAAAAAXY/ITncOuiUaJ8/s320/ss2.png" alt="" id="BLOGGER_PHOTO_ID_5628414046815340882" border="0" /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;I've just released my first Android game with the help of  Dipper (who provided the graphics) called "&lt;a href="https://market.android.com/details?id=com.scs.towerinvaders.main.lite"&gt;Tower Invaders&lt;/a&gt;".  It's a bit  like Tower Defence mixed with Space Invaders, and (even though I say it myself) I actually quite like playing it, which is always a good sign.&lt;br /&gt;&lt;br /&gt;It's free and available at &lt;a href="https://market.android.com/details?id=com.scs.towerinvaders.main.lite"&gt;https://market.android.com/details?id=com.scs.towerinvaders.main.lite&lt;/a&gt;.  Let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-973349631517821353?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/973349631517821353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=973349631517821353' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/973349631517821353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/973349631517821353'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/07/my-first-android-game.html' title='My First Android Game!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-JsBmtS5bylw/ThwkwUU_SVI/AAAAAAAAAXY/ITncOuiUaJ8/s72-c/ss2.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8765683147176697204</id><published>2011-06-10T06:55:00.000-07:00</published><updated>2011-06-10T07:07:07.092-07:00</updated><title type='text'>Float.MIN_VALUE Craziness</title><content type='html'>Did I miss a memo?  How can this be right:-&lt;br /&gt;&lt;br /&gt;float f = Math.max(Float.MIN_VALUE, 0f); // Returns "1.4E-45" (i.e. Float.MIN_VALUE I think)&lt;br /&gt;&lt;br /&gt;What?  Maybe I missed something in the documentation that said "Please note that this function is crazy."  Unless the logic of "closest to positive infinity" means that Float.MIN_VALUE is actually closer since it loops round backwards.  I hope not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8765683147176697204?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8765683147176697204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8765683147176697204' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8765683147176697204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8765683147176697204'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/06/floatminvalue-craziness.html' title='Float.MIN_VALUE Craziness'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5878505814556558853</id><published>2011-05-27T05:11:00.000-07:00</published><updated>2011-05-27T05:21:00.617-07:00</updated><title type='text'>Android Rect Confusion</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Jesus christ! &lt;/span&gt; That's all I have to say on this subject.  Apart from the following:-&lt;br /&gt;&lt;br /&gt;In their wisdom, Google decided to give the Android function Rect.intersect() a side effect.  Without reading the docs, you would naturally assume that something like:-&lt;br /&gt;&lt;br /&gt;boolean b = rect1.intersect(rect2);&lt;br /&gt;&lt;br /&gt;would be reasonably straightforward, returning true or false depending on whether the two rectangles intersected.  However, if it returns true,&lt;span style="font-style: italic;"&gt; it also sets rect1 to be the shape of the intersection&lt;/span&gt;. WTF??  Wouldn't calling the function something like getIntersect() be a good idea?&lt;br /&gt;&lt;br /&gt;There is a function called Rect.intersects(), which does do what you'd expect (and avoids doing what you &lt;span style="font-style: italic;"&gt;wouldn't&lt;/span&gt; expect); so just remember to add that little 's' at the end of the function name because it makes all the difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5878505814556558853?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5878505814556558853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5878505814556558853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5878505814556558853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5878505814556558853'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/05/android-rect-confusion.html' title='Android Rect Confusion'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3672482405680424653</id><published>2011-05-10T03:53:00.000-07:00</published><updated>2011-05-10T04:01:39.151-07:00</updated><title type='text'>I got the call!</title><content type='html'>Last month I got an email from someone at Intel asking if he could call me about porting &lt;a href="http://www.stellarforces.com/"&gt;Stellar Forces&lt;/a&gt; to work on AppUp.  We did, and had a quick chat about it and AppUp in general, which seems like Intel's take on the AppStore/Marketplace.  I checked out the documentation that was emailed to me, and looked at the website.  It wasn't going to be a small job, they obviously weren't going to pay me to do it, and it's a free game so I make no money from it anyway.&lt;br /&gt;&lt;br /&gt;However, eventually I came to a page that listed the Java SDKs, and noticed the lack of a Linux version.  I sent an email back to confirm if this was the case, which would be a showstopper for me.  That was about 4 weeks ago and I've still not had a reply.&lt;br /&gt;&lt;br /&gt;It's a bit crap that they expect me to spend the time converting a game to their system (without any financial benefit) but they can't even be bothered to send an email as soon as there's nothing in it for them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3672482405680424653?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3672482405680424653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3672482405680424653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3672482405680424653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3672482405680424653'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/05/i-got-call.html' title='I got the call!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4919122383142299769</id><published>2011-02-25T05:37:00.000-08:00</published><updated>2011-02-25T05:44:56.263-08:00</updated><title type='text'>Dependency Hell</title><content type='html'>I seem to be stuck in Dependency Hell when trying to write some Java code that will compile Java source; I'm trying to use &lt;a href="http://commons.apache.org/jci/"&gt;Apache JCI&lt;/a&gt; but it's turning into a nightmare.  &lt;a href="http://commons.apache.org/jci/commons-jci-javac/dependencies.html"&gt;Here is the list of all its dependencies&lt;/a&gt;, which need to be downloaded one by one (at least, I can see nowhere where they are all included in one nice download).&lt;br /&gt;&lt;br /&gt;But unfortunately, at least one of the dependencies (as I could see no point looking for any more) &lt;a href="http://vafer.org/projects/dependency"&gt;doesn't exist&lt;/a&gt;, and I can't find it after lots of Googling.  So, as far as I can see, &lt;span style="font-weight: bold;"&gt;there is no way to use Apache Commons JCI&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4919122383142299769?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4919122383142299769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4919122383142299769' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4919122383142299769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4919122383142299769'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/02/dependency-hell.html' title='Dependency Hell'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-905972426664381655</id><published>2011-02-17T05:09:00.000-08:00</published><updated>2011-02-17T05:10:24.860-08:00</updated><title type='text'>My Adage</title><content type='html'>Everyone else seems to have one, so here's my "programming adage":-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;"The worst thing you can do as a programmer is write new code."&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Discuss.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-905972426664381655?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/905972426664381655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=905972426664381655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/905972426664381655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/905972426664381655'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/02/my-adage.html' title='My Adage'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6546471414186840106</id><published>2011-02-15T01:01:00.000-08:00</published><updated>2011-02-15T01:07:49.512-08:00</updated><title type='text'>A Bite at Java Bytes</title><content type='html'>After using Java for so long, I'm still surprised that you can't write something like:-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public byte addNums(byte a, byte b)  {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     return a+b;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// Call the function:-&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;addNums(1, 2); // Get a compiler error??&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The compiler error is because the 1 and 2 are ints by default, and the function is expecting bytes.  Surely it must be able to work out that 1 and 2 are bytes in this case, not ints?  To get it to compile you need to write:-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;addNums((byte)1, (byte)2); // Get a compiler error??&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't normally mind verbose code as long as it adds information for the programmer, but this is pointless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6546471414186840106?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6546471414186840106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6546471414186840106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6546471414186840106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6546471414186840106'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2011/02/bite-at-java-bytes.html' title='A Bite at Java Bytes'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-344474927497128907</id><published>2010-11-30T01:50:00.000-08:00</published><updated>2010-11-30T03:33:48.737-08:00</updated><title type='text'>Databases and Threads</title><content type='html'>The usual disclaimer applies to this post: millions of people probably already know this, and will be thinking '&lt;span style="font-style: italic;"&gt;What?  And you call yourself a programmer??&lt;/span&gt;'&lt;br /&gt;&lt;br /&gt;What could possible be wrong with the following function:-&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public int RunIdentityInsert(String sql) throws SQLException {&lt;br /&gt;     Statement stmt = (Statement) conn.createStatement();&lt;br /&gt;     stmt.execute(sql);&lt;br /&gt;     return getScalarAsInt("SELECT @@IDENTITY AS NewID");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;How about the bane of my programming life, threads?  I've got loads of programs that have been running on servers for years using the above code, and mostly without a problem.  Until yesterday.&lt;br /&gt;&lt;br /&gt;My function added a record to a table containing about 6,000 rows, but the insert returned an id of about 250,000.  It was only after looking at all the other possible reasons that this probably cause hit me: what if another thread ran another insert statement at pretty much exactly the same time?  That would surely cause the same symptoms.&lt;br /&gt;&lt;br /&gt;To be honest, I don't actually know if that was the cause, but it seems to me that the code should look like this:-&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public int RunIdentityInsert(String sql) throws SQLException {&lt;br /&gt; synchronized (conn) { // Need in case another thread also does an insert!&lt;br /&gt;     Statement stmt = (Statement) conn.createStatement();&lt;br /&gt;     stmt.execute(sql);&lt;br /&gt;     return getScalarAsInt("SELECT @@IDENTITY AS NewID");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-344474927497128907?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/344474927497128907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=344474927497128907' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/344474927497128907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/344474927497128907'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2010/11/databases-and-threads.html' title='Databases and Threads'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-9004908041370806081</id><published>2010-11-03T03:02:00.000-07:00</published><updated>2010-11-03T03:03:12.026-07:00</updated><title type='text'>Why I like Java:</title><content type='html'>Because when I wrote a slow crap program, everyone blames the language and not me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-9004908041370806081?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/9004908041370806081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=9004908041370806081' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/9004908041370806081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/9004908041370806081'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2010/11/why-i-like-java.html' title='Why I like Java:'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7520392830083416267</id><published>2010-07-22T06:49:00.000-07:00</published><updated>2010-07-22T07:07:50.381-07:00</updated><title type='text'>The P*ssed Off Blog - Munin</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chamberofsecrets89.files.wordpress.com/2008/01/anger.gif"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 251px; height: 244px;" src="http://chamberofsecrets89.files.wordpress.com/2008/01/anger.gif" alt="" border="0" /&gt;&lt;/a&gt;I now update this blog rarely, and the only time I will probably write here is when I'm COMPLETELY P*SSED OFF with some software or other.  And today it's &lt;a href="http://munin-monitoring.org/"&gt;Munin&lt;/a&gt;, a program to profile server, like network and CPU usage etc...&lt;br /&gt;&lt;br /&gt;It seems like a great program, and worked great on my local VM which is running an old-ish version of Ubuntu (Hardy Heron, 8.04) and version 1.2.5 of Munin in Synaptic.  I had it up and running in minutes thanks to &lt;a href="http://www.ubuntugeek.com/monitoring-servers-and-clients-using-munin-in-ubuntu.html"&gt;this article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Of course, you might have an idea what's coming; it's what happens with most great software programs: the programmers don't know when to STOP F*CKING AROUND WITH IT and start adding/removing features and generally making something that "just worked" into a friggin' nightmare to use.&lt;br /&gt;&lt;br /&gt;After I installed Munin (1.4.4) on the latest version of Ubuntu (Lynx, 10), I ran into problems trying to run it.  Unhelpfully, when trying to run Munin as root, it comes up with the message "this program will break if you run it as 'root'...".  Jesus, I'm not some n00b.  Anybody who wants to run something like Munin is not a casual computer user, and knows the problems associated with running everything as root.  But no, the programmers of Munin obviously think they know better and want to protect us from ourselves (and getting any work done).&lt;br /&gt;&lt;br /&gt;The older version of Munin has a switch (--force-root) to over-ride this.  But that was too helpful so THEY'VE TAKEN IT OUT.  Thanks a lot.  The message does come with some help: "run it as user 'munin'".  Erm, ANY CLUE AS TO WHAT THE PASSWORD MIGHT BE?  No?  Thanks for nothing.  I've tried "munin" and blank, but no joy and Google doesn't seem to be able to help me either.  I'm not even sure that would work anyway, as the file referred to in the "permission denied" error I get is owned by root.  So do I have to chmod loads of seemingly random files to allow user 'munin' to edit them?  Surely that's no way to have a secure system?&lt;br /&gt;&lt;br /&gt;So to sum up, I got the older version working in about 5 minutes, but so far I've spent a couple of hours on the new version and got nowhere.  Thanks, munin programmers, for taking Munin backwards.   I won't be using Munin again, but that's more because I COULDN'T IF I WANTED TO than due to any principles and animosity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7520392830083416267?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7520392830083416267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7520392830083416267' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7520392830083416267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7520392830083416267'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2010/07/pssed-off-blog-munin.html' title='The P*ssed Off Blog - Munin'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6436161408461983299</id><published>2010-04-01T01:17:00.000-07:00</published><updated>2010-04-01T01:26:00.094-07:00</updated><title type='text'>Eclipse and Subversion [SOLVED]</title><content type='html'>This is mainly a note for future reference for myself, since I always seem to have an ABSOLUTE F*CKING NIGHTMARE trying to get Subclipse working on any new install of Eclipse.  Thankfully it seems to have got better in the last few months now that Eclipse automatically finds dependencies, and you don't have to realise that Subclipse requires Buckminster, Buckminster requires ECF, and ECF requires Equinox until YOUR HEAD EXPLODES.&lt;br /&gt;&lt;br /&gt;Anyway, now all it seems you have to do is select the Tigris update site as per &lt;a href="http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=F9C8214D63B862C5A26BA8F2147B69EA?pageID=p4wYuA"&gt;here&lt;/a&gt;  and select all the Subclipse components.&lt;br /&gt;&lt;br /&gt;Then finally, for the magic step that makes it all work that took me about 3 hours searching the internet for, you have to &lt;a href="http://stackoverflow.com/questions/41934/how-can-i-make-eclipse-file-search-not-include-svn-directories/354675#354675"&gt;&lt;span style="font-weight: bold;"&gt;right-click on your project and select Team -&gt; Share&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(Why it couldn't realise that a project is already in subversion by seeing if there were any .svn directories is something I can't answer.  There may be good reasons for this).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6436161408461983299?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6436161408461983299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6436161408461983299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6436161408461983299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6436161408461983299'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2010/04/eclipse-and-subversion-solved.html' title='Eclipse and Subversion [SOLVED]'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6147959221819163740</id><published>2010-01-08T07:06:00.000-08:00</published><updated>2010-01-08T07:19:18.346-08:00</updated><title type='text'>Developing a Community</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/thumb/e/e0/Mule_box.jpg/225px-Mule_box.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 225px; height: 225px;" src="http://upload.wikimedia.org/wikipedia/en/thumb/e/e0/Mule_box.jpg/225px-Mule_box.jpg" alt="" border="0" /&gt;&lt;/a&gt;One thing I always aim to achieve with my games is developing a community around them.  This has pretty much eluded me (at least to my standards) until now, as there there is a small community playing &lt;a href="http://www.stellarforces.com/"&gt;Stellar Forces&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, I'm confused.  I've just looked at the main page of a new game called &lt;a href="http://www.planetmule.com/"&gt;Mule&lt;/a&gt;, which is an online remake of an old C64 game (which I've never played, BTW as I'm an old Speccy user and it would be against my religion to do so).  As far as I can tell, it's only been going since December last year, and&lt;span style="font-weight: bold;"&gt; it already has over 8,000 registered users&lt;/span&gt;!  There other stats are impressive to - 1,600 forum posts, 2,800 games played etc...&lt;br /&gt;&lt;br /&gt;So my question is "What are they doing to get that many users?"  It's obviously a far more polished affair than my own effort - is that it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6147959221819163740?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6147959221819163740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6147959221819163740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6147959221819163740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6147959221819163740'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2010/01/developing-community.html' title='Developing a Community'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1377253823536978673</id><published>2010-01-04T04:34:00.000-08:00</published><updated>2010-01-04T04:55:23.362-08:00</updated><title type='text'>Use of Overriding Methods Considered Harmful</title><content type='html'>I've come to the conclusion that overriding methods is a bad idea.&lt;br /&gt;&lt;br /&gt;You know the situation; you've subclassed another class, which has a method in it that's not quite perfect, so in your subclass you write another method (giving it the same parameters) that does something slightly different.&lt;br /&gt;&lt;br /&gt;Cue several months later, and you innocently edit the method in the parent class, changing the method parameters.  Suddenly bugs appear left right and centre.  "&lt;span style="font-weight: bold;"&gt;But how?&lt;/span&gt;" you ask yourself.&lt;br /&gt;&lt;br /&gt;Well, it's because the method in the subclass is now never called since the method signature is different to the parents signature.  But how were you supposed to know?  Exactly!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1377253823536978673?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1377253823536978673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1377253823536978673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1377253823536978673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1377253823536978673'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2010/01/use-of-overriding-methods-considered.html' title='Use of Overriding Methods Considered Harmful'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5378012601269982540</id><published>2009-12-15T04:02:00.000-08:00</published><updated>2009-12-15T05:55:04.374-08:00</updated><title type='text'>Making Money from Open Source</title><content type='html'>After discussing the above on the &lt;a href="http://forum.freegamedev.net/viewtopic.php?f=7&amp;amp;t=35"&gt;Freegamer forums&lt;/a&gt;, I thought I'd start a brief list of ways to make money from Open Source, if only for my own reference:-&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Put adverts onto your website&lt;/li&gt;&lt;li&gt;Ask for donations&lt;/li&gt;&lt;li&gt;Offer to implement features&lt;/li&gt;&lt;li&gt;Create virtual merchandise&lt;/li&gt;&lt;li&gt;Sell "acheivements" and "player upgrades"&lt;/li&gt;&lt;li&gt;Unlock features&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sell merchandise&lt;/li&gt;&lt;li&gt;Sell your community&lt;/li&gt;&lt;li&gt;Provide an offline version of the game (for free) but require a small payment for anything other than token access (e.g. unrated friendlies) on a PvP server. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Some of these are similar and are along the lines of "allow players to pay for more features".&lt;br /&gt;&lt;br /&gt;The main obstacle to all of these is having a game popular enough so that people will actually pay money.  Suggestions for solving this problem on a postcard please...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5378012601269982540?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5378012601269982540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5378012601269982540' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5378012601269982540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5378012601269982540'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/12/making-money-from-open-source.html' title='Making Money from Open Source'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2249621287316862806</id><published>2009-11-27T01:57:00.000-08:00</published><updated>2009-11-27T02:01:31.114-08:00</updated><title type='text'>New Stellar Forces Client and new Forums</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/Sw-jDIC-SLI/AAAAAAAAANM/CPXb6mLIdG0/s1600/sf_ss3.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 300px; height: 226px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/Sw-jDIC-SLI/AAAAAAAAANM/CPXb6mLIdG0/s200/sf_ss3.png" alt="" id="BLOGGER_PHOTO_ID_5408720951590144178" border="0" /&gt;&lt;/a&gt;A new version of the &lt;a href="http://code.google.com/p/stellarforces/downloads/list"&gt;Stellar Forces client&lt;/a&gt; has been uploaded (0.35), and I can also announce that we have some new forums, linked into the &lt;a href="http://stellarforces.no-ip.org/"&gt;Stellar Forces website&lt;/a&gt; (so users don't need to log into a seperate website to be able to chat).&lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://stellarforces.blogspot.com/"&gt;Stellar Forces blog&lt;/a&gt; for more details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2249621287316862806?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2249621287316862806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2249621287316862806' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2249621287316862806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2249621287316862806'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/11/new-stellar-forces-client-and-new.html' title='New Stellar Forces Client and new Forums'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/Sw-jDIC-SLI/AAAAAAAAANM/CPXb6mLIdG0/s72-c/sf_ss3.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5732814931832334761</id><published>2009-11-19T04:34:00.000-08:00</published><updated>2009-11-19T04:37:32.235-08:00</updated><title type='text'>Sourceforge - At least someone agrees with me</title><content type='html'>I've just seen this comment on Slashdot about Sourceforge which echos my sentiments (and &lt;a href="http://meprogrammer.blogspot.com/2009/09/in-praise-of-google-code.html"&gt;a post I wrote&lt;/a&gt; a couple of months ago):-&lt;br /&gt;&lt;div class="commentBody"&gt;    &lt;div id="comment_body_30147736"&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="commentBody"&gt;&lt;div id="comment_body_30147736"&gt;&lt;p&gt;&lt;a href="http://interviews.slashdot.org/comments.pl?sid=1447134&amp;amp;cid=30147736"&gt;Have you ever tried to use Sourceforge? It's slow, ugly, constantly gives vague errors, image uploads constantly fail, terrible UI, forgets which page you were on before logging in, awful bug tracking with insultingly-named fields (canned response!)...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://interviews.slashdot.org/comments.pl?sid=1447134&amp;amp;cid=30147736"&gt;A better question is, "why would any project actually interested in user feedback use Sourceforge?"&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://interviews.slashdot.org/comments.pl?sid=1447134&amp;amp;cid=30147736"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5732814931832334761?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5732814931832334761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5732814931832334761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5732814931832334761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5732814931832334761'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/11/sourceforge-at-least-someone-agrees.html' title='Sourceforge - At least someone agrees with me'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-627213299531700688</id><published>2009-11-16T06:10:00.000-08:00</published><updated>2009-11-16T06:25:27.965-08:00</updated><title type='text'>New Stellar Forces Blog</title><content type='html'>Since I'm hoping that &lt;a href="http://stellarforces.no-ip.org/"&gt;Stellar Forces&lt;/a&gt; is going to become my &lt;span style="font-style: italic;"&gt;raison d'etre&lt;/span&gt;, I've created a &lt;a href="http://stellarforces.blogspot.com/"&gt;whole new seperate blog for it&lt;/a&gt;.  I've got loads of ideas and thoughts to discuss about it, and people who may be interested in it may not want to have to wade through all the other random blog entries that I produce.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-627213299531700688?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/627213299531700688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=627213299531700688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/627213299531700688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/627213299531700688'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/11/blog-splinter.html' title='New Stellar Forces Blog'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6577036849849657013</id><published>2009-11-12T03:34:00.000-08:00</published><updated>2009-11-12T07:37:44.159-08:00</updated><title type='text'>Stellar Forces Released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SvvzYBlbwGI/AAAAAAAAAMo/Ue2tNGnut9c/s1600-h/sf_logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 450px; height: 40px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SvvzYBlbwGI/AAAAAAAAAMo/Ue2tNGnut9c/s320/sf_logo.png" alt="" id="BLOGGER_PHOTO_ID_5403179772028895330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've just released the first alpha version of &lt;a href="http://stellarforces.no-ip.org/" target="_blank"&gt;Stellar Forces&lt;/a&gt;, my 3D squad-level multi-player turn-based strategy game. You control units in the traditional turn-based way, and take turns with your opponent.  There is also a website that acts as the control panel for games.&lt;br /&gt;&lt;br /&gt;It is alpha, so although I've tested it there are bound to be bugs and the game balance may not be perfect. I would just like a few playtesters to start using it and provide me with constructive feedback about what can be changed and improved.&lt;br /&gt;&lt;br /&gt;In "hallway testing" style, I'm keeping my details brief so that if there are any confusing or unexplained aspects to the game, people will let me know and I'll add more details to the instructions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stellarforces.no-ip.org/" target="_blank"&gt;http://stellarforces.no-ip.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway, let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6577036849849657013?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6577036849849657013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6577036849849657013' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6577036849849657013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6577036849849657013'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/11/stellar-forces-released.html' title='Stellar Forces Released'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/SvvzYBlbwGI/AAAAAAAAAMo/Ue2tNGnut9c/s72-c/sf_logo.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6257627129268200280</id><published>2009-11-10T07:17:00.000-08:00</published><updated>2009-11-10T07:25:32.612-08:00</updated><title type='text'>Stellar Forces: Almost ready!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SvmE2QNOzGI/AAAAAAAAAMg/PoGo00irPRM/s1600-h/dsr_ss4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 251px;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SvmE2QNOzGI/AAAAAAAAAMg/PoGo00irPRM/s320/dsr_ss4.png" alt="" id="BLOGGER_PHOTO_ID_5402495295605886050" border="0" /&gt;&lt;/a&gt;I've been a bit busy lately, what with having a new baby son, but have somehow still found time between bottle feeds to write the final bits of code to Stellar Forces. &lt;br /&gt;&lt;br /&gt;I've just got a bit more testing to make sure it's robust, and then I'll announce it formally and let people loose on it.  I'm hoping that these beta-testers will be able to help me tweak the balance of the game.  With a game as complex as this (it's like multiplayer stand-alone missions from X-Com) there are so many variables (unit stats, weapon stats, mission objectives, map layouts) that it will take several games to get it right.&lt;br /&gt;&lt;br /&gt;The game also has it's own website which stores a history of everyone's games, so there will be league tables, stats pages, and I'll maybe even do proper competitions sometime.  The options are endless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6257627129268200280?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6257627129268200280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6257627129268200280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6257627129268200280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6257627129268200280'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/11/stellar-forces-almost-ready.html' title='Stellar Forces: Almost ready!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/SvmE2QNOzGI/AAAAAAAAAMg/PoGo00irPRM/s72-c/dsr_ss4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-9185735297655491752</id><published>2009-11-09T06:18:00.000-08:00</published><updated>2009-11-09T06:26:38.816-08:00</updated><title type='text'>Java: Forgetting to override .equals()</title><content type='html'>This one always catches me out.  I have a bunch of icons in my program, all extending the Rectangle class (seems like common sense to me).  However, I don't actually fill in the dimensions until I've got the full list of icons (stored in an ArrayList()) so they are all zero-sized rectangles.&lt;br /&gt;&lt;br /&gt;Before I add each icon to this list, I check whether it's already there:-&lt;br /&gt;&lt;br /&gt;public void addIcon(Icon icon) {&lt;br /&gt; if (iconlist.contains(icon) == false) {&lt;br /&gt;  iconlist.add(icon);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Have you spotted the problem?  Since the dimensions for the icons are all zero, and the contains() function uses the equals() method of the icon class, then once one icon is added to the list no others will be.  This is because the Icon/Rectangle class' equals() method compares the dimensions, and thus all my icons are actually equal, so it thinks that the icon list already contains the said icon.  (That all seems very verbose for what is quite a simple problem).&lt;br /&gt;&lt;br /&gt;Note to self:  Always override the equals() method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-9185735297655491752?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/9185735297655491752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=9185735297655491752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/9185735297655491752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/9185735297655491752'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/11/java-forgetting-to-override-equals.html' title='Java: Forgetting to override .equals()'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8610647893700539393</id><published>2009-10-22T02:36:00.000-07:00</published><updated>2009-10-22T02:38:53.686-07:00</updated><title type='text'>Links About Game Design That I Fully Intend To Read But Don't Currently Have The Time</title><content type='html'>http://critical-gaming.squarespace.com/blog/2009/7/7/for-the-scale-of-balance-pt4.html&lt;br /&gt;&lt;br /&gt;http://www.sirlin.net/articles/slippery-slope-and-perpetual-comeback.html&lt;br /&gt;&lt;br /&gt;http://blog.wolfire.com/2009/01/game-theory-applied-to-game-design/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8610647893700539393?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8610647893700539393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8610647893700539393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8610647893700539393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8610647893700539393'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/10/links-about-game-design-that-i-fully.html' title='Links About Game Design That I Fully Intend To Read But Don&apos;t Currently Have The Time'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2217498283692497732</id><published>2009-10-19T04:50:00.000-07:00</published><updated>2009-10-19T05:12:26.850-07:00</updated><title type='text'>The Spectrum Got There First!</title><content type='html'>Did it?  Well yes actually, it did.  You name the genre and you're pretty much guaranteed that the first game of that genre was available on the Spectrum (or maybe ZX81).  And here's a few examples to prove my point.&lt;br /&gt;&lt;br /&gt;Let's start with the biggy, probably the greatest breakthrough in gaming this century (or maybe the end of the last one).  I'm talking about &lt;a href="http://en.wikipedia.org/wiki/Grand_Theft_Auto_III"&gt;GTA3&lt;/a&gt; of course, what everyone thought was revolutionary.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTYqdXeMI/AAAAAAAAAL4/NCoyh99v8c0/s1600-h/gta3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 234px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTYqdXeMI/AAAAAAAAAL4/NCoyh99v8c0/s320/gta3.jpg" alt="" id="BLOGGER_PHOTO_ID_5394278136862439618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That is, apart from me.  I thought I was having a bout of terminal deja-vu when I saw it, and was nostalghically transported back to the mid 80's, when I was playing the classic &lt;a href="http://en.wikipedia.org/wiki/Turbo_Esprit"&gt;Turbo Esprit&lt;/a&gt;:-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/StxTgB7ahRI/AAAAAAAAAMQ/XtsylYe3u5Y/s1600-h/TurboEsprit.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 256px; height: 192px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/StxTgB7ahRI/AAAAAAAAAMQ/XtsylYe3u5Y/s320/TurboEsprit.gif" alt="" id="BLOGGER_PHOTO_ID_5394278263421568274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next, &lt;a href="http://en.wikipedia.org/wiki/Wolfenstein_3D"&gt;Wolfenstein&lt;/a&gt; is held up as the start of the FPS genre.  Frankly, I was hoping it was the end as I was already bored of FPS'ing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTgmkz2xI/AAAAAAAAAMY/Hcr1NV4vYd4/s1600-h/wolfenstein.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 224px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTgmkz2xI/AAAAAAAAAMY/Hcr1NV4vYd4/s320/wolfenstein.gif" alt="" id="BLOGGER_PHOTO_ID_5394278273258871570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The start for me was &lt;a href="http://en.wikipedia.org/wiki/3D_Monster_Maze"&gt;3D Monster Maze&lt;/a&gt;, almost 15 years (count'em!) earlier:-&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTXDRx4DI/AAAAAAAAALg/zP_34xU9b3c/s1600-h/3dmonstermaze.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 304px; height: 232px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTXDRx4DI/AAAAAAAAALg/zP_34xU9b3c/s320/3dmonstermaze.png" alt="" id="BLOGGER_PHOTO_ID_5394278109164986418" border="0" /&gt;&lt;/a&gt;Detractors will say "It didn't have any shooting in it!".  I reply "Well, that's pretty revolutionary in itself!".&lt;br /&gt;&lt;br /&gt;Just like Wolfenstein, &lt;a href="http://en.wikipedia.org/wiki/Dune_II"&gt;Dune II&lt;/a&gt; is held up as the first of the RTS genres.  (I've no idea what happened to Dune I).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTX_2evxI/AAAAAAAAALo/dsuj-2GLrgQ/s1600-h/dune2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTX_2evxI/AAAAAAAAALo/dsuj-2GLrgQ/s320/dune2.jpg" alt="" id="BLOGGER_PHOTO_ID_5394278125425049362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But RTS's had been around for years already - if you owned a Spectrum (and probably most of the other popular 8-bit machines).  However, &lt;a href="http://en.wikipedia.org/wiki/Stonkers"&gt;Stonkers&lt;/a&gt; came out on the Spectrum first, and for that reason we can gloat.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTf4Zi3xI/AAAAAAAAAMI/zJYL6oj7Thc/s1600-h/stonkers.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 180px; height: 135px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTf4Zi3xI/AAAAAAAAAMI/zJYL6oj7Thc/s320/stonkers.png" alt="" id="BLOGGER_PHOTO_ID_5394278260863590162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And before you ask, yes, it does have resource collecting!&lt;br /&gt;&lt;br /&gt;Last but not least is genre that never quite goes away, it's the top-down dungeon crawling game.  I could have included a picture of Diablo here, but let's be fair and show &lt;a href="http://en.wikipedia.org/wiki/Gauntlet_%28arcade_game%29"&gt;Gauntlet&lt;/a&gt;, what many people claim to be the first (apart from those who claim it was &lt;a href="http://en.wikipedia.org/wiki/Dandy_%28video_game%29"&gt;The Dandy&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/StxTYZS6VoI/AAAAAAAAALw/46y68HWXy4I/s1600-h/gauntlet2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 226px;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/StxTYZS6VoI/AAAAAAAAALw/46y68HWXy4I/s320/gauntlet2.jpg" alt="" id="BLOGGER_PHOTO_ID_5394278132255184514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course, both of those people are wrong.  The first game was &lt;a href="http://en.wikipedia.org/wiki/Maziacs"&gt;Maziacs&lt;/a&gt;, and it came out on the Spectrum first (as if you needed to ask).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTZNc5tFI/AAAAAAAAAMA/husmrvY6gzg/s1600-h/maziacs.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 256px; height: 192px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/StxTZNc5tFI/AAAAAAAAAMA/husmrvY6gzg/s320/maziacs.gif" alt="" id="BLOGGER_PHOTO_ID_5394278146255729746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So if you're a games programmer working for a large megacorporation with a massive marketing budget but precious few original ideas, why not plunder a few from the Speccy back-catologue and claim them as your own?&lt;br /&gt;&lt;br /&gt;If you can think of any more, please let me know and I'll do a "part 2" or something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2217498283692497732?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2217498283692497732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2217498283692497732' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2217498283692497732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2217498283692497732'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/10/spectrum-got-there-first.html' title='The Spectrum Got There First!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/StxTYqdXeMI/AAAAAAAAAL4/NCoyh99v8c0/s72-c/gta3.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2749858470180767207</id><published>2009-10-06T02:45:00.000-07:00</published><updated>2009-10-06T02:51:53.661-07:00</updated><title type='text'>Pushing the bounds of technology</title><content type='html'>Like all people, I wonder what will happen when I die.  And being a programmer, I came to the obvious conclusion: store my consciousness in a program that will live on in cyberspace in perpetuity!&lt;br /&gt;&lt;br /&gt;So, after literally minutes of messing about, may I present the "Me" applet:-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SssSPGwSmAI/AAAAAAAAALY/eOmWYjOP2pQ/s1600-h/busy.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 227px; height: 240px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SssSPGwSmAI/AAAAAAAAALY/eOmWYjOP2pQ/s320/busy.gif" alt="" id="BLOGGER_PHOTO_ID_5389421429799426050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now you will able to communicate with me forever through the power of Java.  Now if I can just hook it up to Blogger, I can keep writing blog entries long after they stop being funny!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2749858470180767207?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2749858470180767207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2749858470180767207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2749858470180767207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2749858470180767207'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/10/pushing-bounds-of-technology.html' title='Pushing the bounds of technology'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SssSPGwSmAI/AAAAAAAAALY/eOmWYjOP2pQ/s72-c/busy.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8587370734410394366</id><published>2009-10-05T01:26:00.000-07:00</published><updated>2009-10-05T01:45:58.602-07:00</updated><title type='text'>Tips on maintaining your own interest in your own project  (#1 in a series)</title><content type='html'>If you are sure that the game will be a good, entertaining game, then try to complete as much of the programming as possible before actually playing the game*.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(* This entirely contradicts my previous advice of "get the game up and running as soon as possible so you have something to play".  I've decided that once you have something to play, the remaining programming tasks consist of the boring tidying-up programming, which has very little reward since you already have a game to play.   My new advice is to keep programming all the little bits and pieces first.  In addition, doing it this way will mean your original vision will remain in your head, and not be replaced by interest-sapping the catastrophe with temporary-and-crap graphics that you have programmed**.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(** I hope this makes sense.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8587370734410394366?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8587370734410394366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8587370734410394366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8587370734410394366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8587370734410394366'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/10/tips-on-maintainging-your-own-interest.html' title='Tips on maintaining your own interest in your own project  (#1 in a series)'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3591308353359000250</id><published>2009-10-01T06:07:00.000-07:00</published><updated>2009-10-05T01:44:38.160-07:00</updated><title type='text'>3D is hard!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SsSrEUKIUEI/AAAAAAAAALQ/1OJ0tHn44aI/s1600-h/dsr8.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SsSrEUKIUEI/AAAAAAAAALQ/1OJ0tHn44aI/s200/dsr8.png" alt="" id="BLOGGER_PHOTO_ID_5387619144860979266" border="0" /&gt;&lt;/a&gt;During moments of niavity (sp?), I sometimes think that 3D should be easy and I'm just going about it the wrong way.  Surely it's just like 2D, except you have to adjust for depth as well?&lt;br /&gt;&lt;br /&gt;Unfortunately, it's nothing like as easy.  For a start, with 2D, all your co-ordinates have a common origin, usually the bottom left, and you can tell whereabouts a sprite is in relation to the origin.  With 3D, the origin could be anywhere, and usually each model seems to have it's own.  In addition, working out where the origin is can be difficult, since it depends on where your camera is and what direction it is looking in.&lt;br /&gt;&lt;br /&gt;You might have two 3D models, each facing zero degress (or radians, assuming you haven't got them mixed up again).  But one is facing one way and one another.  And their direction might change depending on the frame of animation they are in.&lt;br /&gt;&lt;br /&gt;And why can't I see anything?  Is the camera outside the scene looking outwards again?  Or is it looking directly down, which seems to cause problems and make everything disappear? Or are the objects slightly too far away to see?  Or maybe I need to add lighting to the scene.  And why is one model approximatly 3 million times bigger than the other?  Time to scale the models down a bit and then wteak their height so they are standing on the floor and not in it.&lt;br /&gt;&lt;br /&gt;And why does my model move whenever I move the camera?  Oh, I've forgotten that when I have a unit with a position of Vector vec, and I then do camera.setLocation(vec), it is using the same actual object (vec) for both the unit's location and the camera's location, so when one changes, so does the other.  Grrr!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3591308353359000250?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3591308353359000250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3591308353359000250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3591308353359000250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3591308353359000250'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/10/3d-is-hard.html' title='3D is hard!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SsSrEUKIUEI/AAAAAAAAALQ/1OJ0tHn44aI/s72-c/dsr8.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6186933031754451177</id><published>2009-09-28T05:13:00.000-07:00</published><updated>2009-09-28T05:56:01.053-07:00</updated><title type='text'>Potentially Useful Functions (#1 in a series)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cs.siue.edu/news/.images/2004/2004-11-06_ACM_Programming_Team_In_Action.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 198px; height: 186px;" src="http://www.cs.siue.edu/news/.images/2004/2004-11-06_ACM_Programming_Team_In_Action.jpg" alt="" border="0" /&gt;&lt;/a&gt;The original aim of this blog was for me to impart my knowledge of programming, or for people to point out bugs and problems with my code.  Either way, it was supposed to be about programming rather than subliminal advertising for my games.&lt;br /&gt;&lt;br /&gt;This post aims to correct that, so to get things started here's two nice small graphics function that someone somewhere may find useful:-&lt;br /&gt;&lt;br /&gt;This one rotates an image:-&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public static Image rotateImage(Image inputImage, float ang_deg,  ImageObserver ob) {&lt;br /&gt;  BufferedImage sourceBI = new BufferedImage(inputImage.getWidth(ob), inputImage.getHeight(ob), BufferedImage.TYPE_INT_ARGB);&lt;br /&gt;&lt;br /&gt;  Graphics2D g = (Graphics2D) sourceBI.getGraphics();&lt;br /&gt;  g.drawImage(inputImage, 0, 0, null);&lt;br /&gt;&lt;br /&gt;  AffineTransform at = new AffineTransform();&lt;br /&gt;&lt;br /&gt;  // rotate 45 degrees around image center&lt;br /&gt;  at.rotate(ang_deg * Math.PI / 180.0, sourceBI.getWidth()/2, sourceBI.getHeight()/2);&lt;br /&gt;&lt;br /&gt;  // instantiate and apply affine transformation filter&lt;br /&gt;  BufferedImageOp bio;&lt;br /&gt;  bio = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);&lt;br /&gt;&lt;br /&gt;  BufferedImage destinationBI = bio.filter(sourceBI, null);&lt;br /&gt;&lt;br /&gt;  return destinationBI;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;And this one scales an image&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public static Image scaleImage(Image inputImage, int w, int h,  ImageObserver ob) {&lt;br /&gt;  BufferedImage sourceBI = new BufferedImage(inputImage.getWidth(ob), inputImage.getHeight(ob), BufferedImage.TYPE_INT_ARGB);&lt;br /&gt;&lt;br /&gt;  Graphics2D g = (Graphics2D) sourceBI.getGraphics();&lt;br /&gt;  g.drawImage(inputImage, 0, 0, null);&lt;br /&gt;&lt;br /&gt;  AffineTransform at = new AffineTransform();&lt;br /&gt;&lt;br /&gt;  // scale image&lt;br /&gt;  float sx = (float)w / (float)inputImage.getWidth(ob);&lt;br /&gt;  float sy = (float)h / (float)inputImage.getHeight(ob);&lt;br /&gt;  //at.scale(w / inputImage.getWidth(ob), h / inputImage.getHeight(ob));&lt;br /&gt;  at.scale(sx, sy);&lt;br /&gt;&lt;br /&gt;  //at.rotate(45 * Math.PI / 180.0, sourceBI.getWidth()/2, sourceBI.getHeight()/2);&lt;br /&gt;&lt;br /&gt;  // instantiate and apply affine transformation filter&lt;br /&gt;  BufferedImageOp bio;&lt;br /&gt;  bio = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);&lt;br /&gt;&lt;br /&gt;  BufferedImage destinationBI = bio.filter(sourceBI, null);&lt;br /&gt;&lt;br /&gt;  return destinationBI;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Needless to say, if anyone knows a better way to do this, or just tweaks to the above code, please let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6186933031754451177?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6186933031754451177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6186933031754451177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6186933031754451177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6186933031754451177'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/potentially-useful-functions-1-in.html' title='Potentially Useful Functions (#1 in a series)'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7290909517563870571</id><published>2009-09-24T00:50:00.000-07:00</published><updated>2009-09-24T00:57:55.118-07:00</updated><title type='text'>A great idea, or maybe not</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.encoretheatremagazine.co.uk/wp-content/uploads/2007/05/national-lottery-logo.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 249px; height: 294px;" src="http://www.encoretheatremagazine.co.uk/wp-content/uploads/2007/05/national-lottery-logo.jpg" alt="" border="0" /&gt;&lt;/a&gt;"Woah!", I hear you say.  "Slow down young Steve.  With all this blogging, you're going to burst one of the tubes!".  However, I thought I'd mention a great idea I thought I had.  See if you can spot the flaw.&lt;br /&gt;&lt;br /&gt;I didn't watch Derren Brown pretend to predict the lottery, but his suggestion of using the &lt;a href="http://en.wikipedia.org/wiki/The_Wisdom_of_Crowds"&gt;Wisdom of the Crowds&lt;/a&gt; gave me an idea - why not create a website where people can enter their prediction for the numbers.  The website will then show the average of everyone's numbers, and people can use those numbers for their actual choices!&lt;br /&gt;&lt;br /&gt;Any mathematicians out there may spot the flaw sooner that the rest of us.  So let's save me lots of time and programming and all just choose the numbers 24, 24, 24, 24, 24 and 24.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7290909517563870571?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7290909517563870571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7290909517563870571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7290909517563870571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7290909517563870571'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/great-idea-or-maybe-not.html' title='A great idea, or maybe not'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6026954201274173806</id><published>2009-09-24T00:18:00.001-07:00</published><updated>2009-09-24T00:21:34.341-07:00</updated><title type='text'>Changed my mind</title><content type='html'>Instead of Interstellar Forces, I'm going to call it &lt;span style="font-weight: bold;"&gt;Stellar Forces&lt;/span&gt;.  Don't you go registering the domain you rascals!&lt;br /&gt;&lt;br /&gt;Here's a picture of the website to celebrate the change of name:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SrsdoaWh12I/AAAAAAAAALI/l3LnWdjv-ZY/s1600-h/dsr5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 166px; height: 200px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SrsdoaWh12I/AAAAAAAAALI/l3LnWdjv-ZY/s200/dsr5.png" alt="" id="BLOGGER_PHOTO_ID_5384930359557347170" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6026954201274173806?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6026954201274173806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6026954201274173806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6026954201274173806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6026954201274173806'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/changed-my-mind.html' title='Changed my mind'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SrsdoaWh12I/AAAAAAAAALI/l3LnWdjv-ZY/s72-c/dsr5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6658815594391362390</id><published>2009-09-23T05:32:00.000-07:00</published><updated>2009-09-23T05:43:32.443-07:00</updated><title type='text'>Announcing: Interstellar Forces</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SroVnYdyV6I/AAAAAAAAALA/t1DR6YdO2Ok/s1600-h/dsr4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 230px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SroVnYdyV6I/AAAAAAAAALA/t1DR6YdO2Ok/s320/dsr4.png" alt="" id="BLOGGER_PHOTO_ID_5384640070801315746" border="0" /&gt;&lt;/a&gt;I've finally though of a title!  "&lt;span style="font-weight: bold;"&gt;Interstellar Forces&lt;/span&gt;" - mark its name my friend as you will (hopefully) hear a lot more about it in the future.&lt;br /&gt;&lt;br /&gt;I've now nailed down the HUD, with its Terminator (as in Schwarzenegger) style text, and the Terminators (as in WH40k) for the models.  I might replace these from some of those in &lt;a href="http://ufoai.sourceforge.net/"&gt;UFO:AI&lt;/a&gt; though, as I think the licence allows this.&lt;br /&gt;&lt;br /&gt;One thing that crossed my mind now that I've got to the stage of a 3D applet is all the other possibilities that have opened up for this code; I could turn it into a 3D RTS like &lt;a href="http://en.wikipedia.org/wiki/StarCraft_II"&gt;Starcraft III&lt;/a&gt;, or write a &lt;a href="http://www.blizzard.com/diablo3/media/screenshots.xml"&gt;Diablo&lt;/a&gt; clone, or anything my evil mind might think up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6658815594391362390?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6658815594391362390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6658815594391362390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6658815594391362390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6658815594391362390'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/announcing-interstellar-forces.html' title='Announcing: Interstellar Forces'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SroVnYdyV6I/AAAAAAAAALA/t1DR6YdO2Ok/s72-c/dsr4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6948560071201756195</id><published>2009-09-21T05:13:00.000-07:00</published><updated>2009-09-21T05:28:08.982-07:00</updated><title type='text'>I'm getting that fimbly feeling</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/SrduR0IxnzI/AAAAAAAAAK4/kJzVgmrBlmc/s1600-h/dsr2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 350px; height: 270px;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/SrduR0IxnzI/AAAAAAAAAK4/kJzVgmrBlmc/s200/dsr2.png" alt="" id="BLOGGER_PHOTO_ID_5383893131876998962" border="0" /&gt;&lt;/a&gt;There comes a time in a project (especially the more ambitious kinds) where it suddenly seems like you've managed to overcome all the major hurdles, and it actually &lt;span style="font-style: italic;"&gt;will&lt;/span&gt; be possible to complete the game.  This is also usually combined with the stage at which the project starts to take shape and you have something nice to look at.  It's a great feeling, and it occurred to me when I produced the screenshot you see here, for my still un-named game.&lt;br /&gt;&lt;br /&gt;The only drawback is that it's usually soon after this point that there are no challenges left, and the rest of the programming is boring donkeywork with no payoff until the project is completed.  This is usually the stage where I lose interest and move to something else.  Not in this case though.&lt;br /&gt;&lt;br /&gt;Maybe it's because it's my favourite genre (squad-level turn-based strategy game) and I've got the inspiration of Laser Squad and LSN to look at, and it's going to be multi-player, but I feel like I'm going to see this one through to the end.  Then the challenge will be the hardest one yet - getting people to play it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6948560071201756195?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6948560071201756195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6948560071201756195' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6948560071201756195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6948560071201756195'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/im-getting-that-fimbly-feeling.html' title='I&apos;m getting that fimbly feeling'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pmTBatPrsbk/SrduR0IxnzI/AAAAAAAAAK4/kJzVgmrBlmc/s72-c/dsr2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4054515359942872222</id><published>2009-09-16T02:36:00.000-07:00</published><updated>2009-09-16T03:19:11.101-07:00</updated><title type='text'>My Magnum Opus</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SrC5ghuU6II/AAAAAAAAAKw/j9BliExrkCE/s1600-h/dsr.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 300px; height: 270px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SrC5ghuU6II/AAAAAAAAAKw/j9BliExrkCE/s200/dsr.png" alt="" id="BLOGGER_PHOTO_ID_5382005523167373442" border="0" /&gt;&lt;/a&gt;I've been a bit quiet on the blogging front lately, but there's a good reason: I've been working on my latest project, and I'm pretty excited about it.&lt;br /&gt;&lt;br /&gt;In a nutshell, it's &lt;a href="http://www.lasersquadnemesis.com/"&gt;Laser Squad Nemesis&lt;/a&gt; with &lt;a href="http://lasersquad.org/"&gt;Laser Squad&lt;/a&gt; Mechanics (i.e. properly turn-based rather than &lt;a href="http://en.wikipedia.org/wiki/Time-keeping_systems_in_games#Turn-based"&gt;We-Go&lt;/a&gt;).  I hope no-one groans at that, wondering why I'm just copying another game.  In my defence, AFAIK there is no open-source equivalent (or even closed-source).  The main reason I'm doing it is because my most enjoyable gaming session was playing Laser Squad all day against one of my friends.  It's a brilliant game, and never gets boring against a human opponent.&lt;br /&gt;&lt;br /&gt;It should be noted that I've never actually played LSN; the only aspect I am copying is the fact that you can request games and play them against other people, while a server keeps track of it all.  In addition, it's going to be a 3D applet (as the pre-alpha screenshot with the slightly broken z-order will testify) allowing the player to move their camera anywhere around the map.&lt;br /&gt;&lt;br /&gt;So, it will come with it's own web front-end which will allow people to request/join games, take their turn, post messages, update halls of fame etc...  Once a game has been accepted, players can equip and deploy their units and then take turns trying to fulfill their mission objectives.  Needless to say, there will be several different kinds of missions, each with it's own special units like robots, aliens or plain old space marines (obtaining good 3D models notwithstanding).&lt;br /&gt;&lt;br /&gt;This is a pretty ambitious project, incorporating a web server, 3D applets and networking, but if it will produce a game which allows me to play turn-based squad-level strategy games, then it's a task I'm looking forward to.  And suggestions for a name for this game are more than welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4054515359942872222?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4054515359942872222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4054515359942872222' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4054515359942872222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4054515359942872222'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/my-magnum-opus.html' title='My Magnum Opus'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/SrC5ghuU6II/AAAAAAAAAKw/j9BliExrkCE/s72-c/dsr.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1514710892538654941</id><published>2009-09-09T06:16:00.001-07:00</published><updated>2009-09-09T06:29:15.471-07:00</updated><title type='text'>In praise of Google Code</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/82/256622412_3279115264.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 123px;" src="http://farm1.static.flickr.com/82/256622412_3279115264.jpg" alt="" border="0" /&gt;&lt;/a&gt;I'm probably blogging a bit early about this as I've only been using it a few days and have yet to come across the world-destroying problem with it that everyone else except me knows about.  However, in those few days it's been great to me; all I wanted was somewhere to store my source code and large downloadable zips, and for that it's perfect.&lt;br /&gt;&lt;br /&gt;I used to use Sourceforge, but their website seems far too bloated and long-winded to do anything.  If you want to create a project, you have to go through approx 7 pages worth of options before finally submitting it, and waiting several days before they "approve it", like they should decide what software is allowed or not.  (Again, bear in mind that I've not even logged onto my Sourceforge account for several years now so it may have changed since).   If you want to upload a large file, you have to ftp it to their web server, and then select it (from a long list containging everyone else's files) and then fill in some dropdown boxes about it's version or package name or whatever.  Jeez, just accept the file with the name I've given it [already]!&lt;br /&gt;&lt;br /&gt;Compare this to Google Code - to create a project you give it a name, a short description, a long description  and blam - it's there ready for you to use.  Want to upload a file?  Just select it and upload it and it's there.&lt;br /&gt;&lt;br /&gt;At least Sourceforge Smorshforge have taken steps to ease the downloading of files.  You used to have to go to the download page, choose the package, choose the file, then choose the mirror, and then wonder if it's doing anything for 5 minutes.&lt;br /&gt;&lt;br /&gt;I just wish there was a way to remove my projects from Sourceforge.  And don't get me started on the number of projects at "Status: Planning"!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1514710892538654941?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1514710892538654941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1514710892538654941' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1514710892538654941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1514710892538654941'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/in-praise-of-google-code.html' title='In praise of Google Code'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/82/256622412_3279115264_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6818215165748443360</id><published>2009-09-08T05:57:00.000-07:00</published><updated>2009-09-08T06:05:33.850-07:00</updated><title type='text'>Concept Art</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fc04.deviantart.com/fs46/f/2009/206/4/7/Temp_Killzone_Concept_Art_by_Thought_Thinker.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 333px; height: 400px;" src="http://fc04.deviantart.com/fs46/f/2009/206/4/7/Temp_Killzone_Concept_Art_by_Thought_Thinker.jpg" alt="" border="0" /&gt;&lt;/a&gt;Concept art!?  Pah, who needs it.   It doesn't contribute anything directly to a project and just wastes the artists time.&lt;br /&gt;&lt;br /&gt;Or so I used to think.  However, I'm now coming round to the idea that it's a great way to engender interest and life into your programming project. &lt;br /&gt;&lt;br /&gt;It's very hard to empathise with pages of code or small sprites, but concept art creates the world in which your game exists - in a way that you can actually see, rather than the original vision in your head which slowly fades away or gets distorted as the project fleshes out.  The milieu is something that inspires people to continue working on a project long after the initial excitement has faded, and is a constant reminder of your projects original aim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6818215165748443360?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6818215165748443360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6818215165748443360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6818215165748443360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6818215165748443360'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/concept-art.html' title='Concept Art'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1640174089405643269</id><published>2009-09-03T06:10:00.000-07:00</published><updated>2009-09-03T06:13:51.728-07:00</updated><title type='text'>Blog in a Tweet Stylee</title><content type='html'>God I hate profiling!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1640174089405643269?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1640174089405643269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1640174089405643269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1640174089405643269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1640174089405643269'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/09/blog-in-tweet-stylee.html' title='Blog in a Tweet Stylee'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7524338883327930672</id><published>2009-08-27T06:50:00.000-07:00</published><updated>2009-08-27T07:14:05.204-07:00</updated><title type='text'>To Applet or not to Applet?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.programming.de/screenshots/java_drawing.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 250px; height: 170px;" src="http://www.programming.de/screenshots/java_drawing.gif" alt="" border="0" /&gt;&lt;/a&gt;Some free games require you to download the source code and compile it yourself.  Some require you to just download and install.  Others are just download, unzip and run.  However, by far the easiest are flash/applet web games, where you just point your browser at them and that's it - once the game has loaded you can play it straight away.&lt;br /&gt;&lt;br /&gt;However, maybe due to this simplicity, or maybe due to the fact that a lot of web games are simple in themselves, they are not treat with the same level of respect as games that require more work to start up.  It seems that the more effort you are prepared to expend to get a game working, the more time you are prepared to spend on it.&lt;br /&gt;&lt;br /&gt;(Taking this to the extreme, I find that when I play a lot of old Speccy games, of which I have many fond memories, I give them approximately 10 seconds of my time (since that's pretty much how long it takes to load it up nowadays) whereas in the past, when it took minutes, I'd play them for longer and give them far more of a chance.  Actually, I think I've just invented my own axiom: "&lt;span style="font-style: italic;"&gt;The time a player will spend playing an average game is directly related to how long it took to them to run it&lt;/span&gt;.".  You heard it here first!)&lt;br /&gt;&lt;br /&gt;Anyway, back to my point.  I've got a game called &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander2.cls"&gt;Island Commander&lt;/a&gt;, which is an applet, but is increasing in complexity.  However, because of the lack of "respect" that web games get, I'm tempted to turn it into a stand-alone game so that people will take it more seriously.  In addition, nothing is more galling than seeing comments by people about games written as applets, all saying how much they hate applets.&lt;br /&gt;&lt;br /&gt;Is it mercenary to make it harder for people to play the game in the hope that they will spend more time on it?  Maybe my whole premise is wrong, and flash/applet games get played far more than stand-alone games.  However, out of all the most popular free open-source games out there with large communities, I can't think of any that are web games.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7524338883327930672?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7524338883327930672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7524338883327930672' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7524338883327930672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7524338883327930672'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/to-applet-or-not-to-applet.html' title='To Applet or not to Applet?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7431764999181389211</id><published>2009-08-24T02:56:00.000-07:00</published><updated>2009-09-07T02:55:27.061-07:00</updated><title type='text'>Trawling My Own Archives (Part #2)</title><content type='html'>There are literally tens of directories in my newfound treasure-trove of old source code, and I'm slowly getting through them.  It's taking a bit longer than it should due to my old habit of sharing common (but now missing) libraries of source code between projects and using network drive letters that no longer exist.&lt;br /&gt;&lt;br /&gt;However, here are 3 more to whet your appetite for the good old days when games were simpler (so simple in fact, that even the author is struggling to find the point).&lt;br /&gt;&lt;br /&gt;The first game is one I originally called Floater, in an amusing play on the gameplay of Thrust-type games.  There's not a lot to this game at the moment - you float around in an Asteroids/Thrust kind of way and shoot some bullets, not that there are any baddies to shoot at yet.  If memory serves, I planned to make this a network version of Thrust or something, a bit like Gravity Force.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYObgo5XI/AAAAAAAAAKA/xD7wJgu701k/s1600-h/floater.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 250px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYObgo5XI/AAAAAAAAAKA/xD7wJgu701k/s200/floater.png" alt="" id="BLOGGER_PHOTO_ID_5378661597401638258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The next looks like some kind of puzzle game, though again I can't seem to work out what the actual game is supposed to be.  It's almost fun though, as you bounce a ball around lots of other balls, and kinetic energy is passed between them.  I think I wrote this on the assumption that some kind of game idea would magically appear once the mechanics are in place.  I'm still waiting...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYOwTKpBI/AAAAAAAAAKI/Bj8Oc0FexSw/s1600-h/bouncer2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 300px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYOwTKpBI/AAAAAAAAAKI/Bj8Oc0FexSw/s200/bouncer2.png" alt="" id="BLOGGER_PHOTO_ID_5378661602982274066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've saved the best until last - this one is actually quite good and almost complete, and has a point!  In a nutshell its a top-down shooter, a bit like GTA 1 but without the cars.  The "missions" (if they can be called that) are randomly selected, and range from killing a Terminator-like robot to killing a group of rioting vegans (I always like to include a bit of social commentary in my games).  I might actually release this one since it looks like I spent a fair bit of time on it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SqTYPml6q-I/AAAAAAAAAKQ/rHMDbOUZk34/s1600-h/citylife.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 260px;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SqTYPml6q-I/AAAAAAAAAKQ/rHMDbOUZk34/s200/citylife.png" alt="" id="BLOGGER_PHOTO_ID_5378661617556433890" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7431764999181389211?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7431764999181389211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7431764999181389211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7431764999181389211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7431764999181389211'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/trawling-my-own-archives-part-2.html' title='Trawling My Own Archives (Part #2)'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYObgo5XI/AAAAAAAAAKA/xD7wJgu701k/s72-c/floater.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8566018955243452364</id><published>2009-08-21T05:40:00.000-07:00</published><updated>2009-08-21T06:07:35.453-07:00</updated><title type='text'>Cheating AI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www3.ntu.edu.sg/home2006/CHUA0308/doucmentation2_clip_image0054.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 249px; height: 321px;" src="http://www3.ntu.edu.sg/home2006/CHUA0308/doucmentation2_clip_image0054.jpg" alt="" border="0" /&gt;&lt;/a&gt;While writing &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt;, the temptation has always been to allow the AI to cheat, as this would make it so much easier to write.&lt;br /&gt;&lt;br /&gt;A programmer has only two options when writing an AI if they want to make a challenging game: allow it to cheat, or to analyse the game so much that they can break down the "secret" of winning into something like a flowchart, where every situation is covered and has an appropriate response.&lt;br /&gt;&lt;br /&gt;Needless to say, this is no easy option for anything above the simplest of games (can you imagine something like this for chess?).  In addition, every time a change is made to the game, or a feature added, the whole "flowchart" (and thus the AI code) needs to be changed. &lt;br /&gt;&lt;br /&gt;However, this is the only option, since if any situation is not covered, the human players will quickly identify it and take advantage of it, and from that point on, the AI is no competition.  &lt;a href="http://forum.freegamedev.net/index.php?t=rview&amp;amp;goto=21600#msg_21600"&gt;Something I have been told several times&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8566018955243452364?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8566018955243452364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8566018955243452364' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8566018955243452364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8566018955243452364'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/cheating-ai.html' title='Cheating AI'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2240290732781736987</id><published>2009-08-18T04:57:00.000-07:00</published><updated>2009-09-07T02:56:48.457-07:00</updated><title type='text'>Trawling My Own Archives</title><content type='html'>I came across a directory in the depths of my computer's filesystem the other day, which had old programs that I wrote when I was first learning Java.  It was a nostalgic experience, but needless to say, none of the programs lived up to their epic names, and most were good examples of brevity of code; there were utilities like "MailingList", which was a one-class Java program that read a text file and emailed it to a hard-coded list of addresses.  Also "AutoRunSQL" would basically run a hard-coded line of SQL at regular intervals (why you would want to do this is left for the reader to guess).  There was also something called "CommerceNet", which preceeded Ebay and was intended to be a protocol for buying and selling, which would have changed the world if anyone else had known about it.&lt;br /&gt;&lt;br /&gt;However the programs were mostly games, which should come as no surprise.  The first I came across is called "Mr Do".  It shows how long ago I wrote it because I'd even forgotton there was an old game called Mr Do, and this is a simple but quite playable copy of it:-&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYr5MO4WI/AAAAAAAAAKY/zWWhuWeDITc/s1600-h/mrdo_ss.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 270px; height: 270px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYr5MO4WI/AAAAAAAAAKY/zWWhuWeDITc/s320/mrdo_ss.png" alt="" id="BLOGGER_PHOTO_ID_5378662103585317218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There was also another arcade clone, this time Bombjack.  It looks like I lost interest in this before I'd ripped all the sprites I was needed, so the player and the enemies are all squares.  However, the game seems to be all there, even down to "vibrating" bombs.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SqTYsWZboPI/AAAAAAAAAKg/munRmn3yBH0/s1600-h/bombjack_ss.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SqTYsWZboPI/AAAAAAAAAKg/munRmn3yBH0/s320/bombjack_ss.png" alt="" id="BLOGGER_PHOTO_ID_5378662111425306866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, what looks like a homage to old ZX Spectrum games from the early 80's, is something called "Roadster" which I have no recollection of, but that's hardly surprising since it looks like I spent a grand total of 8 minutes writing it.  I've no idea what's even going on.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/SqTYs21Ah4I/AAAAAAAAAKo/xncEYflHd-c/s1600-h/monorail_ss.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 200px;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/SqTYs21Ah4I/AAAAAAAAAKo/xncEYflHd-c/s320/monorail_ss.png" alt="" id="BLOGGER_PHOTO_ID_5378662120130905986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, strangely, this game has given me some insperation for my next project, which will be based around laying down train lines.  Nothing so complicated as Railroad Tycoon, but more of a casual puzzle game.&lt;br /&gt;&lt;br /&gt;Look out for more programming gems coming soon!  And if anyone actually wants any source code, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2240290732781736987?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2240290732781736987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2240290732781736987' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2240290732781736987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2240290732781736987'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/trawling-my-own-archives.html' title='Trawling My Own Archives'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SqTYr5MO4WI/AAAAAAAAAKY/zWWhuWeDITc/s72-c/mrdo_ss.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1637944801793846391</id><published>2009-08-13T04:58:00.000-07:00</published><updated>2009-08-13T05:11:16.791-07:00</updated><title type='text'>Blindingly Obvious Programming Tips #3</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.dotkam.com/wp-content/uploadhere/2008/11/zx-sinclair-basic.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 208px;" src="http://blog.dotkam.com/wp-content/uploadhere/2008/11/zx-sinclair-basic.png" alt="" border="0" /&gt;&lt;/a&gt;I've not implemented this tip myself yet, since I've only just had the idea, but I thought I'd commit it to screen before it disappears from my head.&lt;br /&gt;&lt;br /&gt;One of my peeves about programming are function calls with long lists of esoteric parameters.  Stuff like "&lt;span style="font-weight: bold;"&gt;sprite.draw(10, 12, true, true, false, true);&lt;/span&gt;".  Unless you can memorised the order and meaning of each of the parameters, you have no idea what that function call is going to do exactly.  Multiply that by the number of functions in a typical program, and you realise that a solution is needed.&lt;br /&gt;&lt;br /&gt;Some languages can get round this and have named parameters.  I don't believe Java has those yet; the closest we have is javadoc annotations.  However, my solution is pretty simple: create "constants" (or as close as Java will allow) with meaningful names that are simple booleans.  Then the above function call can be re-written as&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sprite.draw(10, 12, B_COLLIDES, B_FOREGROUND, B_HAS_HALO, B_FLICKER_SLIGHTLY);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Much more understandable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1637944801793846391?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1637944801793846391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1637944801793846391' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1637944801793846391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1637944801793846391'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/blindingly-obvious-programming-tips-3.html' title='Blindingly Obvious Programming Tips #3'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1014627064540146082</id><published>2009-08-11T03:58:00.000-07:00</published><updated>2009-08-12T00:44:37.396-07:00</updated><title type='text'>Some programmers shoot us all in the foot</title><content type='html'>I really like Linux, and use it whenever I can for work and home systems.  However, every so often something happens which makes you wonder which side the programmers of Linux software are on.&lt;br /&gt;&lt;br /&gt;The latest problem is to do with Remote Desktop in Ubuntu 9.04 - Jaunty Jackalope.  I've been using Remote Desktop quite happily for a few years on earlier versions of Ubuntu, but now I've upgraded, it seems to have a problem - the "Advanced" tab is missing.  This means I can't choose the port number, along with various other settings.&lt;br /&gt;&lt;br /&gt;A quick Google later, I discover &lt;a href="https://bugs.launchpad.net/ubuntu/+source/vino/+bug/196675/comments/14"&gt;this gem&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;And yes, I've removed the 'advanced' tab. 'Advanced' users know to how use gconf-editor to tunning applications. The advanced tab was a mistake I made. Blame me.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;What?&lt;/span&gt;  "&lt;span style="font-style: italic;"&gt;'Advanced' users know to how use gconf-editor&lt;/span&gt;"?  I like to consider myself an advanced user, but I've only used gconf once, and I always have to remind myself how to get to it.  But how am I supposed to know that I even need to use gconf?  And where in gconf (which is the equivalent of RegEdit) are the settings I need?&lt;br /&gt;&lt;br /&gt;And how on earth can regular users be recommended to use Ubuntu with arrogance like this?  It's like we want to build a wall between us and the kind of people we need to bring on board if Linux is ever to get into the mainstream.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1014627064540146082?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1014627064540146082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1014627064540146082' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1014627064540146082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1014627064540146082'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/some-programmers-shoot-us-all-in-foot.html' title='Some programmers shoot us all in the foot'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5846545333980998008</id><published>2009-08-05T08:29:00.000-07:00</published><updated>2009-08-05T08:37:48.747-07:00</updated><title type='text'>Java/Ubuntu Graphics Problem</title><content type='html'>I do most of my development on a Windows box (even though I dislike Windows and much prefer Ubuntu) so I've not noticed this problem before, but it seems that &lt;a href="https://bugs.launchpad.net/ubuntu/+source/sun-java6/+bug/250931"&gt;Java software that uses non-OpenGL graphics runs like a dog on versions &gt;= 8.04 of Ubuntu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One thing I like about Java is that it generally runs identically on most platforms, but sometimes something comes along which stops that "feature" dead in its tracks.  The &lt;a href="http://www.mail-archive.com/java-linux@java.blackdown.org/msg05454.html"&gt;KeyPressed/KeyReleased bug&lt;/a&gt; was one of these, meaning I had to write special code get around it.  If you don't test software on all the platforms, you won't know about these issues (as I am finding).&lt;br /&gt;&lt;br /&gt;I've only got two Ubuntu boxes to test on, and one of these is a VM (which can add its own set of problems), so I'd be interested if anyone else experiences this.  And I'd really like to hear from anyone who has a solution!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5846545333980998008?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5846545333980998008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5846545333980998008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5846545333980998008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5846545333980998008'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/javaubuntu-graphics-problem.html' title='Java/Ubuntu Graphics Problem'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3589728036231959966</id><published>2009-08-03T06:36:00.000-07:00</published><updated>2009-08-03T06:54:15.387-07:00</updated><title type='text'>Metal Glove Solid Update</title><content type='html'>Now I've improved the performance of &lt;a href="http://onlinegameplanner.no-ip.org/games/metalglovesolid.cls"&gt;Metal Glove Solid&lt;/a&gt;, I've turned my attention to the average graphics.  &lt;a href="http://forum.freegamedev.net/index.php?t=msg&amp;amp;th=730&amp;amp;start=0&amp;amp;S=5b95ac53ed3f4ad762c2f1cfaaa9cc1e"&gt;This thread&lt;/a&gt; on the Freegamer forums (about another stalled Gauntlet-remake) contains some useful walls.  I've grabbed these and stuck them in MGS, and this is the result:-&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/Snbq8XFSQYI/AAAAAAAAAJ4/n5jo_SDzUrc/s1600-h/msg_new_walls.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 400px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/Snbq8XFSQYI/AAAAAAAAAJ4/n5jo_SDzUrc/s200/msg_new_walls.png" alt="" id="BLOGGER_PHOTO_ID_5365734328767758722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pretty basic, huh?  True, but it's the first version, and I'm combining the change in graphics with a new map generator, rather than rely on designing my own maps.  Here we see two rooms joined by a corridor.  Procedurally generated content is the future; this is it in it's most basic form, but even this can provide a million different styles of dungeon, so no two games will be the same.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3589728036231959966?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3589728036231959966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3589728036231959966' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3589728036231959966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3589728036231959966'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/08/metal-glove-solid-update.html' title='Metal Glove Solid Update'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/Snbq8XFSQYI/AAAAAAAAAJ4/n5jo_SDzUrc/s72-c/msg_new_walls.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3016583635243969661</id><published>2009-07-31T00:44:00.000-07:00</published><updated>2009-07-31T01:01:32.746-07:00</updated><title type='text'>I've been Freegamer'd!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/5/54/Bandwidth.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 260px; height: 200px;" src="http://upload.wikimedia.org/wikipedia/commons/5/54/Bandwidth.png" alt="" border="0" /&gt;&lt;/a&gt;Fame and fortune comes with its downside, as I can now testify (well, for fame anyway - fortune may have provided a solution).  I, up until a few hours ago, hosted most of my web pages and all my download files on my home server, which suited me well since I had direct access to it and don't need to faff around to make files available.&lt;br /&gt;&lt;br /&gt;Unfortunately, the only option my crappy ISP (aren't they all?) has for unlimited upload/download allowance is countered by a maximum speed of 0.5mbps.  This never used to be a major issue, until I got &lt;a href="http://freegamer.blogspot.com/2009/07/interview-stephen-carlyle-smith-aka.html"&gt;Freegamer'd&lt;/a&gt;.  The interview on Freegamer, with it's myriad of links to all my games (most stored on my server) has caused a bit of a bottleneck, much to some people's (and my own) &lt;a href="http://happypenguin.org/show?Xenogeddon"&gt;understandable annoyance&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, I've now fixed it.  I'm hosting the larger files on HyperFileShare, which seems pretty good.  I've not fixed all the links across all my pages, but in the meantime here are the best download links:-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.hyperfileshare.com/download.php?code=a6e1953b"&gt;Xenogeddon&lt;/a&gt; | &lt;a href="http://download.hyperfileshare.com/download.php?code=5f698376&amp;amp;sid=530ac8d5&amp;amp;s=2"&gt;Laser Tactics&lt;/a&gt; | &lt;a href="http://download.hyperfileshare.com/download.php?code=c63f5ef4"&gt;HoloRacer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3016583635243969661?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3016583635243969661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3016583635243969661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3016583635243969661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3016583635243969661'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/ive-been-freegamerd_31.html' title='I&apos;ve been Freegamer&apos;d!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5394578312283209596</id><published>2009-07-30T01:09:00.000-07:00</published><updated>2009-07-30T11:10:52.472-07:00</updated><title type='text'>Revisiting My Old Projects</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://onlinegameplanner.no-ip.org/freegames/metalglovesolid/mgs_wesnoth.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 320px;" src="http://onlinegameplanner.no-ip.org/freegames/metalglovesolid/mgs_wesnoth.png" alt="" border="0" /&gt;&lt;/a&gt;Going back to an old unfinished game project can usually end up one of two ways - you're quite impressed with the way the game is, or you're imagination has been playing tricks on you and you wonder what on earth you were doing when programming it, since you weren't concentrating on the game.  I had both these feelings the other day:&lt;br /&gt;&lt;br /&gt;I went back to a couple of my old games, in order to remind me of them for my &lt;a href="http://freegamer.blogspot.com/2009/07/interview-stephen-carlyle-smith-aka.html"&gt;Freegamer Interview&lt;/a&gt;.  The first was &lt;a href="http://onlinegameplanner.no-ip.org/games/dangerman.cls"&gt;DangerMan&lt;/a&gt;, a platformer with weapons.  And I was (IMHO) quite impressed - the gameplay was solid, there were no glaring bugs, and it moved at a reasonable speed.&lt;br /&gt;&lt;br /&gt;Then I took a look at &lt;a href="http://onlinegameplanner.no-ip.org/games/metalglovesolid.cls"&gt;Metal Glove Solid&lt;/a&gt;, my Gauntlet remake (which will have additional features later).  Oh dear, it wasn't very good.  It was dog-slow and the collision detection left a lot to be desired.  How come I don't remember it being like that?  It's time for some emergency programming!&lt;br /&gt;&lt;br /&gt;The problem seemed to be my method for storing sprites.  Gauntlet is famous for having a lot of sprites on the screen at once, and I needed an efficient way of keeping track of them for processing and collision detection.  Usually in my games I just store them in a long list, but this can be quite slow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webster.cs.ucr.edu/AoA/Windows/HTML/images/Arrays6.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 275px; height: 202px;" src="http://webster.cs.ucr.edu/AoA/Windows/HTML/images/Arrays6.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My method was to have two two-dimensional arrays - one for storing each sprite at it's mapsquare co-ordinate (so drawing would be efficient as I could easily identify which sprites needed to be drawn, based on the area of map that was being shown on-screen), and one storing each sprite at each mapsquare co-ordinate that the sprite was covering - this would improve collision detection since I could easily identify all the sprites that shared the same mapsquare with the sprite I was testing for collisions.&lt;br /&gt;&lt;br /&gt;Both of these methods seem sound, but the drawback is that every time a sprite moves, it needs removing and re-adding it to both arrays.  This is what takes a long time.  My not-so-difficult solution was to get rid of the first array and simply store the sprites in a tried-and-tested list.  Performance is much improved, and the latest version (1.1) can be &lt;a href="http://onlinegameplanner.no-ip.org/freegames/metalglovesolid/downloads"&gt;downloaded here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5394578312283209596?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5394578312283209596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5394578312283209596' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5394578312283209596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5394578312283209596'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/revisiting-my-old-projects.html' title='Revisiting My Old Projects'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3774963495872693497</id><published>2009-07-28T07:42:00.000-07:00</published><updated>2009-07-28T07:54:28.979-07:00</updated><title type='text'>New Forums</title><content type='html'>Thanks to Charles at &lt;a href="http://freegamer.blogspot.com/"&gt;Freegamer&lt;/a&gt;, I now have my own &lt;a href="http://forum.freegamedev.net/index.php?t=thread&amp;amp;frm_id=51"&gt;Forum at FreeGameDev&lt;/a&gt;.  Please feel free to use them (or the comments section of this blog) to inform me of how my games could be improved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3774963495872693497?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3774963495872693497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3774963495872693497' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3774963495872693497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3774963495872693497'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/new-forums.html' title='New Forums'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3965089248198319928</id><published>2009-07-23T05:37:00.000-07:00</published><updated>2009-07-23T08:43:02.102-07:00</updated><title type='text'>IC: Tweaking the AI and Game Mechanics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SmheWIauakI/AAAAAAAAAJo/hoCKlZwx2yQ/s1600-h/minerals3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 128px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SmheWIauakI/AAAAAAAAAJo/hoCKlZwx2yQ/s320/minerals3.png" alt="" id="BLOGGER_PHOTO_ID_5361639090694285890" border="0" /&gt;&lt;/a&gt;As well as improving the graphics of &lt;a href="http://www.onlinegameplanner.com/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt;, most of my time has been spent tweaking the AI.  This involves playing the game and employing one of 3 basic tactics: build mines and wait for the AI to attack me; rushing the AI; and thirdly something between the two (build quite a few mines and then attack).&lt;br /&gt;&lt;br /&gt;After playing it a few times, you begin to notice pitfalls that the AI falls into.  For example, it doesn't keep any "reserve" cash, so when it gets attacked, it takes it longer to raise enough money for a defence.  This has now been implemented.  Also, it never builds any defences before it is actually attacked.  I've still yet to add this.&lt;br /&gt;&lt;br /&gt;There's also a few tricks that it can use that a human player would; for example, units are far more effective in pairs (or more) since they can get twice as much firepower out, destroying targets much faster.  I've now implemented this.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SmhesWpkWFI/AAAAAAAAAJw/jUXfnVCrGe0/s1600-h/mine0.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 96px; height: 96px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SmhesWpkWFI/AAAAAAAAAJw/jUXfnVCrGe0/s320/mine0.png" alt="" id="BLOGGER_PHOTO_ID_5361639472471758930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've also tweaked the balance a bit by adjusting various unit's stats; in particular, mines were a bit weak, meaning that the first player to attack usually managed to decimate the opponents buildings (causing the &lt;a href="http://www.sirlin.net/articles/slippery-slope-and-perpetual-comeback.html"&gt;slippery slope effect&lt;/a&gt;).  I've also reduced the amount of money that mines give, meaning that if a side does have less mines, they're not necessarily losing out on much more money than their opponent.&lt;br /&gt;&lt;br /&gt;Thanks to all who have contacted me with problems and suggestions.  It has made my job a lot easier!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3965089248198319928?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3965089248198319928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3965089248198319928' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3965089248198319928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3965089248198319928'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/ic-tweaking-ai-and-game-mechanics.html' title='IC: Tweaking the AI and Game Mechanics'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/SmheWIauakI/AAAAAAAAAJo/hoCKlZwx2yQ/s72-c/minerals3.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2889223809502575449</id><published>2009-07-20T07:19:00.000-07:00</published><updated>2009-07-23T05:38:37.158-07:00</updated><title type='text'>Island Commander: New Graphics!</title><content type='html'>Yeah so I'm like "woah!", and everyone else is like "yeah, whatever", and I'm like "okay, I'll redo the graphics then."  Praise the lord for GPL and other great licences that let people like me have decent graphics in their game with no legal hang-ups.  Here's a screenshot of &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt; with its new look:-&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SmR92VYNLWI/AAAAAAAAAJU/XHr6oSJHO-Y/s1600-h/ic_ss2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 400px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SmR92VYNLWI/AAAAAAAAAJU/XHr6oSJHO-Y/s200/ic_ss2.jpg" alt="" id="BLOGGER_PHOTO_ID_5360547828882812258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;At a distance it's quite blurry and doesn't look that different; you'll probably have to click on the picture to see the new graphics (or even just [Ultimate] play the game).  For those who are curious, the new units are taken from &lt;a href="http://www.boswars.org/"&gt;Bos Wars&lt;/a&gt; and &lt;a href="http://www.freeorion.org/"&gt;FreeOrion&lt;/a&gt;, which both have great graphics and permissive licences.&lt;br /&gt;&lt;br /&gt;I've also taken the opportunity to tweak the AI.  However, this change in graphics is just the first stage of a new aspect of "&lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;IC&lt;/a&gt;": factions.  The player will be able to choose from various armies, each of which will have special unique skills and abilities.  This will increase the AI complicatedness factor to about a million percent and also undo all the good work in balancing that I have done, but I think it's necessary to keep the game interesting.  Suggestions for funky faction names are more than welcome - and full credit will of course be given!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2889223809502575449?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2889223809502575449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2889223809502575449' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2889223809502575449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2889223809502575449'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/island-commander-new-graphics.html' title='Island Commander: New Graphics!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/SmR92VYNLWI/AAAAAAAAAJU/XHr6oSJHO-Y/s72-c/ic_ss2.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6634699240118332244</id><published>2009-07-14T04:48:00.000-07:00</published><updated>2009-07-22T02:27:20.607-07:00</updated><title type='text'>Island Commander AI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://spacesuityoga.files.wordpress.com/2008/11/brain-763982-1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://spacesuityoga.files.wordpress.com/2008/11/brain-763982-1.jpg" alt="" border="0" /&gt;&lt;/a&gt;I've received a total of zero emails asking me about how I implemented the AI in &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt;, but screw you lot, I'm going to talk about it anyway.&lt;br /&gt;&lt;br /&gt;This is all probably exceedingly simple to anyone's who written any kind of strategy game AI, but the enemy works in this way: every so often, it scans the map for the players units.  It then gives each square a threat point value, based on the unit type (the meaner the unit, the higher the points) and how far away the square is.  It then totals up all the points for each square, and then finally takes the square with the highest points &lt;span style="font-weight: bold;"&gt;of which the AI owns&lt;/span&gt;.  This square is where the AI will build its next attacking unit (if there is actually any threat to that square).&lt;br /&gt;&lt;br /&gt;Of course, this may not be the case.  There may be no threat whatsoever, and in fact there may be some juicy enemy mines to destroy.  If this is the case, the AI does the same thing as above, except instead of looking for threats, it looks for targets.  If there are within range, it will launch an attack on them.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/Slxz87CDL_I/AAAAAAAAAJM/m3QuY30Y2OE/s1600-h/threat_map.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 186px; height: 200px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/Slxz87CDL_I/AAAAAAAAAJM/m3QuY30Y2OE/s200/threat_map.png" alt="" id="BLOGGER_PHOTO_ID_5358285147139682290" border="0" /&gt;&lt;/a&gt;Incidentally, you can see this in action by pressing T (to see the "threat map") or Y (to see the "target map") when playing the game.  There are a few other nuances, like the fact then if the AI is attacking, it will sometimes build 2 or more units since they have more chance of surviving.  It will also choose certain units for certain roles, like defending or attacking.  But in a nutshell, that's it.&lt;br /&gt;&lt;br /&gt;The next step is to implement different "personalities" of AI, one of which is chosen at random at the start - a defensive one, an aggressive one, and maybe a mad one that does random things.  I may even get them to shout sarcastic remarks at the player via the console.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6634699240118332244?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6634699240118332244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6634699240118332244' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6634699240118332244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6634699240118332244'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/island-commander-ai.html' title='Island Commander AI'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/Slxz87CDL_I/AAAAAAAAAJM/m3QuY30Y2OE/s72-c/threat_map.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6965694756884672951</id><published>2009-07-10T07:49:00.000-07:00</published><updated>2009-07-22T02:28:10.744-07:00</updated><title type='text'>Island Commander Released!</title><content type='html'>&lt;table align="right" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.uploadthis.co.uk/uploads/Under_ware/tank%20vs%20rocket%20dudes.jpg"&gt;&lt;br /&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 204px;" src="http://www.uploadthis.co.uk/uploads/Under_ware/tank%20vs%20rocket%20dudes.jpg" alt="How I imagined the game in my head" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;center&gt;&lt;sup&gt;This is NOT what the game looks like,&lt;br /&gt;but may do if I have enough time&lt;/sup&gt;&lt;/center&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;One thing I remember reading on Joel Spolsky's blog something about "don't alienate your audience by releasing buggy software too early" (or something along those lines).  I've always been curious how this works with the open-source mantra of "release early, release often", but I'll save that discussion for another day.&lt;br /&gt;&lt;br /&gt;Anyway, with that in mind, I'm using the Google trick of making it beta, so if there are any bugs I can easily explain them away.  I haven't actually found any, and the last fews days has been spent balancing the game and improving the AI, which plays a mean game.&lt;br /&gt;&lt;br /&gt;Talking about the AI, I'd appreciate if someone else could give me feedback.  I think it's getting easier to beat, but that might be because I am so awesome (and have had lots of practise since I've played it about a gazillion times).&lt;br /&gt;&lt;br /&gt;So anyway, the &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt; can be played!  Point your browser to &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;http://onlinegameplanner.no-ip.org/games/islandcommander.cls&lt;/a&gt; and strap yourself down.  All feedback welcome, of course.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6965694756884672951?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6965694756884672951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6965694756884672951' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6965694756884672951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6965694756884672951'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/island-commander-released.html' title='Island Commander Released!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1389476733925940115</id><published>2009-07-08T01:37:00.000-07:00</published><updated>2009-07-22T02:28:39.869-07:00</updated><title type='text'>RTS Theory?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.armyrecognition.com/images/stories/east_europe/russia/missile_vehicle/rs-24/pictures/RS-24_multiple_warhead_missile_system_Russian_Army_Russia_002.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;" src="http://www.armyrecognition.com/images/stories/east_europe/russia/missile_vehicle/rs-24/pictures/RS-24_multiple_warhead_missile_system_Russian_Army_Russia_002.jpg" alt="" border="0" /&gt;&lt;/a&gt;I've reached that stage in &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;my new RTS game&lt;/a&gt; where all the main programming is done (apart from all the boring bits like a start and end, and changing the UI so someone other than myself knows what to do) and it's now down to tweaking the mechanics.&lt;br /&gt;&lt;br /&gt;I used to look forward to this bit, but with something like my (albeit very simple) RTS, there are so many variables that I feel like a need some read some kind of book on RTS theory.  There are (only!) 4 different kinds of unit.  Each one has a cost, movement speed, a view range (how far they can spot enemy units), a shot range, a shot power, a "health" rating (how much damage they can widthstand), and finally a threat rating (for the AI).  And I'm sure this is very simple compared to most RTS's.  Then there are other factors, like how much to increment the players cash based on how many mines they have.&lt;br /&gt;&lt;br /&gt;Most people hold up Starcraft as a prefectly balanced games, and I want to know how they did it.  With all these hundreds of variables, did they just play the game several trillion times, each time tweaking it like "that unit is a but powerful, let's reduce its firepower".  Or do you increase the other unit's firepower to compensate?&lt;br /&gt;&lt;br /&gt;Questions questions questions.  The main problem at the moment is that &lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt; is an "arms race" game, except instead of arms, it's mines.  If you don't build as many mines as possible as quickly as possible, the enemy will soon overrun you.  How does Starcraft (or any other RTS) avoid this problem?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1389476733925940115?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1389476733925940115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1389476733925940115' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1389476733925940115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1389476733925940115'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/rts-theory.html' title='RTS Theory?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4944652186703882884</id><published>2009-07-07T03:17:00.000-07:00</published><updated>2009-07-22T02:29:12.887-07:00</updated><title type='text'>New Project: Island Commander</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://amigareviews.classicgaming.gamespy.com/pic/archipelagos-b.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://amigareviews.classicgaming.gamespy.com/pic/archipelagos-b.png" alt="" border="0" /&gt;&lt;/a&gt;I always like to give my projects a name that reminds me what the hell my original idea was that I started with, since it's easy for them to transmogrify into something else, I lose the initial inspiration, get bored and go onto something else.  This happens a lot.  My new game  is called "&lt;a href="http://onlinegameplanner.no-ip.org/games/islandcommander.cls"&gt;Island Commander&lt;/a&gt;" for this reason, and should serve to remind me what my original vision was.&lt;br /&gt;&lt;br /&gt;I was browsing t'interweb and came across a page for &lt;a href="http://en.wikipedia.org/wiki/Carrier_Command"&gt;Carrier Command&lt;/a&gt;, a game I haven't played for years, and is long due for one of my legendary "remakes".  It also reminded me of another Amiga game called Archipelago, which I've never played but always admired the screenshots for their simple 3D graphics.&lt;br /&gt;&lt;br /&gt;I can't remember the exact thought processes I went through to get to where I am today, but I always wanted to write a strategy/wargame thingie that involved units being controlled by AI, so you were more of a commander rather than directly controlling every unit.  The result is this simple RTS, where you simply choose where to start the units (whether it's a mine for the obligatory resource gathering or a jet fighter) and then the unit goes of and does what it thinks is best.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SlMhMVjJEqI/AAAAAAAAAJE/R2fIGs1MhT4/s1600-h/ic_ss1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 298px; height: 320px;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SlMhMVjJEqI/AAAAAAAAAJE/R2fIGs1MhT4/s320/ic_ss1.png" alt="" id="BLOGGER_PHOTO_ID_5355660877700338338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;No prizes for guessing where the sprites came from. And you'll notice it's &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; 3D, but that will come, maybe.  And I've not implemeted "islands" yet.  I'm still tweaking the opponents AI, but rest assured, if I manage to finish it, this will be the new Starcraft!  Most importantly, I actually enjoy playing it so this one could run...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4944652186703882884?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4944652186703882884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4944652186703882884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4944652186703882884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4944652186703882884'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/07/new-project-island-commander.html' title='New Project: Island Commander'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SlMhMVjJEqI/AAAAAAAAAJE/R2fIGs1MhT4/s72-c/ic_ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8934063881464121671</id><published>2009-06-26T00:42:00.000-07:00</published><updated>2009-06-26T00:57:07.096-07:00</updated><title type='text'>Another "Almost" Game</title><content type='html'>I had another idea for a game which I've started and now stopped for the usual reason.  Originally, I was going to write a 3D FPS that doesn't use models, since it is a massive ball-ache trying to find appropriate models on t'internet.  Instead, I thought about just using basic shapes or something, but because they are basic I can make them more animated: moving platforms, floors that go up and down, walkways that extends and then retract, you get the idea.  Actually, writing about it now makes it seem like a great idea, so maybe I'll come back to this one.  I'm thinking something like Mirrors Edge with a constantly changing environment.&lt;br /&gt;&lt;br /&gt;Anyway, the idea then transmogrified - the kind of games that already use this "simple shape" theory are all the old classics - Breakout, Pac-Man, Tetris.  Their graphics were nothing special but they were good games.  So how about a game set inside another game?  Maybe this screenshot will give a better idea of what I mean:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SkR8_OnkWJI/AAAAAAAAAI8/QB6iUeDKxcI/s1600-h/litg2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SkR8_OnkWJI/AAAAAAAAAI8/QB6iUeDKxcI/s320/litg2.png" alt="" id="BLOGGER_PHOTO_ID_5351539682920650898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Those blocks are supposed to be the blocks in a game of Breakout.  I intend to have a bouncing ball and maybe the puck.  The player would walk around in an FPS-stylee, and maybe shoot all the blocks while avoiding the puck or something.  &lt;br /&gt;&lt;br /&gt;I even got as far as starting a Pac Man level:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SkR8-13_ijI/AAAAAAAAAI0/SDqowM0DaJw/s1600-h/litg1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SkR8-13_ijI/AAAAAAAAAI0/SDqowM0DaJw/s320/litg1.png" alt="" id="BLOGGER_PHOTO_ID_5351539676278655538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think it was this level that started eroding my enthusiasm.  I realised that this game is going to take a lot of time to create all the 3D models for each level/game.  Then there's the AI for all the unique enemies, the level design etc etc...  &lt;br /&gt;&lt;br /&gt;So I decided to (maybe temporarily) abandon it in favour of another game idea; an idea that uses simple graphics, no advanced AI, and is incredibly addictive.  As soon as I have this idea, I'll let you know.  Meanwhile, it's back to the &lt;a href="http://www.onlinegameplanner.co.uk/SpectrumArcade.cls"&gt;Spectrum Arcade&lt;/a&gt; for inpiration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8934063881464121671?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8934063881464121671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8934063881464121671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8934063881464121671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8934063881464121671'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/06/another-almost-game.html' title='Another &quot;Almost&quot; Game'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/SkR8_OnkWJI/AAAAAAAAAI8/QB6iUeDKxcI/s72-c/litg2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1644003603023940350</id><published>2009-06-23T00:55:00.000-07:00</published><updated>2009-06-23T01:02:21.529-07:00</updated><title type='text'>Someone has used one of my ideas!</title><content type='html'>It was surely only a matter of time, since I have so many great ideas.  However, to quote from this very blog from July 19th 2006, where I described a time-travel game device: "&lt;a href="http://meprogrammer.blogspot.com/2006/07/game-idea.html"&gt;To give you a more concrete example, imagine Command and Conquor with time travel&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Lo and below, fast forward to 2009 and what has happened?  &lt;a href="http://achrongame.com/"&gt;Achron&lt;/a&gt;:  "&lt;span class="g"&gt;a real-time strategy game where players and units can jump to and play at different times simultaneously and independently".&lt;br /&gt;&lt;br /&gt;I assume the cheque is on the post.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1644003603023940350?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1644003603023940350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1644003603023940350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1644003603023940350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1644003603023940350'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/06/someone-has-used-one-of-my-ideas.html' title='Someone has used one of my ideas!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6617826706539734798</id><published>2009-06-22T05:36:00.000-07:00</published><updated>2009-06-23T00:52:00.492-07:00</updated><title type='text'>New Game!  "Xenogeddon"</title><content type='html'>It's been a bit quiet on this blog lately.  I got a bit bored of writing games that no-one wants to play.  However, I've got a new burst of niavity and/or optimism, so I've knocked up something new in the vain hope that someone else might find it interesting.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://onlinegameplanner.no-ip.org/freegames/xenogeddon/PrepareToDie.png" align="right" vspace=10 hspace=10 /&gt;Todays effort is an FPS by the name of &lt;a href="http://onlinegameplanner.no-ip.org/games/xenogeddon.cls"&gt;Xenogeddon&lt;/a&gt;.  It's basically Space Hulk by another name.   You walk around an "abandoned" (read: not completely abandoned) and shoot stuff that looks like it might want to kill you.&lt;br /&gt;&lt;br /&gt;True to form, it's not actually finished, but is certainly playable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6617826706539734798?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6617826706539734798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6617826706539734798' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6617826706539734798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6617826706539734798'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2009/06/new-game-xenogeddon.html' title='New Game!  &quot;Xenogeddon&quot;'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8143221756027724699</id><published>2008-08-04T03:23:00.001-07:00</published><updated>2008-08-04T03:27:38.622-07:00</updated><title type='text'>Java Applets - Grrr!</title><content type='html'>I like Java a lot, and I used to like applets - what better way to "publish" your game than to stick in in the web page?  People can then play it straight away.  Okay, it might take a few seconds to get going, but other than that, I used to think it a great idea.&lt;br /&gt;&lt;br /&gt;However, I recently installed a new version of Ubuntu, and I just can't get applets to work.  Java is running fine, but in Firefox, it doesn't have the Java plugin, and I've tried everything I can think of, even adding symlinks to the Firefox directory.  Even if that had worked, no-one should have to do that just to get applets to work.&lt;br /&gt;&lt;br /&gt;It shouldn't be this hard.  Java should be as easy to install as any other plugin (i.e. incredibly easy).  Until it is, it's just going to get even more sidelined over Flash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8143221756027724699?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8143221756027724699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8143221756027724699' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8143221756027724699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8143221756027724699'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/08/java-applets-grrr.html' title='Java Applets - Grrr!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6632373862871610238</id><published>2008-07-09T11:18:00.000-07:00</published><updated>2009-06-26T00:39:30.803-07:00</updated><title type='text'>Metal Glove Solid: Released at Last!</title><content type='html'>After being given a proverbial kick up the bum, I can now announce that I've sprinted the last straight and have got Metal Glove into a releasable state, and released it!&lt;br /&gt;&lt;br /&gt;Needless to say, all the usual disclaimers apply: it's the first version, it's very sparse, probably has bugs etc.. etc..&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Anyway, it's available &lt;a href="http://onlinegameplanner.no-ip.org/games/metalglovesolid.cls"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6632373862871610238?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6632373862871610238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6632373862871610238' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6632373862871610238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6632373862871610238'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/07/metal-glove-solid-released-at-last.html' title='Metal Glove Solid: Released at Last!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4528230836687321701</id><published>2008-05-27T06:04:00.000-07:00</published><updated>2008-05-27T06:22:17.109-07:00</updated><title type='text'>Metal Glove Solid in a Wesnoth Stylee</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/SDwISClbMMI/AAAAAAAAAFg/sq0zBss7zSY/s1600-h/mgs_wesnoth.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/SDwISClbMMI/AAAAAAAAAFg/sq0zBss7zSY/s320/mgs_wesnoth.png" alt="" id="BLOGGER_PHOTO_ID_5205044375357960386" border="0" /&gt;&lt;/a&gt;You may not recognise the game you see to your left, but it's Metal Glove with Wesnoth graphics. &lt;br /&gt;&lt;br /&gt;Does it count as a mashup?  Probably not, but at least the game is now releasable.  I just need to tweak it a bit, since the size of graphics isn't reflected in the code, but apart from that, it looks even better than it did before. &lt;br /&gt;&lt;br /&gt;Except the generators, which look like birthday cakes.  Oh, and unfortunately, the Wesnoth artists only drew the sprites facing in one direction.  Still, beggars can't be choosers. GPL-FTW!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4528230836687321701?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4528230836687321701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4528230836687321701' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4528230836687321701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4528230836687321701'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-in-wesnoth-stylee.html' title='Metal Glove Solid in a Wesnoth Stylee'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pmTBatPrsbk/SDwISClbMMI/AAAAAAAAAFg/sq0zBss7zSY/s72-c/mgs_wesnoth.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-632056393874730975</id><published>2008-05-23T02:15:00.000-07:00</published><updated>2008-05-23T02:25:01.476-07:00</updated><title type='text'>Metal Glove Solid: Got the Graphics?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SDaL3ClbMLI/AAAAAAAAAFY/Zk1iveAloqM/s1600-h/berserker-attack-5.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SDaL3ClbMLI/AAAAAAAAAFY/Zk1iveAloqM/s320/berserker-attack-5.png" alt="" id="BLOGGER_PHOTO_ID_5203500197176094898" border="0" /&gt;&lt;/a&gt;In an earlier comment to a posting &lt;a href="http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-looking-better.html"&gt;where I was lamenting my lack of skill at drawing graphics for Metal Glove&lt;/a&gt;, Charlie (of &lt;a href="http://freegamer.blogspot.com/"&gt;Freegamer&lt;/a&gt; fame) suggested I give the &lt;a href="http://search.freegamedev.net/"&gt;Free Art Search&lt;/a&gt; tool a go, so I did.&lt;br /&gt;&lt;br /&gt;And it's pretty good.  After only a few minutes I came across the solution to my problems: &lt;a href="http://www.wesnoth.org/"&gt;Battle for Wesnoth&lt;/a&gt; (one of the best FOSS games out there) has excellent graphics, and they have been released under GPL!  So, IANAL but I think that means that I can use them as long as I give full credit, and release my software under GPL, which I do anyway.&lt;br /&gt;&lt;br /&gt;So my next task is to replace all the graphics for those from Wesnoth.  I originally used the graphics from a game called Wyvern, but the license is unknown, and I received no reply from the author.&lt;br /&gt;&lt;br /&gt;Once this is done, I can finally release it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-632056393874730975?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/632056393874730975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=632056393874730975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/632056393874730975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/632056393874730975'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-got-graphics.html' title='Metal Glove Solid: Got the Graphics?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SDaL3ClbMLI/AAAAAAAAAFY/Zk1iveAloqM/s72-c/berserker-attack-5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4376687463434933548</id><published>2008-05-16T08:39:00.000-07:00</published><updated>2008-05-16T08:48:15.649-07:00</updated><title type='text'>Metal Glove Solid: Front End</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/SC2qypT4jVI/AAAAAAAAAFQ/7nZaWHG5yfw/s1600-h/mgs23.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/SC2qypT4jVI/AAAAAAAAAFQ/7nZaWHG5yfw/s320/mgs23.png" alt="" id="BLOGGER_PHOTO_ID_5201000931742223698" border="0" /&gt;&lt;/a&gt;Now that the game is in a pretty playable state, it was time to concentrate on all the front end.  I've given it a fancy title screen shown on the right (obviously not drawn by me) and a couple of menus - one asking if you would like to start a new game (hinting that a "save game" option may be in the pipeline) and one to determine what character you want to be.&lt;br /&gt;&lt;br /&gt;Having different characters has increased the variety of the game.  I've now given the player's sprite various stats, like movement speed, shot interval time, shot power etc..  These will all also need tweaking.  The main advantage of the wizard in the original game was that he was far better at using the single (IIRC) spell and would kill everything.  In my version, there are going to be different kinds of spells, but I'm still trying to think of a way ther player can access them easily whilst still shooting at all the enemies.  Maybe just pressing a number from 1-10 to pre-select a spell, and then pressing another button to cast it will be good enough.  I've also got to think of some types of spells, but I'll wait till I go to the toilet to do that since that's where I have all my best ideas.  I should take a laptop next time just in case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4376687463434933548?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4376687463434933548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4376687463434933548' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4376687463434933548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4376687463434933548'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-front-end.html' title='Metal Glove Solid: Front End'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pmTBatPrsbk/SC2qypT4jVI/AAAAAAAAAFQ/7nZaWHG5yfw/s72-c/mgs23.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1740310285267135137</id><published>2008-05-15T00:18:00.000-07:00</published><updated>2008-05-15T00:38:03.148-07:00</updated><title type='text'>Add Searching to your Web Pages</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sitesearch.no-ip.org/images/searching.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://sitesearch.no-ip.org/images/searching.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;[I did post this a few days ago, but noticed some minor teething problems and improvements that could be made with the program, so I deleted that post.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As well as writing a Gauntlet remake, I've also managed to find time to write a webcrawler and search engine, which on the face of it is quite simple; it's just all the minor details that take the time.  But hey, that's programming for you.&lt;br /&gt;&lt;br /&gt;To add searching of your site &lt;span style="font-style: italic;"&gt;to your site&lt;/span&gt;, simply add the following line to the HTML:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;script src="http://www.mysitesearcher.co.uk/mysitesearcher.js" type="text/javascript"&gt;&amp;lt;/script&gt;&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You will probably be asking "What's the advantages over something like Google?".  Good question, and I can think of 4 off the top of my head:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Your site will be fully re-indexed at least every 6 hours.  In fact, you can see exactly when your site was last indexed, plus how many words and URLs were read.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This web crawler will also follow Javascript links.&lt;/li&gt;&lt;li&gt;You can index &lt;i&gt;just&lt;/i&gt; sub-directories.  For example, if you place your searchbox at &lt;strong&gt;http://www.somedomain.com/mypages/mypage.html&lt;/strong&gt;, only pages contained in &lt;strong&gt;http://www.somedomain.com/mypages&lt;/strong&gt; (and its subdirectories) will be indexed, so you can search just your stuff.&lt;/li&gt;&lt;li&gt;And, it's not Google, so you can have a clear conscience, safe in the knowledge that the Google-borg haven't absorbed you too.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;So there it is.  If you use it, let me know what you think.  As you can see, I've added it to this site already.&lt;br /&gt;&lt;br /&gt;More details are &lt;a href="http://www.mysitesearcher.co.uk/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1740310285267135137?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1740310285267135137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1740310285267135137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1740310285267135137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1740310285267135137'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/add-searching-to-your-website.html' title='Add Searching to your Web Pages'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1935927546247457499</id><published>2008-05-14T04:29:00.000-07:00</published><updated>2008-05-14T05:00:02.275-07:00</updated><title type='text'>Metal Glove Solid: Taking it to the Next Level</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/SCrNJ5T4jUI/AAAAAAAAAFI/7k8oX_TBLso/s1600-h/mgs22.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/SCrNJ5T4jUI/AAAAAAAAAFI/7k8oX_TBLso/s320/mgs22.png" alt="" id="BLOGGER_PHOTO_ID_5200194289639394626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I thought it was about time I gave the game a bit of variety, and nothing shows variety than different coloured background images.  Level 2 is now like a whole new game - to the people who put graphics above gameplay.&lt;br /&gt;&lt;br /&gt;Actually though, I do intend for the levels to be different.  The first level is a simple dungeon requiring keys to get through it.  This second level is far more open-plan, meaning that enemies also have much more access to the players death-button.&lt;br /&gt;&lt;br /&gt;I was reading a thread on &lt;a href="http://forum.freegamedev.net/index.php?t=msg&amp;amp;goto=5657&amp;amp;S=7821645fbae338f01ddd7cdc6521a73c&amp;amp;srch=gauntlet#msg_5657"&gt;FreeGameDev&lt;/a&gt; about another potential Gauntlet remake, and one comment caught my eye - "&lt;span class="MsgBodyText"&gt;&lt;span style="font-style: italic;"&gt;The game was quite fast paced.  As long it is a bit fast and manic, we'll be on the right track.&lt;/span&gt;"  It's factors like that that make the difference between a good game and a great game, and it's a phase I call "gameplay tweaking", since that's what it is.  I've still yet to do that with this game, but it can make all the difference between this being a plodding, tedious game and a fast-and-furious arcade monster.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1935927546247457499?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1935927546247457499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1935927546247457499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1935927546247457499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1935927546247457499'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-taking-it-to-next.html' title='Metal Glove Solid: Taking it to the Next Level'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/SCrNJ5T4jUI/AAAAAAAAAFI/7k8oX_TBLso/s72-c/mgs22.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3513618384233133467</id><published>2008-05-13T02:08:00.000-07:00</published><updated>2008-05-13T02:36:26.922-07:00</updated><title type='text'>Metal Glove Solid: A Policy of Constant Improvement</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/SClelpT4jTI/AAAAAAAAAFA/RL6mj4_TZFY/s1600-h/mgs17.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/SClelpT4jTI/AAAAAAAAAFA/RL6mj4_TZFY/s320/mgs17.png" alt="" id="BLOGGER_PHOTO_ID_5199791245613370674" border="0" /&gt;&lt;/a&gt;It's time to party like it's 1987!  Where to start with the list of new features?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Back-ground graphics: The player is no longer walking on a void.  And there doesn't seem to be any slowdown.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;More enemies: Flayers to be exact (that's what the image file was called that I ripped them from).  I might just call them zombies though.&lt;/li&gt;&lt;li&gt;Score - it keeps it, it starts at zero, and it goes up.&lt;/li&gt;&lt;li&gt;Different images depending on which direction a sprite is walking in - You'll have to take my word for this until I do some kind of video of the gameplay.  But it is there, honest.&lt;/li&gt;&lt;li&gt;A GPL licence.  Again, since I can't release it yet, you'll have to take my word for it, but I give you my cub-scouts honour that I svn-added that into my repository.  And this time I didn't forget to commit.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A working exit.  Unfortunately due to there being no second map, this does cause the game to crash.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3513618384233133467?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3513618384233133467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3513618384233133467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3513618384233133467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3513618384233133467'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-policy-of-constant.html' title='Metal Glove Solid: A Policy of Constant Improvement'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pmTBatPrsbk/SClelpT4jTI/AAAAAAAAAFA/RL6mj4_TZFY/s72-c/mgs17.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7832151948998222924</id><published>2008-05-09T04:07:00.000-07:00</published><updated>2008-05-11T08:58:27.724-07:00</updated><title type='text'>Metal Glove Solid: The Key, The Secret</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SCQwkF2M87I/AAAAAAAAAE4/S7Go67vdqWQ/s1600-h/mgs13.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SCQwkF2M87I/AAAAAAAAAE4/S7Go67vdqWQ/s320/mgs13.png" alt="" id="BLOGGER_PHOTO_ID_5198333266495337394" border="0" /&gt;&lt;/a&gt;You would hardly recognise the game!  There are now graphics for the ghost generators and the exit, and new graphics for the walls, and new gameplay features, namely keys and locked doors.&lt;br /&gt;&lt;br /&gt;It's almost looking like a finished game, but there is still plenty of the donkey work to do, such as designing more maps and adding more gameplay elements, such as more types of enemies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7832151948998222924?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7832151948998222924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7832151948998222924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7832151948998222924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7832151948998222924'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-key-secret.html' title='Metal Glove Solid: The Key, The Secret'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/SCQwkF2M87I/AAAAAAAAAE4/S7Go67vdqWQ/s72-c/mgs13.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1399649905085337404</id><published>2008-05-09T00:24:00.000-07:00</published><updated>2008-05-09T00:30:39.196-07:00</updated><title type='text'>Metal Glove Solid: More Graphics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SCP8OV2M86I/AAAAAAAAAEw/Vto3oRs2EyQ/s1600-h/mgs5.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SCP8OV2M86I/AAAAAAAAAEw/Vto3oRs2EyQ/s320/mgs5.png" alt="" id="BLOGGER_PHOTO_ID_5198275718228538274" border="0" /&gt;&lt;/a&gt;Flying in the face of possibly copyright lawsuits, I've added more ripped graphics to the game.  In this case, it's the walls, but there is a flaw:&lt;br /&gt;&lt;br /&gt;Since Wyvern (where I've got the graphics from) is obviously a better game that mine, it has different images for a wall depending on whether it's a corner section or a straight (amongst others), there is no actual image for a straight top-down wall.  And since my game doesn't calculate what kind of section a wall, I'm going to have to think of something else.&lt;br /&gt;&lt;br /&gt;Oh, and the other problem is that my "mapsquares" are bigger than those in Wyvern, meaning I'll need to stretch them as well.  Why is ripping off other people's graphics never easy?  I might as well have drawn them myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1399649905085337404?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1399649905085337404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1399649905085337404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1399649905085337404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1399649905085337404'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-more-graphics.html' title='Metal Glove Solid: More Graphics'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/SCP8OV2M86I/AAAAAAAAAEw/Vto3oRs2EyQ/s72-c/mgs5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5941529056043283928</id><published>2008-05-07T04:48:00.000-07:00</published><updated>2008-05-08T01:27:32.513-07:00</updated><title type='text'>Metal Glove Solid: Looking better</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SCGXZCGtO9I/AAAAAAAAAEo/3MA5c32K6jw/s1600-h/mgs4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SCGXZCGtO9I/AAAAAAAAAEo/3MA5c32K6jw/s320/mgs4.png" alt="" id="BLOGGER_PHOTO_ID_5197601901279787986" border="0" /&gt;&lt;/a&gt;Yes, your eyes do deceive you - there are in fact no original graphics in this screenshot.  I'm no artist, and as many others find, getting graphics for a game takes longer than actually writing the thing.  I've used the graphics from the excellent &lt;a href="http://www.cabochon.com/"&gt;Wyvern&lt;/a&gt; game, which comes with sprites that are perfect for my Gauntlet clone.&lt;br /&gt;&lt;br /&gt;Here you can see the warrior wondering what that ghostly noise is coming from the other side of the wall.  The red square is an exit, which can only mean one thing - that there is another level, though in the interests of keeping the surprise, I won't reveal it yet.&lt;br /&gt;&lt;br /&gt;I do have a conundrum with the graphics though: I'm guessing that it wouldn't be right for me to release it with them, as they are not mine.  There is no kind of licence information included with Wyvern, so I think my only solution is to email the author and ask him politely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5941529056043283928?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5941529056043283928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5941529056043283928' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5941529056043283928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5941529056043283928'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-looking-better.html' title='Metal Glove Solid: Looking better'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/SCGXZCGtO9I/AAAAAAAAAEo/3MA5c32K6jw/s72-c/mgs4.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4211251943038025255</id><published>2008-05-07T04:00:00.001-07:00</published><updated>2008-05-07T04:11:02.221-07:00</updated><title type='text'>Top Mud Sites?  Bugger that</title><content type='html'>I run &lt;a href="http://www.carlylesmith.karoo.net/gta-mud/"&gt;a mud based on GTA&lt;/a&gt;.  I say "run", what I mean is I wrote it about 2 years ago and it's been sat running ever since and I've not even looked at it.  It gets quite a few players though; back when I was promoting it, I registered it at a few of the Mud listing sites, one being "Top Mud Sites".&lt;br /&gt;&lt;br /&gt;I'm now in the process of changing the URL.  Since my DynDNS has stopped working, I'm moving over to No-IP.  So I've just tried logging into the Top Mud Sites website to change the details.  Oh, my login details don't work.  Why not?  Well, &lt;a href="http://www.topmudsites.com/forums/faq/mudowners.html#faq_editmud"&gt;this is the FAQ section with the solution&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;WTF?  Bear in mind that, surprisingly, I'm &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; "familiar with the new TMS database", whatever that is.  I've already got one full-time job and frankly I can't be bothered to go through that rigmarole, so the details are going to stay wrong.&lt;br /&gt;&lt;br /&gt;(Contrast this with The MUD Connector, which took me about 2 minutes to update the details).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4211251943038025255?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4211251943038025255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4211251943038025255' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4211251943038025255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4211251943038025255'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/top-mud-sites-bugger-that.html' title='Top Mud Sites?  Bugger that'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-9056467654390081869</id><published>2008-05-07T00:55:00.000-07:00</published><updated>2008-05-07T03:41:21.023-07:00</updated><title type='text'>Guest Post: The Price of Games</title><content type='html'>&lt;span style="font-style: italic;"&gt;This is a guest post by my other personality since I forgot to take my pills today.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The price of games - it's way too low! What? I'm not talking about the current crop of games, which compared to the prices of (good) games of yesteryear seem to be a bargain considering the amount of content you get with them.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.crashonline.org.uk/02/images/kraktoa1.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.crashonline.org.uk/02/images/kraktoa1.gif" alt="" border="0" /&gt;&lt;/a&gt;No, I'm talking about old computer games from the 80's, and specifically old Spectrum games.  I've got a fair few boxes of the things that I've bought from Ebay (obv) and I was hoping that the price of them might have increased slightly in order to make me very rich.  Unfortunately, that's not the case.  Even a bona-fide classic like &lt;a href="http://www.worldofspectrum.org/showmag.cgi?mag=Crash/Issue02/Pages/Crash0200070.jpg"&gt;Escape from Krakatoa&lt;/a&gt; (a game I can't believe hasn't been remade yet - I'm adding it to my list) is available for &lt;a href="http://www.ptshop.co.uk/index.php?main_page=product_info&amp;amp;products_id=4475"&gt;a paltry £1.50 from the Preservation Team Shop&lt;/a&gt;.  As it is, it looks like it will only be my great-great-grandchildren who stand to benefit.  Bloody scroungers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-9056467654390081869?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/9056467654390081869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=9056467654390081869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/9056467654390081869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/9056467654390081869'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/guest-post-price-of-games.html' title='Guest Post: The Price of Games'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8031716555653024600</id><published>2008-05-06T02:04:00.000-07:00</published><updated>2008-05-06T14:31:23.658-07:00</updated><title type='text'>Metal Glove Solid: Now with a map</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SCAiHgd0rwI/AAAAAAAAAEY/mnfn0RTPpZM/s1600-h/mgs3.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SCAiHgd0rwI/AAAAAAAAAEY/mnfn0RTPpZM/s320/mgs3.png" alt="" id="BLOGGER_PHOTO_ID_5197191482355003138" border="0" /&gt;&lt;/a&gt;No, your eyes do not deceive you, you really can see some bona-fide collision-detectable walls in the screenshot on the right.  They are the two blue vertical lines.&lt;br /&gt;&lt;br /&gt;But the fun doesn't stop there.  You may have also noticed the small yellow square in mid-flight downwards towards the white square "ghosts".  Yes indeed, that would be a bullet - I have also implemented shooting.  I'm still debating whether to allow the player to fix the direction of shooting in a Llamatron kind of way, but I'll do that as part of the gameplay tweaking later when I determine the speed of all the movement.&lt;br /&gt;&lt;br /&gt;Whenever writing games that involve some kind of "map" (i.e. most of them), there's always the perpetual problem of how to design it.   I always like to get something up and running as quickly as possible, so instead of writing a custom mapping program, or implementing a way to "design-as-you-play", I simply use a spreadsheet program (OpenOffice of course).  This is a picture of the map data for the dungeon shown in the screenshot:-&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/SCAi7gd0rxI/AAAAAAAAAEg/_zoWIDzKVcs/s1600-h/map.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/SCAi7gd0rxI/AAAAAAAAAEg/_zoWIDzKVcs/s320/map.png" alt="" id="BLOGGER_PHOTO_ID_5197192375708200722" border="0" /&gt;&lt;/a&gt;As you can see, by using colours it makes it far easier to see the layout of the map, and when saving it as a CSV file, all the colour is stripped from the file leaving a nice flat file of data for the import code to read.  Designing the map couldn't be easier once all the different sections have been placed at least once; it's just a case of copying/pasting about, and then re-saving as a CSV.&lt;br /&gt;&lt;br /&gt;Another bonus is that any hackers can edit the CSV files and make up their own maps very easily.  My other games &lt;a href="http://ngrave.pbwiki.com/"&gt;Laser Tactics&lt;/a&gt; and &lt;a href="http://dangerman.pbwiki.com/"&gt;DangerMan&lt;/a&gt; (among others) use this method, though as of yet nobody has told me that they've been bothered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8031716555653024600?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8031716555653024600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8031716555653024600' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8031716555653024600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8031716555653024600'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-now-with-maps.html' title='Metal Glove Solid: Now with a map'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/SCAiHgd0rwI/AAAAAAAAAEY/mnfn0RTPpZM/s72-c/mgs3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8005185930576434921</id><published>2008-05-02T05:07:00.000-07:00</published><updated>2008-05-02T05:19:33.048-07:00</updated><title type='text'>Metal Glove Solid: Spooky!</title><content type='html'>Development is steamrolling along now, crushing all that dare to question my lack of motivation which typically aflicts my projects like a sudden freeze spell.&lt;br /&gt;&lt;br /&gt;My Gauntlet remake now has monster generators (dark grey) and ghosts (white).  The screenshot below shows a game in progress, as a terrified purple warrior (fnar) runs around in circles awaiting a programmer to implement a "shoot" feature so that he can destroy the ghosts that are hurtling towards him.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SBsEKQd0rvI/AAAAAAAAAEQ/ZY5aRWxIKlE/s1600-h/mgs2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SBsEKQd0rvI/AAAAAAAAAEQ/ZY5aRWxIKlE/s320/mgs2.png" alt="" id="BLOGGER_PHOTO_ID_5195751169367256818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next on my ever-expanding todo list is to make up some proper maps.  I've been thinking about the kinds of maps I'll have, in order to make things interesting; probably an open area (forest?), and long trek (like Level 2 on the original game) and a maze.  Other suggestions on an epostcard please.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8005185930576434921?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8005185930576434921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8005185930576434921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8005185930576434921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8005185930576434921'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/05/metal-glove-solid-spooky.html' title='Metal Glove Solid: Spooky!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/SBsEKQd0rvI/AAAAAAAAAEQ/ZY5aRWxIKlE/s72-c/mgs2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2028568667114393636</id><published>2008-04-18T00:34:00.000-07:00</published><updated>2008-05-01T01:06:38.209-07:00</updated><title type='text'>Metal Glove Solid</title><content type='html'>I've decided to do another remake! "&lt;span style="font-style: italic;"&gt;Pray tell!&lt;/span&gt;", I hear you say. "&lt;span style="font-style: italic;"&gt;What game have you decided to direct your God-like programming skills at this time?&lt;/span&gt;". Well, the following screenshot should make it pretty obvious:-&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/SBl4kwd0ruI/AAAAAAAAAEI/O5tkiVPYoB4/s1600-h/mgs.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/SBl4kwd0ruI/AAAAAAAAAEI/O5tkiVPYoB4/s320/mgs.png" alt="" id="BLOGGER_PHOTO_ID_5195316218029190882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Okay then, maybe not.   Here's a few other hints: it's a top-down view; the blue square is a wall, and the white square is either a warrior, wizard, elf or valkyrie.&lt;br /&gt;&lt;br /&gt;You should have got it by now.  Yes, it's going to be a Gauntlet remake!  &lt;br /&gt;&lt;br /&gt;In order to get something up-and-running as quickly as possible, I've forgone graphics for the time being.  Despite it not looking like much, the white square can be controlled in 4 (count 'em!) directions, and all the sprites have collision detection.  I've developed a way to have as many sprites as possible on screen (and across the whole dungeon) without slowing down the collision detection or the frame-rate.  It works with just two (as proved by the screenshot), so I don't see how it can fail with 200 or more.  I may patent it, so details cannot be revealed just yet.&lt;br /&gt;&lt;br /&gt;Next step: Ghosts (or grey squares).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2028568667114393636?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2028568667114393636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2028568667114393636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2028568667114393636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2028568667114393636'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/04/metal-glove-solid.html' title='Metal Glove Solid'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/SBl4kwd0ruI/AAAAAAAAAEI/O5tkiVPYoB4/s72-c/mgs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-7789333318303816248</id><published>2008-03-20T02:12:00.000-07:00</published><updated>2008-03-20T09:49:23.432-07:00</updated><title type='text'>Microsoft Helpline?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pmTBatPrsbk/R-KVbo2XZjI/AAAAAAAAAD4/ZMlZCcvlybQ/s1600-h/microsoft018.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_pmTBatPrsbk/R-KVbo2XZjI/AAAAAAAAAD4/ZMlZCcvlybQ/s320/microsoft018.jpg" alt="" id="BLOGGER_PHOTO_ID_5179866823483942450" border="0" /&gt;&lt;/a&gt;Sorry, this post falls under the category of "rant" rather than "games".&lt;br /&gt;&lt;br /&gt;When you buy a washing machine (or pretty much any kind of consumer-electronics item) there is usually a telephone number you can call if you have any problems, at no extra cost over and above the cost of the item itself.&lt;br /&gt;&lt;br /&gt;So why doesn't a company as rich as Microsoft have a number you can call if you have a problem with Microsoft software?  Okay, they have far more customers than, say, Hotpoint, but equally that means they much more profit from all of those customers and could afford to man a helpline.&lt;br /&gt;&lt;br /&gt;The reason why a number like that would have proved useful was when I was trying to install SQL 2005 onto Windows Web Server 2008.  The option to install anything apart from the "client modules" was greyed out.  It turns out after to-ing and fro-ing emails that it's not compatible (after initially  being told the opposite).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;What? &lt;/span&gt; Microsoft can't even write an operating system that is compatible with a program as common as SQL 2005?  Yes.  Who would have thought that someone wanting to run a website might want to run SQL 2005?&lt;br /&gt;&lt;br /&gt;The solution, once I knew the problem, was simple.  Install &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;.  They (along with most other people) can write software that works on more version of Windows than Microsoft can.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-7789333318303816248?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/7789333318303816248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=7789333318303816248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7789333318303816248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/7789333318303816248'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/03/microsoft-helpline.html' title='Microsoft Helpline?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pmTBatPrsbk/R-KVbo2XZjI/AAAAAAAAAD4/ZMlZCcvlybQ/s72-c/microsoft018.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2895713477277329448</id><published>2008-03-17T02:09:00.000-07:00</published><updated>2008-03-17T02:23:18.735-07:00</updated><title type='text'>Why No Open-Source Adventures?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.crashonline.org.uk/04/images/bridge.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.crashonline.org.uk/04/images/bridge.gif" alt="" border="0" /&gt;&lt;/a&gt;I've seen it commented before, and I've had a good look myself, but there seems to be a distinct lack of open-source free adventure games.  However, it seems to me that reason is obvious - there's not much fun in writing them.&lt;br /&gt;&lt;br /&gt;The fun of playing an adventure is wondering what's going to happen next; where the story is going, what you might see.  But as the programmer, there are no surprises because you actually have to create it (and test it, again and again).  As the programmer, you are the one person who can never appreciate the adventure for what it is, so it would be quite a sacrifice of your time to actually write one.&lt;br /&gt;&lt;br /&gt;Still, I did finds&lt;a href="http://uk.gamespot.com/pages/forums/show_msgs.php?topic_id=25943291"&gt; this link to free adventures&lt;/a&gt;.  I've never played them though, so I don't know if they're any good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2895713477277329448?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2895713477277329448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2895713477277329448' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2895713477277329448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2895713477277329448'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/03/why-no-open-source-adventures.html' title='Why No Open-Source Adventures?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-2629417641260929632</id><published>2008-03-10T02:19:00.000-07:00</published><updated>2008-03-10T02:32:09.425-07:00</updated><title type='text'>Announcing: Space Jihad</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ng.game-host.org/applets/spacejihad/spacejihad.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://ng.game-host.org/applets/spacejihad/spacejihad.png" alt="" border="0" /&gt;&lt;/a&gt;In between planning epic strategy roleplaying adventures that I'll have trouble completing in my lifetime, I like to knock up a quick and simple arcade game, and I now present another one.&lt;br /&gt;&lt;br /&gt;Called &lt;a href="http://www.onlinegameplanner.co.uk/SpaceJihadPage.cls"&gt;Space Jihad&lt;/a&gt;, it's barely got a pixel of originality in it, so hopefully you won't have played any similar games before.  It's like Tower Defence, but side-on.  And IMHO it's quite fun to play.&lt;br /&gt;&lt;br /&gt;I spent more time fine-tuning the game balance than actually programming it, and there is a lot more strategy to it than may meet the eye.  Strategies like what kind of installation to buy and when, and then where to place it; all of these play a part.&lt;br /&gt;&lt;br /&gt;And as with a lot of my other games, if you log in to the website before you play, it will save and show your high-score for the rest of the world to try and beat!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-2629417641260929632?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/2629417641260929632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=2629417641260929632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2629417641260929632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/2629417641260929632'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/03/announcing-space-jihad.html' title='Announcing: Space Jihad'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6473600576123391630</id><published>2008-02-28T02:30:00.000-08:00</published><updated>2008-02-28T03:48:07.694-08:00</updated><title type='text'>Games Should be Fun - All the Time</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mtv.com/games/video_games/images/promoimages/d/dime/anger_management/resident_evil_4.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.mtv.com/games/video_games/images/promoimages/d/dime/anger_management/resident_evil_4.jpg" alt="" border="0" /&gt;&lt;/a&gt;I was playing Resident Evil 4 on the PS2 last night.  It's a very graphically impressive game.  However, it does have a major flaw (which it shares with most other games) - it's not always fun to play.&lt;br /&gt;&lt;br /&gt;[Spoiler warning] If anyone out there has RE4, it's the bit where you have to fight the first giant/ogre thing (see right).  It's one of those boss battles where you have to guess where the weak spot is, and also what else you have to do.  If you don't work it out, you'll be stuck on the level forever, and the only way I can see of working it out is to spend a whole day on it, or look on the internet.  In this case, you have to shoot it in the head until something bursts out of it's neck, and then run up to it and jump onto its back and stab this thing.  You have to do this 3 times as well, so hopefully you won't run out of ammo.&lt;br /&gt;&lt;br /&gt;The problem with the bit in question, as well as getting a bit tedious, was that it is preceeded by a 30-second movie clip that you &lt;span style="font-style: italic;"&gt;can't skip through&lt;/span&gt;. Every time you die, you have to run back to the same point in the game, and then sit through the same clip again.  Why do companies think that we want to watch the same clip over and over again?  To massage their ego?&lt;br /&gt;&lt;br /&gt;The various GTA (and a lot of other) games suffer from this problem as well.  If you fail at a mission for example, you then have to go through the build-up to the mission all over again (reloading the game, running to that area of the map to get the mission, run to the area of the map where the mission takes place etc..).  This wouldn't be a problem if these bits of the game were fun, but running across a map is rarely fun, especially the second (or third...) time round.&lt;br /&gt;&lt;br /&gt;The bottom line is &lt;span style="font-weight: bold;"&gt;games should be fun.  &lt;span style="font-style: italic;"&gt;All the time.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6473600576123391630?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6473600576123391630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6473600576123391630' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6473600576123391630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6473600576123391630'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/games-should-be-fun-all-time.html' title='Games Should be Fun - All the Time'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-5809988543999730991</id><published>2008-02-25T04:44:00.000-08:00</published><updated>2008-02-25T06:32:14.125-08:00</updated><title type='text'>Laser Tactics - CPU v CPU</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sourceforge.net/dbimage.php?id=159990"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://sourceforge.net/dbimage.php?id=159990" alt="" border="0" /&gt;&lt;/a&gt;One of the best ways of testing your AI is to get it to play against itself.  Often this isn't possible as most computer AI is very simplistic, involving standing still and shooting at the player, or following a set route and waiting for the player to trigger some change.&lt;br /&gt;&lt;br /&gt;However, the AI in &lt;a href="http://ngrave.pbwiki.com/"&gt;Laser Tactics&lt;/a&gt; is quite advanced (IMHO), and there is AI available for both sides in nearly all the various missions and objectives.  So I quickly added the code so it's possible to select AI for both sides (previously you could only choose it for one side).  The game also has a "Ghost" mode, which allows a player to view the game through the eyes of a unit that is CPU-controlled.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sourceforge.net/dbimage.php?id=159996"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://sourceforge.net/dbimage.php?id=159996" alt="" border="0" /&gt;&lt;/a&gt;Once I'd set all this up, it's actually great fun watching the computer play against itself, especially when the missions actually have objectives (meaning it's not just a case of watching the units wander around shooting on-sight).  And of course, it's ideal for checking that the AI works well and doesn't have any of the usual problems that AI suffers from (like get stuck in a loop or end up wandering in the wrong direction).  Add to this the "randomly-generated map" option and it almost feels like I'm watching two humans battle each other.  Place your bets now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-5809988543999730991?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/5809988543999730991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=5809988543999730991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5809988543999730991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/5809988543999730991'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/laser-tactics-cpu-v-cpu.html' title='Laser Tactics - CPU v CPU'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-564476051024943895</id><published>2008-02-18T06:15:00.000-08:00</published><updated>2008-02-18T06:46:06.398-08:00</updated><title type='text'>Blindingly Obvious Java Tips #2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.masternewmedia.org/images/fast_snail_id86636_size350.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.masternewmedia.org/images/fast_snail_id86636_size350.jpg" alt="" border="0" /&gt;&lt;/a&gt;Todays tip is all about getting your game to run at a consistent speed.  You may not think it a problem on your new game, since you probably crammed in enough features to keep the CPU busy for just the right amount of time, but once you try and run it on a Cray (since surely that must have a JVM??) you may find it slightly unplayable.&lt;br /&gt;&lt;br /&gt;So, to stop it running too fast: First, define a variable of type "long" at the start of your program for how long you would like the program to take over each game loop.  In the example below, I've chosen the name "LOOP_DELAY" for this var, and I usually give it a value of around 25.  You'll probably want to tweak this amount.  Also, declare another long called "start_time".&lt;br /&gt;&lt;br /&gt;Anyway, at the start of your "game loop", write something like:-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   start_time = System.getCurrentTimeMillis();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will store the current time when the computer started the game loop.  Finally, at the end of your game loop, write something like:-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   long wait = LOOP_DELAY - System.currentTimeMillis() + start_time;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   Thread.sleep(wait);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(You'll need to wrap this in a try/catch BTW).  This bit of code will make the program pause for a certain amount of time at the end of each game loop, that time being &lt;span style="font-style: italic;"&gt;the number of milliseconds you wanted it to take over each game loop, &lt;/span&gt;&lt;span style="font-style: italic;"&gt;minus &lt;/span&gt;&lt;span style="font-style: italic;"&gt;the amount of time it took to actually process the code in your game loop&lt;/span&gt;.  This will cause each game loop to take a consistent amount of time, assuming that the time it takes to process the code in the game loop isn't longer than the time you want it to wait for!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-564476051024943895?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/564476051024943895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=564476051024943895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/564476051024943895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/564476051024943895'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/blindingly-obvious-java-tips-2.html' title='Blindingly Obvious Java Tips #2'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1043378134724426033</id><published>2008-02-15T05:53:00.000-08:00</published><updated>2008-02-15T08:35:51.694-08:00</updated><title type='text'>Announcing Laser Tactics!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/R7Wfq32R25I/AAAAAAAAADY/kVF061yFiss/s1600-h/lt_logo4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/R7Wfq32R25I/AAAAAAAAADY/kVF061yFiss/s320/lt_logo4.jpg" alt="" id="BLOGGER_PHOTO_ID_5167211706372447122" border="0" /&gt;&lt;/a&gt;If you've read one of my earlier article, you'll know that I've decided to "re-released" Nuclear Graveyard under a new name - "&lt;a href="http://ngrave.pbwiki.com/"&gt;Laser Tactics&lt;/a&gt;" (kindly suggested by &lt;a href="http://freegamer.blogspot.com/"&gt;Charlie&lt;/a&gt;).  And now I've finally got round to it.   I've given it a few more tweaks, and I'm pretty pleased with it all.  I've taken a few more screenshots to celebrate, which I'll be sticking on the website as soon as I can.&lt;br /&gt;&lt;br /&gt;The only problem with it is that it's not an FPS, and it's not turn-based, and most people expect a game like this to be either one or the other.  If anybody reading this decides to give it a go, please bear this in mind:  &lt;span style="font-weight: bold;"&gt;Your unit's APs are replenished in realtime!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pmTBatPrsbk/R7WhG32R26I/AAAAAAAAADg/TsLPjJTF3fA/s1600-h/lt5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_pmTBatPrsbk/R7WhG32R26I/AAAAAAAAADg/TsLPjJTF3fA/s320/lt5.png" alt="" id="BLOGGER_PHOTO_ID_5167213286920412066" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1043378134724426033?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1043378134724426033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1043378134724426033' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1043378134724426033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1043378134724426033'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/announcing-laser-tactics.html' title='Announcing Laser Tactics!'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pmTBatPrsbk/R7Wfq32R25I/AAAAAAAAADY/kVF061yFiss/s72-c/lt_logo4.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6624494133141114944</id><published>2008-02-14T06:02:00.000-08:00</published><updated>2008-02-14T06:16:51.585-08:00</updated><title type='text'>Blindingly Obvious Java Programming Tips #1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pmTBatPrsbk/R7RMSX2R24I/AAAAAAAAADQ/kUvSeE2n5xU/s1600-h/threads.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_pmTBatPrsbk/R7RMSX2R24I/AAAAAAAAADQ/kUvSeE2n5xU/s200/threads.jpg" alt="" id="BLOGGER_PHOTO_ID_5166838551023836034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(This is number #1 in my intended series of Programming tips for &lt;a href="http://www.java.com/"&gt;Java&lt;/a&gt;.  They are probably blindingly obvious to most people, but they have passed me by until recently, and it doesn't do any harm to mention them in case anyone else has missed them to).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:180%;"  &gt;&lt;span style="font-weight: bold;"&gt;Daemons&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Todays tip is all about setting threads as "Daemons".&lt;br /&gt;&lt;br /&gt;I used to have a problem in my games that used multiple threads, in that it was very hard to get them to actually end.  Even when all the windows were closed, there was still a process running in the background.  I usually fixed this by adding a "System.exit(0);" to the code when I wanted it all to end, but this is certainly not the best way to go about it.&lt;br /&gt;&lt;br /&gt;A Java program ends when there are only "daemon" threads running.  This means, in short, that any thread which &lt;span style="font-style: italic;"&gt;isn't&lt;/span&gt; what you would call the "main program thread" should be marked as a daemon so that it ends when the main program thread ends.  This is simply a case of writing "mythread.setDaemon(true);".  Incidentally, threads are not daemons by default.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.onlinegameplanner.co.uk/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://ng.game-host.org/images/ogp_logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6624494133141114944?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6624494133141114944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6624494133141114944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6624494133141114944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6624494133141114944'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/blindingly-obvious-java-programming.html' title='Blindingly Obvious Java Programming Tips #1'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pmTBatPrsbk/R7RMSX2R24I/AAAAAAAAADQ/kUvSeE2n5xU/s72-c/threads.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4025550011816740139</id><published>2008-02-13T03:00:00.000-08:00</published><updated>2008-02-14T00:45:20.786-08:00</updated><title type='text'>Programming Affects the Mind</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pmTBatPrsbk/R7P_bH2R23I/AAAAAAAAADI/pJqSpvj1R28/s1600-h/mind_control.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_pmTBatPrsbk/R7P_bH2R23I/AAAAAAAAADI/pJqSpvj1R28/s320/mind_control.gif" alt="" id="BLOGGER_PHOTO_ID_5166754038952352626" border="0" /&gt;&lt;/a&gt;I've long suspected that spending too long programming affects the way the mind works, and I've finally come across a quite-good example:-&lt;br /&gt;&lt;br /&gt;My wife innocently asked me if our car boot was locked.  Being a programmer, where accuracy and logic is paramount, my mind was instantly plunged into a spagetti of possible answers and their respective problems.&lt;br /&gt;&lt;br /&gt;Our car's boot (trunk for Americans) can only be opened with a key or by using the lever by the side of the drivers seat.  There is no button on the boot to open it if the car is unlocked, which it was.  So was the boot actually unlocked? One possible answer is "no", since it couldn't be any more unlocked than it was.  However, giving this answer implies that it was possible for her to go out and open the boot, but I'm not sure she knows about the lever (since she's not a driver) and she doesn't have a key, this wouldn't work.  So is the answer "yes it is locked", since the boot cannot be opened directly?  But this can't be correct, since it is openable without a key, which is presumably the definition of "locked".  Is the correct answer "sort of"?  No, not if you want to be helpful.  Is the correct response to explain how the various boot locking mechanisms work or describe where the lever is?  Probably not, since it would take too long.&lt;br /&gt;&lt;br /&gt;In the end I just ummed and ahh'd and said I'd open it for her.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4025550011816740139?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4025550011816740139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4025550011816740139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4025550011816740139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4025550011816740139'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/programming-affects-mind.html' title='Programming Affects the Mind'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pmTBatPrsbk/R7P_bH2R23I/AAAAAAAAADI/pJqSpvj1R28/s72-c/mind_control.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4337246270565476181</id><published>2008-02-11T00:39:00.000-08:00</published><updated>2008-02-12T05:11:44.128-08:00</updated><title type='text'>The Problem with RTSs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pnmedia.gamespy.com/screenshots/pcnc/in-game07.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://pnmedia.gamespy.com/screenshots/pcnc/in-game07.jpg" alt="" border="0" /&gt;&lt;/a&gt;One problem is knowing whether to put an apostophe in the word "RTS's".  However, the other problem I have with them is always feeling that it's pointless trying different actions; either they won't make any difference, or it's all down to chance anyway.&lt;br /&gt;&lt;br /&gt;I really want to enjoy RTS's, ever since I played what I think is the very first one: &lt;a href="http://en.wikipedia.org/wiki/Stonkers"&gt;Stonkers&lt;/a&gt; (not &lt;a href="http://en.wikipedia.org/wiki/Dune_II"&gt;Dune II&lt;/a&gt;!).  I've not played many of the later ones, but I've played C&amp;amp;C, StarCraft, Age of Mythology, and quite a few free ones, and even &lt;a href="http://ng.game-host.org/applets/shadowfire/index.html"&gt;written my own&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The typical scenario goes like this: I select a group of units, move them towards the enemy, and err, repeat.  All I can do now is watch them do battle.  Maybe my units will win, maybe they won't.  Should I try some newfangle tactics?  Does it make any difference if I have some units on the left side of the enemy and some on the right side?  Or maybe I should build a tank instead of two foot-soldiers?  Is it better to have a tank than two footsoldiers?  I don't know.  All I know is the units keep shooting at the enemy and eventually some of them die.  The tank is more powerful but has a slower shot rate, but I can't be bothered to check the "stats" to see if the more powerful gun with a slower shot rate is better than two weak guns with a faster shot rate.&lt;br /&gt;&lt;br /&gt;I might be fighting another small skirmish in another part of the map while this is going on.  When I go back to the original skirmish, some of my units have survived and the enemy seems to be dead.  Or did they retreat?  And if they did, how much damage was inflicted?  Who knows.  I'm no closer to knowing what the best tactics are, or if it makes any difference.&lt;br /&gt;&lt;br /&gt;So by now I've lost interest and decided to play an FPS or something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4337246270565476181?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4337246270565476181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4337246270565476181' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4337246270565476181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4337246270565476181'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/problem-with-rtss.html' title='The Problem with RTSs'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8722898798832608995</id><published>2008-02-08T02:24:00.000-08:00</published><updated>2008-02-11T02:12:48.311-08:00</updated><title type='text'>Name of the Game</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ng.game-host.org/ng/screenshots/ng_ss_ta1.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://ngrave.pbwiki.com/f/ng_ss_ma1_small.gif" alt="" border="0" /&gt;&lt;/a&gt;I've been toying with the idea of changing the name of my game &lt;a href="http://ngrave.pbwiki.com/"&gt;Nuclear Graveyard&lt;/a&gt; (again), since it has nothing to do with anything nuclear, and even less to do with graveyards.  The reason I chose it was because I got a &lt;a href="http://www.dyndns.com/"&gt;DynDns &lt;/a&gt;domain name, and I chose "ng" as the prefix to the standard domain "game-host.org".  I chose NG as I was thinking of the phrase "network game", since at the time I didn't have any idea what I wanted to do with it!  I then decided to give my new (at the time) game the initials "NG", and the rest is history.&lt;br /&gt;&lt;br /&gt;I have toyed with the idea of giving it the ridiculous name "Space Nazis", just to see if it would perk up interest.  However, this would be misleading as most people would expect some wacky platformer or something, whereas Nuclear Graveyard is a 3D multi-player "serious" strategy FPS game.&lt;br /&gt;&lt;br /&gt;I might just change it back to its original name "Laser Squad 3D", since that sums it up perfectly if you remember the original &lt;a href="http://en.wikipedia.org/wiki/Laser_Squad"&gt;Laser Squad&lt;/a&gt; game.  I think it's a bit of a cliche to add "3D" to the end of a game's name though, which is why I changed it in the first place.&lt;br /&gt;&lt;br /&gt;So, watch this space...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8722898798832608995?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8722898798832608995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8722898798832608995' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8722898798832608995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8722898798832608995'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/02/name-of-game.html' title='Name of the Game'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-4423247277143059078</id><published>2008-01-31T00:41:00.000-08:00</published><updated>2008-01-31T01:30:42.744-08:00</updated><title type='text'>A* Algorythm in Java - Download</title><content type='html'>I wrote this code a while ago, and I've finally got round to putting it &lt;a href="http://www.onlinegameplanner.co.uk/misc/astar.zip"&gt;here for public use&lt;/a&gt;.  It's the A* path-finding algorythm, nicely self contained and ready for use.  It can run in a thread if required, and to use it, you can simply write:-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;AStar my_astar = new AStar(mymapclass);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WayPoints route = my_astar.findpath(start_x, start_y, end_x, end_y, b_run_in_thread);&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;Your&lt;/span&gt;&lt;span style="font-family:georgia;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;&lt;span style="font-family: courier new;"&gt;mymapclass &lt;/span&gt;&lt;span style="font-size:100%;"&gt;must implement the IAStarMapInterface (included), which has 3 methods: &lt;span style="font-family: courier new;"&gt;g&lt;span style="font-size:85%;"&gt;etWidth(), getHeight()&lt;/span&gt; &lt;/span&gt;and &lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;isTraversable()&lt;/span&gt;&lt;/span&gt;.  This tells the algorythm where it can and can't go.  The class WayPoints is just an ArrayList of Points, giving the route.&lt;br /&gt;&lt;br /&gt;I've used this code in all of my games (that require pathfinding) like &lt;a href="http://ngrave.pbwiki.com/"&gt;Nuclear Graveyard&lt;/a&gt; and &lt;a href="http://ng.game-host.org/TremHulkPage.cls"&gt;TremulousHulk&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;(For those not in the know, the A* algorythm basically finds the closest path from one co-ordinate to another, taking into account blocked points.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-4423247277143059078?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/4423247277143059078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=4423247277143059078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4423247277143059078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/4423247277143059078'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/01/algorythm-in-java-download.html' title='A* Algorythm in Java - Download'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1539251105913809188</id><published>2008-01-28T01:22:00.000-08:00</published><updated>2008-01-28T01:29:49.839-08:00</updated><title type='text'>Tiny Web Server</title><content type='html'>There seems to be a durge (if that's the right word) of web servers called "Tiny Web Server", all vying to be the smallest web server.  And now there's another one!  I don't think it's the smallest, but it is a full web server for delivering static pages and documents.&lt;br /&gt;&lt;br /&gt;It's written in Java, and the source comes to 23K.  It should be pretty easy to extend to make it write dynamic web pages, so it should be ideal for starting your own web server project, or just giving you an idea of how web servers work.  Or how not to write code.  Take your pick.&lt;br /&gt;&lt;br /&gt;It's available via SVN &lt;a href="svn://www.onlinegameplanner.co.uk/TinyWebServer"&gt;here&lt;/a&gt;.  (That's &lt;span style="font-style: italic;"&gt;svn://www.onlinegameplanner.co.uk/TinyWebServer&lt;/span&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1539251105913809188?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1539251105913809188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1539251105913809188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1539251105913809188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1539251105913809188'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/01/tiny-web-server.html' title='Tiny Web Server'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-776236633084294723</id><published>2008-01-16T00:36:00.000-08:00</published><updated>2008-02-14T06:20:31.147-08:00</updated><title type='text'>Originality is a Curse</title><content type='html'>...That's probably why most games companies still churn out mostly FPS's and endless sequels to those FPS's.&lt;br /&gt;&lt;br /&gt;I've written a game called &lt;a href="http://ngrave.pbwiki.com/"&gt;Nuclear Graveyard&lt;/a&gt; which (IMHO) has a bit of originality: it's what I call pseudo-realtime.  This means that rather than be proper realtime, it uses action points (e.g. walking forwards costs 1AP) but unlike most games that use APs, the player's APs are replenished automatically as both sides use them up.&lt;br /&gt;&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NsEDDSInewM&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/NsEDDSInewM&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, when most people play it, they don't seem to read the instructions, and assume that it's either a normal FPS ("why can't I move?") or a normal turn-based game ("How do I end my turn?").  I can't blame people for not reading instructions - who does? - but I've tried my best to make it self-explanatory, and included a tutorial, but to no avail.  What do I do?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-776236633084294723?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/776236633084294723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=776236633084294723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/776236633084294723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/776236633084294723'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/01/originality-is-curse.html' title='Originality is a Curse'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8197899014062050742</id><published>2008-01-11T00:53:00.000-08:00</published><updated>2008-01-11T01:29:43.126-08:00</updated><title type='text'>Multiple Platforms, Multiple Databases</title><content type='html'>SQL Enterprise Manager (or SQL Server Studio, as M$ like to keep changing the name) isn't a bad program, but obviously it only works with MS SQL, and only on Windows.  Since I use MySQL, PostgreSQL, Oracle and MS SQL on Windows and Linux, I've been looking for a single program that can handle all of these databases, and I've found one: &lt;a href="http://www.aquafold.com/"&gt;Aqua Data Studio&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's written in Java (though there are other versions available) so it runs on Windows and Linux, and it easily connects to almost every kind of database, allowing you to do all the impotant things that SQL Server Studio does, like view the tables, edit the data, run queries etc...&lt;br /&gt;&lt;br /&gt;I'm not affiliated with Aqua Fold in any way, but I thought I'd mention a program that is really useful and pretty good.  It's free for personal use as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8197899014062050742?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8197899014062050742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8197899014062050742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8197899014062050742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8197899014062050742'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/01/multiple-platforms-multiple-databases.html' title='Multiple Platforms, Multiple Databases'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1320807357637484529</id><published>2008-01-09T00:35:00.000-08:00</published><updated>2008-01-09T00:38:53.293-08:00</updated><title type='text'>Domain Name Front Running</title><content type='html'>I wondered if any companies do this (i.e. you search for a domain with the intention of buying it, and the company that you use to search for it buys it up, knowing that you want it).  And yes!  Of course it &lt;a href="http://www.circleid.com/posts/81082_network_solutions_front_running/"&gt;happens&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1320807357637484529?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1320807357637484529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1320807357637484529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1320807357637484529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1320807357637484529'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/01/domain-name-front-running.html' title='Domain Name Front Running'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-1928185196393867121</id><published>2008-01-04T06:17:00.000-08:00</published><updated>2008-01-04T06:26:44.526-08:00</updated><title type='text'>My New Language</title><content type='html'>I have finally abandoned my attempt at a new Lisp-like language.  I don't think I realised how hard it would be.  Converting a text file of my new language into an AST (an active syntax tree) was the easy part.  The hard part was storing variables (globals v locals, scope, identically named vars overriding each other, etc...) and calling functions (i.e. replacing the params in the function) among other things.&lt;br /&gt;&lt;br /&gt;I should have planned it all better as I was also going round in circles with my language definition: I was changing it to fit one circumstance, but then forgetting why I'd done that, and then I'd change it back again to fit the original circumstance.&lt;br /&gt;&lt;br /&gt;However, the final nail in the coffin was my thought "what am I going to do with it when I've finished?"  It obviously had no IDE, barely any libraries, no debugging facilities, probably lots of bugs, and probably lots of flaws in the design.  Why would I, never mind anyone else, choose to use it when there's plenty of other better languages out there?&lt;br /&gt;&lt;br /&gt;Still, it's given me a new insight into how languages (might) work, and hopefully made me a better programmer.  Now onto my next project: a mega-multithreaded program, where every little aspect has it's own thread.  It's how the human body (i.e. cells) work (I think) so it must be a step in the right direction.  And with all this talk of parallel programming, it can't do any harm for me to fail at that as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-1928185196393867121?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/1928185196393867121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=1928185196393867121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1928185196393867121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/1928185196393867121'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2008/01/my-new-language.html' title='My New Language'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-491187139389942882</id><published>2007-12-13T06:58:00.000-08:00</published><updated>2007-12-13T07:00:31.603-08:00</updated><title type='text'>Don't Buy Western Digital Hard Drives</title><content type='html'>More political posting I'm afraid...&lt;br /&gt;&lt;br /&gt;Anyway, to get straight to the point, &lt;a href="http://www.theregister.co.uk/2007/12/07/western_digital_drm_crippled_harddrive/"&gt;Western Digital HD's  are crippled with DRM to prevent files with certain media extentions (e.g. AVI, MP3) from being shared across network drives&lt;/a&gt;.  Even if they are your own creation!  And the name of the software that does this?  "&lt;span style="font-weight: bold;"&gt;WD Anywhere Access&lt;/span&gt;".  You couldn't make it up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-491187139389942882?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/491187139389942882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=491187139389942882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/491187139389942882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/491187139389942882'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2007/12/dont-buy-western-digital-hard-drives.html' title='Don&apos;t Buy Western Digital Hard Drives'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8093091824788916317</id><published>2007-12-07T04:51:00.001-08:00</published><updated>2007-12-07T05:01:24.235-08:00</updated><title type='text'>My Programming Adventure - Is the journey nearly over?</title><content type='html'>I've alluded before to the fact that I sometimes think of my time spent programming as an adventure, looking for the reason why I program and what I hope to achieve.  (I'm talking about my hobby programming of course - I do my profesional programming to pay the bills).&lt;br /&gt;&lt;br /&gt;Several times I've been in the middle of writing one of my games, and suddently realised I'm not actually enjoying writing it.  Or I've finished a game and realised it's not that much fun to play, or I think it is but the ROTW disagrees.&lt;br /&gt;&lt;br /&gt;However, I have now found my holy grail.  I've written a small, simple and (AFAIK) original puzzler called &lt;a href="http://ng.game-host.org/ChainReactionPage.cls"&gt;Chain Reaction&lt;/a&gt;.  It's pretty addictive, but what has caused it to really take of here where I work is the high score table.  People are falling over themselves to try and beat each other, and I'm loving the fact the people are telling me they hate the game because they're spending too much time playing it but they can't stop!  I may be egotistical, but I think it's the kind of praise and recognition I've been looking for all these years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8093091824788916317?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8093091824788916317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8093091824788916317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8093091824788916317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8093091824788916317'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2007/12/my-programming-adventure-is-journey.html' title='My Programming Adventure - Is the journey nearly over?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-6011529875659546774</id><published>2007-12-06T00:35:00.000-08:00</published><updated>2008-01-04T06:19:26.798-08:00</updated><title type='text'>New Language Update</title><content type='html'>Here's a tip for anyone who's thinking about writing their own language - plan it first.  I know I should have.  I've got a reasonable understanding of how Lisp works (i.e. evaluate everything inside the brackets recursively, and then process it) but I made some silly mistakes...&lt;br /&gt;&lt;br /&gt;..Like evaluating the brackets each time I read them.  For example, the program:-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    (defvar lst (quote 1 2 3)&lt;/span&gt;  ; &lt;- "lst" now contains (1 2 3), correct.&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    (print (lst))  ;&lt;/span&gt; Error!  I've processed "lst", but the function "1" (i.e. the first item in the list) is (obviously) unknown!&lt;br /&gt;&lt;br /&gt;This is just one example.  I'm going to start again.  I've learnt a lot from my mistakes though, and my aim is to have a language with the best Lisp features like Macros, but more practical with simple functions to connect to databases etc...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-6011529875659546774?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/6011529875659546774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=6011529875659546774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6011529875659546774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/6011529875659546774'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2007/12/new-language-update.html' title='New Language Update'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-3588670930153745039</id><published>2007-11-29T03:22:00.000-08:00</published><updated>2007-11-29T03:32:54.082-08:00</updated><title type='text'>My New Programming Language - "Harry".</title><content type='html'>Being a programmer who has no fear of programming a disaster, I've decided to write my own programming language. &lt;br /&gt;&lt;br /&gt;"Madman!"  I hear you cry, but no, seriously.  And on the face of it, it's not that difficult.  On the face of it, it's just a case of reading a text file and turning that into "symbols", which your interpreter/compiler converts into something existing, whether it's Bytecodes or good old machine code.&lt;br /&gt;&lt;br /&gt;My language is called "Harry", and  is similar to Lisp, since everyone seems to rave about it, and I've been quite impressed with it.  However, there are a few (minor) problems with Lisp, which no doubt people will take me to task for.  Here's my : it's not standard enough (there seem to be lots of variants), and it's not very practical (in order to do something like graphics or databases, you need to find libraries).&lt;br /&gt;&lt;br /&gt;I've written the interpreter in Java for platform-independence.  It's still in the development stage, so no download yet.  The current problem I've got is functions and the variables contained within.  What happens if a function names a variable with the same name as a global variable?  And scope is a problem, i.e. "unsetting" the variable once the function has finished, so the global var becomes available.  But what if the function calls another function?  And recursion?  And what about if a parameter to the function has the same name as a variable?&lt;br /&gt;&lt;br /&gt;Anyway, to whet your appetite, here's an example of the code (which should be self-explanatory):&lt;br /&gt;&lt;br /&gt;; Add, eq, print&lt;br /&gt;(print (eq 2 (+ 1 1))) ; returns 1&lt;br /&gt;&lt;br /&gt;; Set&lt;br /&gt;(set lst (quote 1 2 3))&lt;br /&gt;&lt;br /&gt;;quote, contains, if, return&lt;br /&gt;(print (if (contains 2 lst)(ret true)(ret false))) ; prints "True";&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-3588670930153745039?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/3588670930153745039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=3588670930153745039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3588670930153745039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/3588670930153745039'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2007/11/my-new-programming-language-harry.html' title='My New Programming Language - &quot;Harry&quot;.'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18868839.post-8283455984772545341</id><published>2007-11-19T08:32:00.000-08:00</published><updated>2007-11-19T08:38:33.318-08:00</updated><title type='text'>Why Are Named Parameters Rare?</title><content type='html'>One of the things that seems common to most languages, even the supposedly better new ones, is the lack of "named parameters".  Surely it must have come to the attention of most language designers that having a line like the following is ridiculous:-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;// Do some stuff&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;int x = MyFunction(true, false, true, true);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Okay, it's probably bad programming practise to have something like this, but even a simpler line with just one boolean would be bad.  What on earth does each parameter mean?  The only way of finding out is to query the underlying function's code, but that defeats the object of having well named functions.  I'm still surprised that having named parameters isn't in most modern languages.  How much better is the next line:=&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;int x = MyFunction(foo:true, bar:false);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here you can see, without having to browse the underlying function, what each parameter means.  Okay, this is nothing earth-shattering that will lead to perfect code, but it has to be a step in the right direction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18868839-8283455984772545341?l=meprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://meprogrammer.blogspot.com/feeds/8283455984772545341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18868839&amp;postID=8283455984772545341' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8283455984772545341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18868839/posts/default/8283455984772545341'/><link rel='alternate' type='text/html' href='http://meprogrammer.blogspot.com/2007/11/why-are-named-parameters-rare.html' title='Why Are Named Parameters Rare?'/><author><name>Steve</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
