<?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-7825228553392473517</id><updated>2012-01-10T22:29:21.983Z</updated><category term='Guitar Hero'/><category term='xbox live'/><category term='xbla'/><category term='live'/><category term='development diary'/><category term='barfly'/><category term='Game4'/><category term='top ten'/><category term='puzzle quest'/><category term='playstation 3'/><category term='World of Warcraft'/><category term='Team Mango'/><category term='C#.net'/><category term='Band'/><category term='Gravsheep'/><category term='AJAX'/><category term='playing house'/><category term='Nokia Lumia 800'/><category term='general'/><category term='orange box'/><category term='Stalker'/><category term='Windows Phone 7 Development'/><category term='camden fire'/><category term='game development'/><category term='WP7Dev'/><category term='overlord'/><category term='games development'/><category term='portal'/><category term='app'/><category term='Dysnomia'/><category term='Geocaching'/><category term='ame4'/><category term='WP7 Development'/><category term='half life'/><category term='Retrobution'/><category term='the dan bignell experience'/><category term='facebook'/><category term='pointless quest'/><category term='Dreamland'/><category term='N+'/><category term='Gaming'/><category term='Dream Build Play'/><category term='stored procedures'/><category term='ps3'/><category term='best of 2007'/><category term='play.com live'/><category term='Christmas'/><category term='IG'/><category term='XBLIG'/><category term='WP7'/><category term='ASP'/><category term='music'/><category term='xna'/><category term='pennys dropped'/><category term='2007'/><category term='Tombstoning'/><category term='web services'/><category term='Blogging'/><category term='online'/><category term='dark tranquillity'/><category term='html mmorpg'/><category term='7cache'/><category term='Webservices'/><category term='Windows Phone 7'/><category term='Development'/><category term='camden'/><category term='gdc'/><category term='gig'/><category term='Samsung Omnia 7'/><category term='metal'/><category term='sql'/><category term='Call of Duty 4'/><category term='Puritan Slain'/><category term='community games'/><category term='Japan'/><category term='tile engine'/><category term='Myself'/><category term='xbox 360'/><category term='origin unknown'/><category term='Indie Games'/><category term='post mortem'/><category term='run'/><category term='gears of war 2'/><category term='adventure game'/><category term='Asteroid Armageddon'/><category term='dorset'/><category term='.NET'/><category term='wedgewood rooms'/><title type='text'>So I got this Blog thing...</title><subtitle type='html'>XNA Game and Windows Phone 7 application development, .NET, Gaming and other such shenanigans as observed by Gareth Williams</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>99</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-1778499987143113493</id><published>2012-01-10T22:24:00.004Z</published><updated>2012-01-10T22:29:22.141Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dream Build Play'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Target: Dream Build Play 2012</title><content type='html'>&lt;span style="font-family: inherit;"&gt;First post of 2012!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;The news that there will be a Windows Phone category in the &lt;a href="http://www.dreambuildplay.com/" target="_blank"&gt;Dream Build Play&lt;/a&gt; competition this year has given me a solid target for &lt;a href="http://www.team-mango.com/dreamland.aspx" target="_blank"&gt;Dreamland&lt;/a&gt;'s completion. While no actual submission dates have been announced yet, I'm fairly confident in my assumption that we'll be looking at a June date for final entries.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Six months is plenty enough time to finish &lt;a href="http://www.garethpw.co.uk/search/label/Dreamland" target="_blank"&gt;Dreamland&lt;/a&gt; and give it all the polish it deserves. Leon, &lt;a href="http://www.team-mango.com/" target="_blank"&gt;Team Mango&lt;/a&gt;'s resident graphics artist has been hard at work producing the last of the assets and storyline required to complete work and I'm following up with getting the last of the game mechanics coded.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;To give me some extra motivation - and taking a cue from some of the &lt;a href="http://www.youtube.com/results?search_query=ludum+dare+timelapse" target="_blank"&gt;Ludum Dare participants&lt;/a&gt; - I've started live streaming of my development sessions. Using a rather neat app called &lt;a href="http://www.xsplit.com/" target="_blank"&gt;XSplit&lt;/a&gt;, I can screencast and show the game running on my Lumia 800 via webcam all on the same stream. I can stream to the &lt;a href="http://www.ustream.tv/channel/teammango" target="_blank"&gt;Team Mango UStream channel&lt;/a&gt; and record to disk at the same time. The recordings allow me to make neat timelapse videos like this one:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="360" src="http://www.youtube.com/embed/LawrsFoyYR0?rel=0" width="640"&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;My plan is to record and stream most of my Dreamland development sessions between now and DBP and make a huge timelapse video at the end of it all.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;I'll be livestreaming at weekends and on weekday evenings (GMT), though not to any fixed schedule. I'll always announce on &lt;a href="http://www.twitter.com/teammango" target="_blank"&gt;Twitter&lt;/a&gt; before I begin. It's development, so I can't promise too much excitement but I will sometimes have the microphone on and commentate my work.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Here's to a productive new year!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-1778499987143113493?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/1778499987143113493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=1778499987143113493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/1778499987143113493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/1778499987143113493'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2012/01/target-dream-build-play-2012.html' title='Target: Dream Build Play 2012'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/LawrsFoyYR0/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8792458944807546565</id><published>2011-11-19T15:15:00.001Z</published><updated>2011-12-13T11:09:02.696Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Samsung Omnia 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Nokia Lumia 800'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Omnia 7 vs Lumia 800</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NW5RFX61ROg/TsfFjx1FuzI/AAAAAAAAAzA/HSN9PUvP3D4/s1600/CIMG2174.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-NW5RFX61ROg/TsfFjx1FuzI/AAAAAAAAAzA/HSN9PUvP3D4/s320/CIMG2174.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;It's just over one year on from my day-one adoption of Windows Phone on the Samsung Omnia 7. After much deliberation, I decided to grab a Nokia Lumia 800 to see what all the fuss is about, and get a taste of what so many newcomers to the OS are going to experience.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Nokia has done a fantastic job of advertising the Lumia, and the campaign is a great shot in the arm to Windows Phone after a year of little to no pushing of the platform by Microsoft itself. In the UK, at least, everywhere I look I'm being bombarded with adverts for the flagship device. I don't need to be sold on the platform - I'm developing games for it. I'm sold, I'm locked in. But it's great to see how interest has grown over the last month or so. Having Windows in your phone is becoming cool again, and rightfully so.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;But this post isn't for me to extol the virtues of Windows Phone, it's to compare the wonderful phone I've been using for the last year to the new star of the show. Hopefully it'll be of use to other Omnia 7 owners that are wondering if they should make the switch or not. So let's dig in.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Hardware&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To me, the Omnia with its 4" screen never felt like a huge phone. But the first thing that struck me about the Lumia is how small it seems next to it. And yet the Lumia feels weightier, and definitely looks a lot better. That's fairly subjective, but the Lumia has the lovely curved gorilla-glass screen and the equally curvy rear. The Omnia looks fairly plain and businesslike in comparison.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-1_pN7cXGPmY/TsfFZ_ItFaI/AAAAAAAAAyY/7Jb8OKmbGU0/s1600/CIMG2167.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-1_pN7cXGPmY/TsfFZ_ItFaI/AAAAAAAAAyY/7Jb8OKmbGU0/s320/CIMG2167.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;A few reviews had mentioned a slight rattle in the buttons, and although it's present it's not as much of a problem as I had imagined. You have to shake the phone fairly hard to hear it, and the buttons are not loose in any way when you run your finger over them. All in all, the chassis feels solid.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6bgmaAjrndc/TsfFb_bp_BI/AAAAAAAAAyg/ehOJymhr65A/s1600/CIMG2169.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-6bgmaAjrndc/TsfFb_bp_BI/AAAAAAAAAyg/ehOJymhr65A/s320/CIMG2169.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I have a slight concern with the USB socket cover. It's really flimsy, and kind of a pain to operate. You push down on one end of it to open it, and the hinge and cover feel pathetically weak and plasticy. Any amount of force while the cover is open and it will definitely break off. However, once it's closed there's no looseness to speak of. Something to consider if you're constantly recharging, syncing or deploying over USB.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wW6lKL9UCm4/TsfFd5MACOI/AAAAAAAAAyo/vkp0l1iFgCc/s1600/CIMG2170.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-wW6lKL9UCm4/TsfFd5MACOI/AAAAAAAAAyo/vkp0l1iFgCc/s320/CIMG2170.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The Lumia has all-capacitive operating system buttons. I do miss the hardware Windows key of the Omnia. I had got used to using the Windows key to wake up the Omnia, and now that's not an option with the Lumia.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Many Lumia reviews have mentioned how close the capacitive buttons are to the screen. This was an issue for me with the Omnia when I was gaming on the phone. I find it less so now, probably because I'm used to avoiding accidental swipes, but that search button still catches me out sometimes. I haven't used the Lumia enough yet to tell if the closer proximity of buttons to screen is going to be an issue, but I will be sure to update if I find it is.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DG687nKeO5I/TsfFfyI1FJI/AAAAAAAAAyw/CSWQCo_Zhwk/s1600/CIMG2171.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-DG687nKeO5I/TsfFfyI1FJI/AAAAAAAAAyw/CSWQCo_Zhwk/s320/CIMG2171.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;On the audio side I find the Lumia's loudspeaker a little quieter than the Omnia's, but it doesn't distort as much at high volume. It also seems that the lowest volume setting is quieter than the Omnia's, which is great. There's also more control over the volume at low settings. However, the included headphones are dreadful. The Omnia's have a volume rocker, answer button and mic in the remote control unit. The Lumia's is without a volume rocker. The audio quality of the Omnia's pack-in headphones wasn't great, but the Lumia's are somehow worse.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-L_FLryyA-0A/TsfFhyHDIeI/AAAAAAAAAy4/O-Up6FoKvfc/s1600/CIMG2172.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-L_FLryyA-0A/TsfFhyHDIeI/AAAAAAAAAy4/O-Up6FoKvfc/s320/CIMG2172.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I'm no expert in photography, so all I'll say about the cameras is that I found the Lumia generally produces better quality pictures, with a higher colour saturation. The Lumia's lens has a much wider angle on it, which is very nice.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-WPAlt6M6Pto/TsfFttCZetI/AAAAAAAAAzg/qLZLKzJ4QZw/s1600/WP_000517.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-WPAlt6M6Pto/TsfFttCZetI/AAAAAAAAAzg/qLZLKzJ4QZw/s320/WP_000517.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Omnia 7 Camera Image&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-G7vPlRDThd0/TsfFruywHQI/AAAAAAAAAzY/CShz8odDD80/s1600/WP_000014.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-G7vPlRDThd0/TsfFruywHQI/AAAAAAAAAzY/CShz8odDD80/s320/WP_000014.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Lumia 800 Camera Image&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The Screen&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The 3.7" Lumia screen is smaller than the 4" Omnia. And I was surprised how much smaller. When you line the phones up side-by-side and look at the home screen, you can really appreciate how nice the Omnia's screen is. Surprisingly, I haven't yet found the smaller screen is hindering my typing in either portrait or landscape orientations. And I have sausage-fingers.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Quality-wise, the screens look about the same. I noticed that the Lumia has a slightly higher colour saturation, and that it had a slightly redder hue to the Omnia's when the phones were both displaying at medium brightness. At high brightness, the colour levels look about the same.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-L_wsJXtOiPk/TsfFl2Uu58I/AAAAAAAAAzI/70iEXFXVcfk/s1600/CIMG2175.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-L_wsJXtOiPk/TsfFl2Uu58I/AAAAAAAAAzI/70iEXFXVcfk/s320/CIMG2175.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I mention the brightness because the Omnia's light sensor seems to switch to a higher brightness at much lower ambient light levels than the Lumia. I had to shine my desk lamp directly at the Lumia's screen to get it to automatically switch to high brightness. You can always turn off the auto brightness (at the expense of battery life) if you prefer a brighter screen. To be honest, I hadn't noticed that the Omnia's probably been running at high brightness most of the time, and the Lumia screen on medium is very dim in comparison.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6odnIhF7uGM/TsfFnq3l0dI/AAAAAAAAAzQ/HFw5k-vPgN0/s1600/CIMG2177.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-6odnIhF7uGM/TsfFnq3l0dI/AAAAAAAAAzQ/HFw5k-vPgN0/s320/CIMG2177.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;b&gt;Speed&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;A video is all that's required to illustrate how much faster the Lumia is. Here, I run a side-by side comparison of the opening sequence of Survivalcraft, the first Windows Phone Minecraft clone. I've set the resolution to Full on both phones. This blew me away, watch for yourself:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/FIP7gRQdzO8/0.jpg" height="340" width="420"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FIP7gRQdzO8?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="420" height="340"  src="http://www.youtube.com/v/FIP7gRQdzO8?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;This slickness filters down to the rest of the system. App load times, browsing and task switching are all smoother and faster on the Lumia. This for me is probably the biggest selling point.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I also noticed that my signal strength has gone from showing the "3G" icon on the Omnia to showing "H" (HSDPA) on the Lumia. This is on Three UK. I'm not entirely sure why this is, as I'm not a phone junkie. The browsing speed OTA is marginally faster, so I'm guessing the Lumia is capable of faster HSDPA than the Omnia. I swapped the SIM back to the Omnia to make sure (I had to use an adaptor as the Lumia is micro-SIM), and couldn't get the Omnia to show the "H" icon. So that was an unexpected bonus.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Included Apps&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;After a year of using the Omnia, I'm now a Zune user as far as music is concerned. I have a Zune Pass, all my purchased albums come from the Zune marketplace. Therefore, the Nokia Music app is redundant. I had a quick flick through it and it seems that all your sideloaded tracks are present and correct should you decide to use it, but it wasn't for me so I uninstalled it.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Nokia Maps didn't fare much better. Once updated, I had a quick play. It mimics the Local Scout behaviour and pinpoints local points of interest, but it doesn't seem to offer anything above and beyond the standard WP7 maps app. The interface is also a little clunky. Bye-bye!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Nokia Drive is the real winner here. When I moved away from Symbian to come to Windows Phone, losing Ovi Maps was a big deal. While functions seem a little limited at the moment (no favourite addresses for instance, just an address history), Drive does what it says on the tin. It's real voice-guided turn-by-turn 3D satnav with downloadable offline maps. And it's really slick. Considering the next best option on Windows Phone - Navigon - costs $99, this is a really great addition.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;One other thing to note is that the Lumia did not ship with the internet sharing capability enabled. The Omnia was recently updated to make this new Mango feature available, but Nokia had to ship without it. I believe it'll be coming in a future Lumia update.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;A Handy Table to Help You Decide&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Omnia 7&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Lumia 800&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Larger Screen&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Nicer Chassis&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Better OS Buttons&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;More Storage&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Louder Loudspeaker&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Better Quality Loudspeaker&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Internet Sharing (with latest update)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Faster Processor/Graphics&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Slightly Better Camera&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Faster Data Speed (HSDPA)(?)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Nokia Drive&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;I hope that helped out at least one person with an Omnia 7 wondering about upgrading.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Update: 4 Weeks Later&lt;/b&gt;&lt;br /&gt;After four weeks with the Lumia, I can happily say that I made the right choice in upgrading. I have not missed the larger screen of the Omnia. I'm not experiencing the reported battery life issues (the Lumia lasts as long as the Omnia for me given the same daily usage and overnight recharge). I don't seem to accidentally brush the search button as much, which is a surprise. Maybe I'm just used to avoiding it now.&lt;br /&gt;&lt;br /&gt;I still wish the loudspeaker was louder, I can't hear it too well in the shower or whilst cooking like I could with the Omnia. The update that will include the Wifi access point option has been pushed back to next year, but I've already had one update from Nokia so I'm confident that any further issue will be ironed out.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a footnote, I'd like to plug my two current Windows Phone games - &lt;a href="http://www.windowsphone.com/en-GB/apps/f4eb750d-6d3c-e011-854c-00237de2db9e" target="_blank"&gt;Asteroid Armageddon&lt;/a&gt; and &lt;a href="http://www.windowsphone.com/en-GB/search?q=Bunny%20Massacres%20Episode%201" target="_blank"&gt;Bunny Massacres Episode 1&lt;/a&gt;. Both games run wonderfully on both the Omnia and the Lumia! Also, keep an eye-out for my forthcoming Windows Phone action/RPG &lt;a href="http://team-mango.com/dreamland.aspx" target="_blank"&gt;Dreamland&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-8792458944807546565?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8792458944807546565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8792458944807546565' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8792458944807546565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8792458944807546565'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/11/omnia-7-vs-lumia-800.html' title='Omnia 7 vs Lumia 800'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NW5RFX61ROg/TsfFjx1FuzI/AAAAAAAAAzA/HSN9PUvP3D4/s72-c/CIMG2174.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-7205986798162881349</id><published>2011-07-29T21:51:00.005+01:00</published><updated>2011-07-29T21:55:14.805+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>New Team Mango Website</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;It's been a long time coming, but I finally updated the &lt;a href="http://team-mango.com/"&gt;Team Mango site&lt;/a&gt; to bring it up-to-date with information on all of our releases.&amp;nbsp;The home page contains relevant content from my &lt;a href="http://garethpw.co.uk/"&gt;personal blog&lt;/a&gt;, so I don't have to update in two places.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;I've been a little lax in blog updates, but suffice to say that Dreamland was indeed submitted to this year's &lt;a href="http://dreambuildplay.com/"&gt;Dream Build Play&lt;/a&gt; just in time! With that done and the website update out of the way, there's three currently ongoing projects in the Team Mango camp:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://team-mango.com/dreamland.aspx"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Dreamland&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;a href="http://team-mango.com/dysnomia.aspx"&gt;Dysnomia&lt;/a&gt; for Windows (hoping to have that out this year)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;A silly little &lt;a href="http://www.youtube.com/watch?v=gzjt_9Usdjs"&gt;Windows Phone game&lt;/a&gt;. Or collection of minigames, really.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;I'll leave you with the latest Dreamland trailer (Dream Build Play edition):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object height="400" style="background: color:#000000; margin-left: 15px;" width="670"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OFq9_DAWHOY&amp;ap=%2526fmt%3D18&amp;autoplay=0&amp;rel=0&amp;fs=1&amp;color1=0x000000&amp;color2=0x000000&amp;border=0&amp;loop=0&amp;hd=1"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;embed src="http://www.youtube.com/v/OFq9_DAWHOY&amp;ap=%2526fmt%3D18&amp;autoplay=0&amp;rel=0&amp;fs=1&amp;color1=0x000000&amp;color2=0x000000&amp;border=0&amp;loop=0&amp;hd=1" type="application/x-shockwave-flash" allowfullscreen="true" width="670" height="400" wmode="transparent"/&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-7205986798162881349?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/7205986798162881349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=7205986798162881349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7205986798162881349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7205986798162881349'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/07/new-team-mango-website.html' title='New Team Mango Website'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6790936822456315726</id><published>2011-06-12T11:25:00.001+01:00</published><updated>2011-06-12T11:26:17.098+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dream Build Play'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Crunching for Dream Build Play: 3 days to go</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;More great progress as I begin what will hopefully be the last day of work on the Dreamland codebase for Dream Build Play. So what's been added to the game since Friday's update?&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-YUs6PA32DH0/TfSStOtLzfI/AAAAAAAAAxQ/i2K5UL_PNeU/s1600/fats360-18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-YUs6PA32DH0/TfSStOtLzfI/AAAAAAAAAxQ/i2K5UL_PNeU/s320/fats360-18.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5LU8vRG_8Gw/TfSSueCrjuI/AAAAAAAAAxU/W0wgl_LYwhA/s1600/fats360-19.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-5LU8vRG_8Gw/TfSSueCrjuI/AAAAAAAAAxU/W0wgl_LYwhA/s320/fats360-19.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Merlin intro - he greets the player at the start of the game and gives a few hints and tips&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OIKUc2_5HuY/TfSSvWexa3I/AAAAAAAAAxY/3ZT7suw7tCY/s1600/fats360-20.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-OIKUc2_5HuY/TfSSvWexa3I/AAAAAAAAAxY/3ZT7suw7tCY/s320/fats360-20.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;New Figement (spell) screen. Gives info on new figments, powers and major quest items.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hGhniGpZnSk/TfSSwSg6ErI/AAAAAAAAAxc/932dD45bKiI/s1600/fats360-21.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-hGhniGpZnSk/TfSSwSg6ErI/AAAAAAAAAxc/932dD45bKiI/s320/fats360-21.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;More NPC conversations. Added placeholder text for some characters that don't have quests in the DBP preview build&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FOKGRrN3w_c/TfSSyFx34DI/AAAAAAAAAxg/XQYB33GNkus/s1600/fats360-22.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-FOKGRrN3w_c/TfSSyFx34DI/AAAAAAAAAxg/XQYB33GNkus/s320/fats360-22.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;5 completable quests for DBP.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Today is all about sounds and music. I'll be adding as many placeholder sound effects as I can in the time remaining, and choosing a couple of music tracks that will appear in the final game. That leaves tomorrow evening for final polish and recording a DBP trailer video. Then Tuesday evening for final submission.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-6790936822456315726?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6790936822456315726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6790936822456315726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6790936822456315726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6790936822456315726'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/06/crunching-for-dream-build-play-3-days.html' title='Crunching for Dream Build Play: 3 days to go'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-YUs6PA32DH0/TfSStOtLzfI/AAAAAAAAAxQ/i2K5UL_PNeU/s72-c/fats360-18.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-1744018284273456109</id><published>2011-06-10T19:40:00.000+01:00</published><updated>2011-06-10T19:40:58.286+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dream Build Play'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Crunching for Dream Build Play: 4 days to go</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Progress! Had a few very productive evenings of work on the Dream Build Play build of Dreamland. First of all, three things that were crossed off of my to-do list:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qMb35kcaERk/TfJiz8UgviI/AAAAAAAAAw8/QukzkyLPsZc/s1600/fats360-13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-qMb35kcaERk/TfJiz8UgviI/AAAAAAAAAw8/QukzkyLPsZc/s320/fats360-13.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Directional spell casting. A half-second delay with a direction indicator makes hitting the desired target much easier.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HlbqZbYonW8/TfJi1twRA2I/AAAAAAAAAxA/oHAMLO-ENTU/s1600/fats360-14.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-HlbqZbYonW8/TfJi1twRA2I/AAAAAAAAAxA/oHAMLO-ENTU/s320/fats360-14.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Town portal. Teleports between dungeons and the town square.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ztnj_shhjqw/TfJi3IbO1OI/AAAAAAAAAxE/D7iysbnJ3gI/s1600/fats360-15.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-ztnj_shhjqw/TfJi3IbO1OI/AAAAAAAAAxE/D7iysbnJ3gI/s320/fats360-15.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Quest progress text. Displays when a quest phase is completed, with a hint &amp;nbsp;for the next phase.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4F2eNOSN4sM/TfJi4Rs5IlI/AAAAAAAAAxI/vg5WJKuSXpY/s1600/fats360-16.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-4F2eNOSN4sM/TfJi4Rs5IlI/AAAAAAAAAxI/vg5WJKuSXpY/s320/fats360-16.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Levelling text. Merlin has a new "Figment" (spell) every few levels. Also, new quests may be unlocked.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;And something that wasn't on my to-do, but needed doing anyway:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aKTRBer64BI/TfJi5oPaPEI/AAAAAAAAAxM/JTjWQYrH1Ao/s1600/fats360-17.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-aKTRBer64BI/TfJi5oPaPEI/AAAAAAAAAxM/JTjWQYrH1Ao/s320/fats360-17.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Game Over! Will have more options in the finished game, but this will do for now.&lt;br /&gt;Text is made up of animated particles (a similar effect is used on the title screen).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Very pleased with how things are going, but things take a less fun turn tonight as I start work on a short tutorial, which involves having the Merlin character walk onto the screen and strike up a conversation.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Will update again tomorrow!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-1744018284273456109?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/1744018284273456109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=1744018284273456109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/1744018284273456109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/1744018284273456109'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/06/crunching-for-dream-build-play-4-days.html' title='Crunching for Dream Build Play: 4 days to go'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qMb35kcaERk/TfJiz8UgviI/AAAAAAAAAw8/QukzkyLPsZc/s72-c/fats360-13.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-7821048193375304409</id><published>2011-06-07T19:57:00.000+01:00</published><updated>2011-06-07T19:57:55.244+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dream Build Play'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Crunching for Dream Build Play: 7 days to go</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/-j5rYxYsyG1w/Te5vs-Icj7I/AAAAAAAAAwQ/JFpmFpX8__0/s1600/Dreamland2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-j5rYxYsyG1w/Te5vs-Icj7I/AAAAAAAAAwQ/JFpmFpX8__0/s320/Dreamland2.jpg" width="266" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;I wasn't going to enter &lt;a href="http://www.dreambuildplay.com/"&gt;Dream Build Play&lt;/a&gt; this year. When the registration period began in March, I was maybe 15% done on my current work-in-progress, Dreamland. And most of that progress had been made on the Windows Phone version of the game. Team Mango artist Leon didn't have to do a great deal to persuade me that we should get the game ready to enter regardless.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;I've entered DBP for the last two years. Gravsheep in 2009 and Dysnomia last year. Dysnomia finished in the final 20. While I'm not expecting Dreamland to be a finalist, it would be a shame to sit it out this time around. So here I am, with seven days to go. As the game stands, it's fully up and running on the 360 with the majority of the game mechanics in place. Content-wise, I'm looking to have the first 20% of the game in there, including the first dungeon and first boss and a number of completable quests. I'm aiming to be code-complete by Sunday night so that I can spend Monday recording a video and have Tuesday evening ironing out any last issues.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;"&gt;&lt;a href="http://3.bp.blogspot.com/-xdrAbogUbcA/Te5yih7jHUI/AAAAAAAAAwY/ki4k4GprIlA/s1600/fats360-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-xdrAbogUbcA/Te5yih7jHUI/AAAAAAAAAwY/ki4k4GprIlA/s320/fats360-3.png" width="320" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;"&gt;&lt;a href="http://2.bp.blogspot.com/-3sP2xfZDW2I/Te5yj5VRojI/AAAAAAAAAwc/DyCxXC4saHo/s1600/fats360-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-3sP2xfZDW2I/Te5yj5VRojI/AAAAAAAAAwc/DyCxXC4saHo/s320/fats360-4.png" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Dreamland has been in development since October last year, and while there's not been an official release announcement about the game, I can tell you a few things about it. It's an RPG. A pretty light RPG with real-time combat. It's cartoony, but the visuals betray the adult nature of the game. There's plenty of dry humour in the dialogue, a fair amount of blood (though nothing that sticks) and some adult themes. I'm aiming to get the game out in September on Windows Phone and Xbox Live Indie Games, and complete a Windows version by the holidays.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FuX5oEgSDZQ/Te5ylKLM0vI/AAAAAAAAAwg/goC1mSBJulk/s1600/fats360-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-FuX5oEgSDZQ/Te5ylKLM0vI/AAAAAAAAAwg/goC1mSBJulk/s320/fats360-5.png" style="cursor: move;" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xhX6-1Nie0o/Te5ymQkWq9I/AAAAAAAAAwk/wSySV4n4xiY/s1600/fats360-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-xhX6-1Nie0o/Te5ymQkWq9I/AAAAAAAAAwk/wSySV4n4xiY/s320/fats360-6.png" style="cursor: move;" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;As of tonight, and after a month of real crunching on the codebase, my to-do list for the Dream Build Play release stands as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Spell Direction indicator&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Spellcasting in Dreamland is directional. On the phone, a flick gesture is used to cast spells in the direction of the flick, and is pretty accurate. On the 360, the right stick is used to cast spells. Because It's kind of hard to precisely gauge the direction with a flick of the thumbstick, I'm adding an on-screen direction indicator, with a slight delay so that you can line up the spell before casting it.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Quest updates/levelling text&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;I need some nice text for when the player gains a level or moves a quest along. Just to provide a bit of extra feedback.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Intro/mini-tutorial&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;There's nothing there at the moment. You're dumped right into the game after the title screen. Plan is to have an introduction by one of the games characters, along with a short tutorial explaining melee and magical combat.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Portal&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;In the full game, the character will have a Diablo-style portal item allowing them to easily move between their current location and the town square. For the DBP demo, I'll just be placing a fixed portal at the end of the first dungeon.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;More Quests&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Currently there's two completable quests, I'm hoping to get that up to five. That includes all the NPC conversations that go with the quests.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Sounds and Music&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Currently none. Nada. Nil. Argh. Why do I do this to myself. I have my eye on some stock music already, but sound effects are another story entirely. Maybe I'll just use &lt;a href="http://www.bfxr.net/"&gt;BFXR&lt;/a&gt;&amp;nbsp;for some &lt;i&gt;extremely &lt;/i&gt;placeholder sounds.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;And that's it. Seven items on the list. Seven days to go. Realistically (and given no other distractions), I have around 30 hours free time between now and Sunday.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FxVoHhTwYCE/Te5yngFak5I/AAAAAAAAAwo/5eOIrC8jNl0/s1600/fats360-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-FxVoHhTwYCE/Te5yngFak5I/AAAAAAAAAwo/5eOIrC8jNl0/s320/fats360-7.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xGrw61MpDQM/Te5ypCZxpdI/AAAAAAAAAws/fyWrRS4CduE/s1600/fats360-8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-xGrw61MpDQM/Te5ypCZxpdI/AAAAAAAAAws/fyWrRS4CduE/s320/fats360-8.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fjFxewZgEC8/Te5yqCgSFlI/AAAAAAAAAww/OveSnGZZE3Y/s1600/fats360-9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-fjFxewZgEC8/Te5yqCgSFlI/AAAAAAAAAww/OveSnGZZE3Y/s320/fats360-9.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-A43ciGYVeTo/Te5ys-s6lBI/AAAAAAAAAw4/qF65v3FFSvA/s1600/fats360-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-A43ciGYVeTo/Te5ys-s6lBI/AAAAAAAAAw4/qF65v3FFSvA/s320/fats360-11.png" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;I shall update again on Friday evening.&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/7825228553392473517-7821048193375304409?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/7821048193375304409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=7821048193375304409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7821048193375304409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7821048193375304409'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/06/crunching-for-dream-build-play-7-days.html' title='Crunching for Dream Build Play: 7 days to go'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-j5rYxYsyG1w/Te5vs-Icj7I/AAAAAAAAAwQ/JFpmFpX8__0/s72-c/Dreamland2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-670483763178412657</id><published>2011-04-23T22:18:00.000+01:00</published><updated>2011-04-23T22:18:54.006+01:00</updated><title type='text'>Asteroid Armageddon Updated</title><content type='html'>&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Asteroid Armageddon for Windows Phone 7 has been updated to version 1.4. The update should be available through the usual Marketplace update service right now. We've added a few new features:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Weekly High Scores (reset every&amp;nbsp;Sunday at 2100 GMT)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;End-of-wave score bonuses&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;One new level of laser&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Two new backgrounds (randomly chosen each new game)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;...and a number of small bugfixes.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-670483763178412657?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/670483763178412657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=670483763178412657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/670483763178412657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/670483763178412657'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/04/asteroid-armageddon-updated.html' title='Asteroid Armageddon Updated'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-5716386843284459786</id><published>2011-03-18T08:38:00.023Z</published><updated>2011-04-23T22:20:45.738+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Asteroid Armageddon'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Japan'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Gaming for Japan</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Now that &lt;a href="http://fatsweb.blogspot.com/2011/02/asteroid-armageddon-released.html"&gt;Asteroid Armageddon&lt;/a&gt;&amp;nbsp;has been released for free in all Windows Phone 7 marketplace regions, we're going to use our first mobile game to do some good.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;From April 2nd to April 22nd, Team Mango will donate all advertising revenue from Asteroid Armageddon to the &lt;a href="http://www.redcross.org/"&gt;American Red Cross&lt;/a&gt;, who are helping the people of Japan recover from the earthquake and tsunami. We chose Red Cross as they are one of a few charities who have a direct fund for Japan.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;The more you play, the more we can donate. So go grab Asteroid Armageddon either via &lt;a href="http://social.zune.net/redirect?type=phoneApp&amp;amp;id=f4eb750d-6d3c-e011-854c-00237de2db9e"&gt;Zune&lt;/a&gt; or by searching the marketplace for "Asteroid Armageddon Free".&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Total Raised: $109.08&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Thanks to everyone that played Asteroid Armageddon over the last few weeks!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-5716386843284459786?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/5716386843284459786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=5716386843284459786' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/5716386843284459786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/5716386843284459786'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/03/gaming-for-japan.html' title='Gaming for Japan'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-2020988838507536406</id><published>2011-02-28T08:39:00.007Z</published><updated>2011-02-28T08:58:29.336Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Asteroid Armageddon'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><title type='text'>Asteroid Armageddon released</title><content type='html'>&lt;div style="TEXT-ALIGN: center"&gt;&lt;span class="Apple-style-span"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-_-sCJNQ8Usc/TWtiLkv8TxI/AAAAAAAAAvs/OduISX9fakw/s1600/download%2B%25281%2529.png"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="WIDTH: 173px; HEIGHT: 173px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5578660514411335442" border="0" alt="" src="http://4.bp.blogspot.com/-_-sCJNQ8Usc/TWtiLkv8TxI/AAAAAAAAAvs/OduISX9fakw/s400/download%2B%25281%2529.png" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ct67o4IhG1k/TWtiLb4xLWI/AAAAAAAAAvk/5uHZKvtE4DI/s1600/download.png"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="WIDTH: 173px; HEIGHT: 173px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5578660512032435554" border="0" alt="" src="http://4.bp.blogspot.com/-ct67o4IhG1k/TWtiLb4xLWI/AAAAAAAAAvk/5uHZKvtE4DI/s400/download.png" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;span class="Apple-style-span"&gt;&lt;u&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="Apple-style-span"&gt;Just a quick one to say that Asteroid Armageddon is now available on a Windows Phone 7 near you! It's available worldwide as a trial/paid version for $1 (79p), and in the US as an ad-supported free version.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:85%;"&gt;The free version will come to other markets as soon as Microsoft expand the pubCenter program into other territories. Here's a couple of one-line reviews by Marketplace users:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;"Awesome game, graphics, and difficulty."&lt;/i&gt; - Josh51191 &lt;span style="LINE-HEIGHT: 22px" class="Apple-style-span"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;"Very cool and beautifully polished game. I'm going to buy it!"&lt;/i&gt; - Megatron63&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;"WP7 Games are being developed with much more skill, this being a great example."&lt;/i&gt; - victorj589&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;"Actually very good! With leaderboards and challenging gameplay."&lt;/i&gt; - GrungiestGorgon&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:85%;"&gt;Right now, the ads aren't showing up on the Free version, so if you're in the US you're getting a completely free game with no nagging! We're working on fixing that in the first update, which will also add a main menu option to view the local and top ten online scores.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:85%;"&gt;And some Zune deep links for each version of the game:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;Worldwide paid version: &lt;span style="LINE-HEIGHT: 16px; COLOR: rgb(105,105,105)" class="Apple-style-span"&gt;&lt;a href="http://social.zune.net/redirect?type=phoneApp&amp;amp;id=399c5bc9-673c-e011-854c-00237de2db9e"&gt;http://social.zune.net/redirect?type=phoneApp&amp;amp;id=399c5bc9-673c-e011-854c-00237de2db9e&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;Free version (US only): &lt;span style="LINE-HEIGHT: 16px; COLOR: rgb(105,105,105)" class="Apple-style-span"&gt;&lt;a href="http://social.zune.net/redirect?type=phoneApp&amp;amp;id=f4eb750d-6d3c-e011-854c-00237de2db9e"&gt;http://social.zune.net/redirect?type=phoneApp&amp;amp;id=f4eb750d-6d3c-e011-854c-00237de2db9e&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-2020988838507536406?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/2020988838507536406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=2020988838507536406' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/2020988838507536406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/2020988838507536406'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/02/asteroid-armageddon-released.html' title='Asteroid Armageddon released'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_-sCJNQ8Usc/TWtiLkv8TxI/AAAAAAAAAvs/OduISX9fakw/s72-c/download%2B%25281%2529.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-3390427985988768742</id><published>2011-02-07T12:42:00.009Z</published><updated>2011-02-07T18:55:13.298Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='run'/><category scheme='http://www.blogger.com/atom/ns#' term='Asteroid Armageddon'/><category scheme='http://www.blogger.com/atom/ns#' term='XBLIG'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Run! released, and Asteroid Armageddon on its way</title><content type='html'>&lt;div style="TEXT-ALIGN: left"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;I never thought I'd say this, but &lt;/span&gt;&lt;a href="http://fatsweb.blogspot.com/search/label/run"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Run!&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; has finally been released to &lt;/span&gt;&lt;a href="http://marketplace.xbox.com/en-GB/Product/Run/66acd000-77fe-1000-9115-d802585507a2"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Xbox Live Indie Games&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;. Now it's out, I can tell the story of this Team Mango release, and how it almost never happened. It's not that interesting, but here it is all the same...&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="COLOR: rgb(0,0,238); -webkit-text-decorations-in-effect: underlinefont-family:arial;font-size:85%;" class="Apple-style-span"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 267px; DISPLAY: block; HEIGHT: 320px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5571020872890504290" border="0" alt="" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TVA996Ts1GI/AAAAAAAAAu8/2UX51VYo0FE/s320/boxart.jpg" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;Development of Run! began in February 2010, whilst I was getting Dysnomia ready for release on XBLIG. I used it as a creative output whilst I wrapped up all the necessary but boring bits that make up the last 10% of getting a game to market, especially one with the scope of Dysnomia.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The original idea for Run! was to create a simple &lt;/span&gt;&lt;a href="http://www.bluemoon.ee/history/skyroads/"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Skyroads&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; clone. I'd already written a clone using OpenGL way back in 2001, called &lt;/span&gt;&lt;a href="http://www.caiman.us/scripts/fw/f1800.html"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Rollminator&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;. I had a basic engine for Run! working in just a couple of days, but the idea of using Avatars wasn't there right from the start. I guess that came out of the frustration that a lot of XBLIG creators were feeling back then, that fully-fledged games were being ignored in favour of "shovelware" that used Avatars as a gimmick. I was also glad that I had the idea when I saw Dr. Mistry's rather excellent &lt;/span&gt;&lt;a href="http://www.mstargames.co.uk/bbtop.html"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Blazin' Balls&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;, which is pretty much precisely the direction that Run! was headed in that first week or so.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;So, I was using Run! as my one-dollar-avatar-game experiment. Being part of the problem, I guess. Except I completely missed the boat, as usual. Though the game was 90% complete around the time that Dysnomia became a finalist in Dream Build Play, I was simply too busy to wrap it up. Last summer, there was the whole house-buying thing which dragged on, then there was distraction in the form of Windows Phone 7 and the work I was doing there. Run! became the "difficult third" game that was swept firmly under the rug.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;Then just before the holidays, Microsoft announced they were turning off XNA 3.1 publishing as of, well today actually. This means that Run! was on a deadline. Now, I'm a bit of a completionist, and it was starting to really bug me that Run! was still unfinished and sitting there taunting me in my projects folder. I decided to push to get it out before the deadline, saving me the pain of upgrading to XNA 4.0.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;I used the Christmas break to finish the majority of the work, and got the game into Peer Review mid-January. I completely skipped Playtest, which I hated doing but there was just no time, and I thought that upgrading to 4.0 would be far too painful.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;Run! made it through peer review on the second try (after a rare but game-breaking bug was found and fixed) and was released to the world. I was ready to put this one behind me and work on other things. Fate, it seems, had other ideas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;A couple of days after release, Leon (resident Team mango artist) pointed out that I had used the wrong boxart for the game. When we were putting together concepts for the boxart, we were using an avatar taken from MatthewM's &lt;/span&gt;&lt;a href="http://marketplace.xbox.com/en-GB/Product/Avatar-Dash/66acd000-77fe-1000-9115-d802585504df?cid=search"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Avatar Dash&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; boxart, as it was exactly the kind of pose we needed for ours. I later wrote a quick app to animate random avatars so that Leon could pick his own for the final Run! boxart (above). But somewhere in those six months of downtime, I completely forgot to update the boxart &lt;i&gt;and&lt;/i&gt; title screen images in the game project. Uh oh.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;It was a genuine mistake. I didn't set out to plagiarise Matthew's boxart, I would never dream of doing so. I had to get it fixed. And so I updated the entire project to XNA 4.0 so that I could resubmit a new version with the correct boxart. As of writing, I'm still waiting for the 7-day submission "purgatory" to end. MatthewM - if you read this - I apologise profusely for the screw up, and a fix is on its way. Drop a comment so I can get in touch.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;And so ends the sorry saga of the third Team mango game. Lessons have been learnt.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;span style="COLOR: rgb(0,0,238); FONT-WEIGHT: normal; -webkit-text-decorations-in-effect: underlinefont-family:arial;font-size:85%;" class="Apple-style-span"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 256px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5571021238056142850" border="0" alt="" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TVA-TKp-SAI/AAAAAAAAAvE/TCjHPjFDk8Y/s320/AABGPanorama.png" /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;What's all this about then? Why, it's Team Mango's first Windows Phone 7 game, of course! Here's a trailer!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;span class="Apple-style-span"&gt;&lt;iframe title="YouTube video player" height="390" src="http://www.youtube.com/embed/sTCmmr8ZJXE?rel=0" frameborder="0" width="480" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;Asteroid Armageddon was suggested, designed, and bought to life by Leon after looking about on the WP7 marketplace for action/shooting games. It's a simple but addictive game that uses the tilt sensor to rotate the player's viewpoint, the the touchscreen to fire lasers at oncoming asteroids. Between each wave of asteroids, the player can upgrade his turret with more shields, more weapon coolant and so on. I wrote an online high scores service especially for this game, but that can also be used for future Team Mango WP7 and Windows games.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;I'm really happy with this bitesized game, perfect for those 5-minute breaks in your day when you might break open a game on the phone. It took just under two weeks to put together all the code and assets for it. It's something I'd like to do more of, maybe a game of this size and simplicity for the phone every couple of months. We're still working on the next "big" Team Mango game, our as-yet-unnamed RPG, and it was nice to have a quick break from that to work on something else. Looking forward to getting back on the RPG this week though, I have to say.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family:arial;font-size:85%;"&gt;I think that's enough rambling for this week. Next week, I'll go into detail about that high score service I created for Asteroid Armageddon.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-3390427985988768742?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/3390427985988768742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=3390427985988768742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3390427985988768742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3390427985988768742'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/02/run-released-and-asteroid-armageddon-on.html' title='Run! released, and Asteroid Armageddon on its way'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1p44RM4wSTU/TVA996Ts1GI/AAAAAAAAAu8/2UX51VYo0FE/s72-c/boxart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8834607168590503856</id><published>2011-01-10T19:52:00.007Z</published><updated>2011-06-07T20:00:53.410+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='game development'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='XBLIG'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Game4'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Team Mango Dev Diary</title><content type='html'>&lt;span style="font-family: arial; font-size: 85%;"&gt;It's been ten months since the release of Dysnomia, and I had hoped to have at least one more game out on the Xbox Live Indie Games service by now. 2010 proved to be a busy year outside of games development (which is &lt;i&gt;only&lt;/i&gt; a hobby for me, after all) and time has been short. Now I'm back to a regular schedule, I have a list of projects that I intend to finish this year: &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Run! to be released on XBLIG shortly&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Game 4 (still untitled!) on Phone 7, and XBLIG shortly after&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Game 4 on Windows&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Dysnomia on Windows&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;and lastly, Dysnomia on Phone 7 (still tentative)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;So that's six releases of three games on three platforms. The only real tall order is getting Dysnomia working well on the phone. There's currently some framerate hitches that I'm assuming are garbage collections, so more optimization to do on that front.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;I'm wrapping up &lt;/span&gt;&lt;a href="http://fatsweb.blogspot.com/2010/11/moving-house-and-team-mango-projects.html"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Run!&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt; this week, there's less than a month to go before XNA 3.1 games are no longer valid for submission on XBLIG, and I'd rather not spend the time to port to XNA 4. The game's been the best part of ready for several months, with just a couple of levels to finish and some pre-submission tests to run through. I'll be glad to get this one out the door!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Things are progressing well on Game 4, the first RPG game I've attempted. Basic melee combat is in and generally feels nice to play. As Game 4 is being developed simultaneously for all three XNA hardware platforms, I'm taking the time to ensure a solid user experience no matter what the control method. For instance - while nothing is set in stone as yet - the movement and basic attack controls are mapped as follows:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;&lt;b&gt;Movement - &lt;/b&gt;&lt;span class="Apple-tab-span" style="font-weight: bold; white-space: pre;"&gt; &lt;i&gt;Xbox:&lt;/i&gt; &lt;/span&gt;Left stick &lt;b&gt;&lt;i&gt;Phone 7:&lt;/i&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Single-tap &lt;b&gt;&lt;i&gt;Windows:&lt;/i&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Left click&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;b&gt;Attack&lt;/b&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt; - &lt;/b&gt;&lt;span class="Apple-tab-span" style="font-weight: bold; white-space: pre;"&gt; &lt;i&gt;Xbox:&lt;/i&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="font-weight: bold; white-space: pre;"&gt; &lt;/span&gt;&lt;i&gt;A&lt;/i&gt; button&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;i&gt;Phone 7:&lt;/i&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;Double-tap&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;i&gt;Windows:&lt;/i&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;Right click &lt;i&gt;or&lt;/i&gt; double click&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;For what will be the equivalent of "magic" attacks, the Xbox version will make use of the other three main buttons, which will be player-assignable in a method similar to &lt;i&gt;&lt;a href="http://www.deathspank.com/"&gt;Deathspank&lt;/a&gt;. &lt;/i&gt;On the phone and Windows, the UI will make use of tapable/clickable icons for quick access to three user-definable "spells". The Xbox version will use auto-targeting for ranged attacks, whilst on the phone and windows the player will be able to click an enemy to fling a "spell".&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;We're still developing the storyline and game mechanics, so I can't yet explain the reason for the quotes when talking baout "magic". Suffice to say, the game doesn't make use of regular fantasy-RPG magic. Whilst some attacks will be familiar, others will be completely &lt;i&gt;ridiculous&lt;/i&gt;. Hopefully in a funny way!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;I've started work on a WPF application to help with editing the conversations that occur between the main character and the NPCs in-game. I love the rapid development environment offered by VS 2010/C#/.NET. Just being able to slap a new application into your game solution, quickly knock out an interface, write some codebehind and bam! a functional tool that will save so much time compared to writing out the XML content by hand.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TSt1dhWlDEI/AAAAAAAAAus/htNiTjpE5t0/s1600/conversationeditor.PNG"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5560667314948738114" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TSt1dhWlDEI/AAAAAAAAAus/htNiTjpE5t0/s320/conversationeditor.PNG" style="cursor: pointer; height: 190px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;At the moment, it simply serializes a list of conversation steps to an XNA content XML file that is read in and deserialized in the game. It will become more complex as the quest system gets added, with specially marked steps to control the flow of conversation according to the completion status of associated quests.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;And, just to wrap up, a quick video of the first iteration of the conversation screen:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;object height="385" width="640"&gt;&lt;embed src="http://www.youtube.com/v/gY8kamIWSWg?fs=1&amp;amp;hl=en_GB" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&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/7825228553392473517-8834607168590503856?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8834607168590503856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8834607168590503856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8834607168590503856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8834607168590503856'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/01/team-mango-dev-diary.html' title='Team Mango Dev Diary'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/TSt1dhWlDEI/AAAAAAAAAus/htNiTjpE5t0/s72-c/conversationeditor.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6121814457720932140</id><published>2011-01-03T16:47:00.012Z</published><updated>2011-01-04T09:14:39.551Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tombstoning'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Gaming'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>WP7 Games and the Dreaded Search Button</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgMDptVbI/AAAAAAAAAuc/QouTi59Hz0M/s1600/smallboxart.jpg"&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span class="Apple-style-span"&gt;Happy twenty-elephants! I hate to start the new year with a rant, but I figure why not get it out of the way now, so I can concentrate on some more constructive posts for the rest of the year. Besides, I've only really found how awfully annoying the subject of this rant is over the holidays, as I spent quite a bit of time gaming on my Samsung Omnia 7.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;You see, the Omnia 7 has a capacitive search button. The WP7 search button is one of the three hardware face buttons required by Microsoft's hardware specifications for the Phone 7 OS. The Omnia 7 isn't the only phone with capacitive back and search buttons. It's the capacitive nature that means they can be accidentally swiped fairly easily, especially during more frantic gaming moments.&lt;/span&gt; &lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;Unfortunately, the default behaviour of the search button is to open up Bing search, even if you're right in the middle of a game. In itself, this wouldn't be so bad if you could simply hit the back button to get back to where you were in game. But due to the application lifecycle on Phone 7, the game you were playing is quickly closed down in the background. The Phone 7 SDK provides ample tools for developers to deal with such situations, but unfortunately - as I wrote about in a &lt;a href="http://fatsweb.blogspot.com/2010/11/tombstoning-in-phone-7-xna-games.html"&gt;previous post&lt;/a&gt; - not all developers take the time to make their games behave. As a user as well as a developer, this is extremely frustrating.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;So I thought I'd take the time to name and shame some of the games that don't do enough to get the user back in the game as quickly as possible after accidentally hitting search, answering a call, or dropping out to the home screen. And, because I like to be positive as often as possible, I'll also highlight the games that &lt;i&gt;do&lt;/i&gt; tombstone correctly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;All of the games I've tested here are full purchased versions of Xbox Live enabled games. This means they are published either by Microsoft or a third-party partner. I test by getting into the game, hitting search, waiting a few seconds, then hitting back.&lt;/span&gt; &lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgMDptVbI/AAAAAAAAAuc/QouTi59Hz0M/s1600/smallboxart.jpg"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 85px; FLOAT: left; HEIGHT: 120px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5558040281639376306" border="0" alt="" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgMDptVbI/AAAAAAAAAuc/QouTi59Hz0M/s400/smallboxart.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Puzzle Quest 2&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;Quite frankly, this is the most disappointing game on the list. I love Puzzle Quest, I've got the game on XBLA as well. The game runs like a dog on Phone 7, with a framerate that looks to be barely in double-digits. The complete lack of tombstoning is the straw the breaks the camel's back. You could be almost at the end of a 5 minute battle and have to put the phone away - and you're completely screwed. Attempt to resume the game, and not only do you have to sit through the splash screens again, you've also got to navigate the menus. The game does save your position in the overworld, but you lose all progress on the battle you were fighting and that, my friends, is highly annoying.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgLwaWdvI/AAAAAAAAAuU/TXXa8fZbnRE/s1600/smallboxart%2B%25283%2529.jpg"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 85px; FLOAT: left; HEIGHT: 120px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5558040276474689266" border="0" alt="" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgLwaWdvI/AAAAAAAAAuU/TXXa8fZbnRE/s400/smallboxart%2B%25283%2529.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Rocket Riot&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;A great game that &lt;i&gt;almost&lt;/i&gt; gets the tombstoning right. The game resumes with a single loading screen, and gets you right back into the level you were playing. Unfortunately, you have to start the level again and that can be a little frustrating especially in the latter levels where you are required to kill 40+ enemies in a match that could last a few minutes. Close, but no cigar. Just save out the current score, Codeglue guys, and you'll have a winner.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgL9hO8GI/AAAAAAAAAuM/ZlZBfED_fLA/s1600/smallboxart%2B%25282%2529.jpg"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 85px; FLOAT: left; HEIGHT: 120px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5558040279993217122" border="0" alt="" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgL9hO8GI/AAAAAAAAAuM/ZlZBfED_fLA/s400/smallboxart%2B%25282%2529.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The Harvest&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;One of the original line-up of games that got some tech sites noticing the tombstoning problems early. I really like The Harvest, but as I went to test it again for this post I'm having serious problems with it. It no longer wants to load or continue games, either from resuming after tombstoning, or from a fresh boot. I even turned the phone off and back on again to clear it out and still no dice. This means I can no longer load or continue my saved game. It never used to be like this, but even when it did all work there were major issues with coming back from tombstoning including multiple splash screens and excruciating load times. Seriously in need of a patch.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TSIgLuMBVeI/AAAAAAAAAuE/ABxyoGE7NwQ/s1600/smallboxart%2B%25281%2529.jpg"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 85px; FLOAT: left; HEIGHT: 120px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5558040275877713378" border="0" alt="" src="http://4.bp.blogspot.com/_1p44RM4wSTU/TSIgLuMBVeI/AAAAAAAAAuE/ABxyoGE7NwQ/s400/smallboxart%2B%25281%2529.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Fruit Ninja&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;Well done to Halfbrick for nailing it. I guess all the time spent developing XBLIGs and adhering to the Evil Checklist rubbed off, as they actually seem to care about the end user experience. Either that or they got fed up of accidentally swiping the search button in playtest! Fruit Ninja resumes perfectly, getting the user quickly back into the game with all the fruit on-screen where they were left. The game's even paused for good measure. If I had to nitpick, I'd say the MGS splash screen is unnecessary - but I have a feeling it's required by Microsoft. If that's the case then they should have an "except in the case of resuming from tombstoning" clause.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TSIgLnHaeaI/AAAAAAAAAt8/OZNEMVjCeuo/s1600/smallboxart%2B%25284%2529.jpg"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 85px; FLOAT: left; HEIGHT: 120px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5558040273979341218" border="0" alt="" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TSIgLnHaeaI/AAAAAAAAAt8/OZNEMVjCeuo/s400/smallboxart%2B%25284%2529.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;Flight Control&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:85%;"&gt;Another one that gets it right, save for a couple of unnecessary splash screens. Seriously, if you're coming back from tombstoning, you don't need to let the user know who you are again. Chances are I've already seen your company logo once today. That aside, Flight Control gets you right back into the game with all the planes onscreen where they were left, and your score intact. As with Fruit Ninja, the game comes back to the pause screen, which is perfect.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;So there you have it. Two out of five of the games I've purchased behave satisfactorily after I accidentally mash the search button. In time, I expect all the Xbox Live enabled games will pay attention to this vital part of the user experience. Until then, please patch PQ2!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;I promise that's the last I will post about tombstoning for oooooh, at least a month. Next monday will be a Team Mango games status update, with a couple of videos of Game 4. Maybe we'll even have a title for it by then!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-6121814457720932140?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6121814457720932140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6121814457720932140' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6121814457720932140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6121814457720932140'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2011/01/wp7-games-and-dreaded-search-button.html' title='WP7 Games and the Dreaded Search Button'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1p44RM4wSTU/TSIgMDptVbI/AAAAAAAAAuc/QouTi59Hz0M/s72-c/smallboxart.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-4412679243704079358</id><published>2010-12-06T21:33:00.002Z</published><updated>2011-06-07T20:01:11.773+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='playing house'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='games development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Game4'/><category scheme='http://www.blogger.com/atom/ns#' term='ame4'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Normality, Of Sorts</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;It's been one month since Jenna and I moved into our new home. We're still in the process of sorting everything out, and we're still having to move boxes of junk in from our parents' houses and find room for everything. Luckily we have a huge loft for most of the boxes of knick-knacks. We've somehow found the time to put up the christmas tree and a few lights already! It's all feeling much more homely now, and having done the major work, I've been able to sort out a schedule for Team Mango game development work.&lt;br /&gt;&lt;br /&gt;It's a rough schedule that allocates days to certain tasks, but doesn't constrain me to allotted hours, because I never know how many hours I'll get to spend in any given day. Still, my schedule goes something like this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Monday&lt;/b&gt; - Blog post day&lt;br /&gt;&lt;b&gt;Tuesday to Friday&lt;/b&gt; - Work on Game 4 for Phone 7&lt;br /&gt;&lt;b&gt;Saturday&lt;/b&gt; - Bring Windows and Xbox versions of Game 4 up to date&lt;br /&gt;&lt;b&gt;Sunday&lt;/b&gt; - Work on Dysnomia for Phone 7&lt;br /&gt;&lt;br /&gt;Bear in mind that I usually have only one or two hours each day to spend on the assigned task. I kind of like it like that, as it allows me to really focus on bitesized chunks of work.&lt;br /&gt;&lt;br /&gt;I tend to treat Saturday as my "anything goes" day, as it's the one day I have plenty of time to spend on development. The only task I set myself as &lt;i&gt;must complete&lt;/i&gt; for Saturday is to get the Windows and Xbox versions of Game 4 up to the same level as Phone 7. &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;Throughout the week I develop on the phone as it's the lead platform for Game 4, but I'm giving the Windows and Xbox versions the same amount of respect by making sure I carefully tune the UI and controls for each platform. Sometimes this may only take 20 minutes on a Saturday morning, adding in any new content files and tweaking the controls. Sometimes it takes longer, especially if there's new UI items to do - especially on the 360, where I need to display button prompts rather than having clickable/tappable buttons on-screen. There's a lot more to developing on all three platforms than simply creating copies of a project in a solution and hitting compile!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;So that's my work schedule - but how do I remain focused? Like many creatively-minded people the world over, I tend to have moments of procrastination. It's easy for the mind to wander to other things. Here's my top five tips for staying on a project, especially if it's just a hobby:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-size: 85%;"&gt;&lt;b&gt;Work with someone else&lt;/b&gt;. There's absolutely no substitute for teamwork. If you're working with a partner on a project, you're always pushing forward because you don't want to let the other party down. I have Leon constantly churning out art assets for our games, and that pushes me to get things done.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-size: 85%;"&gt;&lt;b&gt;Work in bite-sized chunks&lt;/b&gt;. If you know you've only got an hour to spend on something, plan ahead and assign yourself a task you know you can get done in that hour. Conversely, if you have a full day - don't spend all of it working. Work on a large task that might take five or six hours, but have plenty of breaks. And when you're done on a task, it's okay to call it a day. If you feel you've accomplished something, then it's probably a good time to stop.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-size: 85%;"&gt;&lt;b&gt;Music&lt;/b&gt;. This is a personal thing, but I find that music helps me concentrate a lot more, especially if I'm listening to familiar tunes. I often find I have the same few albums in rotation for several weeks before I try something new. For the record, I listen to a lot of melodic death - but whatever floats your boat!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-size: 85%;"&gt;&lt;b&gt;Get a whiteboard&lt;/b&gt;! I love my whiteboard. I use it to keep track of tasks, doodle UI sketches and work out geometry math. If you don't have room for a whiteboard, you may find a pen and a pad of paper a suitable alternative.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-size: 85%;"&gt;&lt;b&gt;Do the hard and/or boring stuff first&lt;/b&gt;. Specifically in games development, there's the cool stuff like gameplay, animation and visual effects. Then there's the monotonous stuff like menu screens, file handling, Xbox profile support, tutorials and so on. Reward yourself for completing something boring by working on something cool. Otherwise, you'll finish your main game after several months, and still have a month's worth of essential polishing to go, when all you want to do is get the game out the door.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-4412679243704079358?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/4412679243704079358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=4412679243704079358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4412679243704079358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4412679243704079358'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/12/normality-of-sorts.html' title='Normality, Of Sorts'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-4268559893080585306</id><published>2010-11-29T19:04:00.015Z</published><updated>2010-11-29T22:15:18.380Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tombstoning'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='C#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Gaming'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Tombstoning in Phone 7 XNA games</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;One of my pet peeves about the new Windows phone 7 platform is incorrect or insubstantial use of "tombstoning" of applications, especially when it comes to games. Tombstoning is the terminology Microsoft use to describe the hibernation of apps when they lose focus (ie. for an incoming call, or the start button being pressed). &lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;In a way, some of the worst culprits are the official Xbox Live games on the Phone 7 marketplace. Very few of them will resume the game at the exact place they lost focus. Take one of my favourite titles, Rocket Riot, for example. It's one that almost gets it right, but falls at the last hurdle. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Each of Rocket Riot's levels requires that the player kill X number of enemies, 50+ in the late game. If the game loses and then regains focus (ie. it is tombstoned), it remembers which level was being played, but not the number of enemies that had already been killed, or the progress of a boss fight on boss levels. The player is effectively forced to restart from the beginning of the level, and is in a way punished for taking a phone call or accidentally brushing against the start or search hardware buttons.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Some of the Xbox Live games don't even behave &lt;i&gt;that&lt;/i&gt; well. Having to sit through splash screens and 30 second long loading screens just to get back to a game that simply lost focus is just not good enough. And as responsible XNA developers, we can make sure our games behave, and it needn't be a complete hassle to achieve seamless tombstoning.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The XNA team give us a great starting point in the &lt;/span&gt;&lt;a href="http://create.msdn.com/en-US/education/catalog/sample/game_state_management"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Phone 7 Gamestate Management&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; sample. There's even more help available in the &lt;/span&gt;&lt;a href="http://create.msdn.com/en-US/education/catalog/article/tombstoning_wp7_games"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;article on Tombstoning in WP7 Games&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;I use a modified version of the Gamestate Management sample as a starting point for all my XNA projects, whichever platform I'm working on at the time. I found the Phone 7 version of the sample to be very useful, although in its current incarnation, it doesn't quite push the tombstoning quite far enough.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;I changed the sample to recognise the right startup event for restoring state upon re-activation. There's a handy table in the &lt;/span&gt;&lt;a href="http://create.msdn.com/en-US/education/catalog/article/tombstoning_wp7_games"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Tombstoning in WP7 Games&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt; article. The Gamestate sample does not check the &lt;span class="Apple-style-span"&gt;PhoneApplicationService.Current.StartupMode property, and instead attempts to restore from a tombstoned state every time the game is run. To avoid this, we simply need to add a check in Game.cs as follows:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:85%;"&gt;Replace:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;color:#006600;"&gt;// attempt to deserialize the screen manager from disk. if that&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;color:#006600;"&gt;// fails, we add our default screens.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;if&lt;/span&gt; (!screenManager.DeserializeState())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;color:#006600;"&gt;// Activate the first screens.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;screenManager.AddScreen(&lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;BackgroundScreen&lt;/span&gt;(), &lt;span style="color:#000099;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;screenManager.AddScreen(&lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;MainMenuScreen&lt;/span&gt;(), &lt;span style="color:#000099;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:85%;"&gt;With:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   &gt;&lt;div&gt;&lt;span style="font-family:courier new;color:#006600;"&gt;// attempt to deserialize the screen manager from disk. if that&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;color:#006600;"&gt;// fails, we add our default screens.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;bool&lt;/span&gt; deserialized = &lt;span style="color:#000099;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;if&lt;/span&gt; (&lt;span style="color:#339999;"&gt;PhoneApplicationService&lt;/span&gt;.Current.StartupMode == &lt;span style="color:#339999;"&gt;StartupMode&lt;/span&gt;.Activate)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;if&lt;/span&gt; (!screenManager.DeserializeState())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;deserialized = &lt;span style="color:#000099;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;color:#000099;"&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;deserialized = &lt;span style="color:#000099;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;if&lt;/span&gt; (!deserialized)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;screenManager.AddScreen(&lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;BackgroundScreen&lt;/span&gt;(), &lt;span style="color:#000099;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;screenManager.AddScreen(&lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;MainMenuScreen&lt;/span&gt;(), &lt;span style="color:#000099;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;You'll need to add a reference to Microsoft.Phone, and also System.Windows (the latter is required for the IApplicationService interface). You'll then need to add the corresponding using statement in Game.cs:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt; Microsoft.Phone.Shell;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Great! now the Gamestate sample will only attempt to restore from a tombstoned state upon re-activation, not starting afresh. Now onto the tricky stuff.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The Gamestate sample rather cleverly serializes the state of all the opened GameScreens when the game is Deactivated. This means we don't have to do anything extra to get back to the screen (most likely GameplayScreen) that was in use at the time of deactivation. If the Xbox Live games mentioned earlier are anything to go by, you've done enough at this point! Go straight to marketplace, do not collect £200.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;But in order to cater for the more discerning phone user, we need to do more work. We need all of our game objects to be saved as they are. We want our main character to come back exactly where we left him. We want to be on the right level, and with the same enemies in the same places. Now all of this is going to depend on &lt;i&gt;your&lt;/i&gt; game and how you intend to handle game saves, but I will give an example of just one way to do it, using XmlSerializer.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The GameScreen base class has two overridable methods, Serialize() and Deserialize(), which are called when the screen is removed or added during application Deactivation and Activation respectively. So, in our GameplayScreen, we need to add both these methods:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;public&lt;/span&gt; &lt;span style="color:#000099;"&gt;override void&lt;/span&gt; Serialize()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;base&lt;/span&gt;.Serialize();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;public&lt;/span&gt; &lt;span style="color:#000099;"&gt;override void&lt;/span&gt; Deserialize()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;base&lt;/span&gt;.Deserialize();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Now, let's assume that you have a game hero class, Hero. Your GameplayScreen might instantiate the Hero class:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#339999;"&gt;Hero&lt;/span&gt; gameHero;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;public&lt;/span&gt; GameplayScreen()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;gameHero = &lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;Hero&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;And during the game, the hero's fields might be updated, such as gameHero.Position, gameHero.Level and so on. We need to save the state of the Hero class when the game is deactivated, and we're going to use XML serialization to do it, because it requires &lt;i&gt;very little&lt;/i&gt; work to get up and running.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Let's extend our earlier GameplayScreen.Serialize method to store down our Hero when GameplayScreen is serialized (the game is being tombstoned):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;public override void&lt;/span&gt; Serialize()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt; (&lt;span style="color:#339999;"&gt;IsolatedStorageFile&lt;/span&gt; storage = &lt;span style="color:#339999;"&gt;IsolatedStorageFile&lt;/span&gt;.GetUserStoreForApplication()) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre;font-size:85%;" class="Apple-tab-span" &gt;{ &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;&lt;span style="color:#000099;"&gt;if&lt;/span&gt; (!storage.&lt;span style="color:#000000;"&gt;DirectoryExists&lt;/span&gt;(&lt;/span&gt;"TombstoneData"&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;)) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre;font-size:85%;" class="Apple-tab-span" &gt;{ &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;storage.CreateDirectory("&lt;/span&gt;TombstoneData"&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre;font-size:85%;" class="Apple-tab-span" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre;font-size:85%;" class="Apple-tab-span" &gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt; (&lt;span style="color:#339999;"&gt;IsolatedStorageFileStream&lt;/span&gt; stream = storage.CreateFile(&lt;span style="color:#660000;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#660000;"&gt;TombstoneData&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;\\&lt;/span&gt;hero&lt;/span&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;&lt;span style="color:#660000;"&gt;.dat"&lt;/span&gt;)) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre;font-size:85%;" class="Apple-tab-span" &gt;{ &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;&lt;span style="color:#339999;"&gt;XmlSerializer&lt;/span&gt; xmls = &lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;XmlSerializer&lt;/span&gt;(&lt;span style="color:#000099;"&gt;typeof&lt;/span&gt;(&lt;/span&gt;&lt;span style="color:#339999;"&gt;Hero&lt;/span&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;)); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;xmls.Serialize(stream, game&lt;/span&gt;Hero&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="WHITE-SPACE: pre;font-size:85%;" class="Apple-tab-span" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="WHITE-SPACE: pre;font-family:courier new;font-size:85%;" class="Apple-tab-span"  &gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;base&lt;/span&gt;.Serialize();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;It's as simple as that! We open up the application's IsolatedStorageFile, create a directory in it, and serialize the gameHero instance of the Hero class to XML, which we then write out to the hero.dat file stream. And because all .NET 4 classes are automatically marked as Serializable, we don't need to do any extra work to save out most of the fields on the class.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;We can now do the opposite to load our hero back in when the game is activated, and the screens are Deserialized:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;public override void&lt;/span&gt; Deserialize()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt; (&lt;span style="color:#339999;"&gt;IsolatedStorageFile&lt;/span&gt; storage = &lt;span style="color:#339999;"&gt;IsolatedStorageFile&lt;/span&gt;.GetUserStoreForApplication())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;color:#000099;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt; (&lt;span style="color:#339999;"&gt;IsolatedStorageFileStream&lt;/span&gt; stream = storage.OpenFile(&lt;span style="color:#660000;"&gt;"TombstoneData\\hero.dat"&lt;/span&gt;, &lt;span style="color:#339999;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#339999;"&gt;FileAccess&lt;/span&gt;.Read))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#339999;"&gt;XmlSerializer&lt;/span&gt; xmls = &lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;XmlSerializer&lt;/span&gt;(&lt;span style="color:#000099;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#339999;"&gt;Hero&lt;/span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;gameHero = (&lt;span style="color:#339999;"&gt;Hero&lt;/span&gt;)xmls.Deserialize(stream);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;catch&lt;/span&gt; (&lt;span style="color:#339999;"&gt;Exception&lt;/span&gt; ex)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;if&lt;/span&gt; (storage.DirectoryExists("TombstoneData"))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;string&lt;/span&gt;[] files = storage.GetFileNames(&lt;span style="color:#660000;"&gt;"TombstoneData\\*"&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#000099;"&gt;string&lt;/span&gt; file &lt;span style="color:#000099;"&gt;in&lt;/span&gt; files)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;storage.DeleteFile(&lt;span style="color:#339999;"&gt;Path&lt;/span&gt;.Combine(loadFolder, file));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;base.Deserialize();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;We add the extra try/catch to handle any errors that may occur whilst loading our data back in. If it fails, we simply delete any remaining files to clean up the TombstoneData folder for next time.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Now, it's important to know in which order the GameplayScreens initialization methods get called when returning from tombstone. The ones we're concerned about (in order of execution) are:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The constructor GameplayScreen()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Deserialize()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;LoadContent()&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;So we should instantiate our game classes in the screen's constructor, load their saved state in Deseralize(), then load any graphical content in LoadContent(). You'll probably have a Hero.LoadContent() method, which you'd call from GameplayScreen.LoadContent().&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Of course, there's a lot more to tombstoning than simply serializing your main classes, but hopefully it'll give you a starting point to help improve your game's behaviour. There are issues with the performance of the XmlSerializer and you may choose to look to Binary serialization for instance.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;I'm only just scratching the surface whilst developing the as-yet-unannounced Team Mango RPG for the phone, so I'll likely blog more about my final tombstoning solution as it's quite a black art that unfortunately even the big studios are failing to get right.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&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/7825228553392473517-4268559893080585306?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/4268559893080585306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=4268559893080585306' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4268559893080585306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4268559893080585306'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/11/tombstoning-in-phone-7-xna-games.html' title='Tombstoning in Phone 7 XNA games'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6377881989039778073</id><published>2010-11-22T19:12:00.010Z</published><updated>2011-06-07T20:01:26.575+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='XBLIG'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Game4'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Shrinking Dysnomia</title><content type='html'>&lt;span class="Apple-style-span"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;In my last post, I teased &lt;/span&gt;&lt;a href="http://www.dysnomiagame.com/"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;Dysnomia&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt; running on Windows Phone 7. It's an interesting challenge, shrinking the game down to run on the phone. I did a lot of optimization on the 360 version, mostly around garbage collection and memory management while the gameplay was running.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;What I did not optimize at all was RAM usage. I chose to load all game assets up-front, even before the title screen appeared. For the 360, the amount of overall RAM used was trivial, and the load times were fast. I loaded all animation spritesheets, all sounds, all music and all popup screen content before the first level was started. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;The only items I chose to load per-level were the tilesheets, as they were by far the largest textures used in the game, and I needed to be able to free up the RAM they used between levels.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;On the phone however, the RAM usage story is completely different. Microsoft recommends that an application shall not exceed 90mb of total RAM usage, that is to say &lt;i&gt;peak&lt;/i&gt; usage. It's a simple matter to check how much memory your app is using:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: 78%;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="color: #000099;"&gt;var&lt;/span&gt; &lt;/span&gt;curuse = (&lt;span class="Apple-style-span" style="color: #000099;"&gt;long&lt;/span&gt;)&lt;span class="Apple-style-span" style="color: #339999;"&gt;DeviceExtendedProperties&lt;/span&gt;.GetValue(&lt;span class="Apple-style-span" style="color: #990000;"&gt;"ApplicationCurrentMemoryUsage"&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: 78%;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="color: #000099;"&gt;var&lt;/span&gt; &lt;/span&gt;memuse = (&lt;span class="Apple-style-span" style="color: #000099;"&gt;long&lt;/span&gt;)&lt;span class="Apple-style-span" style="color: #339999;"&gt;DeviceExtendedProperties&lt;/span&gt;.GetValue(&lt;span class="Apple-style-span" style="color: #990000;"&gt;"ApplicationPeakMemoryUsage"&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: 78%;"&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;var&lt;/span&gt; maxmem = (&lt;span class="Apple-style-span" style="color: #000099;"&gt;long&lt;/span&gt;)&lt;span class="Apple-style-span" style="color: #339999;"&gt;DeviceExtendedProperties&lt;/span&gt;.GetValue(&lt;span class="Apple-style-span" style="color: #990000;"&gt;"DeviceTotalMemory"&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new'; font-size: 78%;"&gt;curuse /= 1024 * 1024;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new'; font-size: 78%;"&gt;memuse /= 1024 * 1024;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new'; font-size: 78%;"&gt;maxmem /= 1024 * 1024;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;Will return current memory usage, peak memory usage, and total RAM available (in MB) respectively.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TOriOm5-EbI/AAAAAAAAAtw/0361dGvpSIc/s1600/100_2018.JPG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5542491032022553010" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TOriOm5-EbI/AAAAAAAAAtw/0361dGvpSIc/s320/100_2018.JPG" style="cursor: pointer; height: 240px; width: 320px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;So when I hooked up a debug method to output the RAM usage to the screen, I discovered that Dysnomia was using 190MB at peak (with the map screen open), and 170MB during normal gameplay. That's twice the usage limit for passing app certification!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;I began by simply cutting down on front-loaded assets. Later on, I'll implement per-level loading of required spritesheets, but for now I've simply eliminated loading of everything not needed for the first level. That alone got me down to around 110MB peak usage.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;Next up, I began resizing all of the sprite and tilesheet textures. An across-the-board resize of 75% got me down to around 80MB peak. Several larger spritesheets could be downsized even further. Next up, I stopped loading variations of HUD and player sprites for different player colour options and for player two, as there will be only one player on the phone.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;After all that, I'm currently down to 75MB in-game, and 80MB or so on the map screen. I'm still investigating further reductions, including using DXT compression for spritesheets. My target is 65MB in-game usage before reinstating sound effects and boss fights, which will require a good 10-15MB of RAM per level on top of what's used already.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;I'm not going to officially confirm Dysnomia for WP7 until I'm sure I can make it work, but so far I'm impressed with the virtual sticks (emulating left/right thumbsticks via the touchscreen) I've implemented, so I'm sure it will control quite nicely if I can just get everything squeezed into RAM.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;&lt;b&gt;Game 4&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;Can't wrap up this post without a quick update on Game 4. I've resumed work on the next Team Mango game, working on it alongside Dysnomia for WP7 and Run! for XBLIG. It's an RPG, and the next job I needed to complete was getting an enemy manager up and running. The manager controls all of the enemies loaded on a map, including their spawn points.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;As the game is based upon my &lt;/span&gt;&lt;a href="http://fatsweb.blogspot.com/search/label/tile%20engine"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;XNA Tile Engine&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt; solution, I'm using the Tiled editor to lay out the area maps. To depict enemy spawns, I'm using an Object layer. The screenshot below shows a typical map layout with spawns. Each rectangle represents one enemy's patrol area, with the spawn point in the center. When the enemy is loaded, a point within its rectangle is chosen at random, and the enemy begins to move toward that point. When it reaches its destination (or collides with a wall), it chooses a new destination point from within its rectangle.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TOrftUoqkYI/AAAAAAAAAtg/KV9oUkm8DDk/s1600/spawns.PNG"&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5542488261159195010" src="http://4.bp.blogspot.com/_1p44RM4wSTU/TOrftUoqkYI/AAAAAAAAAtg/KV9oUkm8DDk/s320/spawns.PNG" style="cursor: pointer; height: 193px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;And the result, Squirrels!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 85%;"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TOrftxcnPvI/AAAAAAAAAto/rrpWO_3BTAo/s1600/squirrels.PNG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5542488268893273842" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TOrftxcnPvI/AAAAAAAAAto/rrpWO_3BTAo/s320/squirrels.PNG" style="cursor: pointer; height: 192px; width: 320px;" /&gt;&lt;/a&gt;&lt;/span&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/7825228553392473517-6377881989039778073?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6377881989039778073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6377881989039778073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6377881989039778073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6377881989039778073'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/11/shrinking-dysnomia.html' title='Shrinking Dysnomia'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/TOriOm5-EbI/AAAAAAAAAtw/0361dGvpSIc/s72-c/100_2018.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6745341824714135451</id><published>2010-11-15T15:19:00.014Z</published><updated>2011-06-07T20:01:43.147+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='7cache'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Game4'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='run'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Samsung Omnia 7'/><category scheme='http://www.blogger.com/atom/ns#' term='playing house'/><category scheme='http://www.blogger.com/atom/ns#' term='XBLIG'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Moving House and Team Mango projects for the next year</title><content type='html'>&lt;span style="font-size: 85%;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;I'm almos&lt;/span&gt;&lt;span class="Apple-style-span"&gt;t done with the house move. That is to say - we're in, but still living out of boxes while we wait for a few bits and pieces to come together. It's not been the smoothest of moves, especially having our garage broken into no more than two days after spending our first night in the new place. Nothing too essential gone, but all of my guitar amps and effects were taken. I was planning to sell them next year to fund a new PC, so it looks like that may be on hold for the time being.&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;Anyway, troubles aside the new house is looking great and I now have a spare room studio setup for working on all the Team Mango projects that I've been planning for the better part of half a year while all the househunting and moving was taking place. Here's a dark picture of my workstation:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TOFTevqPS2I/AAAAAAAAAr4/SsIHXkJQ6hk/s1600/homeoffice.jpg"&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539800804297231202" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TOFTevqPS2I/AAAAAAAAAr4/SsIHXkJQ6hk/s400/homeoffice.jpg" style="cursor: pointer; height: 300px; width: 400px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-size: 85%;"&gt;I need to do a bit of housekeeping in this post, starting with an update on 7Cache, my Phone 7 Geocaching app. I've decided to suspend the project for now, because Groundspeak &lt;/span&gt;&lt;a href="http://www.geocaching.com/wp7/"&gt;&lt;span style="font-size: 85%;"&gt;released their official Geocaching app for the phone&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt;, and it seems to have everything most 'cachers would need including offline caching. It's quite well presented and seems to work well, though I have yet to get out and test it properly on a full day's caching. It certainly has more features than I planned for 7Cache, apart from the Cache Radar function. I rarely used that in Geocache Navigator anyway.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;I may revisit this decision further down the line if there's a niche for features that Groundspeak won't add to their app, or if they make the Geocaching.com API publicly available. For the time being, I have game projects to work on and that's where I'd rather spend my very limited personal time. Speaking of which...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGUmMj8WAI/AAAAAAAAAsA/0ra95tgK5bw/s1600/fats60-73.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539872400570341378" src="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGUmMj8WAI/AAAAAAAAAsA/0ra95tgK5bw/s320/fats60-73.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TOGUnrcpHXI/AAAAAAAAAsg/rVZF9E2m11g/s1600/fats60-96.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539872426041089394" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TOGUnrcpHXI/AAAAAAAAAsg/rVZF9E2m11g/s320/fats60-96.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TOGUnaxKOQI/AAAAAAAAAsY/1BNCVc2-X0U/s1600/fats60-94.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539872421563742466" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TOGUnaxKOQI/AAAAAAAAAsY/1BNCVc2-X0U/s320/fats60-94.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TOGUm8Drv5I/AAAAAAAAAsQ/qUb3dlwQ60E/s1600/fats60-86.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539872413319937938" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TOGUm8Drv5I/AAAAAAAAAsQ/qUb3dlwQ60E/s320/fats60-86.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGUmmJGp7I/AAAAAAAAAsI/svFwnkcJTxo/s1600/fats60-74.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539872407437092786" src="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGUmmJGp7I/AAAAAAAAAsI/svFwnkcJTxo/s320/fats60-74.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVuzSm1bI/AAAAAAAAAtI/K6l6Gqdy03A/s1600/fats60-78.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539873647917192626" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVuzSm1bI/AAAAAAAAAtI/K6l6Gqdy03A/s320/fats60-78.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TOGVurdlINI/AAAAAAAAAtA/CkuxYt23hy0/s1600/fats60-105.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539873645815734482" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TOGVurdlINI/AAAAAAAAAtA/CkuxYt23hy0/s320/fats60-105.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVuRNkrQI/AAAAAAAAAs4/LJqglwXIFQA/s1600/fats60-101.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539873638769274114" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVuRNkrQI/AAAAAAAAAs4/LJqglwXIFQA/s320/fats60-101.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TOGVtzdDBII/AAAAAAAAAsw/l8VT7yC8EAc/s1600/fats60-100.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539873630781113474" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TOGVtzdDBII/AAAAAAAAAsw/l8VT7yC8EAc/s320/fats60-100.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVtslvCMI/AAAAAAAAAso/8L4mEEDdUOE/s1600/fats60-99.png"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539873628938504386" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVtslvCMI/AAAAAAAAAso/8L4mEEDdUOE/s320/fats60-99.png" style="cursor: pointer; height: 180px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TOGVtslvCMI/AAAAAAAAAso/8L4mEEDdUOE/s1600/fats60-99.png"&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt;That's Run!, the third game from Team Mango. It's been in the works since February, just before &lt;/span&gt;&lt;a href="http://www.dysnomiagame.com/"&gt;&lt;span style="font-size: 85%;"&gt;Dysnomia&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; hit Xbox Live Indie Games. I've been working on it sporadically, but it's close to being ready now.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;I'd describe it as "Skyroads with Avatars", and it offers 1-4 players local competetive play as well as online best times, using the same highscore sharing method employed by many XBLIGs. I'm looking forward to finally getting it out the door after a busy few months away from all things Indie Games.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;The fourth Team Mango game remains under wraps, but I can say it's an action-RPG, and will be released for Phone 7, XBLIG and Windows sometime in 2011. It should also be pretty damn funny, but I guess that's subjective!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 85%;"&gt;Also,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGcU4CFJ2I/AAAAAAAAAtQ/ewn6yEQHkYg/s1600/100_2005.JPG"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539880899094849378" src="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGcU4CFJ2I/AAAAAAAAAtQ/ewn6yEQHkYg/s320/100_2005.JPG" style="cursor: pointer; height: 240px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGcVde_eBI/AAAAAAAAAtY/CYHCiMAvzM4/s1600/100_2012.JPG"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539880909148223506" src="http://4.bp.blogspot.com/_1p44RM4wSTU/TOGcVde_eBI/AAAAAAAAAtY/CYHCiMAvzM4/s320/100_2012.JPG" style="cursor: pointer; height: 240px; width: 320px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;br /&gt;&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/7825228553392473517-6745341824714135451?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6745341824714135451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6745341824714135451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6745341824714135451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6745341824714135451'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/11/moving-house-and-team-mango-projects.html' title='Moving House and Team Mango projects for the next year'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/TOFTevqPS2I/AAAAAAAAAr4/SsIHXkJQ6hk/s72-c/homeoffice.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-7667876689187141064</id><published>2010-10-22T16:41:00.005+01:00</published><updated>2011-06-07T20:01:56.585+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Samsung Omnia 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamland'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Game4'/><title type='text'>Windows Phone 7 Device Get</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"&gt;Just a quick post with some images of my Samsung Omnia 7, running my two current projects: 7cache, and the next Team Mango game. I'll post more on the phone and the projects once I've finished moving house ;)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TMGw71zCQcI/AAAAAAAAArk/zZpBgCx9FOs/s1600/22102010192.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5530896359487586754" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TMGw71zCQcI/AAAAAAAAArk/zZpBgCx9FOs/s320/22102010192.jpg" style="cursor: hand; cursor: pointer; height: 240px; width: 320px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TMGw7W2qqqI/AAAAAAAAArc/QorYDhthaP8/s1600/22102010194.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TMGw7W2qqqI/AAAAAAAAArc/QorYDhthaP8/s1600/22102010194.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5530896351181318818" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TMGw7W2qqqI/AAAAAAAAArc/QorYDhthaP8/s320/22102010194.jpg" style="cursor: hand; cursor: pointer; height: 240px; width: 320px;" /&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TMGw7JYF4WI/AAAAAAAAArU/HefrHAsUyEQ/s1600/22102010193.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5530896347563417954" src="http://1.bp.blogspot.com/_1p44RM4wSTU/TMGw7JYF4WI/AAAAAAAAArU/HefrHAsUyEQ/s320/22102010193.jpg" style="cursor: hand; cursor: pointer; height: 240px; width: 320px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-7667876689187141064?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/7667876689187141064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=7667876689187141064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7667876689187141064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7667876689187141064'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/10/windows-phone-7-device-get.html' title='Windows Phone 7 Device Get'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/TMGw71zCQcI/AAAAAAAAArk/zZpBgCx9FOs/s72-c/22102010192.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8732786415724620032</id><published>2010-10-02T19:40:00.006+01:00</published><updated>2010-10-04T08:20:38.437+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='game development'/><category scheme='http://www.blogger.com/atom/ns#' term='tile engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><title type='text'>XNA Tile Engine Base Solution Updates</title><content type='html'>&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've done a little more work on my XNA Tile Engine for WIndows Phone 7, and I've also branched it off into a solution for Windows and Xbox, which I've dubbed "HiDefTileBase".&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The HiDef solution contains an additional example mode showcasing a platform game running on the engine. It's important to note that both the RPG and Platform examples are using the exact same classes for drawing the tilemap and controlling the camera - only the GameplayScreen and Player classes differ to reflect the actual game mechanics.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xX-fXEnjfzw?fs=1&amp;amp;hl=en_GB"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/xX-fXEnjfzw?fs=1&amp;amp;hl=en_GB" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;I've added an example of a day/night cycle into the RPG game in both the Phone 7 and HiDef solutions, and made some optimizations to the map drawing routine as it was getting rather slow when several layers were being drawn. All looks good now, although performance on Phone 7 hardware is still a mystery :)&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The two new downloads are after some screenshots:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TKd_RWd5XXI/AAAAAAAAArE/q607IxJgXE8/s1600/tileengine6.PNG"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/TKd_RWd5XXI/AAAAAAAAArE/q607IxJgXE8/s320/tileengine6.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5523523404058680690" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TKd_RPEKAOI/AAAAAAAAAq8/WuqXYxlVcVM/s1600/tileengine5.PNG"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/TKd_RPEKAOI/AAAAAAAAAq8/WuqXYxlVcVM/s320/tileengine5.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5523523402071671010" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TKd_Q2UIpsI/AAAAAAAAAq0/SdRo95cxxfo/s1600/tileengine4.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/TKd_Q2UIpsI/AAAAAAAAAq0/SdRo95cxxfo/s320/tileengine4.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5523523395427804866" style="cursor: pointer; width: 320px; height: 192px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Please note that the solution is built on XNA 4.0 and will not compile using older versions of the XNA SDK.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Hi-Def (Xbox &amp;amp; Windows) solution: &lt;a href="http://team-mango.com/stuff/hideftilebase.zip"&gt;http://team-mango.com/stuff/hideftilebase.zip&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Phone 7 solution: &lt;a href="http://team-mango.com/stuff/phone7tilebase.zip"&gt;http://team-mango.com/stuff/phone7tilebase.zip&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&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/7825228553392473517-8732786415724620032?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8732786415724620032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8732786415724620032' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8732786415724620032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8732786415724620032'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/10/xna-tile-engine-base-solution-updates.html' title='XNA Tile Engine Base Solution Updates'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/TKd_RWd5XXI/AAAAAAAAArE/q607IxJgXE8/s72-c/tileengine6.PNG' height='72' width='72'/><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-9132249825940810995</id><published>2010-09-28T10:47:00.007+01:00</published><updated>2010-10-04T08:18:00.645+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='game development'/><category scheme='http://www.blogger.com/atom/ns#' term='tile engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><title type='text'>Phone 7 XNA Tile Engine Base Solution</title><content type='html'>&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A lot of the &lt;a href="http://fatsweb.blogspot.com/search/label/Dysnomia"&gt;game ideas&lt;/a&gt; I have require a tile engine as a base. I've had a few ideas for Phone 7 games but thus far I've given up at the first hurdle - a tile engine.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've now resolved that issue by creating a base solution with a ready-to-go tile engine that is suitable for side scrollers, top down and RPG-style maps. I've decided to release it so that anyone else in my position should be able to pick up this base solution and get cracking on tile-based games.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The solution imports maps created with &lt;a href="http://mapeditor.org/"&gt;Tiled&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here's a video of the engine in motion:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YtHxYnejTwQ?fs=1&amp;amp;hl=en_GB"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/YtHxYnejTwQ?fs=1&amp;amp;hl=en_GB" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;And a handy list of all the features of the solution:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Suitable for side-on and top-down games&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Good for platformers, RPGs, shooters, racers, adventures - anything that needs tiles!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Works in landscape or portrait with one line change.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Built on the Windows Phone 7 XNA &lt;a href="http://creators.xna.com/en-US/sample/phonegamestatemanagement"&gt;Gamestate Management engine&lt;/a&gt; sample.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Uses &lt;a href="http://blog.nickgravelyn.com/"&gt;Nick Gravelyn&lt;/a&gt;'s &lt;a href="http://blog.nickgravelyn.com/2010/03/know-when-to-be-lazy/"&gt;content pipeline extension for the "Tiled" editor&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Simple but flexible camera class that clamps to the map boundaries.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Draw the whole map at once, or one layer at a time for flexibility.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Parallax scrolling simply by adding a couple of properties to a layer in Tiled.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;An overload to draw a layer as "shadows" by drawing offset+black+semi-transparent.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Per-pixel colour-based collision detection on specified layers/tilesets.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've added a whole bunch of comments to hopefully help some beginners along the way. Please note that this is just a base engine for a game, and won't help you magically write your actual game mechanics!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;This is the first time I've released some code with the intention of helping other developers, so please leave comments below. I'll address any questions in future posts. If anyone with a real device reads this, please consider giving it a run on a real phone - I'd love to know how it performs (if it runs at all!). Take some video as well!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A few screenshots next, download link is at the bottom of the post!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; "&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/TKG-P8_tGYI/AAAAAAAAAqs/uc8roE9ZbKk/s1600/tileengine3.PNG"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/TKG-P8_tGYI/AAAAAAAAAqs/uc8roE9ZbKk/s320/tileengine3.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5521903799413578114" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt; &lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TKG-PojcNYI/AAAAAAAAAqk/qYRVzT2nOBo/s1600/tileengine2.PNG"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/TKG-PojcNYI/AAAAAAAAAqk/qYRVzT2nOBo/s320/tileengine2.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5521903793926321538" style="cursor: pointer; width: 320px; height: 191px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TKG-PTh-e_I/AAAAAAAAAqc/WxYAKM0J3Ic/s1600/tileengine1.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TKG-PTh-e_I/AAAAAAAAAqc/WxYAKM0J3Ic/s320/tileengine1.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5521903788283034610" style="cursor: pointer; width: 320px; height: 191px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;Tiles used in the solution are released freely at &lt;a href="http://www.lostgarden.com/search/label/free%20game%20graphics"&gt;Lost Garden&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;b&gt;Please note that the solution is built on XNA 4.0 and will not compile using older versions of the XNA SDK.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;b&gt;Download the solution: &lt;/b&gt;&lt;a href="http://www.team-mango.com/stuff/phone7tilebase.zip"&gt;http://www.team-mango.com/stuff/phone7tilebase.zip&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&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/7825228553392473517-9132249825940810995?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/9132249825940810995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=9132249825940810995' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/9132249825940810995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/9132249825940810995'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/09/phone-7-xna-tile-engine-base-solution.html' title='Phone 7 XNA Tile Engine Base Solution'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/TKG-P8_tGYI/AAAAAAAAAqs/uc8roE9ZbKk/s72-c/tileengine3.PNG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6219467273088294917</id><published>2010-09-06T14:19:00.011+01:00</published><updated>2010-09-07T20:34:37.409+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='app'/><category scheme='http://www.blogger.com/atom/ns#' term='7cache'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Geocaching'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>7Cache - New screenshots</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;Lots of work done this weekend. .GPX importing from Windows is working (in theory!). Also implemented direction and bearing to both the active cache and any cache you select from the map. Distances can be displayed in metric (km/m) or imperial (mi/ft).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;b&gt;Edit (Tues 7th): Added Cache Radar screenshot!&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-weight: normal; font-size: 16px; "&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TIaTrwg57eI/AAAAAAAAAqM/n2uIURiZ8BA/s1600/radar.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/TIaTrwg57eI/AAAAAAAAAqM/n2uIURiZ8BA/s320/radar.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5514257173728325090" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style=" ;font-family:Georgia, serif;"&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TITsNgGV15I/AAAAAAAAAo0/ebosErvc08I/s1600/0.PNG"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/TITsNgGV15I/AAAAAAAAAo0/ebosErvc08I/s320/0.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791560507316114" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsN_gRpFI/AAAAAAAAAo8/e27nQXZgkZU/s1600/1.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsN_gRpFI/AAAAAAAAAo8/e27nQXZgkZU/s320/1.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791568937591890" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TITsOQEdYsI/AAAAAAAAApE/t-26AqNkHP4/s1600/2.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/TITsOQEdYsI/AAAAAAAAApE/t-26AqNkHP4/s320/2.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791573384323778" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TITsOQEdYsI/AAAAAAAAApE/t-26AqNkHP4/s1600/2.PNG"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/TITsO314J9I/AAAAAAAAApM/zOl-qcnRR7U/s1600/3.PNG"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/TITsO314J9I/AAAAAAAAApM/zOl-qcnRR7U/s320/3.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791584060581842" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;  &lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/TITsY6w_BeI/AAAAAAAAAp0/dnunHHHlFFs/s1600/5.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/TITsY6w_BeI/AAAAAAAAAp0/dnunHHHlFFs/s320/5.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791756644058594" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;  &lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsYk8qQQI/AAAAAAAAAps/ty-T6Nl6WvI/s1600/6.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsYk8qQQI/AAAAAAAAAps/ty-T6Nl6WvI/s320/6.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791750787449090" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style=" ;font-family:Georgia, serif;"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsYa0LqfI/AAAAAAAAApk/tcpRp38PHiU/s1600/7.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsYa0LqfI/AAAAAAAAApk/tcpRp38PHiU/s320/7.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791748067535346" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style=" ;font-family:Georgia, serif;"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsYHBMX7I/AAAAAAAAApc/Xhr143_Xtw4/s1600/8.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsYHBMX7I/AAAAAAAAApc/Xhr143_Xtw4/s320/8.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791742753398706" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;   &lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsPMO4U1I/AAAAAAAAApU/bmAotYdDZSk/s1600/4.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TITsPMO4U1I/AAAAAAAAApU/bmAotYdDZSk/s320/4.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513791589534159698" style="cursor: pointer; width: 191px; height: 320px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/TITvoVfLTlI/AAAAAAAAAqE/dNyEDf38rpk/s1600/9.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TITvoVfLTlI/AAAAAAAAAqE/dNyEDf38rpk/s320/9.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5513795320050044498" style="cursor: pointer; width: 320px; height: 257px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style=" ;font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&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/7825228553392473517-6219467273088294917?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6219467273088294917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6219467273088294917' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6219467273088294917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6219467273088294917'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/09/7cache-new-screenshots.html' title='7Cache - New screenshots'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/TIaTrwg57eI/AAAAAAAAAqM/n2uIURiZ8BA/s72-c/radar.PNG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-3855987019790878995</id><published>2010-09-03T14:36:00.005+01:00</published><updated>2010-09-03T15:34:28.569+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='app'/><category scheme='http://www.blogger.com/atom/ns#' term='7cache'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Geocaching'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>7Cache - Planned Features</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/TIEHXHizMVI/AAAAAAAAAoE/Ww7rOUyzizY/s1600/ApplicationIcon.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 62px; height: 62px;" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TIEHXHizMVI/AAAAAAAAAoE/Ww7rOUyzizY/s400/ApplicationIcon.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5512695512621592914" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Work continues on 7Cache - my Windows Phone 7 Geocaching application. I've compiled a list of features that will make it into the first release:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Import of .GPX pocket queries via a companion desktop application.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Offline storage of around 2-3000 caches, including descriptions, hints and recent logs. You won't need a data signal to find caches you've pre-imported!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Bing Maps integration. View caches on a pan/zoomable world map, find caches near your location quickly.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Full details of each cache: descriptions, recent logs, hints, cache size/terrain/difficulty, distance and direction to cache.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Cache Radar - similar to the radar function in GCzII and Geocache Navigator, shows distance and direction to cache, along with your direction of travel. Will have an optional audio "click" as you get closer.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Some of the must-have features that will make it into the app in the future, as soon as it's possible to do so:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Download caches directly from Geocaching.com with a "find caches near me" feature, fully integrated with the Cache Map.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Log your finds directly to Geocaching.com.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Integrate phone compass with cache radar so there's no doubt about which way to head.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Import .GPX files from Skydrive, Windows Live's online storage facility that will be used to share content with all your Windows devices.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I'll be posting some more screenshots this weekend. I'd like to hear suggestions from any prospective Windows Phone 7 Geocachers about features that you'd like from a mobile 'caching app. Leave a comment!&lt;/span&gt;&lt;/span&gt;&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/7825228553392473517-3855987019790878995?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/3855987019790878995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=3855987019790878995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3855987019790878995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3855987019790878995'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/09/7cache-planned-features.html' title='7Cache - Planned Features'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1p44RM4wSTU/TIEHXHizMVI/AAAAAAAAAoE/Ww7rOUyzizY/s72-c/ApplicationIcon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-2969028646329686309</id><published>2010-08-29T19:32:00.009+01:00</published><updated>2010-08-30T11:55:08.623+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='app'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='7cache'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Geocaching'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>7cache - Geocaching App for Windows Phone 7</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/THq1rTGZjYI/AAAAAAAAAn0/k9kFHuKXdGw/s1600/logo-black.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 108px;" src="http://3.bp.blogspot.com/_1p44RM4wSTU/THq1rTGZjYI/AAAAAAAAAn0/k9kFHuKXdGw/s400/logo-black.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5510916849507339650" /&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/THqs_1jvzfI/AAAAAAAAAns/jCjSI1Q7vw8/s1600/7cache-4.png"&gt;&lt;/a&gt;Microsoft is ramping up to the release of Windows Phone 7, and they've really been pushing the developer tools recently. The tools for WP7 development are now packaged alongside the XNA Game Studio 4.0 previews. I can see the reasoning behind it - WP7 development is either Silverlight or XNA and you'll use the same tools to develop XNA games for Windows, Xbox and Phone.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;What makes less sense is that the Silverlight applications development side of the WP7 tools are also bundled in with the beta, creating an odd mishmash of tools for WP7 apps, WP7 games, as well as Xbox and Windows games development.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;If Microsoft were hoping to tempt some of the XNA community over to Silverlight, they've succeeded! I briefly touched on Silverlight back in the 2 beta but I thought I'd have a dip into creating an application for Phone 7. I also intend to explore cross-platform games development for the phone and Xbox at a later date.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;I've decided to create an application for &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.geocachng.com/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;Geocaching&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt; on the phone. In a nutshell, Geocaching makes use of GPS technology to create a worldwide outdoor treasure hunt. Geocaching.com holds a database of "caches" placed by Geocachers around the globe, and provide the data for users to hook up their handheld GPS unit or GPS-enabled mobile phone and go hunting for caches.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;The best mobile Geocaching application I've used is Trimble's &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.geocachenavigator.com/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;Geocache Navigator&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt; on my Nokia N95. I'd like to get all the features of that particular application into my app, while providing a modern easy-to-use interface that makes the Geocaching-on-the-go experience a pleasant one.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;And so I've begun prototyping my first Windows Phone 7 application, 7cache.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/THqs-z5aZXI/AAAAAAAAAnU/w64ejZAcyMM/s1600/7cache-1.png"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/THqs-z5aZXI/AAAAAAAAAnU/w64ejZAcyMM/s320/7cache-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5510907289124103538" style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 170px; height: 320px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/THqs_I2WsxI/AAAAAAAAAnc/bNmt_WujpYk/s1600/7cache-2.png"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/THqs_I2WsxI/AAAAAAAAAnc/bNmt_WujpYk/s320/7cache-2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5510907294748422930" style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 170px; height: 320px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/THqs_I2WsxI/AAAAAAAAAnc/bNmt_WujpYk/s1600/7cache-2.png"&gt;&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/THqs_c8bPGI/AAAAAAAAAnk/kPRr-hWm4SA/s1600/7cache-3.png"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/THqs_c8bPGI/AAAAAAAAAnk/kPRr-hWm4SA/s320/7cache-3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5510907300142595170" style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 170px; height: 320px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/THqs_1jvzfI/AAAAAAAAAns/jCjSI1Q7vw8/s1600/7cache-4.png"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/THqs_1jvzfI/AAAAAAAAAns/jCjSI1Q7vw8/s320/7cache-4.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5510907306749971954" style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 170px; height: 320px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;It's a good project as it not only exposes me to more Silverlight, but it also makes use of many features of the the phone, including GPS, mapping and (when made available in the API) the compass.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;Unfortunately, while I can develop out the application to be as feature-rich as most Geocaching applications out there, I may never be able to release it as a real product. To be of any use, the application must be able to bring in XML data about the caches themselves. In other applications, this happens in one of two ways:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;1. The user uploads .GPX waypoint files to the phone, and the application reads them in. Or:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;2. The application connects to Geocaching.com's API and retrieves cache data directly.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;The first method is not possible on Phone 7, because Microsoft is not allowing direct access to the filesystem either by users or third party apps. I was hoping to make use of the rumoured Skydrive integration, but the API is currently limited to retrieving pictures from a user's Skydrive. I could leverage Azure services, but that would require users to go through a Windows application or hosted website to get their GPX files to their phone, which is an unwanted layer of abstraction.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;The second method would be ideal, if Geocaching.com made their APIs public. At the moment, only selected partners are able to query the Geocache database directly in their applications. They have said they are looking at opening up the APIs to a wider audience in the future. If they do, I'll be waiting with a near-complete solution for Phone 7 users.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;Of course, there's other obstacles to overcome - I'll need a physical device to implement real geolocation properly. It's possible to fake it in the current API, but in order to build out the "cache radar" function, I'll need to test on real hardware. Having said that - so far the emulator is doing a great job!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"&gt;On another note, I should really stop starting new projects!&lt;/span&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/7825228553392473517-2969028646329686309?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/2969028646329686309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=2969028646329686309' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/2969028646329686309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/2969028646329686309'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/08/7cache-trying-my-hand-at-phone-7.html' title='7cache - Geocaching App for Windows Phone 7'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1p44RM4wSTU/THq1rTGZjYI/AAAAAAAAAn0/k9kFHuKXdGw/s72-c/logo-black.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-1390217617848086760</id><published>2010-08-20T08:24:00.019+01:00</published><updated>2010-08-20T13:12:10.262+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='post mortem'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Dysnomia: The Post-Mortem</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;u&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/TG5DyYAjONI/AAAAAAAAAm8/VPthLuDmFDA/s1600/editor.jpg"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/TG4-fCya9nI/AAAAAAAAAm0/PDa7BPxxMbQ/s1600/BoxArtMatch.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 320px;" src="http://3.bp.blogspot.com/_1p44RM4wSTU/TG4-fCya9nI/AAAAAAAAAm0/PDa7BPxxMbQ/s320/BoxArtMatch.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5507408097365915250" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Before I begin with this post, I should say that I am more than happy with the successes I have achieved with &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.dysnomiagame.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Dysnomia&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. I set out in May 2009 to create a game that I could be proud of, and that I would enjoy playing. I had no thoughts back then of making money from selling the game on the Xbox Live Indie Games (XBLIG) service, where my first release &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.team-mango.com/gravsheep.html"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Gravsheep &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;had failed miserably.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://marketplace.xbox.com/games/media/66acd000-77fe-1000-9115-d8025855047d"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Dysnomia&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; was born out of a love for '90s Amiga games, and those in the know immediately liken it to Team 17's &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.youtube.com/watch?v=N-aSztV1QLo"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Alien Breed&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. I did indeed set out to make an &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Alien_Breed"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Alien Breed&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-alike, but there was another much less-known game that I borrowed ideas from. That game, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.youtube.com/watch?v=IPrMz1SrAhI"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Xenomorph&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, was a Dungeon Master-like crawler RPG set on a mining outpost. In fact, reading the game's &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Xenomorph_(video_game)"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Wiki article&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; it's scary exactly &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;how much&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; I borrowed from it!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;So the top-down, alien-shooting arcade action was borrowed from Alien Breed, whilst the parts-collecting and puzzle-like elements were borrowed from Xenomorph. The game's speed and sheer number of enemies on-screen was kind of a throwback to Gauntlet, but that came about naturally as I added in dual-stick shooter controls. Early in development, the right stick was unused and the player could only shoot in the direction of travel. That's one early change I'm glad I made.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I began in May with a &lt;a href="http://www.team-mango.com/stuff/game2.pdf"&gt;design document&lt;/a&gt; that gave an initial outline for the game, and gave me something to show to potential artists that applied to my &lt;/span&gt;&lt;/span&gt;&lt;a href="http://forums.xna.com/forums/p/31228/177835.aspx#177835"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;request for help&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; on the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://forums.xna.com/forums/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Creator's Club forums&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. I believe that having that document showed artists that I was semi-serious about the game even though I was only offering a 50/50 profit split. I was pleasantly surprised at the number of replies, but at the end of the day one guy stood out from the crowd simply by &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;getting &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;the game idea and throwing out a few initial tilesets, some &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.team-mango.com/stuff/artist/corridorconcept.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;concept art&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; and a character animation. That guy was Leon, and without him Dysnomia would be nothing more than a long-forgotten Visual Studio project folder.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://www.team-mango.com/stuff/artist/mcwalk2.gif" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 156px; height: 237px; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/TG49Es_1EuI/AAAAAAAAAms/-hOWrru04Zw/s400/groundtile2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5507406545328345826" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 132px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;And so the two of us ventured forth with development. One of the very early jobs for me was to enhance the level editor I had hacked together for Gravsheep so that it could be used to design the levels for Dysnomia. The editor was a simple Windows Forms affair, with drawing handled in GDI as opposed to using WPF or an XNA window. So, not the fastest of editors, but it worked well enough for both myself and Leon to get the levels done.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;There are nine levels/floors/areas in Dysnomia, and each one was saved out of the editor as a simple plain text file using 2D arrays of three-digit integers to represent the tiles. Each map has a set number of layers overlaid in a set order. Some of the layers were full-colour tilesheets, others were effects layers. Later on I added in animation layers which were used sparingly, the biggest example being the animated water on the Maintenance level.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;If I had to go back and do the editor again, I'd do it in Silverlight to start with. I'd allow for an unlimited number of layers each with a specific effect applied (shadow, reflection etc). I'd allow for multiple tiles to be selected in the tile palette and pasted into the map (large objects made up of several tiles had to be drawn tile-by-tile!). I'd make it a lot more generic too. Like I said though, it did the job and allowed me to focus on the game.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/TG5rjIJxO_I/AAAAAAAAAnM/c88rbP-l2hg/s1600/editor.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 218px;" src="http://2.bp.blogspot.com/_1p44RM4wSTU/TG5rjIJxO_I/AAAAAAAAAnM/c88rbP-l2hg/s320/editor.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5507457645548747762" /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Developing the game itself was a veritable minefield for this amateur developer. Although I've been messing about with games development since the Acorn days, this is really the first serious game that I've attempted. Instead of playing it safe and skirting around issues I knew would be a challenge for me, I ploughed through. I implemented some features in Dysnomia that I never thought I'd be able to write. The one that immediately springs to mind is the pathfinding AI.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I hadn't even considered that the aliens might actually need to be able to &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;find their way to the player. &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I guess I'd hoped that the Gauntlet-style logic of "move toward player location until you hit a wall" would suffice. Not really, no. It became apparent that some basic intelligence would be required. I knew nothing of the various pathfinding techniques that developers had used over the years, and I only just managed to understand A* after a few days of reading.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Luckily, Roy Triesscheijn has done a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://roy-t.nl/index.php/tag/a/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;lot of work implementing A* in C# and XNA&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. I was able to leverage his examples as a good starting point. There was an awful lot of work to do to even with that initial code as it was quite allocation-hungry, and of course I had to make it work with my tilemaps. It all came together in the end though, and I could probably write a whole post on how.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;There were a number of other challenges that I won't go into detail on here. Performance was a big one, and I learnt how to use the XNA remote perfmon tool and the .NET CLR profiler together to banish allocations and garbage collections. For those interested, I went down the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/shawnhar/archive/2007/07/02/twin-paths-to-garbage-collector-nirvana.aspx"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;path&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; of allocating everything during load and nothing during the game and it worked wonders.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BKAKIWKPI/AAAAAAAAAmQ/FXMwLkqa2Nw/s1600-h/wmplayer+2010-02-20+20-33-54-92.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BKAKIWKPI/AAAAAAAAAmQ/FXMwLkqa2Nw/s200/wmplayer+2010-02-20+20-33-54-92.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429716443375858" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BJ_9NGYHI/AAAAAAAAAmI/UAwEmUKjrQI/s1600-h/wmplayer+2010-02-20+20-31-08-10.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BJ_9NGYHI/AAAAAAAAAmI/UAwEmUKjrQI/s200/wmplayer+2010-02-20+20-31-08-10.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429712973652082" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;And so onto the game itself. The game &lt;/span&gt;&lt;/span&gt;&lt;a href="http://smallcavegames.blogspot.com/2010/03/try-it-or-die-3.html"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;received&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.twofedoras.com/2010/03/review-dysnomia/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;number&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.gamergeddon.com/2010/03/21/dysnomia-review/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;of&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.xblaratings.com/component/content/article/66-shooter/2077-dysnomia"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;awesome&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.diygamer.com/2010/03/adventure-shmup-dysnomia-review/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;reviews&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, which I was so happy with. To see something that you poured so much &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;love &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;into be received so highly was reward enough. It went down fantastically with the Creator's Club members that playtested and reviewed the game. Receiving praise from peers is even better than getting good reviews!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Then the unthinkable happened - Dysnomia placed in the top 20 of &lt;/span&gt;&lt;/span&gt;&lt;a href="http://dreambuildplay.com/main/Top20.aspx"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Dream Build Play 2010&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;! Leon and I decided to enter the game on a whim, and it just happened that we were mere weeks away from a complete and polished game when the deadline rolled around. That definitely worked in our favour. Although we didn't get a cash prize, Dysnomia became eligible for a place on the "Contest Finalists" section on the dashboard. More on that later.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt; &lt;a href="http://2.bp.blogspot.com/_1p44RM4wSTU/S4BJj-18ZyI/AAAAAAAAAmA/L4GdG8nzgm4/s1600-h/wmplayer+2010-02-20+20-29-57-42.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/S4BJj-18ZyI/AAAAAAAAAmA/L4GdG8nzgm4/s200/wmplayer+2010-02-20+20-29-57-42.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429232377063202" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjQfftOI/AAAAAAAAAl4/Z_aZHStYzMw/s1600-h/wmplayer+2010-02-20+20-28-27-13.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjQfftOI/AAAAAAAAAl4/Z_aZHStYzMw/s200/wmplayer+2010-02-20+20-28-27-13.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429219934876898" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;One of the more common comments about the game is the respawning of enemies. In Dysnomia, the only enemies that are gone completely once killed are the bosses. All of the other enemies are spawned constantly, so there's always something to shoot. Many players didn't like that, and suggested that once the player clears a floor, the respawns shouldn't happen - or at least occur less frequently.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Looking back on it, I agree. If I was doing it all over again now, I could create a more tense and atmospheric game by using spawns more intelligently. Combine that with better use of the lighting system and it could have been an entirely different experience. The fact remains that Dysnomia definitely became more of a standard frantic dual-stick shooter than a story-driven adventure shooter. Maybe next time?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;On a more personal level, I would have like to have used the motherboard/device mechanic a lot more. Motherboards in the game were inserted into and removed from devices such as doors, terminals, turrets and switches to power them up and down. The initial idea was to have more of those devices so the mechanic would become almost puzzle-like. If combined with less frequent enemy spawns, more motherboard/device puzzles would have been great. However, I think due to the overall speed of the game the frequency of the puzzles was just right. Any more and the player wouldn't have had time to solve them in between bouts of shooting!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjOGo6kI/AAAAAAAAAlw/zhRi5J8wk4Y/s1600-h/wmplayer+2010-02-20+20-27-31-15.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjOGo6kI/AAAAAAAAAlw/zhRi5J8wk4Y/s200/wmplayer+2010-02-20+20-27-31-15.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429219293751874" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BL8_6maYI/AAAAAAAAAmY/2o-SXhdSGZw/s1600-h/Dysnomia+2010-02-15+20-48-05-19.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BL8_6maYI/AAAAAAAAAmY/2o-SXhdSGZw/s200/Dysnomia+2010-02-15+20-48-05-19.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440431861185014146" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;And now to the boring business side of things. Dysnomia cost me around 800 hours of my time, and probably the same of Leon's. We couldn't possibly hope to make enough money to pay us a full wage for that much work. Good job this is just a hobby, right?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I spent around $100 total on assets for Dysnomia. Most of that went toward the sound effects I purchased from &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.soundrangers.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Soundrangers&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. That's right - I created a nine-level, three hour or so long indie game for $100. That's £70, give or take. So if you're looking purely at the bottom line financially, Dysnomia has made about ten times what was spent on it so far.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The music was mostly free-to-use public domain stuff composed by &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.mattmcfarland.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Matt MacFarland&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. The title track was made by one of the original members of Team Mango (as it existed back in high school), &lt;/span&gt;&lt;/span&gt;&lt;a href="http://iamadam.net/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Adam Bartlett&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. The in-game ambient track was purchased from S&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.shockwave-sound.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;hockwave Sound&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; and composed by Bjorn Lynne (who wrote a lot of music for Team 17 and the theme music for Alien Breed 3D).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;As I said, Leon agreed to do the artwork based on a 50/50 profit share, and I was lucky to find an artist that has the same passion for making games that I do. Any money we make is great, but it's not our focus at all.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;And so, to some numbers. Here's a pretty chart:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/TG5ira4dipI/AAAAAAAAAnE/2r7HdgAIjBQ/s1600/_sales.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5507447892410731154" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; " /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Fairly self-explanatory. Firstly, not a great conversion ratio of around 6%. Secondly, you'll notice that huge trough between the end of March and the middle of June. End of march is when we dropped off the Indie Games new arrivals dashboard list after the first ten days or so. We then had very few sales and trials, most of them were driven by the reviews we were getting.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;On the 15th June, the game was promoted to the Contest Finalists section of the dashboard, and that's where things pick up again. Sales aren't quite what they were in the first week, but the conversion ratio is similar. We currently average around 4.5 sales/day. I expect the sales to continue this way until we're pushed off the Contest Finalists section sometime next year.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Here's the totals for 19th March - 18th August:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Trials: &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;8002&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Purchases: &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;487&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Purchase/Trial Ratio: &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;6.09 %&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;So, we're nearing 500 sales fast. My personal target for Dysnomia was 1000 sales, and it looks like we'll reach it if things stay as they are now. What's more impressive is that 8000 people out there have played (or at least downloaded) my little game! &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;What makes me a little glum is thinking about where we'd be without the DBP placement. Sales and trials were dire in April and May when we weren't on the dashboard top lists. Even with some great word-of-mouth, we were nowhere. It goes without saying that if we were looking for financial success, XBLIG was not the place to find it with a game like Dysnomia.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I priced Dysnomia at &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;240msp&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. It's the price point of a quality XBLIG game that actually wants to sell some copies, which would not happen at 400msp. I think it's a fair price. When we drop off the Contest Finalists section, I'll drop it to 80msp. That's fairly selfish (and probably quite mad!), but it'll be a reasonable experiment to see if a quality game like Dysnomia can make some sales when not on the top lists. Should be interesting!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;So there you have it. Dysnomia in a (rather lengthy) nutshell. The best game I've ever made and some of the most enjoyable coding I've ever done. I improved as a developer by an order of magnitude whilst writing it, and will always look back on the process fondly. Financial success maybe not, but a personal triumph indeed.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(82, 101, 105); font-family:Verdana, Arial, Helvetica, sans-serif;font-size:10px;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;/span&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/7825228553392473517-1390217617848086760?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/1390217617848086760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=1390217617848086760' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/1390217617848086760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/1390217617848086760'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/08/dysnomia-post-mortem.html' title='Dysnomia: The Post-Mortem'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1p44RM4wSTU/TG4-fCya9nI/AAAAAAAAAm0/PDa7BPxxMbQ/s72-c/BoxArtMatch.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-4544868085530358082</id><published>2010-08-19T08:15:00.006+01:00</published><updated>2010-08-19T08:51:38.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='run'/><category scheme='http://www.blogger.com/atom/ns#' term='playing house'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Game4'/><title type='text'>Quarterly Report</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Oh dear, looks like I reneged on my self-promise to blog at least once a month this year. No great surprise there. Usual excuses apply. So I've decided to make up for it with a series of three posts that will serve as a catch-up on the hectic four months since I released Dysnomia. Whether anyone still reads me, I have no idea. Drop me a comment or something!&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Immediately after Dysnomia's release, I launched straight into my next XNA project that is now entitled "Run!". The next in this series of posts will be all about that particular game. In hindsight, I think it was way too soon to leap from finishing a 9-month development cycle into a new project. I had initially decided to take a couple of months and brush up on some XNA bits that I'm not strong at, such as shaders. But instead, I got right on with a new game - simply because the creative urge was still there.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;In fact, one new game wasn't enough and I also started working on the engine for what will be the fourth Team Mango game. I'm not ready to talk about that one yet - but there are some cool ideas floating about. The idea was that I would have Run! finished by the end of June, and game four would be a six-month project to launch at the end of the year. That's not going to happen now.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;You see, I've decided to grow up and get on the property ladder. Jenna and I started the hunt for a home at the beginning of the year, and in June we found a nice maisonette that's inside our rather humble price-range  and put in an offer. That was the end of our six-month property search and we were sure we'd be all moved in by now.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;However, after a six-week long wait full of stress, we were rejected by the first mortgage company that we applied to. The rejection was due to a change in circumstance that was bought up in the third week of our application, but for some reason we were strung out for a further three weeks before the rejection came through. Cue mad panic to secure a new mortgage before the vendor gave up on us.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;As I write, we're two weeks into our second application, and things are looking way more positive. Keeping everything crossed for a swift resolution and hoping for a completion date sometime in September.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Having our own place will afford me the luxury of a spare bedroom office/studio which I struggled without during development of Dysnomia. Looking forward to having my own space to really crack on with the next two games. One we're fully settled, I'll have much more time not only for development, but also to be a more active XNA community member and maybe even fit in another couple of potential projects I have lined up, including something musical!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;So, that's where I've been for the last four months - buying houses and nearly finishing a third XBLIG title. I'm tired, stressed, and in dire need of a holiday - but also extremely positive and excited about the coming months.&lt;/span&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/7825228553392473517-4544868085530358082?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/4544868085530358082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=4544868085530358082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4544868085530358082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4544868085530358082'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/08/quarterly-report.html' title='Quarterly Report'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-7682006724881067800</id><published>2010-03-18T14:31:00.003Z</published><updated>2010-03-18T14:40:25.029Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>Dysnomia Released!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/S6I6_I0USfI/AAAAAAAAAmg/jffl31VsHE0/s1600-h/BoxArtMatch.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 334px; height: 400px;" src="http://1.bp.blogspot.com/_1p44RM4wSTU/S6I6_I0USfI/AAAAAAAAAmg/jffl31VsHE0/s400/BoxArtMatch.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5449983355444808178" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;a href="http://www.dysnomiagame.com/"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Dysnomia&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; is now available for download from the Xbox Live Indie Games channel. If you've got a Live account, you can &lt;/span&gt;&lt;a href="http://marketplace.xbox.com/games/media/66acd000-77fe-1000-9115-d8025855047d"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;click this link&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; to hop straight over to Xbox.com and download it directly.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I'm going to write a longer "wow, it's done" post soon, but for now here's some of the buzz that Dysnomia's been getting:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"Nothing short of awesome! ...This is what I've been waiting for!"&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"This game is pretty great, really professional and high quality."&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"This game really sets the bar higher on what to expect from future indie game titles. I will be keeping a close eye on its success for sure."&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"I can spot a game that XBLIG has been crying out for. Congratulations!"&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"I think this is the best xbox indie game out there in terms of sheer game content, and arguably the best overall from what I've seen."&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"I wasn't expecting it to be this good."&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;"Wow, gotta say Dysnomia knows how to impress. Who knew that a Metroidvania game could work as a twin-stick shooter."&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Here's all the obligatory links you'll need to find out more about the game:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;a href="http://www.dysnomiagame.com/"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://www.dysnomiagame.com&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - Official game site&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;a href="http://www.team-mango.com/"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://www.team-mango.com&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - Team Mango site&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;div&gt;&lt;a href="http://www.facebook.com/teammango"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://www.facebook.com/teammango&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - Team Mango facebook page. Become a fan, already!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.twitter.com/teammango"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://www.twitter.com/teammango&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - Team Mango Twitter feed&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.twitter.com/garethiw"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://www.twitter.com/garethiw&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - My Twitter feed&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  color: rgb(102, 59, 18); line-height: 16px; font-family:'Lucida Grande', sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(102, 59, 18); line-height: 16px; font-family:'Lucida Grande', sans-serif;font-size:14px;"&gt;&lt;br /&gt;&lt;/span&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/7825228553392473517-7682006724881067800?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/7682006724881067800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=7682006724881067800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7682006724881067800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7682006724881067800'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/03/dysnomia-released.html' title='Dysnomia Released!'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/S6I6_I0USfI/AAAAAAAAAmg/jffl31VsHE0/s72-c/BoxArtMatch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-7254621408987329510</id><published>2010-02-20T19:53:00.006Z</published><updated>2010-02-20T20:54:30.108Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Dream Build Play'/><title type='text'>Dysnomia Development Diary - Getting ready for Dream Build Play</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;div&gt;Dysnomia is going to be ready for Dream Build Play. Feels great to be able to say that because it did look touch and go as little as a month ago. There's been so much to do just to get the game to a feature-complete state. That said, the game is now playable from start to finish and all of the gameplay is locked down, as is the level design, enemy design and all the other bits that make up the actual playable portion of the game.&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BJilBQZAI/AAAAAAAAAlo/tQrAQda0LcE/s1600-h/wmplayer+2010-02-20+20-25-31-54.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BJilBQZAI/AAAAAAAAAlo/tQrAQda0LcE/s200/wmplayer+2010-02-20+20-25-31-54.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429208265319426" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BJiUf1MmI/AAAAAAAAAlg/BZULDTXUOHE/s1600-h/wmplayer+2010-02-20+20-25-00-59.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BJiUf1MmI/AAAAAAAAAlg/BZULDTXUOHE/s200/wmplayer+2010-02-20+20-25-00-59.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429203830157922" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;When people ask what exactly is taking so long, It's always hard to explain. It's pretty easy to get a game designed and working - and even fully completable. It's the unnoticed details in every game that takes up development time, especially in the late polishing phase. Things like nice menu screens, tutorials, on-screen prompts. All the transitions that make the user experience smooth, fading and animation of UI elements, making sure that interactive objects provide the right amount of user feedback. All things that I've been working diligently on over the last three months, whilst also finishing level layouts.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BKAKIWKPI/AAAAAAAAAmQ/FXMwLkqa2Nw/s1600-h/wmplayer+2010-02-20+20-33-54-92.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/S4BKAKIWKPI/AAAAAAAAAmQ/FXMwLkqa2Nw/s200/wmplayer+2010-02-20+20-33-54-92.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429716443375858" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BJ_9NGYHI/AAAAAAAAAmI/UAwEmUKjrQI/s1600-h/wmplayer+2010-02-20+20-31-08-10.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BJ_9NGYHI/AAAAAAAAAmI/UAwEmUKjrQI/s200/wmplayer+2010-02-20+20-31-08-10.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429712973652082" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Sound as well - finding the right sounds for a game as complex as Dysnomia is hard. There's a lot of events that require sounds in the game and I have to scour several stock sound effects sites to find effects to fit the on-screen happenings. Then I have to edit them down, set mix levels and in-game audio cues for each one before I can tie them to actual objects on-screen. There's currently 49 individual sound effects in the game, and I anticipate adding at least another ten before we wrap up.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/S4BJj-18ZyI/AAAAAAAAAmA/L4GdG8nzgm4/s1600-h/wmplayer+2010-02-20+20-29-57-42.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/S4BJj-18ZyI/AAAAAAAAAmA/L4GdG8nzgm4/s200/wmplayer+2010-02-20+20-29-57-42.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429232377063202" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjQfftOI/AAAAAAAAAl4/Z_aZHStYzMw/s1600-h/wmplayer+2010-02-20+20-28-27-13.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjQfftOI/AAAAAAAAAl4/Z_aZHStYzMw/s200/wmplayer+2010-02-20+20-28-27-13.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429219934876898" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;So, after nine months, an estimated 800 hours work (from me alone, not including Leon's time for the art) and more than 30,000 lines of code, Dysnomia is ready to be submitted to Dream Build Play next weekend. I'm not expecting the game to win a top four prize, but my hope is to finish somewhere in the top 20 semi-finalist positions.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjOGo6kI/AAAAAAAAAlw/zhRi5J8wk4Y/s1600-h/wmplayer+2010-02-20+20-27-31-15.png"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/S4BJjOGo6kI/AAAAAAAAAlw/zhRi5J8wk4Y/s200/wmplayer+2010-02-20+20-27-31-15.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440429219293751874" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BL8_6maYI/AAAAAAAAAmY/2o-SXhdSGZw/s1600-h/Dysnomia+2010-02-15+20-48-05-19.png"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/S4BL8_6maYI/AAAAAAAAAmY/2o-SXhdSGZw/s200/Dysnomia+2010-02-15+20-48-05-19.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5440431861185014146" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;There's not a great deal to do after DBP - some more sounds, an intro and outro and a final bit of polish. The game will be submitted to XNA Creator's Club peer review in March. With enough testing beforehand, the game should appear on the marketplace near the end of the month, or early April.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I then plan to do a lot of marketing for the game over Easter and for the rest of April, before taking a well-earned couple of months of relaxation before starting the next game in July.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Can't wait to get the game out there and for you to play it!&lt;/span&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/7825228553392473517-7254621408987329510?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/7254621408987329510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=7254621408987329510' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7254621408987329510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7254621408987329510'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/02/dysnomia-development-diary-getting.html' title='Dysnomia Development Diary - Getting ready for Dream Build Play'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/S4BJilBQZAI/AAAAAAAAAlo/tQrAQda0LcE/s72-c/wmplayer+2010-02-20+20-25-31-54.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6654913483864840711</id><published>2010-01-13T11:55:00.002Z</published><updated>2010-01-13T12:00:22.886Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>New Year, First Post</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've been neglecting the blog for a while now in order to really get working on Dysnomia. We're entering in for the March &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.dreambuildplay.com"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Dream Build Play&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; competition, so it's full steam ahead for that.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've launched the official Dysnomia &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.dysnomiagame.com"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;mini-site&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, which has a brand-spanking-new trailer on it. And apart from that it's been work -&gt; dysnomia -&gt; bed for a couple of months. Which is all good! I'm hoping that once we're done with the game I'll get back to a regular posting schedule and write up a few XNA tutorials I've been thinking about - as well as getting life back to normal and getting outside more. Until the next project at least!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Happy belated 2010!&lt;/span&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/7825228553392473517-6654913483864840711?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6654913483864840711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6654913483864840711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6654913483864840711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6654913483864840711'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2010/01/new-year-first-post.html' title='New Year, First Post'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8938386091632756736</id><published>2009-11-16T08:57:00.006Z</published><updated>2009-11-16T10:02:07.571Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>Dysnomia: First Playtest</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;It's been six months in the making, almost to the day. Tonight, we release the first playtest of Dysnomia to the XNA Creator's Club community. Although only containing the first three levels of the full nine levels the final game will have, the playtest is extremely polished. I've wrapped up most of the engine code, all there is to do now is to get down to designing the final levels. I'm going to go ahead and call it for a February release now. That's not too bad - only three months overdue!&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I just spent a week's holiday polishing off some of the important Xbox integration features of the game. Handling things like gamer profile sign ins/outs, save locations and a trial mode are all essential things to have in an Indie Games release - yet so many games fail to implement all of them correctly.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I then moved on to creating a fantastic boss fight that I hope will be the first of four or five battles against epicly-sized denizens. Here's a screenshot:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/SwEhm2nHyaI/AAAAAAAAAlU/QyhdzWS6odM/s1600/shot4.png"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/SwEhm2nHyaI/AAAAAAAAAlU/QyhdzWS6odM/s400/shot4.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5404637979199654306" style="cursor: pointer; width: 400px; height: 225px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;He's an ugly mofo, that's for sure!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I'm planning on at least another two playtests depending on the responses I get from fellow Creator's Club members. If all goes to plan, the second playtest will include one more level and the third one will have most of the content in place. I'm guessing playtest two will be out over Christmas.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;So close to completion, yet still more hard graft to get there.&lt;/span&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/7825228553392473517-8938386091632756736?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8938386091632756736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8938386091632756736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8938386091632756736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8938386091632756736'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/11/dysnomia-first-playtest.html' title='Dysnomia: First Playtest'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1p44RM4wSTU/SwEhm2nHyaI/AAAAAAAAAlU/QyhdzWS6odM/s72-c/shot4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6628816180221189005</id><published>2009-09-16T12:26:00.003+01:00</published><updated>2009-09-16T12:29:13.146+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>A Quick Reminder</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;If you're interested in Dysnomia, the best place to keep up with announcements (and to discuss the game) is over on the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Team Mango Facebook page&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;. Become a fan!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-6628816180221189005?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6628816180221189005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6628816180221189005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6628816180221189005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6628816180221189005'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/09/quick-reminder.html' title='A Quick Reminder'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-5393667764891088856</id><published>2009-08-21T21:44:00.003+01:00</published><updated>2009-08-21T22:06:13.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='development diary'/><title type='text'>Dysnomia Update</title><content type='html'>&lt;span class="Apple-style-span" style="  white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I can't believe it's been over a month since my last diary post. Time is flying this summer. There has been a &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;lot&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; of work going into a lot of behind-the-scenes stuff on Dysnomia. The sort of stuff that needs to get done but isn't really worth blogging about.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;So yes, work is still progressing well. Tutorials are in. The starting area is more or less complete. Work has begun on local co-op. Tiles for the later areas are starting to roll in and they are looking &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;fantastic&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. The very last area especially is looking very tasty.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've been trying to work on some of the more boring stuff like Xbox controllers and profiles, loading and splash screens, XNA best practices and other things. I learnt during development of Gravsheep to get that stuff out of the way as soon as possible, as putting it in at the end when all you want to do is &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;release the damn game already&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; proves to be a drag.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've been trying to figure out whether we're still on track for a November release, and I'm still as yet undecided. It all really depends on how much time I get to work on the game - but I have a feeling that while the game will definitely be out before Christmas, it may not be as early as November. Having said that, if we used November 15th as an arbitrary release date, we're still only just over halfway through development time. And if I'm honest, the game feels about half-done at this point.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;So there you have it, folks. Dysnomia is officially halfway through development. Time to update the Wacky Idea-o-Meter!&lt;/span&gt;&lt;/span&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/7825228553392473517-5393667764891088856?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/5393667764891088856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=5393667764891088856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/5393667764891088856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/5393667764891088856'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/08/dysnomia-update.html' title='Dysnomia Update'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-4091528079272680172</id><published>2009-07-20T19:58:00.009+01:00</published><updated>2009-07-20T21:53:17.739+01:00</updated><title type='text'>Dysnomia - Development Diary Part Six</title><content type='html'>&lt;center&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;img src="http://www.pointlessquest.com/teammango/images/facebook-banner.png" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:-webkit-monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;This week, I'd like to talk a little about Dysnomia's audio "engine". It's no so much an engine as it is a simple class to control the XACT project behind the game. XACT (Cross-platform Audio Creation Tool) is Microsoft's high-level audio library and engine, releaed as part of DirectX.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;The XNA community seems to besplit between those that love XACT and those that prefer to use XNA's built-in audio calls. Because I started using XACT in XNA 1 when it was the only option, I'm reasonably comfortable with both the tool and the API calls in XNA so it was my first choice when thinking about the audio in Dysnomia.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;There were two tasks I needed the Dysnomia audio engine to perform, alongside the usual simple sound playing. The first was to have some sounds play positionally, according to the location of certain events on screen. Enemy footsteps, weapon hits, doors opening and so on can all occur at any position on the screen, as opposed to simply coming from the player. For this, I needed to set up the Attenuation RPC preset in XACT and use it in my audio class when playing the appropriate sounds.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;First of all, I modified the "Distance" Cue variable, giving it a range of 0 to 1000. The range can represent anything you want it to, but in my case I've set it up to be the distance in pixels between the player and the sound emitter.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SmTS9a95J_I/AAAAAAAAAk8/8jJq6YCnMqk/s1600-h/xact-distance.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SmTS9a95J_I/AAAAAAAAAk8/8jJq6YCnMqk/s400/xact-distance.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5360641409130506226" style="cursor: pointer; width: 337px; height: 400px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Next, we set up an "Attenuation" RPC preset. As you can see in the screenshot, we are setting up the parameter to control the volume of the playing sound, using our Distance variable as input. The curve is set up to roll off the volume of the sound as the Distance variable increases, with a sharp rolloff at the end to completely mute the sound when Distance reaches the point where the player should no longer hear the sound.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SmTS9jlaBXI/AAAAAAAAAlE/qRC8F2CGoIw/s1600-h/xact-attenuation.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SmTS9jlaBXI/AAAAAAAAAlE/qRC8F2CGoIw/s400/xact-attenuation.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5360641411443721586" style="cursor: pointer; width: 400px; height: 263px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Next up, we need to attach the Attenuation RPC to all sounds that need to be played positionally. Simply right-click the Attenuation preset and select "Attach/Detach Sounds". Select all neccessary sounds and click "Attach" to move them to the attcahed column.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SmTS94bGecI/AAAAAAAAAlM/IVDbdmujQoI/s1600-h/xact-attach.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SmTS94bGecI/AAAAAAAAAlM/IVDbdmujQoI/s400/xact-attach.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5360641417037642178" style="cursor: pointer; width: 400px; height: 204px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;That's it for XACT. Now for some code. First of all, we need to set up an AudioEmitter and an AudioListener. Note that all code here comes from my Audio class, which is static simply because I'm using the same XACT project and calls for the entire game.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;public static&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;AudioEmitter&lt;/span&gt; aE = &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;new &lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;AudioEmitter&lt;/span&gt;();&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;public static&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;AudioListener&lt;/span&gt; aL = &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;new &lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;AudioListener&lt;/span&gt;();&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;private static&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector3&lt;/span&gt; aEVect = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector3&lt;/span&gt;.Zero;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;private static&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector3&lt;/span&gt; aLVect = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector3&lt;/span&gt;.Zero;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;As you can see, I've set up a Vector3 for the Emitter and the Listener as well. We'll use these in the play method. First though, I'm initialising a Velocity for the Emitter. I do this in the LoadContent method of my Audio class:&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;public static void&lt;/span&gt; LoadContent(&lt;span class="Apple-style-span"  style="color:#339999;"&gt;ContentManager&lt;/span&gt; content)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;aE.Velocity = &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;new&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector3&lt;/span&gt;(30.0f, 30.0f, 30.0f);&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;You might have to play around with this to get the velocity just right. 30 seems to work for me. Next up, we define a method to play any sound positionally:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;public static void&lt;/span&gt; Play3D(&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;string&lt;/span&gt; EffectName)&lt;br /&gt;{      &lt;br /&gt;aL.Position = aLVect;&lt;br /&gt;aE.Position = aEVect;    &lt;br /&gt;EffectsSoundBank.PlayCue(EffectName, aL, aE);&lt;br /&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;So, we're passing in only the name of the sound we wish to play. The method sets the position of the AudioListener and the AudioEmitter to the values of aLVect and aEVect, which we set up earlier. Lastly, it calls PlayCue on our SoundBank, using the positional override.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Now for an example of the methods we call from the actual game classes:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;public static void &lt;/span&gt;DoorOpen(&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;ref&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; DoorPos)  &lt;br /&gt;{       &lt;br /&gt;aEVect.X = DoorPos.X;     &lt;br /&gt;aEVect.Y = DoorPos.Y;                 &lt;br /&gt;Play3D(&lt;span class="Apple-style-span"  style="color:#990000;"&gt;"door1"&lt;/span&gt;); &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;So, this method is for playing the sound of a door opening. We pass in the location of the door in the game world, and copy the values to the X and Y positions of our Emitter Vector3.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Time out for a quick explanation of what's going on. In my game, I know the position of the player in the world. The AudioListener must be set to the player's position in the world, which I do on each update:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;(in Player.Update:)&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;Audio.&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Audio&lt;/span&gt;.UpdateListenerPosition(&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;ref&lt;/span&gt; Position);&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;(in Audio:)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;public static void&lt;/span&gt; UpdateListenerPosition(&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;ref&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; PlayerPos)   &lt;br /&gt;{       &lt;br /&gt;aLVect.X = PlayerPos.X;        &lt;br /&gt;aLVect.Y = PlayerPos.Y;   &lt;br /&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Every time we play a sound in the world, we know where the sound is coming from. A door, an enemy - they all have a position in the world so we set the AudioEmitter position to the same. When PlayCue is called, XNA takes care of positioning the sound for us based on the Player's position (AudioListener) and the sound position (AudioEmitter). Our Attenuation RPC further affects the resulting sound by rolling off the volume according to the distance between Emitter and Listener. Simple? Don't worry - follow the steps and you'll get it eventually!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;In my next diary post, I'll write about the second task I needed the engine to perform - crossfading audio tracks. For now, I leave you with another gameplay video.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NVxtBxWcLoA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/NVxtBxWcLoA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-4091528079272680172?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/4091528079272680172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=4091528079272680172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4091528079272680172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4091528079272680172'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/07/dysnomia-development-diary-part-six.html' title='Dysnomia - Development Diary Part Six'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/SmTS9a95J_I/AAAAAAAAAk8/8jJq6YCnMqk/s72-c/xact-distance.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-7631098655212052412</id><published>2009-07-13T08:38:00.014+01:00</published><updated>2009-07-13T13:40:16.422+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='community games'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><category scheme='http://www.blogger.com/atom/ns#' term='development diary'/><title type='text'>Dysnomia - Development Diary Part Five</title><content type='html'>&lt;center&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;img src="http://www.pointlessquest.com/teammango/images/facebook-banner.png" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Another week rolls by!&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Loads of exciting progress this week, a great deal of which involved adding new features at long last. I'm now extremely confident that we'll meet the proposed November release date and maybe even with a month to spare to do some really in-depth playtesting and polish. We're also considering a possible Windows release, maybe around the holidays or early next year.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I'm going to break up the text this week with some of the great graphics that Leon's been working on. I'm sure you'll all agree that everything is looking rather awesome. Usual screenshot selection at the end.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfWeqxbhI/AAAAAAAAAj4/1so2tZFUH2I/s1600-h/machine2.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfWeqxbhI/AAAAAAAAAj4/1so2tZFUH2I/s400/machine2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5357910652737383954" style="cursor: pointer; width: 313px; height: 245px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;This week saw the implementation of Medikits and Ammo packs (Batteries). I also added some on-screen control prompts to give the player a better idea of which buttons perform which actions when near something they can interact with. There's also been some changes to the game mechanics again - although really they're constantly evolving throughout development. These changes will be the meat of this week's entry.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/SlseEWW7o_I/AAAAAAAAAjY/hZ7FlV76XEY/s1600-h/healthpack.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/SlseEWW7o_I/AAAAAAAAAjY/hZ7FlV76XEY/s400/healthpack.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5357909241757410290" style="cursor: pointer; width: 400px; height: 40px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SlsfVvbHb5I/AAAAAAAAAjg/Uc8L67lNmO8/s1600-h/ammoBlue.png"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SlsfVvbHb5I/AAAAAAAAAjg/Uc8L67lNmO8/s400/ammoBlue.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5357910640055250834" style="cursor: pointer; width: 320px; height: 64px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;As discussed in earlier diary entries, Dysnomia isn't all about running and gunning. Although a lot of time will be spent dispatching the alien hordes, it will be exploration and survival that will provide the path to completing the game.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfV3sTs3I/AAAAAAAAAjo/SIyvSmIq4Uw/s1600-h/Capture2.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfV3sTs3I/AAAAAAAAAjo/SIyvSmIq4Uw/s400/Capture2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357910642274841458" style="cursor: pointer; width: 400px; height: 399px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I didn't want to go too over the top with the whole survival thing and end up giving the player an inventory to manage. I also didn't want the player to carry as many medikits and ammo packs as they liked. I think it takes away some of the sense of danger when all you have to do is hit a button or hide behind a wall to regenerate health.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfWcL9YNI/AAAAAAAAAjw/hlSA_eTwKt8/s1600-h/machine3.png" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfWcL9YNI/AAAAAAAAAjw/hlSA_eTwKt8/s400/machine3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5357910652071272658" style="cursor: pointer; width: 400px; height: 400px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;It's with that in mind that I have made medikits and ammo in Dysnomia single-use pick up and consume objects. I had a bit of criticism about the way fuel was managed in Gravsheep, whereby the player could accidentally pick up fuel they didn't need. In Dysnomia, I've addressed this issue by requiring the player to press X to pick up and use both health packs and ammo.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;On the subject of ammo, it may seem a little harsh not allowing the player to carry more "magazines" and reloading as required. I think my idea behind this is solid, but I'll be listening carefully to thoughts on this during playtest. Essentially, the player's gun in Dysnomia is an energy weapon. It is recharged by using batteries (the ammo packs). The gun has five modes of fire, each represented by a different colour. The colour of the battery will determine which firing mode it recharges.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SlspDID5imI/AAAAAAAAAkI/wB2PsTid4Tw/s1600-h/2009-07-13-01.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SlspDID5imI/AAAAAAAAAkI/wB2PsTid4Tw/s320/2009-07-13-01.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357921315367520866" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SlspDYT03SI/AAAAAAAAAkQ/obVs0HgVz0Y/s1600-h/2009-07-13-02.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SlspDYT03SI/AAAAAAAAAkQ/obVs0HgVz0Y/s320/2009-07-13-02.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357921319729290530" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;For the first couple of areas, the only ammo available will be the blue ammo for the first firing mode. A full charge of blue energy will more than likely last a very long time. Subsequent colour batteries will start to appear on further levels, giving the player more firing modes that will get progressively more powerful. The player will be able to switch between modes at will. I plan to implement a reasonably powerful melee attack for when the player completely runs out of charge on all modes. They'll at least be able to defend themselves whist they head towards the nearest ammo cache.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SlspDhKrixI/AAAAAAAAAkY/3peC7epFMDg/s1600-h/2009-07-13-03.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SlspDhKrixI/AAAAAAAAAkY/3peC7epFMDg/s320/2009-07-13-03.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357921322106850066" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SlspD5kEpXI/AAAAAAAAAkg/LA4y0W34278/s1600-h/2009-07-13-04.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SlspD5kEpXI/AAAAAAAAAkg/LA4y0W34278/s320/2009-07-13-04.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357921328655803762" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Another small but nonetheless significant change I've made is to put a progress bar on a device when it's powering up. I've already written a little bit on devices such as doors, turrets, switches and terminals. Each device requires a number of boards to be installed in it before it powers up. What I've done is to add a little delay between the last board being inserted, and the device being usable. I think that makes sense in a world perspective, but it also adds a little extra challenge. It might make players think twice about taking boards out of a door they use frequently. If a turret is guarding a particularly busy corridor, maybe the player won't want to borrow a board from it if it will take a little while to power up again.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SlspEGj_hfI/AAAAAAAAAko/9g1syuzcofk/s1600-h/2009-07-13-05.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SlspEGj_hfI/AAAAAAAAAko/9g1syuzcofk/s320/2009-07-13-05.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357921332145128946" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/SlspXvai6VI/AAAAAAAAAkw/YwnMQ83AyDM/s1600-h/2009-07-13-06.JPG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/SlspXvai6VI/AAAAAAAAAkw/YwnMQ83AyDM/s320/2009-07-13-06.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5357921669528873298" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;They're all small changes, but ones that I think add to the depth of the puzzle/exploration/non-combat side of the game. I'll be waiting for the results of playtests to see if potential players agree with me though!&lt;/span&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/7825228553392473517-7631098655212052412?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/7631098655212052412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=7631098655212052412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7631098655212052412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/7631098655212052412'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/07/dysnomia-development-diary-part-five.html' title='Dysnomia - Development Diary Part Five'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/SlsfWeqxbhI/AAAAAAAAAj4/1so2tZFUH2I/s72-c/machine2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-3160157958278331873</id><published>2009-07-06T12:43:00.010+01:00</published><updated>2009-07-06T13:34:26.094+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='community games'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><category scheme='http://www.blogger.com/atom/ns#' term='development diary'/><title type='text'>Dysnomia - Development Diary Part Four</title><content type='html'>&lt;center&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;img src="http://www.pointlessquest.com/teammango/images/facebook-banner.png" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I've been doing a great deal of work under the hood this week. I was lucky enough to get an entire weekend with my 360 and my development PC in the same place. I spent that time wisely, doing some 360-specific bug hunting and feature additions.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Firstly, I was hunting down an annoying little hitch that was rearing its ugly head on the 360. Although the game was running at a solid 60fps and the Remote Performace Monitor was showing few if any allocations and collections, there was still a definite little hiccup occurring every few seconds.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;After reading through the XNA forums a little, I decided to give IsFixedTimestep = false a go. Shawn Hargreaves &lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/shawnhar/archive/2007/07/25/understanding-gametime.aspx"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;explains the difference&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; much better than I'll ever be able to, but essentially it was a last-ditch attempt at solving the problem after going back over all the code several times. &lt;/span&gt;&lt;/span&gt;&lt;a href="http://forums.xna.com/forums/t/9934.aspx"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;This&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; was the XNA thread that gave me the idea to try it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;And after updating all the movement code in the game to take ElapsedTime into account, the problem went away. We're talking one hundred percent smooth-as-silk on the 360 now. I celebrated by jumping straight into getting some rudimentary game saving done.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SlHt6Xnn3GI/AAAAAAAAAjQ/DYenf7xpZqg/s1600-h/dysnomia-dev.jpg" style="text-decoration: none;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SlHt6Xnn3GI/AAAAAAAAAjQ/DYenf7xpZqg/s400/dysnomia-dev.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5355323018948631650" style="cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I'm still not quite sure how to handle saves in Dysnomia - I plan to make the game saveable &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;anywhere&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;, as I believe all casual games should. Right now, the game is saved by pulling up the pause menu and hitting "save". Can't get any simple than that.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Of course, I need to consider things like autosaving and the like. On the 360, I will be attempting to find a storage device as soon as the player hits start before the menu screen. This will allow for a main menu "continue game" option if the current player has a save file already. I now need to work out the little details such as when to autosave, what I'm going to do in a co-op game (although I haven't started on co-op play yet, everything is being coded to allow for two local players) and whether to offer multiple save slots. It's all easily do-able, but one needs to consider the end-user and the most intuitive way to handle their save games.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Talking of co-op play, I still haven't decided how to handle death with two players. In a single player game, if the player dies, it's game over and he's given the option to load the last saved game or exit to the main menu. With two players, that's not a great option - a surviving player should probably be able to play on without the dead player. I'm currently considering a one-minute respawn where if the surviving player can hold his own for a minute, the dead player will respawn right next to him with perhaps a half-bar of health.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Implementing co-op is a way off yet, but I'm keeping it in mind as I go. It's on the "nice-to-have" list along with boss fights. I get to that list when all the other game mechanics are in.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I'm often asked when the game will be finished. In my original design document, I stated October as a release-to-playtest month, and projected November for release. It's safe to say we're on track for that if things keep going at their current pace. My hope to have a playable two-level demo with all neccessary game mechanics by the end of July is, however, looking less likely. I can't release a demo without a tutorial and the tutorial is still way down my to-do list, underneath things like: Health packs, ammo packs, weapon powerups, fuel rods, ship status, terminal screens and so on...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;center&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uYYm0jTmZ5A&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/uYYm0jTmZ5A&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-3160157958278331873?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/3160157958278331873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=3160157958278331873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3160157958278331873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3160157958278331873'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/07/dysnomia-development-diary-part-four.html' title='Dysnomia - Development Diary Part Four'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/SlHt6Xnn3GI/AAAAAAAAAjQ/DYenf7xpZqg/s72-c/dysnomia-dev.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-594687788623723143</id><published>2009-06-29T08:48:00.007+01:00</published><updated>2009-06-30T08:36:02.999+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='community games'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><category scheme='http://www.blogger.com/atom/ns#' term='development diary'/><title type='text'>Dysnomia - Development Diary Part Three</title><content type='html'>&lt;center&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;img src="http://www.pointlessquest.com/teammango/images/facebook-banner.png" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;A bit of a shorter diary this week as I'm busy working on a number of things in Dysnomia that I'm not quite ready to show yet! Also, this week is more about coding than anything else, so non-techies may want to wait until the next entry when I should be showing off a little more of the game!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Optimisation is a very important part of game development. However, for simpler games you may not ever need to worry about performance - let's face it, if your game is running smoothly on your target platform from start to finish then going back over the code and optimising for the sake of it is ultimately pointless. Put the energy into starting your next game!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Likewise, spending hours and hours pondering over every line of code to ensure it's as efficient as possible will likely result in a convoluted and hard-to-follow program.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Skm-n95MFRI/AAAAAAAAAig/3HcOaHb0FL8/s1600-h/2006-06-30-01.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Skm-n95MFRI/AAAAAAAAAig/3HcOaHb0FL8/s320/2006-06-30-01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5353019225945150738" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;If you know your game is likely to use a lot of memory, either graphically or object-wise then you'll need to keep performance and optimisation in mind right from the start. Because I've never had to optimise a game before, I completely ignored all the issues. That is until I started to get frame hitches when running on the 360. Then I started to realise and put right many of the mistakes I had made.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Shawn Hargreaves, one of the XNA framework developers, has written a number of blog entries regarding .NET garbage collection and the 360. &lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/shawnhar/archive/2007/06/29/how-to-tell-if-your-xbox-garbage-collection-is-too-slow.aspx"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;These&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/shawnhar/archive/2007/07/02/twin-paths-to-garbage-collector-nirvana.aspx"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;three&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/shawnhar/archive/2006/09/06/743437.aspx"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;posts&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; are the ones I found the most useful when starting to track down where I had gone wrong.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Skm-oE98C1I/AAAAAAAAAio/vfLxzT8m-HQ/s1600-h/2006-06-30-02.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Skm-oE98C1I/AAAAAAAAAio/vfLxzT8m-HQ/s320/2006-06-30-02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5353019227844119378" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I noticed a definite "jerk" in Dysnomia that was occurring once every few seconds or so. After going through the code and commenting out the heavier update and draw methods, I couldn't narrow it down to one particular place in code. That's when I started to pay attention to the posts regarding garbage collection and how to either avoid or manage collections. I ran the CLR profiler against the game and found that (on Windows at least), I was seeing a level 2 (heavy collection) occurring every few seconds which would definitely correspoind to the glitches on the 360.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I started to look at my code and figure out where it all went wrong. To start with, I was using generic List&lt;/span&gt;&lt;/span&gt;&lt;x&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;() lists to hold my game classes. Enemies, spawn locations, lights, bullets - pretty much anything that changes in game is allocated on the fly and added/removed from its list. Each time an enemy died, it was removed from the list. When an enemy spawned, a new Enemy() was allocated and added to the list. Same with bullets. Those are quite complicated classes to begin with, and to top it off I was giving each enemy and bullet object its own Texture2D sprite. What the hell was I thinking?!&lt;/span&gt;&lt;/span&gt;&lt;/x&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Skm-oUF6GOI/AAAAAAAAAiw/l7SgZekxquQ/s1600-h/2006-06-30-03.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Skm-oUF6GOI/AAAAAAAAAiw/l7SgZekxquQ/s320/2006-06-30-03.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5353019231904078050" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;To fix the issues, I decided to follow Shawn's advice and went with his first "path" for avoiding garbage collection worries: Allocate as little as possible during the game loop.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I went back and re-worked how I managed my in-game objects. Rather than letting the List allocate for me, I created a Manager class for each of the lists. They work in much the same way as the ParticleEngine XNA sample in that the Manager classes pre-allocate all of the objects I will ever use in game, and use a queue to select the next object for use. When the object in question is no longer needed (if an enemy dies or a bullet hits something), it is set as inactive and placed back on the queue to be used again.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Skm-ooDrywI/AAAAAAAAAi4/JPHfmzO8suc/s1600-h/2006-06-30-04.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Skm-ooDrywI/AAAAAAAAAi4/JPHfmzO8suc/s320/2006-06-30-04.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5353019237263461122" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;All of the pre-allocation is done when the level and content is loaded. After I've performed all my loading a allocating, I do a GC.Collect() before fading the level up and starting the game. This gives me a clean slate for the smaller allocations (Vector2s and value types mostly) that occur in-game.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Net result is that garbage collections no longer occur whilst the game is in progress. Okay, so now I'm starting to get into this optimisation stuff. I looked at the way I was using Texture2D for loading game content. I realised that having a spritesheet for each instance of a game class (enemy, door, light, bullet) was not the way to go. Too much unneccessary memory wasted.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Skm-onpa7nI/AAAAAAAAAjA/0PLeidaRtvs/s1600-h/2006-06-30-05.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Skm-onpa7nI/AAAAAAAAAjA/0PLeidaRtvs/s320/2006-06-30-05.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5353019237153304178" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Instead, in each of my game object Managers, I loaded the spritesheets for each type of object. For instance, I have a Spider enemy and a Slug enemy. Each enemy in my List&lt;/span&gt;&lt;/span&gt;&lt;enemy&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; in my enemy manager class can be  a Spider or a Slug type. My manager loads one instance of a Texture2D for a Spider enemy, and one for a Slug enemy. In the EnemyManager.Draw() routine, I loop through all the active enemies in the List and choose the correct Texture2D to draw from, rather than having each Enemy class draw itself from its own Texture2D.&lt;/span&gt;&lt;/span&gt;&lt;/enemy&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Skm-ueLzYHI/AAAAAAAAAjI/n3whrn5G4c4/s1600-h/2006-06-30-06.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Skm-ueLzYHI/AAAAAAAAAjI/n3whrn5G4c4/s320/2006-06-30-06.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5353019337692373106" style="cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;So that's just a couple of the ways I'm handling memory usage and garbage collection in Dysnomia. Allocate lots during load, allocate close to nothing during game. There are still some glitches to iron out in the AI routines that can get a little heavy, but I'm getting closer to that constant smooth 60fps gameplay I'm after.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Here's a bonus off-screen recording showing the action on the 360:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3M28DyzSuy8&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/3M28DyzSuy8&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-594687788623723143?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/594687788623723143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=594687788623723143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/594687788623723143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/594687788623723143'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/06/dysnomia-development-diary-part-three.html' title='Dysnomia - Development Diary Part Three'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1p44RM4wSTU/Skm-n95MFRI/AAAAAAAAAig/3HcOaHb0FL8/s72-c/2006-06-30-01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-835147485379234872</id><published>2009-06-22T09:19:00.014+01:00</published><updated>2009-06-22T20:23:49.634+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='community games'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Dysnomia - Development Diary Part Two</title><content type='html'>&lt;center&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;img src="http://www.pointlessquest.com/teammango/images/facebook-banner.png" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Developing Dysnomia in my spare time makes the weeks fly by. This week, I'm going to write a little about the level editor behind Dysnomia and how I'm linking together map files, save game files and in-game "devices" which need to keep their status throughout a full playthrough.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The map editor is a functional but clunky Winforms application that doesn't use any XNA, but opts for GDI instead.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_U7k_vF8I/AAAAAAAAAg4/iPoqOuqwppM/s1600-h/Ed-2.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_U7k_vF8I/AAAAAAAAAg4/iPoqOuqwppM/s200/Ed-2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229002347812802" style="cursor: pointer; width: 200px; height: 122px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_U7H8vbCI/AAAAAAAAAgw/S5nWfc7AAqc/s1600-h/Ed-1.JPG" style="text-decoration: none;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_U7H8vbCI/AAAAAAAAAgw/S5nWfc7AAqc/s200/Ed-1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5350228994550623266" style="cursor: pointer; width: 200px; height: 122px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;It allows the level creator to paint using tiles selected from several tilesheets, one for each map layer. The layers are drawn from the bottom up, starting with the floor tiles, then the walls, then anything overhead. There are a number of in-between layers as well, including separate layers for shadows and decals, which break up the tiled graphics without needing to duplicate tiles. For instance, rather than having "floor tile 1" then "floor tile 1 with top shadow", we simply place down "floor tile 1" in the floor tiles layer, then in the shadows layer we place down "top shadow".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The decals layer allows us to place down little "junk" items like littler, blood spatters, corpses, computer terminals and so on. We have a decal layer for the floor and one for the walls, allowing us to place rubbish on the floor and a computer on a table (tables being wall tiles).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/Sj_U7_dhA_I/AAAAAAAAAhI/zWxYNyQajak/s1600-h/Ed-4.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/Sj_U7_dhA_I/AAAAAAAAAhI/zWxYNyQajak/s200/Ed-4.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229009452041202" style="cursor: pointer; width: 200px; height: 126px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_U7plVMDI/AAAAAAAAAhA/heTO5F5MJGs/s1600-h/Ed-3.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_U7plVMDI/AAAAAAAAAhA/heTO5F5MJGs/s200/Ed-3.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229003579240498" style="cursor: pointer; width: 200px; height: 122px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The "specials" layer is used to place items that are replaced in-game with objects. Things like lights, enemy spawns, doors, healthpacks and other pickups all have a tile on the "specials" sheet which is used to represent them in the editor.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The editor also allows us to place down Devices used in the game. Door controls, turrets, terminals and all other interactive objects are placed in this way, and then a few controls allow us to change parameters for each device.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_VhSB0wUI/AAAAAAAAAiY/Q29nxmqLk6U/s1600-h/TMGame2+2009-06-22+19-54-32-72.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_VhSB0wUI/AAAAAAAAAiY/Q29nxmqLk6U/s200/TMGame2+2009-06-22+19-54-32-72.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229650091327810" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/Sj_VhLrgLcI/AAAAAAAAAiQ/pjGNanATK2Q/s1600-h/TMGame2+2009-06-22+19-54-43-88.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/Sj_VhLrgLcI/AAAAAAAAAiQ/pjGNanATK2Q/s200/TMGame2+2009-06-22+19-54-43-88.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229648387091906" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The editor saves each level to a separate text file, which contains grids of three-digit numbers representing a tile number. There is a grid for each layer. After the grids are saved out, additional information about the level is appended - the lighting level, map size and all the information about Devices.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The game will be split up into a number of levels, somewhere around ten in total. This number includes the area outside the mining outpost, on the planet surface. The player needs to scavenge items from the base to repair his ship and thus will need to return to the outside area (and the ship) every now and again.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/Sj_Vg5JtVOI/AAAAAAAAAiI/PR4UEBeLeLE/s1600-h/TMGame2+2009-06-22+19-54-58-14.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/Sj_Vg5JtVOI/AAAAAAAAAiI/PR4UEBeLeLE/s200/TMGame2+2009-06-22+19-54-58-14.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229643413509346" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_VggFpIPI/AAAAAAAAAiA/bFrDwpStF-Y/s1600-h/TMGame2+2009-06-22+19-55-09-45.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_VggFpIPI/AAAAAAAAAiA/bFrDwpStF-Y/s200/TMGame2+2009-06-22+19-55-09-45.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229636685570290" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;All of the lower levels of the outpost are reachable via a central liftshaft. At the start of the game, the liftshaft does not work, and requires a number of motherboards to be replaced for each additional floor the player wants to reach. The map layout could be drawn as follows:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;Outside -&gt; Entry Halls&lt;br /&gt;                |&lt;br /&gt;                v&lt;br /&gt;             Floor 2&lt;br /&gt;                |&lt;br /&gt;                v&lt;br /&gt;             Floor 3&lt;br /&gt;                |&lt;br /&gt;                v&lt;br /&gt;               ...&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;When the player crosses between levels, there will be a short pause for loading as the next map is read in and prepared for use. However, because the player can explore the entire base at will and return to any previous area at any time, we need to hold a state file on all the objects that the player can interact with. This state file will stay active from the start of a game until the player dies or finishes the game. The same state file will also be used for loading and saving games, so it must hold information on the player's status too - current map, position, health, weapon powerups, ammo etc.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_VgVW0otI/AAAAAAAAAh4/0vG7MLOAip4/s1600-h/TMGame2+2009-06-22+19-55-12-45.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_VgVW0otI/AAAAAAAAAh4/0vG7MLOAip4/s200/TMGame2+2009-06-22+19-55-12-45.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229633804837586" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VPI_qc7I/AAAAAAAAAhw/dhGzqbPESlY/s1600-h/TMGame2+2009-06-22+19-56-12-22.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VPI_qc7I/AAAAAAAAAhw/dhGzqbPESlY/s200/TMGame2+2009-06-22+19-56-12-22.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229338428699570" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I decided to wrap up all this information in a single class that is instantiated at the beginning of play. The class has its own Load() and Save() methods. The Load() method takes a string as the only argument, the string being the contents of a saved game text file. The Dysnomia editor has a generator to create a save file that represents the intial state of everything in the game. If a player starts a &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;new&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; game, it will be that file that is supplied to the GameData class, essentially creating a "new save" in memory.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_VPGb_drI/AAAAAAAAAho/cuPyarX8tBI/s1600-h/TMGame2+2009-06-22+19-56-27-83.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sj_VPGb_drI/AAAAAAAAAho/cuPyarX8tBI/s200/TMGame2+2009-06-22+19-56-27-83.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229337742210738" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VO-J38DI/AAAAAAAAAhg/tHPaMI3Gtg0/s1600-h/TMGame2+2009-06-22+19-56-44-77.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VO-J38DI/AAAAAAAAAhg/tHPaMI3Gtg0/s200/TMGame2+2009-06-22+19-56-44-77.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229335518736434" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Throughout the course of the game, the GameData class will be updated to reflect the current state of the game. For instance, if a player takes a motherboard out of a device, that device will be updated in the GameData class to show that it holds one less motherboard. The GameData class also holds the number of motherboards currently held by the player, which would be incremented at that point.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VOV4B7BI/AAAAAAAAAhY/Ip16yl1gnZo/s1600-h/TMGame2+2009-06-22+19-58-01-55.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VOV4B7BI/AAAAAAAAAhY/Ip16yl1gnZo/s200/TMGame2+2009-06-22+19-58-01-55.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229324706475026" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VOJ0W0KI/AAAAAAAAAhQ/PDSZPoBrX0k/s1600-h/TMGame2+2009-06-22+19-58-08-01.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sj_VOJ0W0KI/AAAAAAAAAhQ/PDSZPoBrX0k/s200/TMGame2+2009-06-22+19-58-08-01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5350229321469841570" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Some data in the GameData class will only be updated when the game is physically saved. The player's health, level and location would be some examples, as would the location of any enemies currently on screen. I feel that on the whole, it's a solid way of dealing with saving game progress, especially given the open-ended exploration nature of the game.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="500" height="300"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qMiJRJ7KCk8&amp;hl=en&amp;fs=1&amp;rel=0&amp;hd=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/qMiJRJ7KCk8&amp;hl=en&amp;fs=1&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-835147485379234872?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/835147485379234872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=835147485379234872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/835147485379234872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/835147485379234872'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/06/dysnomia-development-diary-part-two.html' title='Dysnomia - Development Diary Part Two'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1p44RM4wSTU/Sj_U7k_vF8I/AAAAAAAAAg4/iPoqOuqwppM/s72-c/Ed-2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8829500080203704162</id><published>2009-06-16T09:00:00.023+01:00</published><updated>2009-06-22T15:41:07.226+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='community games'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Games'/><title type='text'>Dysnomia - Development Diary Part One</title><content type='html'>&lt;center&gt;&lt;a href="http://www.facebook.com/pages/Team-Mango/102787631471"&gt;&lt;img src="http://www.pointlessquest.com/teammango/images/facebook-banner.png" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdys0JQPFI/AAAAAAAAAgo/cHMHvlwzIVQ/s1600-h/Dysnomia.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdys0JQPFI/AAAAAAAAAgo/cHMHvlwzIVQ/s400/Dysnomia.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347869196763020370" style="cursor: pointer; width: 400px; height: 225px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I now feel confident enough to write a little about Game 2, which now has the working title "Dysnomia". Dysnomia is the name of a real &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Dysnomia_(moon)"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;moon of the planet Eris&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, and also means "lawlessness" in Ancient Greek. Dysnomia is the setting for the game - in fact, a mining outpost on the moon.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The backstory (though not fully fleshed out) goes something like: the main character, a space marine, was engaged in a firefight aboard a two-man fighter craft launched from a large battleship. Badly damaged in the fray, and with the mothership destroyed, the ship is forced to lock in a course for the nearest friendly base - a mining outpost on Dysnomia.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdylHtfgvI/AAAAAAAAAgg/SWF00CFt6j0/s1600-h/receptionconcept.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdylHtfgvI/AAAAAAAAAgg/SWF00CFt6j0/s200/receptionconcept.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347869064576336626" style="cursor: pointer; width: 200px; height: 128px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;   &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/Sjdyk0SdSAI/AAAAAAAAAgY/TIWoMF8VqTE/s1600-h/MCwalk2.gif"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/Sjdyk0SdSAI/AAAAAAAAAgY/TIWoMF8VqTE/s200/MCwalk2.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5347869059362670594" style="cursor: pointer; width: 132px; height: 200px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;After drifting for three days and with systems failing, the marine lands the ship manually just outside the base. All attempts to make contact with the outpost have failed. The marine now has two missions:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;1. To scavenge supplies to fix the ship. The ship requires:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- A number of replacement motherboards&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Several fuel rods, which are dangerous to handle and replace&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Navigational data which has been corrupted&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;2. To complete a report on the base and find out what happened to the inhabitants.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The game is a top-down shooter and borrows ideas from classics like &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Alien Breed&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Gauntlet&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, whilst adding a few of my own ideas and mixing in a bit of light puzzle solving.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdxd7FwoTI/AAAAAAAAAeg/2xxpKGJaySI/s1600-h/2009-05-29-02.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdxd7FwoTI/AAAAAAAAAeg/2xxpKGJaySI/s200/2009-05-29-02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347867841417748786" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxdmMRFrI/AAAAAAAAAeY/h2upT1EVnUs/s1600-h/2009-05-29-01.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxdmMRFrI/AAAAAAAAAeY/h2upT1EVnUs/s200/2009-05-29-01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347867835807897266" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;During the course of the game, the player will find many electrical devices in the outpost which require a certain number of motherboards to become operational. Some devices will be up and running, others will be missing some or all of their motherboards. It's up to the player to decide which devices to leave powered up, and which to borrow from for other parts of the outpost. Such devices include:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Doors&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Computer terminals&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Automated Turrets&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Medibeds&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Electrical fences&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- The main liftshaft which links the ten or so floors of the outpost&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;And of course, once the player has finished his report, he'll need to scavenge a large number of the same motherboards to fix his ship and leave the base.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxeGm6FqI/AAAAAAAAAew/OQQH71jpftE/s1600-h/2009-05-29-04.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxeGm6FqI/AAAAAAAAAew/OQQH71jpftE/s200/2009-05-29-04.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347867844509570722" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxeP_id_I/AAAAAAAAAeo/d8ZMHguRv1E/s1600-h/2009-05-29-03.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxeP_id_I/AAAAAAAAAeo/d8ZMHguRv1E/s200/2009-05-29-03.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347867847028799474" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The game's story will be revealed through visual clues and computer journal entries. As the character discovers more, the Report progress will go from 0-100%. Certain events will be worth a large amount of report progress, so the player won't need to access every single journal entry or discover every part of the base.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;And now onto the technical side of things.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Dysnomia is my second XNA project. I began it directly after releasing Gravsheep on Xbox Live Community Games. Gravsheep didn't sell very many copies, but then again it was a fine example of a "polished turd" in that the gameplay and graphics were lacking in several departments, but it was very well finished with a good UI, smooth transitions and intuitive controls. I spent a long time making sure it played nicely with the features of the dashboard and the 360 which are often overlooked by other XNA developers. I of course intend to do the same with Dysnomia, only this time I hope the gameplay will be present too.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxnZzlKuI/AAAAAAAAAfA/iVZfpQ4O94k/s1600-h/2009-06-05-01.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxnZzlKuI/AAAAAAAAAfA/iVZfpQ4O94k/s200/2009-06-05-01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868004281821922" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxeQ-eNyI/AAAAAAAAAe4/uagvfBaswmw/s1600-h/2009-05-29-05.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxeQ-eNyI/AAAAAAAAAe4/uagvfBaswmw/s200/2009-05-29-05.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347867847292761890" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Dysnomia represents a huge leap in my abilities as a hobbyist game developer. I've been developing games for years, but this is the first time I've really put maximum effort into every aspect of the game. In other words, I'm not taking the easy way out. Every obstacle I've come up against, I have defeated with research and code, rather than simplifying my vision, or coming up with a half-assed solution.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;It's also the first time I've worked with an artist. Leon Arellano replied to an ad I posted on the XNA forums, and his art style immediately fit the bill. He also has the exact vision I have for the game, and readily understands tiling and formatting graphics to work in a game. A perfect partnership so far.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdyk3PUIRI/AAAAAAAAAgQ/9qt2-ljF7Eo/s1600-h/crawlingthing.gif"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdyk3PUIRI/AAAAAAAAAgQ/9qt2-ljF7Eo/s200/crawlingthing.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5347869060154794258" style="cursor: pointer; width: 200px; height: 200px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/SjdyE3-BVnI/AAAAAAAAAgI/F8JFyNUuMNw/s1600-h/corridorconcept.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/SjdyE3-BVnI/AAAAAAAAAgI/F8JFyNUuMNw/s200/corridorconcept.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868510594881138" style="cursor: pointer; width: 200px; height: 140px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I began the Dysnomia project with the GameStateManagement sample. In Gravsheep, all the gamestate and transitions were done by hand I was very proud of it. My implementation was nowhere near as elegant as the one offered by the GameStateManagement sample, however. All developers that want to eventually release on Community Games should be using this sample as a base, or developing their own solution to handle menus, transitions, multiple controllers, live profiles and so on.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I then began looking at Nick Gravelyn's &lt;/span&gt;&lt;/span&gt;&lt;a href="http://nickgravelyn.com/2008/09/tile-engine-series-new-home/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;TileEngine tutorial&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. A brilliant set of videos indeed. After part 3 I was happy that my way of doing tiling and scrolling was the right way (though I had never thought of layering before), and Nick's sample very closely matched the way I would implement such an engine. I took his code as of Part 3 and began implementing and expanding it to suit my needs. I already had a tile editor from Gravsheep, so it was a case of simply extending that to handle multiple layers. Layering in a tile engine was all new to me - I have no idea why I hadn't ever thought of it before.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxnnAg88I/AAAAAAAAAfQ/2EbAOfDOGYU/s1600-h/2009-06-05-03.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdxnnAg88I/AAAAAAAAAfQ/2EbAOfDOGYU/s200/2009-06-05-03.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868007825732546" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxntFFWJI/AAAAAAAAAfI/3jjdc1RR6NY/s1600-h/2009-06-05-02.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxntFFWJI/AAAAAAAAAfI/3jjdc1RR6NY/s200/2009-06-05-02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868009455507602" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Next, things all got a bit mathematical. For collision detection and for doing some fake dynamic shadows on the "lights" I had placed down, I needed some trigonometry. I'm sure most of this stuff would be simple for A-level or further Math students, but for me it was quite a stretch and took me a while to work out!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Firstly, a function to work out the point on a circle. I've actually done this previously, so I wrote this one myself.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;private static&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; PointOnCircle(&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;ref&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; C, &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;int&lt;/span&gt; R, &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;int&lt;/span&gt; A)&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;{&lt;br /&gt;A = A - 90;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float&lt;/span&gt; radA = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;MathHelper&lt;/span&gt;.ToRadians(A);&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;int&lt;/span&gt; endX = (&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;int&lt;/span&gt;)(C.X + (R*(&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Math&lt;/span&gt;.Cos(radA))));&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;int&lt;/span&gt; endY = (&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;int&lt;/span&gt;)(C.Y + (R*(&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Math&lt;/span&gt;.Sin(radA))));&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;return new&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt;(endX,endY);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I use this in collision detection to cast a point out in front of the player according to the player's angle of rotation. The tilemap is then checked for walls at that pixel location and if a wall tile is found, a per-pixel test finds out if a collision has actually occured. This per-pixel test uses the colour information of the sprite of the tile in question to allow for oddly-shaped walls.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;private static&lt;/span&gt; &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;bool&lt;/span&gt; PointInTriangle(&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; P, &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; A, &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; B, &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt; C)&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2 &lt;/span&gt;v0 = C - A;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2 &lt;/span&gt;v1 = B - A;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2 &lt;/span&gt;v2 = P - A;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;dot00 = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt;.Dot(v0,v0);&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;dot01 = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt;.Dot(v0, v1);&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;dot02 = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt;.Dot(v0, v2);&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;dot11 = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt;.Dot(v1, v1);&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;dot12 = &lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2&lt;/span&gt;.Dot(v1, v2);&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;invDenom = 1 / ((dot00 * dot11) - (dot01 * dot01));&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float &lt;/span&gt;u = ((dot11 * dot02) - (dot01 * dot12)) * invDenom;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;float&lt;/span&gt; v = ((dot00 * dot12) - (dot01 * dot02)) * invDenom;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;return&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt; &lt;/span&gt;(u &amp;gt; 0) &amp;amp;&amp;amp; (v &amp;gt; 0) &amp;amp;&amp;amp; (u + v &amp;lt; 1);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I'm not even going to pretend to know what's going on here. I took these calculations from a maths site and converted them to C#. All I know is that it's using Normals to calculate whether a given point (P) is inside a triangle made up of three points (A,B,C clockwise). I use this to calculate the position of the player's shadow when he walks past a directional wall light. All that math for an effect that half the players won't even notice. That's what I mean by not taking shortcuts this time. If I understood &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;how&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; all this math worked, I'd be developing 3D games for a living.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;private static float&lt;/span&gt; fAngleBetween(&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;ref &lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2 &lt;/span&gt;vPointA, &lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;ref &lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Vector2 &lt;/span&gt;vPointB)&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;float &lt;/span&gt;fAngle = (float)&lt;span class="Apple-style-span"  style="color:#339999;"&gt;Math&lt;/span&gt;.Atan2((&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;double&lt;/span&gt;)(vPointA.Y - vPointB.Y), (&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;double&lt;/span&gt;)(vPointA.X - vPointB.X)) - &lt;span class="Apple-style-span"  style="color:#339999;"&gt;MathHelper&lt;/span&gt;.ToRadians(90);&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;return &lt;/span&gt;fAngle;&lt;br /&gt;}&lt;/pre&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;This function calculates the angle between two vectors. I use this during enemy AI routines to cast out a ray between the enemy and the player to see if there's anything blocking the enemy's path. First of all I use this function to find the angle between the enemy and player, then use a series of collision checks using cocentric PointOnCircles, increasing the radius each time.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxoKYTYMI/AAAAAAAAAfg/H4WnSu3rYEE/s1600-h/2009-06-15-02.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdxoKYTYMI/AAAAAAAAAfg/H4WnSu3rYEE/s200/2009-06-15-02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868017320747202" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Sjdxn5Bi43I/AAAAAAAAAfY/R4hLxnmIRgw/s1600-h/2009-06-15-01.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Sjdxn5Bi43I/AAAAAAAAAfY/R4hLxnmIRgw/s200/2009-06-15-01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868012661891954" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;That brings me onto the last bit I want to talk about for now - the AI. A simple enemy chase/wander routine just wouldn't cut it for Dysnomia as the level layouts pretty much require aliens to be able to find their way to the player. After sitting and thinking about how to implement pathfinding behaviour, I decided to find out how the professionals do it. &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/A*_search_algorithm"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;A*&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; is one method, and is touted as being the most efficent method of pathfinding in games. I had heard of A* before, but didn't know it was an AI algorithm. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;After reading and actually understanding the concept, I wanted to see if anyone had written a C# implementation of A* pathfinding. Sure enough, &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(42, 42, 42); line-height: 16px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Roy Triesscheijn had &lt;/span&gt;&lt;/span&gt;&lt;a href="http://royalexander.wordpress.com/about/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;everything I needed on his blog&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);  line-height: normal; font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdyEfFCFgI/AAAAAAAAAfw/vDmx7U0kBV0/s1600-h/2009-06-15-04.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SjdyEfFCFgI/AAAAAAAAAfw/vDmx7U0kBV0/s200/2009-06-15-04.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868503913403906" style="cursor: pointer; width: 200px; height: 113px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/SjdyECcIGlI/AAAAAAAAAfo/yd2bUBvKiHI/s1600-h/2009-06-15-03.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/SjdyECcIGlI/AAAAAAAAAfo/yd2bUBvKiHI/s200/2009-06-15-03.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868496225638994" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;However, after implementing Roy's source and modifying it to work in Dysnomia, I found that trying to calculate paths for multiple enemies each update (or even every 50-100 updates) was too slow, especially as the paths became more complicated. I got around this by implementing a number of behaviours.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Enemies have three AI states - Idle, Following and Pathfinding&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Enemies start out with an Idle state&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Every update:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- If the AI state is Idle, we check to see if there's a direct line of sight between the enemy and the player. If so, we set AI State to Following. If not, we calculate a path and set AI State to Pathfinding.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- If AI State is Following, move enemy toward player.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- If AI State is Pathfinding, move enemy to next node in the A* discovered path.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- AI Counter is incremented&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- If AI Counter reaches 50, reset AI State to Idle&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Using this method, the enemies will follow a set AI pattern for 50 updates before calculating a new path. We don't calculate a path if the enemy can head directly towards the player. There are also path length limits in place, so if the A* algorithm doesn't find a path fast enough the enemy AI state is set to follow the player. Whilst this means that enemies that are too far away will not be able to get to the player, it also allows the AI to run as smoothly as possible.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);  line-height: normal; font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdyEYAxabI/AAAAAAAAAf4/WdvstgeF7l4/s1600-h/2009-06-15-06.jpg"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SjdyEYAxabI/AAAAAAAAAf4/WdvstgeF7l4/s200/2009-06-15-06.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5347868502016485810" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;There's a lot more to talk about, but that'll do for a first update. Enjoy this video! :)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#2A2A2A;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;object width="500" height="300"&gt;&lt;param name="movie" value="http://www.youtube.com/v/tV0pdwhGqH8&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;hd=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/tV0pdwhGqH8&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-8829500080203704162?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8829500080203704162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8829500080203704162' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8829500080203704162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8829500080203704162'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/06/dysnomia.html' title='Dysnomia - Development Diary Part One'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/Sjdys0JQPFI/AAAAAAAAAgo/cHMHvlwzIVQ/s72-c/Dysnomia.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-4518945238235891716</id><published>2009-05-23T17:38:00.002+01:00</published><updated>2009-06-16T11:34:51.591+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>Lights Come On in Game 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Shgm0wfy8GI/AAAAAAAAAeM/NU0o-CsN6sQ/s1600-h/Capture6.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://4.bp.blogspot.com/_1p44RM4wSTU/Shgm0wfy8GI/AAAAAAAAAeM/NU0o-CsN6sQ/s400/Capture6.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5339060046061039714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;That is all.&lt;/span&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/7825228553392473517-4518945238235891716?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/4518945238235891716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=4518945238235891716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4518945238235891716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/4518945238235891716'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/05/lights-come-on-in-game-2.html' title='Lights Come On in Game 2'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/Shgm0wfy8GI/AAAAAAAAAeM/NU0o-CsN6sQ/s72-c/Capture6.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-2184360464894697828</id><published>2009-05-19T10:53:00.008+01:00</published><updated>2009-05-19T11:15:34.313+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Gravsheep'/><title type='text'>GravSheep Released!</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Team Mango's first release for Xbox Live Community Games, GravSheep, is now live and available to download and purchase in Community Games regions!&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d80258550211/"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/ShKCIr0LUFI/AAAAAAAAAdc/bGWUK3Mbk5c/s400/xboxboxart.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5337471594099593298" style="cursor: pointer; width: 219px; height: 300px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I'm exceedingly happy that the game is finally done and out there. Not only that, but things are definitely progressing at a hectic pace on Game 2 with some very promising concepts coming in from possible artists. The future is bright, the future is Mango!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/ShKDNgcm4nI/AAAAAAAAAeE/MyCWtJmw5HU/s1600-h/GravSheep+2009-05-11+10-22-20-38.jpg" style="text-decoration: none; "&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/ShKDNgcm4nI/AAAAAAAAAeE/MyCWtJmw5HU/s200/GravSheep+2009-05-11+10-22-20-38.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5337472776458920562" style="text-decoration: underline; cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/ShKDNYO6V2I/AAAAAAAAAd8/hye0nPpvBcM/s1600-h/GravSheep+2009-05-11+10-23-29-09.jpg" style="text-decoration: none; "&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/ShKDNYO6V2I/AAAAAAAAAd8/hye0nPpvBcM/s200/GravSheep+2009-05-11+10-23-29-09.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5337472774253991778" style="text-decoration: underline; cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/ShKDNBy-R6I/AAAAAAAAAd0/2xl1ftM970U/s1600-h/GravSheep+2009-05-11+10-18-45-70.jpg"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/ShKDNBy-R6I/AAAAAAAAAd0/2xl1ftM970U/s200/GravSheep+2009-05-11+10-18-45-70.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5337472768231229346" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/ShKDNO7goQI/AAAAAAAAAds/q3g4wHHOrZw/s1600-h/GravSheep+2009-05-11+10-18-03-40.jpg" style="text-decoration: none; "&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/ShKDNO7goQI/AAAAAAAAAds/q3g4wHHOrZw/s200/GravSheep+2009-05-11+10-18-03-40.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5337472771756695810" style="text-decoration: underline; cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/ShKDM81RplI/AAAAAAAAAdk/gABtFXZ3iDE/s1600-h/GravSheep+2009-05-11+10-15-49-95.jpg"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/ShKDM81RplI/AAAAAAAAAdk/gABtFXZ3iDE/s200/GravSheep+2009-05-11+10-15-49-95.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5337472766898710098" style="cursor: pointer; width: 200px; height: 112px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;You can find more information about GravSheep at the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.team-mango.com/gravsheep.html"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Team Mango website&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, and you can recommend the game at &lt;/span&gt;&lt;/span&gt;&lt;a href="http://xblcg.info/game/gravsheep"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;XBLCG.info&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; by signing in with your Windows Live profile.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-2184360464894697828?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/2184360464894697828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=2184360464894697828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/2184360464894697828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/2184360464894697828'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/05/gravsheep-released.html' title='GravSheep Released!'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1p44RM4wSTU/ShKCIr0LUFI/AAAAAAAAAdc/bGWUK3Mbk5c/s72-c/xboxboxart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-6724615137700160741</id><published>2009-05-18T12:06:00.005+01:00</published><updated>2009-06-16T11:34:35.821+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Dysnomia'/><title type='text'>Team Mango Game 2</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Without giving too much away, I thought I'd post regular updates on progress of Team Mango's second game, which is currently untitled. This weekend I was chatting with a couple of artists interested in the project, and I began working on the very basic parts of the game engine (state management and tilemap drawing) and began extending the GravSheep editor to support the extra features Game 2 will have. &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/ShFCU_aBqJI/AAAAAAAAAdU/nSmwx21jDRc/s1600-h/editorscreenshot.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/ShFCU_aBqJI/AAAAAAAAAdU/nSmwx21jDRc/s200/editorscreenshot.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337119961796159634" style="cursor: pointer; width: 200px; height: 123px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/ShFCU9ACyPI/AAAAAAAAAdM/SBDhOFOYh2w/s1600-h/mockup.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/ShFCU9ACyPI/AAAAAAAAAdM/SBDhOFOYh2w/s200/mockup.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337119961150310642" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/ShFCU986DBI/AAAAAAAAAdE/_5za68hkTms/s1600-h/walls.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/ShFCU986DBI/AAAAAAAAAdE/_5za68hkTms/s200/walls.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337119961405590546" style="cursor: pointer; width: 200px; height: 200px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/ShFCUo1DoUI/AAAAAAAAAc8/O2TPwmkBhuI/s1600-h/floors.png"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/ShFCUo1DoUI/AAAAAAAAAc8/O2TPwmkBhuI/s200/floors.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337119955735519554" style="cursor: pointer; width: 200px; height: 200px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;All of the tile graphics are extremely temporary (assuming I *do* find an artist) and just for use in getting the editor and engine up and running. I love this early part of development - the bit between a blank screen and the final 20%.&lt;/span&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/7825228553392473517-6724615137700160741?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/6724615137700160741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=6724615137700160741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6724615137700160741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/6724615137700160741'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/05/team-mango-game-2.html' title='Team Mango Game 2'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/ShFCU_aBqJI/AAAAAAAAAdU/nSmwx21jDRc/s72-c/editorscreenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8296527252519754609</id><published>2009-05-15T13:05:00.005+01:00</published><updated>2009-05-15T13:27:49.724+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retrobution'/><title type='text'>Retrobution Finished!</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;...for now at least!&lt;br /&gt;&lt;br /&gt;Finally put the finishing touches to Retrobution last weekend. Overall, I'm very happy that I now have a working arcade cabinet to play all those old classics on. I'm not 100% happy with the finished product. The wood paintwork could be better. The bezel didn't exactly paint too well on the perspex. There's still some bugs to iron out on the software side. And so on.&lt;br /&gt;&lt;br /&gt;At some point in the future, I'll make a custom control panel with a built-in trackball and some admin buttons. Until then, I'm going to very much enjoy playing many classics this summer.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMY1o9DI/AAAAAAAAAc0/f8x0bs0F9bw/s1600-h/09052009512.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMY1o9DI/AAAAAAAAAc0/f8x0bs0F9bw/s200/09052009512.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025799934407730" style="cursor: pointer; width: 150px; height: 200px; " /&gt;  &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/Sg1fMS-2IMI/AAAAAAAAAcs/f2Wi-K9vsbs/s1600-h/09052009509.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/Sg1fMS-2IMI/AAAAAAAAAcs/f2Wi-K9vsbs/s200/09052009509.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025798362407106" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMJp9GyI/AAAAAAAAAck/ERKqJyWzI4s/s1600-h/09052009502.jpg"&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMJp9GyI/AAAAAAAAAck/ERKqJyWzI4s/s1600-h/09052009502.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMJp9GyI/AAAAAAAAAck/ERKqJyWzI4s/s200/09052009502.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025795858864930" style="cursor: pointer; width: 150px; height: 200px; " /&gt;  &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMKQVe8I/AAAAAAAAAcc/u3ujIrWnsUI/s1600-h/09052009501.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMKQVe8I/AAAAAAAAAcc/u3ujIrWnsUI/s200/09052009501.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025796019846082" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1fLwAxdNI/AAAAAAAAAcU/mDZ_po34kfw/s1600-h/09052009499.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1fLwAxdNI/AAAAAAAAAcU/mDZ_po34kfw/s1600-h/09052009499.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1fLwAxdNI/AAAAAAAAAcU/mDZ_po34kfw/s200/09052009499.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025788975248594" style="cursor: pointer; width: 200px; height: 150px; " /&gt;  &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9pk6zxI/AAAAAAAAAcM/HCnvljX9-1s/s1600-h/09052009507.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9pk6zxI/AAAAAAAAAcM/HCnvljX9-1s/s200/09052009507.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025546729639698" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9b6bVBI/AAAAAAAAAcE/kb1ZyrNsC0o/s1600-h/09052009506.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9b6bVBI/AAAAAAAAAcE/kb1ZyrNsC0o/s1600-h/09052009506.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9b6bVBI/AAAAAAAAAcE/kb1ZyrNsC0o/s200/09052009506.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025543061754898" style="cursor: pointer; width: 200px; height: 150px; " /&gt;  &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/Sg1e9JDiSZI/AAAAAAAAAb8/RbqhOPxjrvM/s1600-h/09052009505.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/Sg1e9JDiSZI/AAAAAAAAAb8/RbqhOPxjrvM/s200/09052009505.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025537999686034" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9NXA1_I/AAAAAAAAAb0/HrjkbzVNdFg/s1600-h/09052009504.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sg1e9NXA1_I/AAAAAAAAAb0/HrjkbzVNdFg/s200/09052009504.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025539155122162" style="cursor: pointer; width: 150px; height: 200px; " /&gt;  &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1e9IFZaMI/AAAAAAAAAbs/l7sy74DCuGk/s1600-h/09052009503.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1e9IFZaMI/AAAAAAAAAbs/l7sy74DCuGk/s200/09052009503.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5336025537739057346" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-8296527252519754609?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8296527252519754609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8296527252519754609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8296527252519754609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8296527252519754609'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/05/retrobution-finished.html' title='Retrobution Finished!'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/Sg1fMY1o9DI/AAAAAAAAAc0/f8x0bs0F9bw/s72-c/09052009512.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-8460333918413141390</id><published>2009-05-07T15:51:00.012+01:00</published><updated>2009-05-13T16:11:42.649+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox 360'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox live'/><category scheme='http://www.blogger.com/atom/ns#' term='community games'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><category scheme='http://www.blogger.com/atom/ns#' term='Gravsheep'/><title type='text'>Team Mango - Games for Xbox Live Community Games</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.team-mango.com"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 378px; height: 338px;" src="http://4.bp.blogspot.com/_1p44RM4wSTU/SgSb_V9Ic9I/AAAAAAAAAbk/RbO3jv26_Gg/s400/logo.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5333559371241124818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Team Mango was the name of my teenage bedroom games programming team. We created a number of small Amiga games back in the late nineties. Nowadays, I am the sole remaining member of Team Mango (thus not really a Team anymore, I guess!). I have decided to release GravSheep, my first Xbox Live Community Games game, under the Team Mango monicker. I will most likely release any future games under the same name.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I've just launched the new Team Mango &lt;a href="http://www.team-mango.com/"&gt;website&lt;/a&gt; in preparation for the launch of GravSheep, and I'm already designing Team Mango's second game and brushing up on my XNA skills to make development of Game 2 as smooth as possible.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;If you're a budding 2D artist and fancy working with me in your spare time on future Xbox Live Community Games releases, please drop me a line at the same address.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-8460333918413141390?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/8460333918413141390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=8460333918413141390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8460333918413141390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/8460333918413141390'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/05/team-mango-games-for-xbox-live.html' title='Team Mango - Games for Xbox Live Community Games'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1p44RM4wSTU/SgSb_V9Ic9I/AAAAAAAAAbk/RbO3jv26_Gg/s72-c/logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-3624357460618309078</id><published>2009-05-01T13:43:00.005+01:00</published><updated>2009-05-01T14:04:09.381+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Band'/><category scheme='http://www.blogger.com/atom/ns#' term='Puritan Slain'/><category scheme='http://www.blogger.com/atom/ns#' term='origin unknown'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='the dan bignell experience'/><category scheme='http://www.blogger.com/atom/ns#' term='dorset'/><title type='text'>A Very Musical Post</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;At last, I can close off one of the projects on my Wacky Idea-o-meter! &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.puritanslain.net/ou"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Origin: Unknown?&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, the first album from my band &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.puritanslain.net/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Puritan Slain&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; has been released for FREE download. Overall, we're very happy with the final results. It's a culmination of the last three years of songwriting all wrapped up in one huge album that clocks in at 65 minutes.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;If you had to push me for a favourite track from the album, I'd have to say it's the title track: Origin Unknown. There are many awesome songs on there though. Feel free to snap it up!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.puritanslain.net/ou/images/downloadposter-small.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://www.puritanslain.net/ou/images/downloadposter-small.jpg" border="0" alt="" style="cursor: pointer; width: 400px; height: 434px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;As well as the Origin: Unknown? release, I've just got back from a great weekend of music making arranged by one of my mainland-based friends, Dan. Five musicians each with their own taste in music got together on a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.valeholidays.co.uk/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;farm in Dorset&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; and spent three days writing, rehearsing and room-recording four songs. You can hear cleaned-up versions on &lt;/span&gt;&lt;/span&gt;&lt;a href="http://soundcloud.com/devilqube/sets/the-dan-bignell-experience-jam-27-04-09"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;SoundCloud&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.last.fm/music/The+Dan+Bignell+Experience/Jam+27-04-09"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Last.fm&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, and can also see YouTube videos &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.youtube.com/view_play_list?p=AC65B5348A647349"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;here&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SfrychpCl-I/AAAAAAAAAbM/QrgqdLF1_ok/s1600-h/26042009481.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SfrychpCl-I/AAAAAAAAAbM/QrgqdLF1_ok/s200/26042009481.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5330839680827168738" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/SfrychWhlqI/AAAAAAAAAbE/S3PunHoeR9M/s1600-h/26042009480.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/SfrychWhlqI/AAAAAAAAAbE/S3PunHoeR9M/s200/26042009480.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5330839680749508258" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sfrycj19M4I/AAAAAAAAAa8/0yxooLboEp4/s1600-h/26042009479.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://4.bp.blogspot.com/_1p44RM4wSTU/Sfrycj19M4I/AAAAAAAAAa8/0yxooLboEp4/s200/26042009479.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5330839681418212226" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1p44RM4wSTU/SfrycaDIzMI/AAAAAAAAAa0/ubvRBPgnSaA/s1600-h/26042009477.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://2.bp.blogspot.com/_1p44RM4wSTU/SfrycaDIzMI/AAAAAAAAAa0/ubvRBPgnSaA/s200/26042009477.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5330839678789143746" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1p44RM4wSTU/Sfrycj19M4I/AAAAAAAAAa8/0yxooLboEp4/s1600-h/26042009479.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SfrycdM1c6I/AAAAAAAAAas/jMTOOpaoszQ/s1600-h/26042009476.jpg"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SfrycdM1c6I/AAAAAAAAAas/jMTOOpaoszQ/s1600-h/26042009476.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SfrycdM1c6I/AAAAAAAAAas/jMTOOpaoszQ/s200/26042009476.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5330839679635125154" style="cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7825228553392473517-3624357460618309078?l=www.garethpw.co.uk' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.garethpw.co.uk/feeds/3624357460618309078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7825228553392473517&amp;postID=3624357460618309078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3624357460618309078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7825228553392473517/posts/default/3624357460618309078'/><link rel='alternate' type='text/html' href='http://www.garethpw.co.uk/2009/05/very-musical-post.html' title='A Very Musical Post'/><author><name>Gareth</name><uri>http://www.blogger.com/profile/07434732812542651095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_1p44RM4wSTU/SVAHHGQQ-0I/AAAAAAAAAQE/iXiomTSSS9Y/S220/meeee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1p44RM4wSTU/SfrychpCl-I/AAAAAAAAAbM/QrgqdLF1_ok/s72-c/26042009481.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7825228553392473517.post-4903930046318199382</id><published>2009-04-17T10:23:00.008+01:00</published><updated>2009-05-08T15:48:58.068+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='origin unknown'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Mango'/><category scheme='http://www.blogger.com/atom/ns#' term='Gravsheep'/><category scheme='http://www.blogger.com/atom/ns#' term='Retrobution'/><title type='text'>I Love It When a Plan Comes Together</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;... or even multiple plans!&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Over the last couple of weeks I've made huge progress on the arcade cabinet, and I've even got back to working on GravSheep, which is now code and asset complete for the 360, bar any bug fixes. I still have another 20 or so levels to design, but that's pretty simple using the editor I made for the job.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I've come to the conclusion that I'm not cut out for woodworking. Dad ended up doing the majority of the cutting, and left me to do the planing, filing and sanding which I was quite happy with! I'm very pleased with the results so far, and now waiting for some decent weather to get the cabinet painted.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1p44RM4wSTU/SehT7yor3UI/AAAAAAAAAaE/rDskB3S0Kqw/s1600-h/12042009424.jpg" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://1.bp.blogspot.com/_1p44RM4wSTU/SehT7yor3UI/AAAAAAAAAaE/rDskB3S0Kqw/s200/12042009424.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5325598846035418434" style="text-decoration: underline;cursor: pointer; width: 200px; height: 150px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SehT7245LAI/AAAAAAAAAZ8/HJkmjB08RU0/s1600-h/04042009421.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SehT7245LAI/AAAAAAAAAZ8/HJkmjB08RU0/s200/04042009421.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5325598847177141250" style="cursor: pointer; width: 200px; height: 150px; " /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1p44RM4wSTU/SehT8EW0wUI/AAAAAAAAAaM/DqudfDOG4gk/s1600-h/12042009425.jpg"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;img src="http://3.bp.blogspot.com/_1p44RM4wSTU/SehT8EW0wUI/AAAAAAAAAaM/DqudfDOG4gk/s200/12042009425.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5325598850792341826" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The stand was my own idea, and is simply a gas-lift base from a round bar table bought cheaply from Argos. It looks pretty swanky to me, and gives the added flexibility of being able to adjust the height for stand
