<?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-30450977</id><updated>2011-10-04T20:11:19.369+02:00</updated><title type='text'>The Abandon Wars</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30450977.post-8774770923506674538</id><published>2011-05-09T14:32:00.002+02:00</published><updated>2011-05-09T14:35:46.554+02:00</updated><title type='text'></title><content type='html'>&lt;div&gt;Another side project that I've been meaning to write for years. Given a set of rectangles what is the minimum area rectangle they can be packed into?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's a marginally useful question for packing 2D images.  Marginal because todays graphics hardware has enough memory that's it's not necessary; but stuffing everything in one texture does reduce state changes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The screen shot below shows each of the Star Control ships (and some Star Control 2 ships) rendered out with 72 frames of rotation at a resolution of 512 by 512 and then packed into a single 17375 by 5929 texture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-dNzph28xxAc/TcfGQk6jEdI/AAAAAAAAAP0/gJa1qH4wYo8/s1600/Q0ftM.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-dNzph28xxAc/TcfGQk6jEdI/AAAAAAAAAP0/gJa1qH4wYo8/s400/Q0ftM.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5604666249375322578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Transparent borders are clipped which produces a huge saving as small images - the nuclear missile, Ur Quan figter etc... - are packed very tightly.  You can see them squashed into all the empty nooks and crannies around the larger ships.  Note the screen is zoomed to 50% in the screenshot.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Clipping transparent borders has reduced the total area from 1.7 terrapixels to 412 megapixels.  Almost an 80% saving.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ps: For those who can't post on account of blogger giving an error about post time: Illegal post time (format is: hh:mm AM/PM).  Change your language from English (South Africa) to English (United Kingdom).  It's under settings.&lt;/div&gt;&lt;div&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-8774770923506674538?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/8774770923506674538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=8774770923506674538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8774770923506674538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8774770923506674538'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2011/05/another-side-project-that-ive-been.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-dNzph28xxAc/TcfGQk6jEdI/AAAAAAAAAP0/gJa1qH4wYo8/s72-c/Q0ftM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-7632501088680814784</id><published>2011-01-03T16:07:00.000+02:00</published><updated>2011-01-03T16:29:52.650+02:00</updated><title type='text'></title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm still working quite hard on this.  I haven't had much meaningful to show which is why the dearth of updates.  I've finally come full circle back to Space Crusade although I'm still working on Star Control as well - the two are merging closer and closer together.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/TSHX946MIaI/AAAAAAAAAPE/DKJ6pacL644/s1600/temp.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/TSHX946MIaI/AAAAAAAAAPE/DKJ6pacL644/s400/temp.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5557960873400344994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;An editor piccy of me editing the Space Crusade map with rips from the C64 version.  Yatey has a general XML/CSV output so I can load it in and convert it too whatever form I want later; be that 2D tiles or actual 3D models.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And below is an import screenshot although it may not look like much.  It represents the first time the engine has no known bugs.  That's not to say it's feature complete (not by a long way) but every feature that is complete appears to work as intended.  Given that I now have more than 9000 tests backing this up I can make that statement with some certainty.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_7gYqvPiuRnA/TSHcYnSiuyI/AAAAAAAAAPM/rtJk1wT1aRc/s400/Starbase.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5557965730573630242" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And a happy new year to all,&lt;/div&gt;&lt;div&gt;Later!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-7632501088680814784?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/7632501088680814784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=7632501088680814784' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7632501088680814784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7632501088680814784'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2011/01/im-still-working-quite-hard-on-this.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/TSHX946MIaI/AAAAAAAAAPE/DKJ6pacL644/s72-c/temp.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-175415642169011840</id><published>2010-03-31T15:52:00.000+02:00</published><updated>2010-03-31T18:46:44.816+02:00</updated><title type='text'></title><content type='html'>&lt;div class="postbody"&gt;Hey!  It's an update.  I've been off one of my fairly standard tangents(tm) and gone and written a general input library because I dislike every other input library I've ever used. &lt;span style="line-height: normal;font-size:78%;" &gt;You might have realised this by now, I've ranted about it enough.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem is that most windows (game related) input libraries are thin, pointless wrappers around DirectInput. Now DirectInput is pretty cool in many regards but it has 2 major failings. It only supports one keyboard and mouse and it doesn't support XBox 360 controllers properly. The lack of multiple mouse support has been a bug in DirectX in every Windows version after '95 - I'm not sure why it's never been fixed :(. The lack of XBox controller support is more insidious; Microsoft have deprecated support for DirectInput in favour of XInput. XInput is, unfortunately, a steaming pile of poo. It supports only the XBox controller; it's hard coded to 4 of them and it's also hard coded the inputs - there can be no support for any future game controllers without a new version and a recompile.&lt;br /&gt;&lt;br /&gt;So XInput is technically deficient, looks like it was coded by a 3 year old, and doesn't support non-Microsoft certified devices. And there's my other big issue with it. It looks like a ploy by Microsoft to corner the hardware controller market; if developers stop supporting DirectInput then only XInput certified devices will work. Not cool but understandable from Microsoft's perspective - DirectInput doesn't generate revenue for them whereas I suspect XInput does at least enough to cover it's development.&lt;br /&gt;&lt;br /&gt;I tried avoiding the DirectInput/XInput fiasco completely by using WinRaw and WinJoystick directly (they're lower level libraries but are curiously more usable) but that still didn't solve the XBox controller issue. I even tried querying the XBox Controller using it's mini-HID driver but still no joy. It's support is hidden behind even the HID driver and that is curious indeed. It means that someone has gone to an awful lot of effort to hide support for the XBox Controller from every input library other than XInput. It's not something that could have happened accidentally.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;But that's enough ranting.  What I've done is written a thick wrapper around all the different input libraries and consolidated their different types of output into one consistent event based stream. This means that pressing a button (or whatever) on any* joystick, keyboard, mouse etc... on the system is reported in the same way and the game built on top of the library doesn't need to know how the different input libraries function and interact (there's some nasty duplication and cross-talk between them).&lt;br /&gt;&lt;br /&gt;Instead of having to write firing the primary weapon as &lt;em&gt;If 'XBox Button A' or 'Joystick Button 0' or 'Keyboard Left Ctrl' or 'Mouse Button Left' then then Fire&lt;/em&gt; I just write a method called &lt;em&gt;Fire&lt;/em&gt; and it will be activated by whatever button the players bound to it. This makes my life much, much simpler now although maybe not everyone is going to appreciate that I took five/six months to write this because if I'd hacked out the code for Star Control I'd have been done more than a year ago :).&lt;br /&gt;&lt;br /&gt;And here's a picture of my desk.  Lot's and lots of lovely input devices (there are more keyboards and mouses on the shelf under it.  For testing I've added two 4 port usb hubs inside the case - the wires and dongles behind the chair - but was still unable to plug in everything.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.imgur.com/FLc8G.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://i.imgur.com/FLc8G.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="line-height: normal;font-size:85%;" &gt;*Wii-motes not included yet although I can read from them. Parallel- and game-port joystick also don't work and it's unlikely I'll ever bother. MIDI devices are also not included yet so you won't be able to play Star Control on your piano keyboard.  You'll deal.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-175415642169011840?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/175415642169011840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=175415642169011840' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/175415642169011840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/175415642169011840'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2010/03/hey-its-update.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-6407741985319709624</id><published>2009-08-06T14:08:00.000+02:00</published><updated>2009-08-06T14:08:46.529+02:00</updated><title type='text'></title><content type='html'>I haven't had a chance to work on this since before my May (office) deadline - which has become a bit fluid.  None-the-less I'm still here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-6407741985319709624?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/6407741985319709624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=6407741985319709624' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6407741985319709624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6407741985319709624'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2009/08/i-havent-had-chance-to-work-on-this.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-8255025926319060851</id><published>2009-04-08T22:19:00.003+02:00</published><updated>2009-04-08T22:26:27.409+02:00</updated><title type='text'></title><content type='html'>Time for a short update.  Deadlines at the office and being buried deep in the world of code have made this a boring place of late.  To liven things up a bit I did a small mock-up of the SC title screen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/Sd0HzBcJ4AI/AAAAAAAAAMo/OqI7ELX2Q9c/s1600-h/Title.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/Sd0HzBcJ4AI/AAAAAAAAAMo/OqI7ELX2Q9c/s400/Title.png" alt="" id="BLOGGER_PHOTO_ID_5322418907763040258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's amazing what even a spherical environment map can do.  Hope you enjoy it.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-8255025926319060851?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/8255025926319060851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=8255025926319060851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8255025926319060851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8255025926319060851'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2009/04/time-for-short-update.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/Sd0HzBcJ4AI/AAAAAAAAAMo/OqI7ELX2Q9c/s72-c/Title.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-5165081510351364723</id><published>2009-01-17T13:31:00.003+02:00</published><updated>2009-01-18T12:25:57.649+02:00</updated><title type='text'></title><content type='html'>I'm still alive (making a note here: huge success ;) ) and still working on Star Control.  The screen shot below is *not* a mock up of a Vux Intruder vs an Earthling Cruiser.  The two ships fly and are moving correctly - albeit in the wrong language (C++, not SmallTalk).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SXHB3z2ebaI/AAAAAAAAAL8/FYYBKBywQ-Q/s1600-h/VuxVsHuman.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SXHB3z2ebaI/AAAAAAAAAL8/FYYBKBywQ-Q/s400/VuxVsHuman.png" alt="" id="BLOGGER_PHOTO_ID_5292224201692704162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Not much else to add other than that things are still progressing.  Here's a pair of screenies of the slightly updated ships.  I doubt they'll change much in the future so these are probably final.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/SXMDaLNdS6I/AAAAAAAAAME/BXHFeXNhJvo/s1600-h/Hierachy.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/SXMDaLNdS6I/AAAAAAAAAME/BXHFeXNhJvo/s400/Hierachy.png" alt="" id="BLOGGER_PHOTO_ID_5292577735311182754" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/SXMDafs4P1I/AAAAAAAAAMM/FLto3rKSReo/s1600-h/Alliance.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/SXMDafs4P1I/AAAAAAAAAMM/FLto3rKSReo/s400/Alliance.png" alt="" id="BLOGGER_PHOTO_ID_5292577740811681618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-5165081510351364723?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/5165081510351364723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=5165081510351364723' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/5165081510351364723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/5165081510351364723'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2009/01/im-still-alive-making-note-here-huge.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/SXHB3z2ebaI/AAAAAAAAAL8/FYYBKBywQ-Q/s72-c/VuxVsHuman.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-1499542912340340873</id><published>2008-12-04T20:27:00.004+02:00</published><updated>2009-04-08T22:18:09.788+02:00</updated><title type='text'></title><content type='html'>I may have gone completely off my rocker as I'm considering implementing Smalltalk and then using it as my scripting language.  I'll let you know how that went after they let me out of the loony bin.&lt;br /&gt;&lt;br /&gt;Laters!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-1499542912340340873?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/1499542912340340873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=1499542912340340873' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1499542912340340873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1499542912340340873'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/12/just-another-two-title-screens.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-8301523919760088705</id><published>2008-11-28T23:21:00.007+02:00</published><updated>2009-04-08T22:18:51.994+02:00</updated><title type='text'></title><content type='html'>I've been working on the gameplay side of the engine which doesn't lend itself to pretty pictures.  However it is coming along quite nicely and should be usable before Christmas.&lt;br /&gt;&lt;br /&gt;Things are somewhat uncertain as too whether or not I'll meet the Remakes Compo deadline.  I might just manage it or I might not... time will tell.&lt;br /&gt;&lt;br /&gt;Here's a screen shot of the title screen.  The explosions been edited in and the glows on the words and the atmosphere are cheated but real.  The starry background was generated by Zeracles of The Pages of Now and Forever.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/STBxtAhO-rI/AAAAAAAAALg/I7pTC5J0v48/s1600-h/MockTitle.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/STBxtAhO-rI/AAAAAAAAALg/I7pTC5J0v48/s400/MockTitle.png" alt="" id="BLOGGER_PHOTO_ID_5273840181698296498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;That's all for now,&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-8301523919760088705?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/8301523919760088705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=8301523919760088705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8301523919760088705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8301523919760088705'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/11/im-still-alive.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/STBxtAhO-rI/AAAAAAAAALg/I7pTC5J0v48/s72-c/MockTitle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-2821806249763782130</id><published>2008-10-05T18:47:00.002+02:00</published><updated>2008-10-05T18:50:56.810+02:00</updated><title type='text'></title><content type='html'>The engine is practically usable now so I've switched it's status to beta.  It's been a long road and it's profoundly relieving to actually have it in this state.&lt;br /&gt;&lt;br /&gt;This is a short post because I'm still cleaning up a few odds and ends but nonetheless this is a major milestone.&lt;br /&gt;&lt;br /&gt;Hopefully you'll see something prettier in the near future!&lt;br /&gt;&lt;br /&gt;Till then,&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-2821806249763782130?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/2821806249763782130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=2821806249763782130' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2821806249763782130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2821806249763782130'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/10/engine-is-practically-usable-now-so-ive.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-7850715377968231228</id><published>2008-09-13T22:20:00.003+02:00</published><updated>2008-09-13T22:46:54.435+02:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.retroremakes.com"&gt; RetroRemakes&lt;/a&gt; 2008 Big Competition.  &lt;a href="http://www.mobygames.com/game/dos/star-control"&gt; StarControl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/SMwkTwMukJI/AAAAAAAAAH4/K8cX1VK9O1A/s1600-h/Planets2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/SMwkTwMukJI/AAAAAAAAAH4/K8cX1VK9O1A/s400/Planets2.png" alt="" id="BLOGGER_PHOTO_ID_5245607587754184850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SMwkUDF-8-I/AAAAAAAAAIA/02LNNp1ujRo/s1600-h/Melee.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SMwkUDF-8-I/AAAAAAAAAIA/02LNNp1ujRo/s400/Melee.png" alt="" id="BLOGGER_PHOTO_ID_5245607592826172386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;'nuff said - I'm busy ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-7850715377968231228?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/7850715377968231228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=7850715377968231228' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7850715377968231228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7850715377968231228'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/09/retroremakes-2008-big-competition.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/SMwkTwMukJI/AAAAAAAAAH4/K8cX1VK9O1A/s72-c/Planets2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-9072166548405916312</id><published>2008-08-31T20:56:00.003+02:00</published><updated>2008-08-31T21:18:32.497+02:00</updated><title type='text'></title><content type='html'>After a bit longer than initially anticipated I'm finally done with my image routines rewrite. Yup, there's an entry from June 2007 where I mentioned I was doing a bit of a refactoring... Well now it's done - somewhat more than a year later ;)&lt;br /&gt;&lt;br /&gt;The image below is the fruit of my labour.  Appreciate it.  Appreciate it with great appreciation!  The left-hand side is the RGB channels and the right hand side is the opacity channel.  The images are from libpng and are in various formats (1bit per pixel to 16bits per pixel).  The red gap in the center is the palettised images which I've decided not to support as sharing a common palette between them broke my project structure quite badly.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SLrpgUzf3sI/AAAAAAAAAHw/rd2zxsx2O7Q/s1600-h/Test.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SLrpgUzf3sI/AAAAAAAAAHw/rd2zxsx2O7Q/s400/Test.png" alt="" id="BLOGGER_PHOTO_ID_5240757857948786370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This rewrite was necessary as I can now export much more complicated textures.  I can now support normal maps, specular maps, oppacity-only maps and whole bunch more.  You may have noticed that there hasn't been a screenshot with a texture in it for a very long time... well there was a reason for that ;)&lt;br /&gt;&lt;br /&gt;A good part of why this rewrite took so long was because an image can be composed of an arbitrary collection of channels of arbitrary types.  For instance: the RGB channels are generally |Byte|Byte|Byte| but add a UV displacement map into that and you could get |Byte|Byte|Byte|Float|Float|.  That was a really bad example but it illustrates the problem, particularly as the ordering of the channels can also be arbitarty; eg: ABGR or what-have-you.&lt;br /&gt;&lt;br /&gt;Expect to see more colourful screenshots from now on.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-9072166548405916312?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/9072166548405916312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=9072166548405916312' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/9072166548405916312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/9072166548405916312'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/08/after-bit-longer-than-initially.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/SLrpgUzf3sI/AAAAAAAAAHw/rd2zxsx2O7Q/s72-c/Test.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-5496253564819194026</id><published>2008-08-26T22:38:00.004+02:00</published><updated>2008-08-26T23:06:34.389+02:00</updated><title type='text'></title><content type='html'>After a bit of a hiatus I've managed to get some work done.  Sadly it's still of the coding only variety so instead of posting what I've done I'm posting a few more screen shots from Alpha Strike.&lt;br /&gt;&lt;br /&gt;Here's the insanely hard fourth stage cumulating in a fight with a massive... ah well you'll never get there so it doesn't matter.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/SLRqhd0Ts4I/AAAAAAAAAHo/r2L_fuFaOLc/s1600-h/Level4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/SLRqhd0Ts4I/AAAAAAAAAHo/r2L_fuFaOLc/s400/Level4.png" alt="" id="BLOGGER_PHOTO_ID_5238929389710979970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The third stage: a desert full of rolling thunder, stationary turrets, bunkers and warehouses for the sovereign war machine.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/SLRqhDSZ0QI/AAAAAAAAAHg/Vq8cU3PjnX4/s1600-h/Level3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/SLRqhDSZ0QI/AAAAAAAAAHg/Vq8cU3PjnX4/s400/Level3.png" alt="" id="BLOGGER_PHOTO_ID_5238929382589452546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The demo stage is also the second stage and is probably the most balanced difficulty wise.  Remember to stock up on ammo before facing off against the end boss.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SLRqg2tvnGI/AAAAAAAAAHY/dQLEwsFoeQc/s1600-h/Level2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SLRqg2tvnGI/AAAAAAAAAHY/dQLEwsFoeQc/s400/Level2.png" alt="" id="BLOGGER_PHOTO_ID_5238929379214466146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first stage takes place over the ocean amidst rolling clouds.   Although in all honesty; it's sodding boring but does guide the player into Alpha Strikes mechanics gently.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SLRqgrfx39I/AAAAAAAAAHQ/l8u4Nj9Jn7E/s1600-h/Level1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SLRqgrfx39I/AAAAAAAAAHQ/l8u4Nj9Jn7E/s400/Level1.png" alt="" id="BLOGGER_PHOTO_ID_5238929376203104210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well enjoy, perhaps it'll even be released some day.  Provided Garage Games fix the awful physics slow down.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-5496253564819194026?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/5496253564819194026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=5496253564819194026' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/5496253564819194026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/5496253564819194026'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/08/after-bit-of-hiatus-ive-managed-to-get.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/SLRqhd0Ts4I/AAAAAAAAAHo/r2L_fuFaOLc/s72-c/Level4.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4324968526924724837</id><published>2008-07-02T23:04:00.003+02:00</published><updated>2008-12-12T09:15:53.933+02:00</updated><title type='text'></title><content type='html'>Again I've got an awful lot stuff done but have very little too show for it.  So instead here's a peak into my disturbing and deranged development process.  Below is snapshot of my schedule (as provided by Justin :) ).  Note that there are &lt;span style="font-weight: bold;"&gt;still&lt;/span&gt; 400 hours outstanding.  And that doesn't actually include writing the game.  Urk.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/SGvti6wuasI/AAAAAAAAAHA/AVfYhBafoCw/s1600-h/SpaceCrusadeSchedule.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/SGvti6wuasI/AAAAAAAAAHA/AVfYhBafoCw/s400/SpaceCrusadeSchedule.png" alt="" id="BLOGGER_PHOTO_ID_5218525777383811778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Also as I've just finished a major milestone (I'm done with the database) here is some of my test output.  It looks a lot more interesting when things fail but I don't want failures so... buggerit.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SGvti-WQEyI/AAAAAAAAAHI/Xjq5NM6vYys/s1600-h/SpaceCrusadeTests.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SGvti-WQEyI/AAAAAAAAAHI/Xjq5NM6vYys/s400/SpaceCrusadeTests.png" alt="" id="BLOGGER_PHOTO_ID_5218525778346513186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now I'm moving back to cleaning up my "language" as I've thrown out Ruby.  It's quoted because it's not a complete language.  It doesn't have a parser or even any sort of textual representation - the entire thing is written programmatically (in C++) but that's good enough for the time being.  After completing The Abandon Wars I'll clean up my tokeniser and preprocessor.&lt;br /&gt;&lt;br /&gt;Also still on the cards is fixing my UI Framework (see some of my earlier posts) as it is now quite broken but was always geared to be used from a scripting language (ie: anything other than C++).&lt;br /&gt;&lt;br /&gt;But that's enough of that.  So...&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4324968526924724837?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4324968526924724837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4324968526924724837' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4324968526924724837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4324968526924724837'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/07/again-ive-got-awful-lot-stuff-done-but.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/SGvti6wuasI/AAAAAAAAAHA/AVfYhBafoCw/s72-c/SpaceCrusadeSchedule.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-8284172092012029128</id><published>2008-06-09T10:10:00.002+02:00</published><updated>2008-06-09T10:15:52.364+02:00</updated><title type='text'></title><content type='html'>Things are still ticking over, I just don't have anything pretty to show.  I have optimised the graphics routines in Harrier Attack quite a lot.  I now no longer draw transparent borders (ie:  I clip them off).  This has decreased the frame-time under linux from ~21ms to 16ms.  Which is significant as it means the game runs at 60 frames a second with all detail.&lt;br /&gt;&lt;br /&gt;Mostly I've been working on the Abandon Wars front.  Again, nothing to show but lots of refactoring and bug fixing.  I now have a project plan for it too.&lt;br /&gt;&lt;br /&gt;Laters!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-8284172092012029128?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/8284172092012029128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=8284172092012029128' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8284172092012029128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8284172092012029128'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/06/things-are-still-ticking-over-i-just.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-932128109531302876</id><published>2008-05-18T20:30:00.003+02:00</published><updated>2008-12-12T09:15:54.469+02:00</updated><title type='text'></title><content type='html'>I've been 'briefly' side-tracked yet again ;).  So instead of Space Crusading I've been working on... well... Harrier Attack.  Now renamed to Harrier: The Second Sortie.  Enjoy the screenies below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SDB2Y4z3J_I/AAAAAAAAAGw/g1vyuvX6XEw/s1600-h/HarrierAttack2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SDB2Y4z3J_I/AAAAAAAAAGw/g1vyuvX6XEw/s400/HarrierAttack2.png" alt="" id="BLOGGER_PHOTO_ID_5201787739551770610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The frametime shouldn't ever climb above 16ms but as I haven't optimised the collision detection yet the shot below has made it all the way to 20ms.  Also when running under linux it's significantly slower (by about 3ms a frame).  I'm not sure why yet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SDB2ZIz3KAI/AAAAAAAAAG4/mFGa559Ns3w/s1600-h/HarrierAttack3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SDB2ZIz3KAI/AAAAAAAAAG4/mFGa559Ns3w/s400/HarrierAttack3.png" alt="" id="BLOGGER_PHOTO_ID_5201787743846737922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've also got a project manager now, thanks to Justin and his 'self correcting schedule'.  Sadly the self correcting just refers to the estimate.  It doesn't self correct by doing work I should have :p.  Maybe in version 2 ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-932128109531302876?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/932128109531302876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=932128109531302876' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/932128109531302876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/932128109531302876'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/05/ive-been-briefly-side-tracked-yet-again.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/SDB2Y4z3J_I/AAAAAAAAAGw/g1vyuvX6XEw/s72-c/HarrierAttack2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-7828294400548794229</id><published>2008-05-08T23:19:00.003+02:00</published><updated>2008-12-12T09:15:56.929+02:00</updated><title type='text'></title><content type='html'>Finally done with the art.  The green alien took alot longer to setup than I'd expected :(.  I didn't mean to post this but he now gets his own thank-god-I'm-finally-done post in celebration.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/SCNvT5pmZiI/AAAAAAAAAGo/G-EzWFr-hhs/s1600-h/AbandonWarsMockup3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/SCNvT5pmZiI/AAAAAAAAAGo/G-EzWFr-hhs/s400/AbandonWarsMockup3.png" alt="" id="BLOGGER_PHOTO_ID_5198120782599185954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And that is that!&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-7828294400548794229?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/7828294400548794229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=7828294400548794229' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7828294400548794229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7828294400548794229'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/05/finally-done-with-art.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/SCNvT5pmZiI/AAAAAAAAAGo/G-EzWFr-hhs/s72-c/AbandonWarsMockup3.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-3805759190248212911</id><published>2008-04-30T00:26:00.003+02:00</published><updated>2008-12-12T09:15:57.484+02:00</updated><title type='text'></title><content type='html'>I'm done with most of the rigging, which brings me to a close on the art front (Yay!).  All that's left to rig is the green alien and the white alien.  When that's done - tomorrow? - I can get back into programmy world.&lt;br /&gt;&lt;br /&gt;Below are two mock-ups of the rigged models.  What's happening in them I can't say.  Why are they throwing their comrade into the cracks of doom?  Was it a tragic skipping accident - all but avoidable if they'd just taken the proper precautions?  We'll probably never know.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/SBehMM4WFNI/AAAAAAAAAGY/IJyynikRcaw/s1600-h/AbandonWarsMockup1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/SBehMM4WFNI/AAAAAAAAAGY/IJyynikRcaw/s400/AbandonWarsMockup1.png" alt="" id="BLOGGER_PHOTO_ID_5194797926183212242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This next screenie is going to be the briefing/mission select room.  Hopefully with less lounging around next time ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SBehMs4WFOI/AAAAAAAAAGg/eC6h3FpkqZ4/s1600-h/AbandonWarsMockup2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SBehMs4WFOI/AAAAAAAAAGg/eC6h3FpkqZ4/s400/AbandonWarsMockup2.png" alt="" id="BLOGGER_PHOTO_ID_5194797934773146850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've also done a bit of works on my object database.  Durable file writing in transactions actually work now.  Not nearly as interesting as the above but ...&lt;br /&gt;&lt;br /&gt;Anyway, that's enough of that.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-3805759190248212911?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/3805759190248212911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=3805759190248212911' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/3805759190248212911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/3805759190248212911'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/04/blog-post_30.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/SBehMM4WFNI/AAAAAAAAAGY/IJyynikRcaw/s72-c/AbandonWarsMockup1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-583343497653385125</id><published>2008-04-20T22:08:00.003+02:00</published><updated>2008-12-12T09:15:57.794+02:00</updated><title type='text'></title><content type='html'>I'm declaring myself done with the modelling now.  The last three enemies are in.  In Space Crusade terms they are:&lt;br /&gt;&lt;br /&gt;Red Alien:                        Soulsucker&lt;br /&gt;Green Armour Alien:     Chaos Marine&lt;br /&gt;Red Armour Alien:         Chaos Marine Commander&lt;br /&gt;Android:                           Android (duh!)&lt;br /&gt;Big Mech:                         Dreadnought&lt;br /&gt;&lt;br /&gt;The other two aliens not in the screen shot are the Gretchin and the Orc (The purple eyed green thing is the Gretchin).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAui9UDbUyI/AAAAAAAAAGQ/E14x61TYguY/s1600-h/AbandonWarsAliens2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAui9UDbUyI/AAAAAAAAAGQ/E14x61TYguY/s400/AbandonWarsAliens2.png" alt="" id="BLOGGER_PHOTO_ID_5191422169713431330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now all I have to do is rig everything.  *sigh* there's no rest for the wicked.  Having said that I'm off to do some coding instead.  I've almost fixed my database transactions (again).&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-583343497653385125?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/583343497653385125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=583343497653385125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/583343497653385125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/583343497653385125'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/04/im-declaring-myself-done-with-modelling.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/SAui9UDbUyI/AAAAAAAAAGQ/E14x61TYguY/s72-c/AbandonWarsAliens2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-6157959360952826918</id><published>2008-04-17T08:02:00.004+02:00</published><updated>2008-12-12T09:15:58.395+02:00</updated><title type='text'></title><content type='html'>All the level blocks are in now: ceilings, floors, walls and doors.  I quite liked how the brass lockers turned out; much better than I expected and it breaks the boring monotonous grey.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/SAbocFYAdYI/AAAAAAAAAGA/9PthkK46dLI/s1600-h/AbandonWarsSmallLevelInside.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/SAbocFYAdYI/AAAAAAAAAGA/9PthkK46dLI/s400/AbandonWarsSmallLevelInside.png" alt="" id="BLOGGER_PHOTO_ID_5190091189767927170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The whole level is shown below.  The wall 'caps' and 'replacers' are in.  The caps are the yellowy things on top of the walls and the replacers replace the walls which would otherwise hide the characters.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAbocVYAdZI/AAAAAAAAAGI/aHxThALhUTM/s1600-h/AbandonWarsSmallLevel.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAbocVYAdZI/AAAAAAAAAGI/aHxThALhUTM/s400/AbandonWarsSmallLevel.png" alt="" id="BLOGGER_PHOTO_ID_5190091194062894482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The characters are still faked and I'm not sure I like the transition between real walls and replaced walls.  Anyway...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-6157959360952826918?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/6157959360952826918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=6157959360952826918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6157959360952826918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6157959360952826918'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/04/blog-post_17.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/SAbocFYAdYI/AAAAAAAAAGA/9PthkK46dLI/s72-c/AbandonWarsSmallLevelInside.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-499499325960834924</id><published>2008-04-13T20:54:00.005+02:00</published><updated>2008-12-12T09:15:59.145+02:00</updated><title type='text'></title><content type='html'>Today I've found myself in a rather strange situation.  I've got to much stuffs too post!  I've been tearing through the art assests and an end is actually in sight.&lt;br /&gt;&lt;br /&gt;I've redone all the ceiling caps (the bits on top of the walls) they look *much* better than the previous set.  I've modelled and rigged a funky little crab alien beastie - probably not going to go into Abandon Wars because it's to flat to see.&lt;br /&gt;&lt;br /&gt;I've added another fourteen wall pieces.  And the first major prop - the generator in the screenshot below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAJXwVYAdXI/AAAAAAAAAF4/u7KXTa3e9xQ/s1600-h/SpaceGunGeneratorEngine.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAJXwVYAdXI/AAAAAAAAAF4/u7KXTa3e9xQ/s400/SpaceGunGeneratorEngine.png" alt="" id="BLOGGER_PHOTO_ID_5188806208567407986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To get that look I'm using all eight lights - the maximum I currently allow - and I still had to fudge the contrast a bit.  For those who care the original reference looks as below.  (Somehow I was shooting and hit print screen at the same time - special).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAJXWVYAdWI/AAAAAAAAAFw/vz6Ub8gjNmI/s1600-h/SpaceGunGeneratorSource.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/SAJXWVYAdWI/AAAAAAAAAFw/vz6Ub8gjNmI/s400/SpaceGunGeneratorSource.png" alt="" id="BLOGGER_PHOTO_ID_5188805761890809186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;See, it's Space Gun which is providing all the graphical inspiration (for those who didn't realise that from my last post).&lt;br /&gt;&lt;br /&gt;I've also modelled all the marinettes weapons though I don't particularly like how any of them look.  And lastly I've started modelling the other mechanical unit (the android equivalent).&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-499499325960834924?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/499499325960834924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=499499325960834924' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/499499325960834924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/499499325960834924'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/04/today-ive-found-myself-in-rather.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/SAJXwVYAdXI/AAAAAAAAAF4/u7KXTa3e9xQ/s72-c/SpaceGunGeneratorEngine.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-7131142651059511005</id><published>2008-04-07T17:37:00.002+02:00</published><updated>2008-12-12T09:15:59.376+02:00</updated><title type='text'></title><content type='html'>A quick update I've put in four of the enemies.  I'm still missing the Soul-sucker equivalent and the Chaos Marine equivalent.  I'm going to add the Chaos Marine as some sort of mechnical unit but I can't be bothered to put another humanoid enemy in.&lt;br /&gt;&lt;br /&gt;Next up I'm going to model a sort of face hugger style unit and an egg. Rivetting stuff this ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/R_pAgS23e6I/AAAAAAAAAFg/PCGl120fWd0/s1600-h/AbandonWarsAliens.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/R_pAgS23e6I/AAAAAAAAAFg/PCGl120fWd0/s400/AbandonWarsAliens.png" alt="" id="BLOGGER_PHOTO_ID_5186528844432505762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And if this isn't just screaming Space Gun at you well... then you probably never played it :).&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-7131142651059511005?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/7131142651059511005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=7131142651059511005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7131142651059511005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7131142651059511005'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/04/quick-update-ive-put-in-four-of-enemies.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/R_pAgS23e6I/AAAAAAAAAFg/PCGl120fWd0/s72-c/AbandonWarsAliens.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-7766424999083213977</id><published>2008-04-05T20:32:00.003+02:00</published><updated>2008-12-12T09:16:00.129+02:00</updated><title type='text'></title><content type='html'>So here's the deal with Space Crusade: as I mentioned in my previous post it ... well ... isn't anymore :(. &lt;br /&gt;&lt;br /&gt;There're a number of reasons for this the foremost being that it's someone else's IP - with the release of the new Warhammer game (2009) the Warhammer universe is a pretty toxic place to be at the moment.  Also with Dave completely addicted to online gaming now; it seems unlikely any models will be forthcoming this year (and it's been more than a year since he first agreed draw the Space Crusade models).&lt;br /&gt;&lt;br /&gt;All is far from over though: I am now doing all the modelling myself and am no longer playing in the Warhammer universe.  To that end I have learned to model - somewhat ;) - and I have modelled the first team of Space Marinettes.  I am retaining most of the gameplay but without the dice and the Warhammer rules.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/R_fGJS23e4I/AAAAAAAAAFQ/OcObWIc8ys0/s1600-h/AbandonWars2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/R_fGJS23e4I/AAAAAAAAAFQ/OcObWIc8ys0/s400/AbandonWars2.png" alt="" id="BLOGGER_PHOTO_ID_5185831358923504514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is the first character I've ever modelled (and practically the first character I've ever attempted).  Actually the red girl was the first modelled and the purple girl was the last. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/R_fGJi23e5I/AAAAAAAAAFY/GZs-2JPkuaU/s1600-h/AbandonWars3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/R_fGJi23e5I/AAAAAAAAAFY/GZs-2JPkuaU/s400/AbandonWars3.png" alt="" id="BLOGGER_PHOTO_ID_5185831363218471826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There are a quite a lot of mistakes; due mostly to my lack of knowledge of the human form.  Seriously - it's bloody complicated ;).  But also a couple technical stuff ups which I just can't be arsed to fix.&lt;br /&gt;&lt;br /&gt;So that's the team - they have names and designations and everything.  Variously: Opal (purple) is the leader.  Ione (red) is the medic.  Adelle (green) is heavy weapons.  Saffron (yellow) is demolitions.  And lastly Page (blue) is communications.  It's a bit of break from the Space Crusade gameplay but I think having specific roles should make things more interesting.&lt;br /&gt;&lt;br /&gt;And I need to sleep now.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-7766424999083213977?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/7766424999083213977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=7766424999083213977' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7766424999083213977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/7766424999083213977'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/04/blog-post.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/R_fGJS23e4I/AAAAAAAAAFQ/OcObWIc8ys0/s72-c/AbandonWars2.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-3720054622891199211</id><published>2008-03-29T17:49:00.005+02:00</published><updated>2008-12-12T09:16:00.727+02:00</updated><title type='text'></title><content type='html'>Just a quick post as I posted yesterday.  I've finished modelling all the walls and floors from the first stage of SpaceGun.  This means I can begin with the actual characters tomorrow!  I'm having quite a lot of fun actually :)&lt;br /&gt;&lt;br /&gt;Below is the end of stage lift from space gun.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/R-5lWi23e1I/AAAAAAAAAEw/3TewrYcodfc/s1600-h/SpaceCrusadeGun.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/R-5lWi23e1I/AAAAAAAAAEw/3TewrYcodfc/s400/SpaceCrusadeGun.png" alt="" id="BLOGGER_PHOTO_ID_5183191659138480978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On a slightly more Space Crusady note; I've also built the entire first stage (Search and Destroy).  The first screenshot is the c64's isometric view and the screenshot below that is the same view from my map.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/R-5mBy23e3I/AAAAAAAAAFA/u1g9L_mNzmI/s1600-h/SpaceCrusadeRoom1C64.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/R-5mBy23e3I/AAAAAAAAAFA/u1g9L_mNzmI/s400/SpaceCrusadeRoom1C64.png" alt="" id="BLOGGER_PHOTO_ID_5183192402167823218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I haven't modelled in the ceilings because the original didn't have ceilings.  The marine is standing in the room marked by the cursor looking southish.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/R-5lWy23e2I/AAAAAAAAAE4/rwaWQhxkj9I/s1600-h/SpaceCrusadeRoom1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 321px; height: 243px;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/R-5lWy23e2I/AAAAAAAAAE4/rwaWQhxkj9I/s400/SpaceCrusadeRoom1.jpg" alt="" id="BLOGGER_PHOTO_ID_5183191663433448290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The bad news is:  I'm not actually remaking Space Crusade anymore. I've since deleted that map.  It was just a proof of concept anyway.  It did conclusively prove that I need a real modeller/editor to actualy build the stages - there a *lot* of floating point stuff ups which why the lights are so dark.&lt;br /&gt;&lt;br /&gt;Don't despair: I'm still writing a Space Crusade like game (see 2 posts ago) but it will be more like a cut down version of Silent Storm or XCom.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-3720054622891199211?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/3720054622891199211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=3720054622891199211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/3720054622891199211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/3720054622891199211'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/03/just-quick-post-as-i-posted-yesterday.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/R-5lWi23e1I/AAAAAAAAAEw/3TewrYcodfc/s72-c/SpaceCrusadeGun.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4948175863895616384</id><published>2008-03-28T23:27:00.002+02:00</published><updated>2008-12-12T09:16:03.559+02:00</updated><title type='text'></title><content type='html'>I've taken some time out of serious hating at BMW (10 weeks without a car and counting) to get a bit of Crusading done.  I've finally reallised that if I ever want anything done I must do it myself.  To this end I decided I'd better learn to model.&lt;br /&gt;&lt;br /&gt;I've modelled about half of the walls so far and should begin with the alien characters next weekend.  The picture below is a quick mock-up of my first attempt.  It's a bit bland and textureless but I thought it had promise.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/R-1jTi23ezI/AAAAAAAAAEg/AnJ1KUasNRs/s1600-h/SpaceCrusadeWalls2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/R-1jTi23ezI/AAAAAAAAAEg/AnJ1KUasNRs/s400/SpaceCrusadeWalls2.png" alt="" id="BLOGGER_PHOTO_ID_5182907933598907186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Fortunately my second attempt is quite a lot prettier.  Whilst there are still no textures, Nebula RCW49 gives it just enough colour to make it interesting.  The ceiling and floor are place holders - I still have to model them aswell.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/R-1jTy23e0I/AAAAAAAAAEo/RK4L0J9eB_k/s1600-h/SpaceCrusadeWalls3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/R-1jTy23e0I/AAAAAAAAAEo/RK4L0J9eB_k/s400/SpaceCrusadeWalls3.png" alt="" id="BLOGGER_PHOTO_ID_5182907937893874498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you're very observant you may recognise that the walls and crates are from SpaceGun; my all time favourite 'Gun game.  I fully intend to nick the aliens from it too :)&lt;br /&gt;&lt;br /&gt;Which brings me to a close as I must get some sleep now.  So...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4948175863895616384?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4948175863895616384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4948175863895616384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4948175863895616384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4948175863895616384'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/03/ive-taken-some-time-out-of-serious.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/R-1jTi23ezI/AAAAAAAAAEg/AnJ1KUasNRs/s72-c/SpaceCrusadeWalls2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-1566654873116931103</id><published>2008-03-05T21:16:00.004+02:00</published><updated>2008-12-12T09:16:03.753+02:00</updated><title type='text'></title><content type='html'>Well I've done very little work this year because I've spent the last 8 weeks without a car and every day has been a fight with the insurance company.  Anyway, now that that is almost over I have the energy to get some Space Crusade'ing done again.&lt;br /&gt;&lt;br /&gt;If Dave ever gets over his COD4 addiction (and that's most definitely the right word) he's agreed to model some marines; or marinettes rather...  Yup he's using the image below as one of his templates.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/R87zR8g7LOI/AAAAAAAAAEY/_t58UzmB360/s1600-h/gerbera-girl.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/R87zR8g7LOI/AAAAAAAAAEY/_t58UzmB360/s400/gerbera-girl.jpg" alt="" id="BLOGGER_PHOTO_ID_5174340511522827490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I don't think I'll be seeing any models until I get the engine up and running again but at least it provides a bit of incentive to get it going soonest.&lt;br /&gt;&lt;br /&gt;On the programming side I've rewritten loading and saving and I'm quite chuffed with how well it works.  I also briefly mucked around with 3D textures again (last time I tried was DirectX 6 I think) and I'm still not convinced...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Short and sweet...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-1566654873116931103?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/1566654873116931103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=1566654873116931103' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1566654873116931103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1566654873116931103'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/03/well-ive-done-very-little-work-this.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/R87zR8g7LOI/AAAAAAAAAEY/_t58UzmB360/s72-c/gerbera-girl.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-172457636505835380</id><published>2008-01-11T06:27:00.000+02:00</published><updated>2008-12-12T09:16:04.277+02:00</updated><title type='text'></title><content type='html'>Whoops, I went on a tangent and wrote a small Harrier Attack remake.  What I was trying to prove is that Java is capable of high performance 2D games.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/R4evqnqEAAI/AAAAAAAAAEI/XdCLEmwSd2g/s1600-h/HarrierAttack1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/R4evqnqEAAI/AAAAAAAAAEI/XdCLEmwSd2g/s400/HarrierAttack1.png" alt="" id="BLOGGER_PHOTO_ID_5154281445283594242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What I did prove (quite conclusively) is that it is not.  The screenshots still look quite pretty though.  In fact they should look quite familiar to anyone who's written, say, Chickens 3 :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/R4evq3qEABI/AAAAAAAAAEQ/tp98YaVl57A/s1600-h/HarrierAttack2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/R4evq3qEABI/AAAAAAAAAEQ/tp98YaVl57A/s400/HarrierAttack2.png" alt="" id="BLOGGER_PHOTO_ID_5154281449578561554" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/R4eu9HqD__I/AAAAAAAAAEA/Xxct84Gh9Zc/s1600-h/HarrierAttack2.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The problem is AWT seems to render very slowly (even when using hardware acceleration) and I really should be getting more than ten frames a second for this :(.&lt;br /&gt;&lt;br /&gt;On the other hand my memory manager IS fast - I'm really quite impressed with myself *grin*.&lt;br /&gt;&lt;br /&gt;Anyway I didn't actually mean to post this ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-172457636505835380?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/172457636505835380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=172457636505835380' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/172457636505835380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/172457636505835380'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2008/01/blog-post.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/R4evqnqEAAI/AAAAAAAAAEI/XdCLEmwSd2g/s72-c/HarrierAttack1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4806702811647207869</id><published>2007-12-31T05:10:00.000+02:00</published><updated>2008-12-12T09:16:04.911+02:00</updated><title type='text'></title><content type='html'>I thought I'd better post at least once more this year; and to liven things up a bit it's even Space Crusade related!&lt;br /&gt;&lt;br /&gt;Well... not specifically Crusade related but building in the right direction.  I'm still working on my reference counting memory manager though it is a little bit more now.&lt;br /&gt;&lt;br /&gt;The short of it is that each object in the scene graph (provided by the memory manager) knows it's class and can query fields and methods on it.  These can either be used directly from C++ or from a sort of scriptless language.  C commands can be chained together to perform simple tasks without the task being written at compile time.  I've only used this for image filtering but the possibilities are (as they say) endless.&lt;br /&gt;&lt;br /&gt;Below is a screen shot of (a part of) a smart objects header.  Notice that a smart object knows all the objects which reference it: pcFroms.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/R3kJuXqD_5I/AAAAAAAAADQ/AKoo-htQ7Xs/s1600-h/SmartInstance.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/R3kJuXqD_5I/AAAAAAAAADQ/AKoo-htQ7Xs/s400/SmartInstance.jpg" alt="" id="BLOGGER_PHOTO_ID_5150158341103943570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Most objects are rarely referenced by more than one or two objects and if this is the case then additional memory does NOT need to be allocated to track those references.&lt;br /&gt;&lt;br /&gt;If more than four objects reference 'this' object then an array of pointers is allocated.&lt;br /&gt;&lt;br /&gt;These reverse references are important because they can be used to calculate a path back to the root object.  If a path cannot be found then the object is not forward referenced from any other object and it can be deleted.&lt;br /&gt;&lt;br /&gt;Most importantly each object knows it's distance from the root node (as shown in the screen shot below) which makes finding a path to the root trivial.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/R3kJunqD_6I/AAAAAAAAADY/IWWxt_28MA8/s1600-h/ReferenceCounter.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/R3kJunqD_6I/AAAAAAAAADY/IWWxt_28MA8/s400/ReferenceCounter.jpg" alt="" id="BLOGGER_PHOTO_ID_5150158345398910882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In fact knowing the distance to the root enables whole object trees to be discared in better than O(log(n)) time - where n is the number of objects in the scene.  This is - I think - faster than any garbage collector and because there is no garbage collection phase there are no nasty program pauses.&lt;br /&gt;&lt;br /&gt;The thing I like most about this scheme of memory management is that when the last object referencing an object tree is deallocated then the entire tree can be deallocated.  Importantly this means that the deallocating thread can deallocate the tree and the program can remain utterly single threaded!&lt;br /&gt;&lt;br /&gt;Anyway, that's enough technical stuff...  I've also posted a picture of my snazzy new UPS.  Those still living in SA will know why a UPS is important now :(&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/R3kJ83qD_7I/AAAAAAAAADg/aAbLC1OkKNI/s1600-h/UPS.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/R3kJ83qD_7I/AAAAAAAAADg/aAbLC1OkKNI/s400/UPS.jpg" alt="" id="BLOGGER_PHOTO_ID_5150158590212046770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Interestlingly it's only rated to 600 Watts but it's handling two 300W power supplies and two 100W monitors at half it's maximum rating.  I was pleasantly surprised ;)&lt;br /&gt;&lt;br /&gt;And that's enough of that.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4806702811647207869?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4806702811647207869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4806702811647207869' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4806702811647207869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4806702811647207869'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/12/i-thought-id-better-post-at-least-once.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/R3kJuXqD_5I/AAAAAAAAADQ/AKoo-htQ7Xs/s72-c/SmartInstance.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-5912046907166751552</id><published>2007-12-06T01:56:00.000+02:00</published><updated>2008-12-12T09:16:05.521+02:00</updated><title type='text'></title><content type='html'>I've found a few screenshots from some of the projects I worked on at I-Imagine on their old website.  For my own nostalgic reasons (and too keep this blog ticking over) I've decided to post them here.&lt;br /&gt;&lt;br /&gt;This first image was from Chase II, a project we began directly after Chase (if the brief and ill fated D.A. Dork GameCube project is ignored).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/R1fkUORBzhI/AAAAAAAAAC4/wAaX2avRseI/s1600-h/C2HSDD_03.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/R1fkUORBzhI/AAAAAAAAAC4/wAaX2avRseI/s400/C2HSDD_03.JPG" alt="" id="BLOGGER_PHOTO_ID_5140828535744744978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The next image is from a Champ car game which was actually quite fun and the AI was really, really difficult.  I think Etienne may have written a paper on it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/R1fkUORBziI/AAAAAAAAADA/hRBI4BTTC1U/s1600-h/CCRD_04.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/R1fkUORBziI/AAAAAAAAADA/hRBI4BTTC1U/s400/CCRD_04.jpg" alt="" id="BLOGGER_PHOTO_ID_5140828535744744994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The last image is from a demo we did for Code Masters and is easily the most detailed project I've worked on.  It definitely gave the PS2 some trouble although I think the XBox handled it fine.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/R1fkUuRBzjI/AAAAAAAAADI/RVXh1pPikL0/s1600-h/NRD_01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/R1fkUuRBzjI/AAAAAAAAADI/RVXh1pPikL0/s400/NRD_01.jpg" alt="" id="BLOGGER_PHOTO_ID_5140828544334679602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And that's that.&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-5912046907166751552?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/5912046907166751552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=5912046907166751552' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/5912046907166751552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/5912046907166751552'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/12/ive-found-few-screenshots-from-some-of.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/R1fkUORBzhI/AAAAAAAAAC4/wAaX2avRseI/s72-c/C2HSDD_03.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-6029429918148041615</id><published>2007-10-28T07:06:00.000+02:00</published><updated>2007-10-28T19:12:15.903+02:00</updated><title type='text'></title><content type='html'>Still side-tracked but going strong ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-6029429918148041615?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/6029429918148041615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=6029429918148041615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6029429918148041615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6029429918148041615'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/10/still-side-tracked-but-going-strong.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-2780298335408038440</id><published>2007-10-07T03:25:00.000+02:00</published><updated>2008-12-12T09:16:06.138+02:00</updated><title type='text'></title><content type='html'>Finally, I'm working on Space Crusade again! It's been a while since I last had a fling with C++ but it's good to be back in the realm of pointers and preprocessors ;)&lt;br /&gt;&lt;br /&gt;The long delay in posting was variously because I was in mild crunch at the office (July), then learning Torque Game Builder and writing AlphaStrike for Dave but mostly just being lazy.&lt;br /&gt;&lt;br /&gt;Incidentally I think AlphaStrike (Dave's name) turned out pretty well though I wouldn't touch TGB again, not even with a barge pole.&lt;br /&gt;&lt;br /&gt;Here's a few screen shots...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/RwjknB71qqI/AAAAAAAAACg/_Fv4YViiLpk/s1600-h/AlphaStrike1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/RwjknB71qqI/AAAAAAAAACg/_Fv4YViiLpk/s400/AlphaStrike1.jpg" alt="" id="BLOGGER_PHOTO_ID_5118592335692016290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Flame throwers rock the party!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/Rwjknh71qrI/AAAAAAAAACo/VDNJFLkPTLw/s1600-h/AlphaStrike2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/Rwjknh71qrI/AAAAAAAAACo/VDNJFLkPTLw/s400/AlphaStrike2.jpg" alt="" id="BLOGGER_PHOTO_ID_5118592344281950898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Taking on a few helicopters... player one's a lazy git ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/Rwjknh71qsI/AAAAAAAAACw/zAUa1Azd12Q/s1600-h/AlphaStrike3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/Rwjknh71qsI/AAAAAAAAACw/zAUa1Azd12Q/s400/AlphaStrike3.jpg" alt="" id="BLOGGER_PHOTO_ID_5118592344281950914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;That's enough with the 2D.&lt;br /&gt;&lt;br /&gt;I've had a sort of half language running around for a while now and it's proven really useful.  Unfortunately the fact that I never fully finished it has come back to bite me.  This means that the next few weeks are being dedicated to rewriting/refactoring it into something workable instead of doing Space Crusade specifics.&lt;br /&gt;&lt;br /&gt;I'm mostly rewriting the object/struct/primitive/whatever representation as the current one is a bit limited.   I strongly suspect I've left the beaten path but it's going to be fun.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-2780298335408038440?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/2780298335408038440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=2780298335408038440' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2780298335408038440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2780298335408038440'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/10/finally-im-working-on-space-crusade.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/RwjknB71qqI/AAAAAAAAACg/_Fv4YViiLpk/s72-c/AlphaStrike1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4944928288508741884</id><published>2007-09-06T10:35:00.000+02:00</published><updated>2007-10-07T15:25:46.065+02:00</updated><title type='text'></title><content type='html'>Removed DRM rant as it wasn't Space Crusade related.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4944928288508741884?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4944928288508741884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4944928288508741884' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4944928288508741884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4944928288508741884'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/09/im-not-actually-writing-space-crusade.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-3694567134743981221</id><published>2007-07-15T08:52:00.000+02:00</published><updated>2007-07-15T08:55:30.739+02:00</updated><title type='text'></title><content type='html'>I've been to busy to get any real crusading done this month, what with the system at work going live and all.   Expect the next major post sometime in August... :(&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-3694567134743981221?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/3694567134743981221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=3694567134743981221' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/3694567134743981221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/3694567134743981221'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/07/ive-been-to-busy-to-get-any-real-work.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4262263514299214923</id><published>2007-06-17T03:52:00.000+02:00</published><updated>2008-12-12T09:16:06.647+02:00</updated><title type='text'></title><content type='html'>It's been some time since my last post.  Not because I've stopped work on Space Crusade;  I just haven't had anything to show.&lt;br /&gt;&lt;br /&gt;Unfortunately I still don't have anything to show.  I am deep in a rewrite of my image library (which used to be a nice simple 32bit ARGB format).  Now an image is a set of channels which can be fairly arbitrarily assigned.&lt;br /&gt;&lt;br /&gt;Notably my new image format allows me to easily handle images which have the usual red, green and blue channels but also opacity, specular intensity and normals all packed into one together.&lt;br /&gt;&lt;br /&gt;Wether or not this was necessary is probably a question best left unanswered; however it has been an interesting programming exercise.  Particularly with regards to keeping the performance of the old naive 4 byte implementation ;)&lt;br /&gt;&lt;br /&gt;Heres a screen shot of some of the core library tests - which I've also been putting quite a lot of work into.  Massive testing has been required because this rewrite is affecting so many other sub-libraries.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/RnU-w0edqrI/AAAAAAAAACQ/t0JQHIH4-nA/s1600-h/SpaceCrusadeTest.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/RnU-w0edqrI/AAAAAAAAACQ/t0JQHIH4-nA/s400/SpaceCrusadeTest.jpg" alt="" id="BLOGGER_PHOTO_ID_5077033163371162290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I haven't seen the need for a unit testing framework yet so for the time being each test is just a function call.  No complicated setup or tearing down is done (these really are unit tests) so it is unlikely one test will affect another but in the case where it does I don't mind it causing tests beneath it too fail.&lt;br /&gt;&lt;br /&gt;On a more game related note:  At the top I've posted that I'm continuing work on Space Crusade - which is true - however I am toying with the idea of another much simpler remake.&lt;br /&gt;&lt;br /&gt;Too this end you will see a picture from StarControl 2 below.  I do not in anyway intend to rewrite the single player game(!) but I am giving some thought to rewriting the Super Melee.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/RnU-xEedqsI/AAAAAAAAACY/xRPeELX0R-A/s1600-h/spathi-spec.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/RnU-xEedqsI/AAAAAAAAACY/xRPeELX0R-A/s400/spathi-spec.jpg" alt="" id="BLOGGER_PHOTO_ID_5077033167666129602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This rewrite will also give me a chance to do some ship modeling - which I've been itching to do for some time.  The ships are generally simple and well within my modeling/texturing abilities.&lt;br /&gt;&lt;br /&gt;Lastly (and I almost forgot to mention this) I have some musical tracks for Space Crusade now.  They've been composed by Jaco Pretorious who will hopefully get a chance to do some more (hint hint) :)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4262263514299214923?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4262263514299214923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4262263514299214923' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4262263514299214923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4262263514299214923'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/06/its-been-some-time-since-my-last-post.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/RnU-w0edqrI/AAAAAAAAACQ/t0JQHIH4-nA/s72-c/SpaceCrusadeTest.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-1694724555694237188</id><published>2007-05-07T08:26:00.000+02:00</published><updated>2008-12-12T09:16:06.986+02:00</updated><title type='text'></title><content type='html'>Last weekend was quite fruitful.  I finished skinned animations ('fraid I forgot to screen shot it) and started working on transparent and translucent materials.&lt;br /&gt;&lt;br /&gt;The screen shots below are of two translucent boxes, one inside the other, and demonstrate that the draw order is correct.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/Rj7G1KwI7HI/AAAAAAAAACA/3C6k7IKxL8k/s1600-h/SpaceCrusadeAlpha1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/Rj7G1KwI7HI/AAAAAAAAACA/3C6k7IKxL8k/s400/SpaceCrusadeAlpha1.jpg" alt="" id="BLOGGER_PHOTO_ID_5061701647932648562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Of course I haven't posted pictures of the objects which didn't work but hopefully they will be fixed and ready to go next weekend.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/Rj7G1KwI7II/AAAAAAAAACI/2if-X8TdWTU/s1600-h/SpaceCrusadeAlpha2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/Rj7G1KwI7II/AAAAAAAAACI/2if-X8TdWTU/s400/SpaceCrusadeAlpha2.jpg" alt="" id="BLOGGER_PHOTO_ID_5061701647932648578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which brings me too a close... so,&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-1694724555694237188?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/1694724555694237188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=1694724555694237188' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1694724555694237188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1694724555694237188'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/05/blog-post_07.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/Rj7G1KwI7HI/AAAAAAAAACA/3C6k7IKxL8k/s72-c/SpaceCrusadeAlpha1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-8809010301864258338</id><published>2007-05-01T10:55:00.000+02:00</published><updated>2008-12-12T09:16:07.590+02:00</updated><title type='text'></title><content type='html'>Good news everybody!  I did some work this weekend.  The bad news (isn't there always) is that I have nothing to show for it.  Mostly I'm just more confused than when I began. &lt;br /&gt;&lt;br /&gt;The screen shot below shows the model from a previous post skinned.  Um... as you can see something is wrong.  She wasn't supposed to turn into a polygon soup!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/RjeprKwI7EI/AAAAAAAAABo/H-dY6s4gqyI/s1600-h/SpaceCrusadeSkinFucked.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/RjeprKwI7EI/AAAAAAAAABo/H-dY6s4gqyI/s400/SpaceCrusadeSkinFucked.jpg" alt="" id="BLOGGER_PHOTO_ID_5059699265459776578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Without getting intimate with the matrices involved I can't tell whats wrong - and I really, really didn't feel like doing that yet.  I'm guessing it has something to do with matrices that are rotated in their rest position, but speculation isn't useful at this point.&lt;br /&gt;&lt;br /&gt;More interestingly I came across some strange behaviour when using software vertex blending on an nVidia graphics card.  Verticies with only one matrix affecting them are always using the zero'th world matrix regardless of what the index in the vertex stream is set too.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/RjeprawI7FI/AAAAAAAAABw/W-QdU8GzlBE/s1600-h/BadSkin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 324px; height: 232px;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/RjeprawI7FI/AAAAAAAAABw/W-QdU8GzlBE/s400/BadSkin.jpg" alt="" id="BLOGGER_PHOTO_ID_5059699269754743890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It works fine in both DirectX's reference mode and on an ATI graphics card.  A work around was to always use at least two matrices for blending and just set the second matrices weight to zero.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/RjeprawI7GI/AAAAAAAAAB4/Ew3cyy7UDoU/s1600-h/GoodSkin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 327px; height: 247px;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/RjeprawI7GI/AAAAAAAAAB4/Ew3cyy7UDoU/s400/GoodSkin.jpg" alt="" id="BLOGGER_PHOTO_ID_5059699269754743906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Another upshot of the two matrix method is that the entire cylinder is drawn in one call.  Previously it was two, one for the single matrix blending and the other for two.&lt;br /&gt;&lt;br /&gt;And with this very grey looking post I bid you good night.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-8809010301864258338?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/8809010301864258338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=8809010301864258338' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8809010301864258338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/8809010301864258338'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/05/blog-post.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/RjeprKwI7EI/AAAAAAAAABo/H-dY6s4gqyI/s72-c/SpaceCrusadeSkinFucked.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4954774650951289045</id><published>2007-04-25T02:09:00.000+02:00</published><updated>2008-12-12T09:16:07.980+02:00</updated><title type='text'></title><content type='html'>Again, not a progress report but still a moment in my gaming history.   I have finally played Final Armada!&lt;br /&gt;&lt;br /&gt;and... it was crap.  Seriously, when I left II it was still reasonably fun and had a lot of potential but it seems to have degenerated since...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/Ri9FaKwI7DI/AAAAAAAAABg/g_vCDmpYuqU/s1600-h/FA_scr_May19_01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/Ri9FaKwI7DI/AAAAAAAAABg/g_vCDmpYuqU/s400/FA_scr_May19_01.jpg" alt="" id="BLOGGER_PHOTO_ID_5057337222425537586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Anyway I posted this once and it got corrupted and I couldn't be bothered to post the rest again.  Suffice to say that I don't understand how a team like we had could produce the travesty above.  All in all it's a very disheartening experience :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4954774650951289045?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4954774650951289045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4954774650951289045' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4954774650951289045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4954774650951289045'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/04/again-not-progress-report-but-still.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/Ri9FaKwI7DI/AAAAAAAAABg/g_vCDmpYuqU/s72-c/FA_scr_May19_01.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-1826992163702675894</id><published>2007-04-23T07:57:00.001+02:00</published><updated>2007-04-23T07:57:50.250+02:00</updated><title type='text'></title><content type='html'>This is isn't a progress post as such, it's actually a quick howto for anyone else who's trying to optimise a D3DVertexBuffer and D3DIndexBuffer and is not using D3DX.&lt;br /&gt;&lt;br /&gt;The short answer is one has to use D3DX - but it's not as bad as it sounds.  The gist of it is too call OptimizeInplace on a ID3DXMesh.  The code below shows how to copy an existing vertex buffer and index buffer into the ID3DXMesh, optimise it and then copy them back again.&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;ID3DXMesh* pXMesh;&lt;br /&gt;void* pvDestIndexBuffer;&lt;br /&gt;void* pvDestVertexBuffer;&lt;br /&gt;void* pvSrcIndexBuffer = &lt;span style="color: rgb(190, 100, 100);"&gt;The pointer .Lock() gave you;&lt;/span&gt;&lt;br /&gt;void* pvSrcVertexBuffer = &lt;span style="color: rgb(190, 100, 100);"&gt;The pointer .Lock() gave you;&lt;/span&gt;&lt;br /&gt;DWORD* pvAdjacency;&lt;br /&gt;&lt;br /&gt;D3DXCreateMeshFVF(iNumTriangles, iNumIndicies, D3DXMESH_SYSTEMMEM, &lt;span style="color: rgb(190, 100, 100);"&gt;Your FVF here&lt;/span&gt;, lpD3DDevice, &amp;pXMesh);&lt;br /&gt;&lt;br /&gt;iVertSize = pXMesh-&gt;GetNumBytesPerVertex();&lt;br /&gt;&lt;br /&gt;pXMesh-&gt;LockIndexBuffer(D3DLOCK_NO_DIRTY_UPDATE, &amp;pvDestBaseIndexBuffer);&lt;br /&gt;pXMesh-&gt;LockVertexBuffer(D3DLOCK_NO_DIRTY_UPDATE, &amp;pvDestVertexBuffer);&lt;br /&gt;memcpy(pvDestVertexBuffer, pvSrcVertexBuffer, iVertexSize * iNumVerticies);&lt;br /&gt;memcpy(pvDestIndexBuffer, pvSrcIndexBuffer, sizeof(WORD) * iNumVerticies);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(100, 100, 190);"&gt;Start interesting bit here&lt;/span&gt;&lt;br /&gt;pvAdjacency = (DWORD*)malloc(iNumTriangles * 3 * sizeof(DWORD));&lt;br /&gt;pXMesh-&gt;GenerateAdjacency(0.0f, pvAdjacency);&lt;br /&gt;pXMesh-&gt;OptimizeInplace(D3DXMESHOPT_VERTEXCACHE | D3DXMESHOPT_DONOTSPLIT, pvAdjacency, NULL, NULL, NULL);&lt;br /&gt;free(pvAdjacency);&lt;br /&gt;&lt;span style="color: rgb(100, 100, 190);"&gt;End interesting bit&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;memcpy(pvSrcIndexBuffer, pvDestIndexBuffer, sizeof(WORD) * iNumVertices);&lt;br /&gt;memcpy(pvSrcVertexBuffer, pvDestVertexBuffer, iVertexSize * iNumVerticies);&lt;br /&gt;&lt;span style="color: rgb(190, 100, 100);"&gt;.Unlock() your buffers&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The bad news is that somewhere in typing that I got confused between the number of vertices and the number of indicies but it's not too difficult to work out which is which.  They're all called iNumVerticies here.&lt;br /&gt;&lt;br /&gt;Obviously for 32 bit indicies one needs to use sizeof(DWORD) instead of sizeof(WORD).&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-1826992163702675894?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/1826992163702675894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=1826992163702675894' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1826992163702675894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/1826992163702675894'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/04/this-is-isnt-progress-post-as-such-its_23.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-49593285365369887</id><published>2007-04-22T07:08:00.000+02:00</published><updated>2008-12-12T09:16:08.230+02:00</updated><title type='text'></title><content type='html'>Happiness is many things too many people.  Too me, it's rendering a 350 000 polygon scene at 400 frames per second.&lt;br /&gt;&lt;br /&gt;That's right, I've been on a serious optimisation spree over the past two weeks; and the rendering increase is the smallest of the gains - although it is the most impressive looking.&lt;br /&gt;&lt;br /&gt;I've included the screen shot below because I feel there isn't enough nudity on the interweb.  Of course if you look closely you'll see NVPerfHud with all the scene statistics.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gYqvPiuRnA/RiuXr4IosyI/AAAAAAAAABY/fAMr5rhju-g/s1600-h/SpaceCrusadeHighPoly.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7gYqvPiuRnA/RiuXr4IosyI/AAAAAAAAABY/fAMr5rhju-g/s400/SpaceCrusadeHighPoly.jpg" alt="" id="BLOGGER_PHOTO_ID_5056301786712290082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Internally I've managed to speed up the conversion process by several tens of thousands of times - mostly going from O(n) to O(1) - by caching just about everything.  No more hour long waits for me!&lt;br /&gt;&lt;br /&gt;I'm currently working on caching the collision- and mesh selection data.  It's a big process so I doubt it will be finished this weekend.  Once that's done the engine is basically finished.  It's been a long and painful journey but the end is in sight.  :)  I can hardly believe it!&lt;br /&gt;&lt;br /&gt;Now back to the grind stone...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-49593285365369887?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/49593285365369887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=49593285365369887' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/49593285365369887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/49593285365369887'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/04/happiness-is-many-things-too-many.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gYqvPiuRnA/RiuXr4IosyI/AAAAAAAAABY/fAMr5rhju-g/s72-c/SpaceCrusadeHighPoly.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-2933348232868883628</id><published>2007-04-07T10:36:00.000+02:00</published><updated>2007-04-07T22:49:51.401+02:00</updated><title type='text'></title><content type='html'>Like the man said: Just a quickie.&lt;br /&gt;&lt;br /&gt;All I have to say is that I finally document how the parser definitions work.  I was changing things so often I confused myself and decided that unless I pinned the defintion in text I'd never stop.&lt;br /&gt;&lt;br /&gt;And here it is: the parser document in all its minimalist glory.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;   &lt;span style="font-family:courier new;"&gt;A defintion is declared with the $ character prefixing the definition name.  &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;The one exception is the 'main' definition which is always the first text in the file and is not named.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;A node can be explicitly created by using parenthesis.  Elements in a node can be separated using one &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;of three separators.  The | character chooses only one of the elements in the node eg: (A | B) will parse either A or B, not both.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;The &amp; character parses if all the elements parse.  It is only valid with the ! modifier and is used to &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;disallow elements eg: (A &amp;amp; !B &amp; !C).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;A 'space' - ie: no separator - means the elements must parse in order eg: (A B C).  If any elements&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; fail then the node fails.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;The ! character modifies element by logically negating the parse result.  A node with a ! modified element&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  will fail if the element parses normally (before negation).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; A node may be followed by the + or - characters.  The + indicates that the node will not be simplified&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  eg: ((A)+) will remain ((A)) and not collapse to (A).  The - means the contents of the element should&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  be discarded and not added into the token tree.  The node is still created as necessary.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Following the + or - is an optional node name.  eg: (A)+MyName or (B)-OtherName.  It is possible for the&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  - node to be collapsed at which point the name is lost.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; A nodes repetition can be set by the pattern ?-?.  eg: (A) 0-1 makes the node A optional.  (B) 1-1 makes B&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; compulsory.  If ommited the node is 1-1.  The right hand digit may be replaced by and X which implies no&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; limit.  eg:  (C) 0-X means C can be repeated as often as needed or not be present at all.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;The . character is the last node option and stops the token tree from rolling back past it. &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;eg:  (C | (A B).)    This is useful for error reporting as otherwise the entire parse tree will rollback &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;and confusingly report the root node as being in error.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; An element can be a string literal eg: "Hello" or character literal eg: 'c'.  An element can also be one&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  of the primitive keywords: integer, real, string or char.  A string must be surrounded by double quotes. &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;eg: "Yo!" but places no constraint on what the string contains.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;A character must be surrounded by single quotes eg: '$'.  Escape codes can be used as normal in both&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  strings and chars.&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;An element can be the keyword 'identifier' which parses c style identifiers:  eg: iIndex or _Node38 but&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;not 74Id or $%.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Lastly an element can be a definition.  eg:  $DefinitionA can be used as ("Hello" DefinitionA).  This&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; replaces 'DefinitionA' with whatever the node $DefinitionA actually contained.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's it.  You may notice that the parser is described as the dumb beast alluded to last week.  This has made life much, much simpler - which is better for all of us as I may actually start working on Space Crusade specifics again ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-2933348232868883628?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/2933348232868883628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=2933348232868883628' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2933348232868883628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2933348232868883628'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/04/like-man-said-quickei.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-199981860650653132</id><published>2007-04-01T07:20:00.000+02:00</published><updated>2008-12-12T09:16:08.395+02:00</updated><title type='text'></title><content type='html'>Another day, another post; my posting is, of course, the metric by which time should be measured.  Inconstant periodics aside, I'm still working on my C++ parser.&lt;br /&gt;&lt;br /&gt;I realised that the parser was being far too intelligent so I've been taking stuff away and cutting back on it's cleverness.  The goal behind this pruning is too stop the parser failing quite so easily.  I am now more likely to get a token tree by the end of the parse (even if it is badly formed) than just emptiness.&lt;br /&gt;&lt;br /&gt;However as dealing with syntax errors is basically boring (and doesn't make for good screenshots) I've posted a screen shot of the Pillar of Autumn instead.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gYqvPiuRnA/Rg_uf_qp7HI/AAAAAAAAABQ/Pw7ZYakVa5Q/s1600-h/PillarOfAutumn.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_7gYqvPiuRnA/Rg_uf_qp7HI/AAAAAAAAABQ/Pw7ZYakVa5Q/s400/PillarOfAutumn.jpg" alt="" id="BLOGGER_PHOTO_ID_5048515940739312754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It has nothing to do with Space Crusade or C++ parsing but whilst I'm waiting for Halo 3 I have to get my fixes in small doses however i can ;)&lt;br /&gt;&lt;br /&gt;Back on the programming side I've written one of the worlds more efficient find and replace routines.  I don't know why I felt the urge to do it but it was fun - which is good enough for me :)&lt;br /&gt;&lt;br /&gt;And that's enough rambling for one evening.  So...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-199981860650653132?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/199981860650653132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=199981860650653132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/199981860650653132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/199981860650653132'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/04/another-day-another-post-my-posting-is.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gYqvPiuRnA/Rg_uf_qp7HI/AAAAAAAAABQ/Pw7ZYakVa5Q/s72-c/PillarOfAutumn.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4879595478423464640</id><published>2007-03-11T07:40:00.000+02:00</published><updated>2008-12-12T09:16:09.412+02:00</updated><title type='text'></title><content type='html'>Whoops, I turned on comment moderation (I was trying to get rid of spam) and then forgot to turn it off again.  My apologies to those who commented.&lt;br /&gt;&lt;br /&gt;I'm still working on Ruby integration although I am now completely off the beaten track.  Below you can see screen shots of both my C++ defintion file and some preprocessed C++ that the defintion was being applied too.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/RfQ_UizCNFI/AAAAAAAAAA8/_bQaHFZW_7Q/s1600-h/SpaceCrusadeCppDef.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/RfQ_UizCNFI/AAAAAAAAAA8/_bQaHFZW_7Q/s400/SpaceCrusadeCppDef.jpg" alt="" id="BLOGGER_PHOTO_ID_5040723505105220690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Those with a keen eye will realise that there's not a hope in hell that the code at the bottom will compile.  In fact the parser breaks on &lt;span style="color: rgb(51, 51, 255);"&gt;CChunkIndex &lt;/span&gt;which isn't defined anywhere;  CChunkIndex is in an &lt;span style="color: rgb(0, 153, 0);"&gt;#include&lt;/span&gt; file I told the preprocessor not to follow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/RfQ_UyzCNGI/AAAAAAAAABE/_pzEgDkRxzQ/s1600-h/SpaceCrusadePreprocessed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/RfQ_UyzCNGI/AAAAAAAAABE/_pzEgDkRxzQ/s400/SpaceCrusadePreprocessed.jpg" alt="" id="BLOGGER_PHOTO_ID_5040723509400188002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;More importantly the definition doesn't take typdefs and templates into account which is going to cause all sorts of fun when the parser gets to the line: &lt;span style="color: rgb(51, 102, 255);"&gt;typedef CArrayTemplate&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;I suspect this oversight is going to cause me a rethink of my language definition language.  I am now beginning to wonder if I may not have written a definition language specifically for C++.  Oh well, time will tell.&lt;br /&gt;&lt;br /&gt;Whilst I'm - sort of - on the subject of reinventing the wheel I'm going to have a quick rant about Garage Games; specifically the Torque scripting language.  I can reinvent the wheel to my hearts content because I think it's fun and no one has mission critical code depending on me.&lt;br /&gt;&lt;br /&gt;The torque scripting language is for use in production environments and, being proprietry, should be completed before its release to the general masses.  Whilst browsing their documentation I noticed that there is a chapter dedicated to why their scripting language is complete but they have ommited one very important criteria.&lt;br /&gt;&lt;br /&gt;As someone (I think it was language guru Prof Terry) said: "Any fool can write a compiler but it's much harder to write a compiler for fools".  The torque scripting language handles bad input... badly.  There seems to be one generic error message (something about bad context) and it points to the wrong line.&lt;br /&gt;&lt;br /&gt;Trying to work out whats going wrong in a scene with three objects (the player, a bullet and an enemy) is difficult.  I can't imagine what it must be like to try and solve parsing errors in a large project :(&lt;br /&gt;&lt;br /&gt;For the price (R600 if I remember - Dave bought himself a copy) I suppose that this is something that one must live with.  It is unforunate though...&lt;br /&gt;&lt;br /&gt;And that's enough ranting, and enough posting also.  So...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4879595478423464640?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4879595478423464640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4879595478423464640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4879595478423464640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4879595478423464640'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/03/whoops-i-turned-on-comment-moderation-i.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/RfQ_UizCNFI/AAAAAAAAAA8/_bQaHFZW_7Q/s72-c/SpaceCrusadeCppDef.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-6590332084027722897</id><published>2007-02-27T09:11:00.000+02:00</published><updated>2008-12-12T09:16:09.696+02:00</updated><title type='text'></title><content type='html'>I've had enough of programming for a bit so I've done some modelling.  It's only an hour's work but it does show the beginnings of the level walls.  More importantly I've thought of quite a cool way to generate all the walls and floors in a level. &lt;br /&gt;&lt;br /&gt;Here's a view down one of the corridors:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/ReSCrajoCuI/AAAAAAAAAAw/phEFhVMIgZA/s1600-h/SpaceCrusadeWalls1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/ReSCrajoCuI/AAAAAAAAAAw/phEFhVMIgZA/s400/SpaceCrusadeWalls1.jpg" alt="" id="BLOGGER_PHOTO_ID_5036293965681789666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On the programming side I've gone on a C++ preprocessor writing spree.  It's something I've been meaning to do for a long time and now I finally have an excuse too.  It's related to reading and parsing C++ files so I can teach Ruby to recognise the classes I want.  I know this is almost exactly what SWIG does but...  I'm having fun and it gives me a chance to use the C++ parser I wrote some time ago ;)&lt;br /&gt;&lt;br /&gt;That's it for this post, lots of work done but nothing spiffy to show for it ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-6590332084027722897?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/6590332084027722897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=6590332084027722897' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6590332084027722897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/6590332084027722897'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/02/ive-had-enough-of-programming-for-bit.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/ReSCrajoCuI/AAAAAAAAAAw/phEFhVMIgZA/s72-c/SpaceCrusadeWalls1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-2245538608302912873</id><published>2007-02-18T04:24:00.000+02:00</published><updated>2008-12-12T09:16:09.931+02:00</updated><title type='text'></title><content type='html'>I hate telkom!  Now that I've got that off my chest I can get down to some real posting.  I've  been playing with different methods of embedding ruby in C++ (or vice versa) and managed to stumble across something obscure or awkward in almost every one.&lt;br /&gt;&lt;br /&gt;Firstly I couldn't include ruby.h: It complained about having the wrong MSC version.  This was easy enough to get around, simply delete the offending check (three lines of # defines).   Next the compiler started bitching about an unknown struct fd_set (syntax error : identifier 'fd_set').  It took a little longer to resolve this one, turns out winsock.h must be included before ruby.h&lt;br /&gt;&lt;br /&gt;Then I managed to get stdafx.h into the project which caused havoc and was finally solved by starting a new project without it :(  ... Following this I tried various examples I found on the web, none of which worked out of the box - generally because of old header incompatibility.&lt;br /&gt;&lt;br /&gt;Finally I've found a c++ wrapper for ruby that looks quite interesting.  It's RubyNative from www.gaffer.org; only I don't how well it will work because it's still downloading... 240K and it's taken all afternoon to download!  For pity sake this is supposed to be a 1MBit line - thank you so much Telkom!&lt;br /&gt;&lt;br /&gt;I've also used SWIG very briefly and whilst it worked it seemed a bit ... untidy.  Unless RubyNative does not work I'm going to avoid SWIG for the time being.&lt;br /&gt;&lt;br /&gt;And that's that from Ruby world.  I have done a bit more work on the image combiner.  It could now be considered to be in late alpha (if I cared about releases).   As can be seen I've added a few more options and wired up the previously existing ones.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gYqvPiuRnA/RdhsGChh0ZI/AAAAAAAAAAg/x7IghfbuwOs/s1600-h/SpaceCrusadeTextureCombinerAlpha.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_7gYqvPiuRnA/RdhsGChh0ZI/AAAAAAAAAAg/x7IghfbuwOs/s400/SpaceCrusadeTextureCombinerAlpha.jpg" alt="" id="BLOGGER_PHOTO_ID_5032891434599043474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-2245538608302912873?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/2245538608302912873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=2245538608302912873' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2245538608302912873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/2245538608302912873'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/02/i-hate-telkom-now-that-ive-got-that-off.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gYqvPiuRnA/RdhsGChh0ZI/AAAAAAAAAAg/x7IghfbuwOs/s72-c/SpaceCrusadeTextureCombinerAlpha.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-4222486012293010634</id><published>2007-02-17T10:05:00.000+02:00</published><updated>2008-12-12T09:16:10.206+02:00</updated><title type='text'></title><content type='html'>This week I've been on a bit of a tangent: as I've had to enter the wonderful world that is MFC (Life without it was so good!).  Below is a small application that will take a set of images and combine them into one.  Useful if one has a lot of frames of animation that belong in a single texture.&lt;br /&gt;&lt;br /&gt;Given a set of images, the combiner will try and pack them into as small an area as possible optionally forcing the output texture to have a width and height that are a power of two.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gYqvPiuRnA/Rda5_Shh0XI/AAAAAAAAAAM/hzVaeIiTOH0/s1600-h/SpaceCrusadeTextureCombiner.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7gYqvPiuRnA/Rda5_Shh0XI/AAAAAAAAAAM/hzVaeIiTOH0/s400/SpaceCrusadeTextureCombiner.jpg" alt="" id="BLOGGER_PHOTO_ID_5032414130588471666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eventually this app must be integrated into the main editor but for the time being it's a quick and dirty solution to an immediate problem.  The ability to read PNGs is added by the awesome libpng library and implicitly by the zlib library - thanks guys!&lt;br /&gt;&lt;br /&gt;Image combiners aside what I hope too achieve this weekend is Ruby integration.  Unfortunately this a fairly large task: not because Ruby is hard to integrate, but because my world libraries are missing a layer of abstraction - I don't want Ruby talking directly to graphics instances.&lt;br /&gt;&lt;br /&gt;The scene library - which should provide this abstraction - currently consists of a two files.  Writing behaviour into this could easily take a couple of days so it's unlikely that I'll actually see Ruby doing anything this weekend... but here's hoping.  As an aside: confusingy the scene library is a higher level library than the world library but the world library is too deeply entrenched to rename now... Oh well.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-4222486012293010634?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/4222486012293010634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=4222486012293010634' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4222486012293010634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/4222486012293010634'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/02/this-week-ive-been-on-bit-of-tangent-as.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gYqvPiuRnA/Rda5_Shh0XI/AAAAAAAAAAM/hzVaeIiTOH0/s72-c/SpaceCrusadeTextureCombiner.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-117061925512499020</id><published>2007-02-04T21:06:00.000+02:00</published><updated>2007-02-05T10:34:07.630+02:00</updated><title type='text'></title><content type='html'>There've been no posts for a while, we're beginning the final run at the office :( and I also had another small system death...  One of the drives in y RAID stuffed out thanks the extreme heat.  A bit of re-installing and all is right again, and running a lot more smoothly.  Unfortunately I got a bit sidetracked and also installed Beryl (the window manager) which took quite some time ;)  Oh well, it's very cool - though still very much in development.&lt;br /&gt;&lt;br /&gt;If I'm feeling bored one day I'll document how I did it.  It was under Ubuntu 6.10 which is why it was such a mission.  Getting it to play nicely with the nVidia driver was also quite a lot of fun :(&lt;br /&gt;&lt;br /&gt;Back in Space Crusade I haven't really got much done, I did a bit of programming but I can't remember what.  I know I broke my window manager - I reallised that using my own virtual function tables was going a bit too far.  The gist of it is that there is not much to report:  I'm still waiting for Dave to model me a space marine although as he is still saying he will so it will see the light of day evetually.&lt;br /&gt;&lt;br /&gt;I have noticed that none of the screen shots I've posted actually have textures in so here a couple are.   The one below should be recognisable as a model from II (which has since been discarded).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/6073/3266/1600/984070/SpaceCrusadeTextured.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/6073/3266/400/811596/SpaceCrusadeTextured.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The next one here is the standard sort of 'no textured, single textured, multi-textured and vertex coloured' object demo that only programmers can know and love.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/6073/3266/1600/617314/SpaceCrusadeMultiTexture.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/6073/3266/400/188835/SpaceCrusadeMultiTexture.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Actually any sort of wierd data can be attached to verticies, edges and faces.  For instance having different normals, different counts of UV coordinates and different textures at an edge/vertex boundary will all be dealt with correctly.&lt;br /&gt;&lt;br /&gt;As I've mentioned I don't actually have anything new to report so...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-117061925512499020?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/117061925512499020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=117061925512499020' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/117061925512499020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/117061925512499020'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2007/02/thereve-been-no-posts-for-while-were.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-116452834176938132</id><published>2006-11-26T09:48:00.000+02:00</published><updated>2006-11-26T22:37:11.226+02:00</updated><title type='text'></title><content type='html'>Yay!  I can post a screen shot.   Dave has drawn me a new button border which is much nicer than the crappy one I made.  &lt;br /&gt;&lt;br /&gt;In honour of this I've given the editor a new colour scheme which - uh well - doesn't actually work for editing...  the old grey still looks fine though.  Anyway, here the blue scheme is (the number on the right is the framerate):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/6073/3266/1600/116889/SpaceCrusadeEditorNewLook.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/6073/3266/400/995858/SpaceCrusadeEditorNewLook.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've also got a very early layout for one of the levels.  I think it was stage five (you might recognise it from my very first post).  This is a very big image (1600 x 1200) should you wish to view it in all its pointless glory... and the flowers are still there - I really should remove them at some point. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/6073/3266/1600/26344/SpaceCrusadeLevel5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/6073/3266/400/234616/SpaceCrusadeLevel5.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Most importantly though; I've rewritten a big chunk of the add and remove widget code.  It's much more user friendly and actually cleans up properly after itself.&lt;br /&gt;&lt;br /&gt;Today I'd also like to get a menu bar working but it will need quite a few new widgets and events so it's quite likely it won't happen.&lt;br /&gt;&lt;br /&gt;And that brings me to the end of this post.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-116452834176938132?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/116452834176938132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=116452834176938132' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116452834176938132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116452834176938132'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/11/yay-i-can-post-screen-shot.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-116428289904139339</id><published>2006-11-23T13:21:00.000+02:00</published><updated>2006-11-23T13:54:59.053+02:00</updated><title type='text'></title><content type='html'>Just a quick update.  I've managed to get a fair amount of coding done but - unfortunately - nothing which is pretty and screenshottable.&lt;br /&gt;&lt;br /&gt;What I've been working on is the messaging side of my GUI components and it's now basically done.  This is possibly something that only I can appreciate but it's so cool watching all the little messages fly around as events occur!&lt;br /&gt;&lt;br /&gt;Specifically the events which are complete are:&lt;br /&gt;&lt;br /&gt;Mouse events: moving the mouse into or out of a component (like a button etc...);  mouse button presses and releases within a component and mouse wheel rolling.&lt;br /&gt;&lt;br /&gt;Focus events:  fired whenever a component loses or gains the focus.  ie: when the mouse clicks on it.  I haven't implemented tabbing and shift-tabbing yet because focus cycling is a mission.&lt;br /&gt;&lt;br /&gt;Motion events:  which are fired whenever the mouse is moved.  They're generally of no interest which is why they are separate from mouse events.&lt;br /&gt;&lt;br /&gt;Key events: similar to mouse button presses and releases except they come from the keyboard.&lt;br /&gt;&lt;br /&gt;Timer events:  a coarse grained timer may be added to any component which can provided simple animation like a flashing cursor or fading.&lt;br /&gt;&lt;br /&gt;Any additional events (like a button pressed event or a tab changing event) must be made from the above events.&lt;br /&gt;&lt;br /&gt;And thats about it for this post.  The only specific Space Crusade news is that I'm still waiting for Dave to rig me a marine and I haven't managed to get the nVidia debugger working.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-116428289904139339?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/116428289904139339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=116428289904139339' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116428289904139339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116428289904139339'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/11/just-quick-update.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-116305840043846655</id><published>2006-11-09T09:38:00.000+02:00</published><updated>2006-11-09T09:46:40.453+02:00</updated><title type='text'></title><content type='html'>I have good news!  I've finished setting up my computer again after it's little crash and burn/reinstall session a couple of months ago.   What this means is that I've also pulled out the code to Space Crusade and started working on it again.  Nothing noteworthy yet; but at least I feel inspired again...&lt;br /&gt;&lt;br /&gt;The upside is that I probably will have something to post this weekend (as promised).&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-116305840043846655?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/116305840043846655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=116305840043846655' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116305840043846655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116305840043846655'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/11/i-have-good-news-ive-finished-setting.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-116284252360731559</id><published>2006-11-06T21:36:00.000+02:00</published><updated>2006-11-06T21:49:23.250+02:00</updated><title type='text'></title><content type='html'>OK... So I've been playing MAME again instead of programming... I blame Dave, I still need to get a rigged marine from him.  But in the meantime I have finally managed to complete R-Type.  That game is just a little ridiculously hard!  So in honour of me, myself and I; I'm posting a screen shot of my final score when I died against the Bydo battle ship on the second time 'round.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/R-Type.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/R-Type.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unfortunately I managed to screenshot it with both import scores obscured (the final stage 8 and the total score 550600) ... Oh well, figures.&lt;br /&gt;&lt;br /&gt;Lastly I do solemly promise that my next post this weekend will be devoted to Space Crusade.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-116284252360731559?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/116284252360731559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=116284252360731559' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116284252360731559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/116284252360731559'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/11/ok.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115990249781009906</id><published>2006-10-03T20:33:00.000+02:00</published><updated>2006-10-03T21:14:39.020+02:00</updated><title type='text'></title><content type='html'>It's been a while since I last posted but Space Crusade has not ground to a halt... it's just been going really slowly as I haven't had the competition to drive me.&lt;br /&gt;&lt;br /&gt;I have still not been working towards anything specifically Space Crusadey.  I've mostly been tweaking my window manager:  layouts are easy to create now and are far, far more intuitive than - just off the top of my head - Swings.&lt;br /&gt;&lt;br /&gt;I've also done a fair bit more with my Direct Input libraries (as driven by the eventing I need for my components).  As I basically haven't worked on them since 'varsity they we're icky and inconsistent but look much nicer now.&lt;br /&gt;&lt;br /&gt;More importantly is that Dave has dug up a Space Marine for me - you can see the squad in the screen shot below... and ... this is where life got interesting.  Each marine is only about 7000 polys and they were rendering significantly slower than they should have.  So whilst installing the NVidia debugger - to find out what's wrong - I bascially stuffed up my computer and only re-installed it last weekend.  All is coming back to normal but that put a significant dent in my development time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeFirstMarines.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeFirstMarines.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On an unrelated note the XBox 360 has finally been launched in South Africa and I attended on Friday.  As this is the first time I've actually seen a running 360 I must say I was a bit disappointed.  I would be hard pressed to tell the difference between the later XBox games and the new XBox 360 games.  Microsoft really did release this console prematurely - I remember when the PS2 came out is was streaks ahead of anything PC's could do at the time but with the 360... well my PC looks better and has less annoying load times.&lt;br /&gt;&lt;br /&gt;It wasn't all bad though - I bought myself a 360 PC controller and have been happily MAMEing ever since.  And on that note I'm going to see if I can't beat the third stage of Dangun Feveron on a single coin.&lt;br /&gt;&lt;br /&gt;Later,&lt;br /&gt;Andrew&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115990249781009906?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115990249781009906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115990249781009906' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115990249781009906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115990249781009906'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/10/its-been-while-since-i-last-posted-but.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115584474336810414</id><published>2006-08-17T21:18:00.000+02:00</published><updated>2006-08-17T21:59:03.820+02:00</updated><title type='text'></title><content type='html'>I think I mumbled something about posting a shot of Creatures 2 so that's what this post is for - it'll follow shortly.   The funny thing is that in about 20 minutes of showing someone how to write a game in Java I wrote more creatures gameplay than I've manged in two and a half months of Space Crusade.  What can I say?  Infrastructure sucks.  Window mangers suck too, them and all their icky nasty polymorphic crap everywhere.   Although that said; it's not going so badly. &lt;br /&gt;&lt;br /&gt;Here's the piccy of clyde and friends:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeCreatures.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 399px; height: 300px;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeCreatures.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And to remain true to the quest, here's a heavy bolter (as used by the commander).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SCHeavyBolter.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SCHeavyBolter.jpg" alt="" border="0" /&gt;&lt;/a&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115584474336810414?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115584474336810414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115584474336810414' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115584474336810414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115584474336810414'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/08/i-think-i-mumbled-something-about.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115549789157627703</id><published>2006-08-13T20:48:00.000+02:00</published><updated>2006-08-13T22:01:57.550+02:00</updated><title type='text'></title><content type='html'>And the beat goes on...  Except not into this years competition.  Unfortunately I have decided not to enter this year, there just isn't going to be enough time to get everything done cleanly.  I've decided it is more important to get a good framework going than to hack a game together (again).&lt;br /&gt;&lt;br /&gt;But it looked like the framework was basically done!  What gives? ... Well the graphics engine is done and bar a bit of polish I'm very happy with how it turned out.  The physics engine is not important this time round (and is still just a bunch of collision routines anyway).  The problem is with the gameplay engine ... there isn't one.  I'm not even sure if the term exists but it does fit what I need and don't have.&lt;br /&gt;&lt;br /&gt;I could cobble something together in c++, it would only take a couple of days but would be horribly ugly.  I know that if I did that I would lose interest in it after the competition and it would become just another pile of unmaintainable code - which is not what I want at all.&lt;br /&gt;&lt;br /&gt;So instead I've started working on a window manager.  Quite possibly I've lost the plot and I'm bobbing around in the land of pink fluffy clouds - but I don't think so.  Space Crusade had a fair number of buttons, clickables and textables; all of which I want to make self contained, elegant and re-usable.  The key being re-usable, see I have a bit of an ulterior motive in that I still want to write a decent game editor and without a good set of components I can't do this.&lt;br /&gt;&lt;br /&gt;So here is a first peak at my window manager.  What you're seeing is a container with a border and a text component in it.  Actually the container is translucent so maybe you can't see it.  Anyway here it is:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeWindow.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeWindow.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The component entire is a text field similar to Java's JLabel.  There's a rudimentry layout to size the components inside the container to fit it but it isn't finished (ie:  doesn't work) so I've cheated and set the texts position manually.&lt;br /&gt;&lt;br /&gt;That brings me to close on the window manager front.  I'm going to divert briefly back to gameplay world.  I still fully intend to write the game in Ruby - by which I mean I don't want a single C++ specific piece of gameplay code.  This will make life vastly simpler as Ruby is a high level language which should remove all the tedium of expressing complex ideas in C++.  It's also interpreted which means no long compile time turn around and it's possible to tweak whilst it's running.  Yay!&lt;br /&gt;&lt;br /&gt;Finally on a completely unrelated note.  Here's a screen shot of both skinning and animation in action.  The two cylinders are the end points of the animation and quite obviously skinning works because the cylinder's bent(?).    Which makes me happy because I'm starting to really hate that cylinder.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeSkin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeSkin.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And thats the end of this post.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115549789157627703?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115549789157627703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115549789157627703' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115549789157627703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115549789157627703'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/08/and-beat-goes-on.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115495050627969083</id><published>2006-08-07T13:27:00.000+02:00</published><updated>2006-08-07T13:37:52.693+02:00</updated><title type='text'></title><content type='html'>I didn't get much work done this weekend, but at least what I did get done looks impressive. Skinned animation works perfectly with everything now (interpolation, timing, orientation... you name it; it works!).&lt;br /&gt;&lt;br /&gt;As I wasn't connected to the internet this weekend I wasn't able to post (I've moved my PC whilst I'm waiting for my monitor to return). As soon as I'm back online I'll submit a few screen shots for your viewing pleasure.&lt;br /&gt;&lt;br /&gt;On a vaguely related note: Justin sent me all the old graphics from creatures 2 which I'm going to use to show someone how to write a game in Java. I'll post a screenie of this too. Anyway, space crusade takes precedence so I doubt I'll do much work on it - maybe just bits of the first torture screen.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115495050627969083?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115495050627969083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115495050627969083' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115495050627969083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115495050627969083'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/08/i-didnt-get-much-work-done-this.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115428376152402048</id><published>2006-07-30T20:00:00.000+02:00</published><updated>2006-07-30T20:22:41.536+02:00</updated><title type='text'></title><content type='html'>Things are moving fast now.  I've completed skinning, it should work perfectly on any graphics card now. &lt;br /&gt;&lt;br /&gt;I have also spent a fair amount of time mucking around with the windows message loop...  why?  Well I want screen resizing and alt-tabbing to work properly.  I don't have a clean solution yet but I do at least have a temporary one which will get me through the competition.  The clean solution is too reset the direct 3d device which involves destroying and recreating everything in video memory.  Not a small task but not a difficult one either;  I just have more important things to do with my time - Space Crusade perchance.&lt;br /&gt;&lt;br /&gt;Far more important than alt-tabbing is animation.  Having worked like a demon on it I can almost (but not quite) say it's finished.  Technically the animation does work, it's just the setup which doesn't.&lt;br /&gt;&lt;br /&gt;That is beause I've got the sub objects local position and rotations setup in the wrong frame of reference.  They should be in world space but, alas, my understanding quaternions is limited.  I need quaternions for rotation but when I make the transform matrix from a position and rotation I don't get quite what I expect.  On the brighter side I have now added a quaternion library ;)&lt;br /&gt;&lt;br /&gt;As far as animation goes it's very flexible: the same animation routines can be used to flip between cels in a textured animation as can be used to do vector interpolation.  It's based heavily on the code I wrote for Creatures 2 which was going to be my entry into the 2004 competition.  Unfortunately the computer with that code on was stolen (Hey justin - do you have any of the art from creatures anymore?)&lt;br /&gt;&lt;br /&gt;There are no screen shots this time 'round.  There's nothing particularly interesting to see except possibly a bent cylinder which I'm to lazy to screenshot.&lt;br /&gt;&lt;br /&gt;And that's it from me now.  I'm going to go and sleep on the quaternion problem (I can vaguely see a solution but it's not quite there yet). So...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115428376152402048?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115428376152402048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115428376152402048' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115428376152402048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115428376152402048'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/things-are-moving-fast-now.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115369259850966770</id><published>2006-07-23T23:37:00.000+02:00</published><updated>2006-07-24T00:09:58.523+02:00</updated><title type='text'></title><content type='html'>I had such high hopes for today, I had two major tasks to complete before I could begin working on Space Crusade gameplay.  Frustratingly though I didn't manage to finish either of them.  The first task was to polish up skinning - which is basically done - and the second is to finally implement object picking - which depends on a lot of data done in the skinning setup.&lt;br /&gt;&lt;br /&gt;I'm left with three issues before I can sign off object skinning.  The biggest (but least import) is to get it working on the NVidia GeForce 7.  A secondary concern is that all my matricies are at the wrong angle.  The screen shot below shows the three bones in the mesh (the wireframe) and the solid object oriented correctly.  I'm really hoping this isn't a major error and just a glitch in my matrix transforms.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeUnexpectedBone.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 253px;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeUnexpectedBone.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The last and most annoying issue is that every vertex references matricies 0 through 2 (giving a total of three as shown below) but somehow when the object gets drawn a fourth matrix is used which looks completely stuffed up!  If I set the fourth world matrix to be the same as one of the first three it looks fine however as I have quite strict checks to make sure that vertex matrix indicies don't go out of bound I don't know how this can happen(?).&lt;br /&gt;&lt;br /&gt;Whilst I didn't get a chance to look at object picking at all; there is a bit of good news in that Dave has offered to draw the space marines for me (Yay! thanks Dave) which will free me up from trying to model.&lt;br /&gt;&lt;br /&gt;On a remakes note: I was browsing through the remakes forum (yeah I should have been working but I didn't feel like it;) and the competition looks pretty good (ie: bad for me) which is cool. &lt;br /&gt;&lt;br /&gt;To remind myself that there will be an end; and that it can't all be problems I dug up IOx, our 2003 entry which had plenty of issues of it's own but still managed to make it into the competition (by about one minute ;)&lt;br /&gt;&lt;br /&gt;As the Space Crusade engine is still somewhat using the old IOx engine (although much more stable and user friendly) I thought I'd post a screen shot of it, just for nostalgias sake.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeIOX.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeIOX.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And that's it for now so...&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115369259850966770?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115369259850966770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115369259850966770' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115369259850966770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115369259850966770'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/i-had-such-high-hopes-for-today-i-had.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115360309914697239</id><published>2006-07-22T22:28:00.000+02:00</published><updated>2006-07-22T23:31:06.426+02:00</updated><title type='text'></title><content type='html'>The crusade continues!  Quite a lot has happened since my last post but unfortunately not much of it was Space Crusade related :(  (incidently I deleted my last post 'cause it looked icky(!)).&lt;br /&gt;&lt;br /&gt;On the computer front I finally sent my monitor in to be repaired... little known to me the company I sent it to was going to liquidate the following day.  Thus when I tried calling to find out where my monitor was, nobody answered the phone.  I only found out they'd liquidated when I drove down to see what was going on and someone in the office next door mentioned it.&lt;br /&gt;&lt;br /&gt;So I am now monitor'less until Philips' attorneys manage to retrieve it - not something I'm particularly happy about.  Shit happens...  so... here's a Chaos Marine!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SCChaosMarine.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SCChaosMarine.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now assuming I eventually get my monitor back again I bought myself a brand spanking new NVidia Geforce 7600GT graphics card.  Wicked!  (This before I knew the mess things were in)&lt;br /&gt;&lt;br /&gt;It handles pretty well for the price (oblivion shunts along at 20 frames a second in full detail - as opposed to the 3-4 frames a second I got on my old X300).  All I've used it for is to play Far Cry though (well it's fun!).  The fact that I've changed graphics cards is import because it has had an adverse effect on the crusade, but not for any reasons you might imagine... read on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeGraphicsObject.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 155px;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeGraphicsObject.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the coding world I discovered a small little-bitty bug which has taken me a good fraction of the day to fix.  In a nut shell skinned meshes didn't work and I though I'd written code to handle them years ago - that came as a bit of a surprise.  This was complicated slightly by having installed a new graphics card - some of the DirectX capabilites I was assuming were there, were not.   Specifically the GeForce 7 doesn't handle indexed skinned matricies whereas the X300 did...&lt;br /&gt;&lt;br /&gt;The upshot of this is that I've had to install my old X300 again untill I've finished fixing and debugging.  Later I'll have to write things to work on the GeForce 7 but I don't want to change too much at the moment.  Moving along; here is a picture showing skinning failing to work in all its glory (it should look like a solid smooth shaded cylinder - it doesn't).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeSkinWhoppsy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 219px;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeSkinWhoppsy.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Luckily I have since fixed this but forgot to take a screenshot of it before I broke everything again.   I was actually still working on the shape picking before I got side tracked into skinning.  I've just started working on that again - it's very nearly finished now - but I don't feel like doing anything further this evening so I'm completing this post and then playing Far Cry - on the X300 'cause it too much effort to swap the 7600Gt in again ;)&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115360309914697239?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115360309914697239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115360309914697239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115360309914697239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115360309914697239'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/crusade-continues-quite-lot-has.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115273361916814447</id><published>2006-07-12T21:32:00.000+02:00</published><updated>2006-07-12T21:46:59.176+02:00</updated><title type='text'></title><content type='html'>Heres comes space marine model one in a blatant attempt at getting sympathy modelling out of Dave ;).  See two weeks and thats all I've managed to do - fortunately I've go the lighting just right so you can't see the interesting triangulation and objects cutting through each other.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeDavePlease.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 249px;" src="http://photos1.blogger.com/blogger/6073/3266/320/SpaceCrusadeDavePlease.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And as I don't intend to do any work and hadn't meant to post tonight;  thats it.  I'm going to bed now.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115273361916814447?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115273361916814447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115273361916814447' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115273361916814447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115273361916814447'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/heres-comes-space-marine-model-one-in.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115256509546987900</id><published>2006-07-10T22:48:00.000+02:00</published><updated>2006-07-10T22:58:15.476+02:00</updated><title type='text'></title><content type='html'>Well,  I completed my renaming binge and cleanup and also moved an awful lot of objects around - much more navigable now. &lt;br /&gt;&lt;br /&gt;More importantly I finished amalgamating my Shape and Mesh objects and took all their little helper classes - like faces, trianlges and sphere - and moved them into their own files because they were really cluttering up the main files.&lt;br /&gt;&lt;br /&gt;And with that I leave you with the title screen of the commodore version of Space Crusade;  mostly to remind me that I should be working towards it!  (ie: not faffing with shape libraries)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeTitle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/320/SpaceCrusadeTitle.jpg" alt="" border="0" /&gt;&lt;/a&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115256509546987900?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115256509546987900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115256509546987900' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115256509546987900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115256509546987900'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/well-i-completed-my-renaming-binge-and.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115248227134616683</id><published>2006-07-09T23:19:00.000+02:00</published><updated>2006-07-10T13:52:45.770+02:00</updated><title type='text'></title><content type='html'>Well this weekend was a bit of a coding fest... but I don't have anything to show for it.  How depressing.&lt;br /&gt;&lt;br /&gt;The goal was to get object picking working so I could select objects in the editor. What actually happend was I wrote (and rewrote) a hierarchical collision library and removed a lot of DirectX dependencies. On the brighter side the creation routines all seem to work so I must have achieved something.&lt;br /&gt;&lt;br /&gt;The implementation so far is: take the graphical mesh and copy all its triangles into a shape object. Then place spheres around each triangle (or triangles if adjacent triangles are contained also). Then take clusters of about 4 spheres and place them inside another sphere and so on, until the final cluster is placed in only one sphere.&lt;br /&gt;&lt;br /&gt;The outcome of this is a quickly traversable tree of spheres with the triangles as leaf nodes. Yay! (all the intersection routines are written aswell).&lt;br /&gt;&lt;br /&gt;Quite a lot still remains to be done though. Notably my mesh object and shape object share a lot of information and have similar levels of complexity which probably implies they should be collapsed into a single object (not a rewrite I'm looking forward too).&lt;br /&gt;&lt;br /&gt;All the hierachy information is in an intermediate format and still needs to be converted into something that can be used at runtime. This is almost done bar cleanup.&lt;br /&gt;&lt;br /&gt;And lastly I have a few naming issues I need to work out (eg: the runtime shapes names all end in 'trans' which is a bit crappy).&lt;br /&gt;&lt;br /&gt;So much to be done :(&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/goldybowl.2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/320/goldybowl.2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In other news: I finally gave up on my monitor as it is no longer usable (it took to switching between input A and B about every 10 seconds). I'm taking it to be fixed - again - on Monday morning. Stupid Philips crap.&lt;br /&gt;&lt;br /&gt;And truly lastly this time: I've decided to write the gameplay in Ruby (http://www.ruby-lang.org/en/) because it needs so little management compared to C++ or java and plugs into C++ fairly easily.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115248227134616683?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115248227134616683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115248227134616683' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115248227134616683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115248227134616683'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/well-this-weekend-was-bit-of-coding.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115204977651371787</id><published>2006-07-04T23:41:00.000+02:00</published><updated>2006-07-04T23:49:36.523+02:00</updated><title type='text'></title><content type='html'>Not much too report.  I mostly went on a code cleanup spree and fixed a few memory leaks and a really annoying renderstate bug which was stopping me from changing to fullscreen mode (code reuse by copy-paste is bad.  Period.)&lt;br /&gt;&lt;br /&gt;I've also taken the first tentative steps towards the level editor.  The grid seen below will be used to align and place the wall and floor tiles of the derelict space craft.  If you view the full sized image you'll notice... fullscreen - 1280x960.   Anymore and my monitor gets unhappy.  It's currently going throught the worlds slowest monitor meltdown +- 4 months and counting- but slightly worse every day :(&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/FullScreenGrid.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/FullScreenGrid.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Thats it for this evening.&lt;br /&gt;&lt;br /&gt;Later!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115204977651371787?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115204977651371787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115204977651371787' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115204977651371787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115204977651371787'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/not-much-too-report.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115185324200041219</id><published>2006-07-02T16:39:00.000+02:00</published><updated>2006-07-02T17:14:02.016+02:00</updated><title type='text'></title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:arial;"&gt;Things are coming along nicely now.  I've finished almost all of the major particle system features I wanted and only made one blunder along the way (I didn't consid&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:arial;"&gt;er how difficult it would be to sort particles in a freelist).&lt;br /&gt;&lt;br /&gt;So whilst the following screen shots might not look like they have anything to do with Space Crusade rest assured that a good particle system should make blowing stuff up look great.  And with no further ado, here is the first shot:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/Particles.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/Particles.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:arial;"&gt;It's a field of pretty flowers and the embryonic alien.  Why?  Just because!&lt;br /&gt;&lt;br /&gt;All the expected particle goodness is here:  Specifiable UV coords, sizes and rotations.  It's also possible to fade and/or shrink particles as they turn away from the camera as well as alowing the particles to be axis aligned (for billboarding).  The space ship that can be seen &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:arial;"&gt;(sort of) here&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:arial;"&gt; has nothing to do with anything; I just use it as point of reference - it's actually a concept model I did for someone else.&lt;br /&gt;&lt;br /&gt;The next two screen shots are considerably more boring.  They demonstrate that it is possible to set the number of triangles that a particle can be drawn with (1 or 2).  The reason being two triangles give a nice square particle which is easily textured but requires 6 vertices whereas one triangle only requires vertices 3 and is perfect for round particles.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/ParticleSquare.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 218px; height: 163px;" src="http://photos1.blogger.com/blogger/6073/3266/400/ParticleSquare.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/ParticleTriangle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 214px; height: 160px;" src="http://photos1.blogger.com/blogger/6073/3266/400/ParticleTriangle.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;All in all I'm happy with the weekends work although it would have been nice to get some Space Crusade specific code going.  I might have, had I not run into an interesting renderstate issue.  Which took about 3 hours to track down (don't use &lt;span style="color: rgb(51, 51, 255);"&gt;D3DRS_WRAP0&lt;/span&gt; with &lt;span style="color: rgb(51, 51, 255);"&gt;D3DWRAP_U&lt;/span&gt; as well as &lt;span style="color: rgb(51, 51, 255);"&gt;D3DTADDRESS_WRAP&lt;/span&gt; this has some seriously strange behaviour and gives a maximum UV range of 0.5).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;&lt;br /&gt;And on that technical note I'm going to leave my computer alone now.&lt;br /&gt;&lt;br /&gt;Later!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30450977-115185324200041219?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115185324200041219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115185324200041219' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115185324200041219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115185324200041219'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/07/things-are-coming-along-nicely-now.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30450977.post-115170241868370789</id><published>2006-06-30T22:42:00.000+02:00</published><updated>2006-07-01T18:33:54.656+02:00</updated><title type='text'></title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Right!  Well through a series of strange events I've ended up creating a blog devoted to the Commodore 64 game &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;Space Crusade&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.  Originally a board game published jointly by &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;Milton Bradley&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt; and the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;Games Workshop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt; it was brought the computer world by &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;Gremlin Graphics&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt; and remained almost identical to the board game for which it's named.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;As it turns out I have a bit of free time on my hands (which is unusual) and happend to have found my old Space Crusade cassette (yes it came on a tape).  Better yet those grand guys at www.remakes.org are hosting another remkaes competition and... putting two and two together I've decided to rewrite Space Crusade into the year 2006.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Instead of being a 'true' blog this is simply going to be posts of my progess with Space Crusade. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;So, to begin here is the offending box which started it all along with screen shots from the commodore version.  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeCassetteBox.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 314px;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeCassetteBox.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;This is the a mission  in progress.  The space marines (the yellow blobs)  are deployed from their docking claw and can be moved around via the icons at the bottom to do ... stuff.  I forget which mission this is.  I think it was necessary to destroy a weakend part of the derelicts hull  to complete it.  Hell bent on stopping the intrepid squad are the evil gene-stealers, chaos marines and the war machine 'Dreadnought'.  In a nasty twist it was sometimes necessary for one squad to destroy another to win the mission.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeMissionView.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeMissionView.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;This is a shot of the game in isometric mode.  It wasn't possible to do anything but did look pretty.  Curiously the Commodore 64 and Spectrum versions showed more detail than the later Amiga and IBM PC versions.   Guess thats progress for you.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6073/3266/1600/SpaceCrusadeIsometricView.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6073/3266/400/SpaceCrusadeIsometricView.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now the actual work done today: Started by modelling one of the space marines, just his helmet and shoulder pad so far which took about an hour and looks completely crap (which is why I haven't posted a screen shot) but hey! I'm not an artist.&lt;br /&gt;&lt;br /&gt;On the programming front I decided I wanted awesome wicked cool explosions so I got to work on my long neglected particle system. It's coming along quite nicely and I've completed what should be the final spec. For those who care it's very similar to the DirectX flexible vertex format in that particle system properties are indicated by flags and then just enough memory is allocated per particle for those properties. All the particles are allocated from freelists and I've tried to go with sensible defaults for flags which are not specified.&lt;br /&gt;&lt;br /&gt;For instance not specifying UV coordinates will give the particle (0,0) -&gt; (1,1) as a default.  What fun! ;)&lt;br /&gt;&lt;br /&gt;Of course instead of actually being productive I spent most of the day looking at reference and trying to work out how SpeedTree did their leaf particles. Incidently SpeedTree is the tree drawing system that Oblivion and Unreal 3 use. Very cool.&lt;br /&gt;&lt;br /&gt;Which brings me to the end of today, give or take a few minutes.&lt;br /&gt;&lt;br /&gt;Later!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&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/30450977-115170241868370789?l=andrewpaterson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewpaterson.blogspot.com/feeds/115170241868370789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30450977&amp;postID=115170241868370789' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115170241868370789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30450977/posts/default/115170241868370789'/><link rel='alternate' type='text/html' href='http://andrewpaterson.blogspot.com/2006/06/right-well-through-series-of-strange.html' title=''/><author><name>Andrew</name><uri>http://www.blogger.com/profile/01541264552023467889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://photos1.blogger.com/blogger/6073/3266/400/Dragon.jpg'/></author><thr:total>4</thr:total></entry></feed>
