<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Acorn Arcade (RSS 2.0 feed)</title>
    <link>http://www.acornarcade.com/</link>
    <description>Gaming news and views</description>
    <managingEditor>richard@--iconbar--.com</managingEditor>
    <language>en-gb</language>
    <copyright>(c) Acorn Arcade 2012.  All rights reserved.</copyright>
    <lastBuildDate>Sat, 23 Aug 2008 11:00:00 GMT</lastBuildDate>
    <category>Acorn Arcade: News</category>
    <ttl>15</ttl>
    <image>
      <title>Acorn Arcade</title>
      <url>http://www.acornarcade.co.uk/images/logos/rss-AA.gif</url>
      <link>http://www.acornarcade.com/</link>
    </image>
  <item>
   <title>Oldschool Reviews - Burn 'Out</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1270.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1270.html</guid>
   <description>It's about time we had another one of these, isn't it? As you've probably guessed, this time I'm looking at Burn 'Out, an arcade-style racing game released by Oregan in 1995, and rather heavily influenced by the arcade classic Power Drift.</description>
   <content:encoded>
    <![CDATA[
    <a href="/news/images/oldschool/bo7.png" target="_blank" alt="Burn 'Out"><img src="/news/images/oldschool/bo7sm.png" width=160 height=128 alt="Burn 'Out" title="Burn 'Out" align="right"></a>It's about time we had another one of these, isn't it? As you've probably guessed, this time I'm looking at Burn 'Out, an arcade-style racing game released by Oregan in 1995, and rather heavily influenced by the arcade classic <a href="http://en.wikipedia.org/wiki/Power_Drift">Power Drift</a>.</p><p> <h3>The introduction</h3><p><a href="/news/images/oldschool/bo4.png" target="_blank" alt="The Software Chef"><img src="/news/images/oldschool/bo4sm.png" width=160 height=128 alt="The Software Chef" title="The Software Chef" align="right"></a>Several splash screens interspersed with artwork serve as the introduction to Burn 'Out. This introduction also shows off the two of the strongest points of the game - the art style and the music. Unfortunately, it's mostly downhill from there.<h3>The game</h3><p><a href="/news/images/oldschool/bo10.png" target="_blank" alt="Soon!"><img src="/news/images/oldschool/bo10sm.png" width=160 height=128 alt="Soon!" title="Soon!" align="right"></a>If you've played any other faux-3D racing games like E-Type or Lotus II then you'll know what to expect from Burn 'Out in terms of gameplay. You have to steer your car to the left and right as you drive along the track, avoiding other drivers and all manner of obstacles that are in your path. However instead of driving a sports car you're driving a beach buggy, and the tracks have more in common with roller coasters than they do with public roads.</p><p>In total there are 40 tracks available, which must be completed in a fixed, linear order. In order to proceed to the next track you must finish 3rd or better, and without running out of time on the clock. Most races only take a couple of minutes to complete, and there's no save game system, so if you're planning on playing the game to completion you'll need at least a couple of hours spare.</p><p>Inbetween each race you'll be taken to the garage, where you're given the opportunity to spend your race winnings on upgrading the three core components of your buggy (engine, gearbox, tyres), or to respray the bodywork to a colour other than the default gray. Curiously the garage screen has a hidden time limit imposed on it - if you spend too long deciding which upgrade to purchase next then you'll be kicked out and into the next race without any warning.</p><p><a href="/news/images/oldschool/bo13.png" target="_blank" alt="Night driving"><img src="/news/images/oldschool/bo13sm.png" width=160 height=128 alt="Night driving" title="Night driving" align="right"></a>As previously mentioned, one of the strong points of the game is the music. I'd guess that there are between 10 and 20 music tracks in the game, spread across the 40 race courses, resulting in a great deal of variety. It's rare to see a home-grown RISC OS game where so much attention has been given to the music. Unfortunately the game engine lets the music down somewhat, as whenever a sound effect plays it will cut out part of the music. I often fear collisions not because of the effect they'll have on my speed, but because of the effect they'll have on my enjoyment of the music. There is an option to disable the sound effects, but it has no effect on the music cutting out - it's as if all it does is mute the volume of the sound effects instead of stopping them altogether.</p><p>Another failing point of the game is the difficulty. The majority of the tracks are easy - assuming you've spent your money on the right upgrades there's absolutely no reason why you won't finish in first place, with the 2nd and 3rd place drivers miles behind, and with ample time left on the clock. But then there are the tracks featuring time bonus gates. The gates are barely any wider than your buggy, making them almost impossible to hit, especially considering the way the buggies bobble up and down and side to side as they drive along the track. Some of the time gate tracks are tuned so that if you miss even one or two of the gates you're almost guaranteed to run out of time before completing the race. The only other tracks that cause me some difficulty are the final few tracks of the game. Apart from being a bit more twisty and turny than the previous tracks they also feature quite harsh time limits, harsh to the point where one crash is all you need to ruin your chances.<h3>The verdict</h3><p><a href="/news/images/oldschool/bo16.png" target="_blank" alt="Rain"><img src="/news/images/oldschool/bo16sm.png" width=160 height=128 alt="Rain" title="Rain" align="right"></a>Burn 'Out is a fun and attractive game, but it seems like too much time was spent on the art and music and not enough on the code and gameplay. With some extra time spent to tune the difficulty the game could have been an all-time great, but as it is it's just a pale immitation of the arcade game it was inspired by.</p><p>The full version of Burn 'Out can be downloaded for free from <a href="http://ian.jeffray.co.uk/riscos/BurnOut/">Ian Jeffray's website</a>. StrongARM/RISC OS 4 compatible.</p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1270.html">2 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Sat, 01 Oct 2011 18:00:00 GMT</pubDate>
  </item>
  <item>
   <title>Games scene roundup</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1266.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1266.html</guid>
   <description>Last month Alan Peters surprised everyone by announcing that TBA Software are back from the dead. Their back catalogue includes AXIS (which was awarded five stars by Acorn 32-Bit Gaming), Formula Two Thousand (FTT), Cyber Ape, Cobalt Seed, and BHP [Review].</description>
   <content:encoded>
    <![CDATA[
    <img style="float:right;" src="/images/aa/reviews/bhp/sc3.gif">Last month Alan Peters surprised everyone by <a href="https://www.riscosopen.org/forum/forums/1/topics/630">announcing</a> that TBA Software are back from the dead. Their back catalogue includes AXIS (which was <a href="http://www.acorn-gaming.org.uk/index.php3?p=Database/DB3#Axis">awarded five stars</a> by Acorn 32-Bit Gaming), Formula Two Thousand (FTT), Cyber Ape, Cobalt Seed, and BHP [<a href="/articles/Review_-_BHP/index1034.html">Review</a>].</p><p>TBA Software are sharing their progress on a new <a href="http://www.tbasoftware.co.uk/">blog</a>. Already they have <a href="http://www.tbasoftware.co.uk/2011/05/tbafs-32bit-beta-released.html">released a 32-bit only version</a> of their high performance image filing system, TBAFS.</p><p>They have started to produce a 32-bit version of their 3D graphics library and game runtime, <i>TAG</i>, and they are working on using <a href="http://www.tbasoftware.co.uk/2011/06/vfpv3simd-assembler-progressing.html">extra features</a> of modern ARMv7 CPUs to make it run even faster.</p><p>Another member of the TBA Software team, Martin Piper [<a href="/articles/Interviews_Martin_Piper/index887.html">Interview</a>], has managed to <a href="http://www.tbasoftware.co.uk/2011/05/bhp-worlds.html">render levels from BHP</a> on Windows. Alan is hoping to get BHP running on the BeagleBoard XM in the near future.</p><p>In other news, the excellent RISC OS classic Inferno [<a href="http://www.acorn-gaming.org.uk/index.php3?p=Reviews/Inferno/index">Review</a>] has been <a href="http://www.paradisegames.co.uk/">released for Apple iOS devices</a>. There's no mention of support for Android devices. Paradise's website claims that Inferno is their "very first iPhone title", so perhaps we will see Overload [<a href="http://www.acorn-gaming.org.uk/index.php3?p=Reviews/Overload/index">Review</a>] and the long awaited Pocket Money / Toybox Dreams [<a href="http://www.acorn-gaming.org.uk/index.php3?p=Previews/Paradise/index">Preview</a>] make their way over to modern handheld devices too.</p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1266.html">3 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Fri, 10 Jun 2011 12:57:00 GMT</pubDate>
  </item>
  <item>
   <title>APDL make their PD catalogue available for free download</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1253.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1253.html</guid>
   <description>APDL, long-time distributor of Public Domain and not-so Public Domain software, have taken the next logical step from distributing their PD/freeware collection on floppy disc or CD and have begun distributing it online instead. Apart from the obvious advantage to the end-user of being able to access the software immediately, APDL have also decided to forgoe charging any nominal download fees, making the archive truly free.</description>
   <content:encoded>
    <![CDATA[
    <img src="/news/uploaded/apdl.png" align="right" hspace="10" width="201" height="126" alt="APDL" title="APDL"><a href="http://www.apdl.co.uk/">APDL</a>, long-time distributor of Public Domain and not-so Public Domain software, have taken the next logical step from distributing their PD/freeware collection on floppy disc or CD and have begun distributing it online instead. Apart from the obvious advantage to the end-user of being able to access the software immediately, APDL have also decided to forgoe charging any nominal download fees, making the archive truly free.</p><p>Of course the age of much of the software is likely to make its relevance somewhat limited (especially if it's not 32bit compatible, or even StrongARM compatible) - but by making the archive available free of charge APDL have given Acorn preservation enthusiasts a big helping hand, and for that this move should be applauded.</p><p>APDL point out that not all the software from their PD/freeware catalogue has found its way online yet, so some patience may be necessary if your favourite bit of software is missing.</p><p><b>Links</b><ul><li><a href="http://groups.google.co.uk/group/comp.sys.acorn.announce/browse_thread/thread/06647201f8c6bf83#">Newsgroup announcement</a></li><li><a href="http://www.apdl.co.uk/library/library.htm">APDL's PD library main page</a></li><li><a href="http://www.apdl.co.uk/softw_c.htm">APDL's commercial software catalogue</a> - much of which is also available for download (although not for free, obviously!)</a></ul></p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1253.html">72 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Thu, 25 Mar 2010 14:15:00 GMT</pubDate>
  </item>
  <item>
   <title>Star Fighter 3000 updated</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1238.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1238.html</guid>
   <description>The RISC OS classic 3D shoot em' up, Star Fighter 3000 has been updated to enable it to run on new ARMv7 powered machines. This lets gamers play it on the raft of new hardware platforms that RISC OS Open is pushing towards, such as the BeagleBoard, and it is hoped, the Pandora, Touch Book and other consumer friendly devices. </description>
   <content:encoded>
    <![CDATA[
    <a style="float:right;" href="http://www.iconbar.com/news/images/sf3k/sf3k3.png"><img style="border:none;margin:0 0 0.3em 0.5em;" src="http://www.iconbar.com/news/images/sf3k/sf3k3sm.jpg" title="Star Fighter 3000" alt=""></a>The RISC OS classic 3D shoot em' up, Star Fighter 3000 has been updated to enable it to run on new ARMv7 powered machines. This lets gamers play it on the raft of new hardware platforms that RISC OS Open is pushing towards, such as the BeagleBoard, and it is hoped, the Pandora, Touch Book and other consumer friendly devices.</p> <p>Star Fighter 3000 rates amongst the very best games ever produced for the RISC OS platform. It was originally created by Fednet and released in 1994. Since the turn of the millennium, Chris Bazley has maintained the game. Over the years he has done much to improve it. As well as releasing new versions to handle changes like RISC OS 4, 32-bit hardware and now the new compatibility with BeagleBoard class machines, he has worked on many improvements and fixes for the game itself.</p><p>One of the most significant changes has been to enable the game to run inside a desktop window. This is a very unusual feature amongst traditional RISC OS games, but it allows you to play a game while you keep an eye on your <a href="http://www.iconbar.com/articles/Freeware_instant_messaging_client_released/index1164.html">Parmesan</a> chat window, as well as distracting you from any real work! The game's sound code has also been rewritten and now enables you to listen to MP3s in the background.</p><div style="border:2px solid #aaf;margin:1em auto;padding:0;width:60%;min-width:520px;"><div style="background:white;display:table;width:100%;"><a style="display:table-cell;text-align:center;vertical-align:middle;padding-top:1em;padding-bottom:1em;" href="http://www.iconbar.com/news/images/sf3k/sf3k1.png"><img alt="" src="http://www.iconbar.com/news/images/sf3k/sf3k1sm.jpg"></a><a style="display:table-cell;text-align:center;vertical-align:middle;padding-top:1em;padding-bottom:1em;" href="http://www.iconbar.com/news/images/sf3k/sf3k2.png"><img alt="" src="http://www.iconbar.com/news/images/sf3k/sf3k2sm.jpg"></a></div><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Star Fighter 3000 on Iyonix (left), and BeagleBoard (right)</strong><br>This picture shows four copies of Star Fighter 3000 running simultaneously on both the Iyonix and the BeagleBoard. The Iyonix struggles to run the games at half the game's full frame rate, while the BeagleBoard, almost manages to run them all at the full 25fps.</p></div><p>Further changes have increased the redraw distance (reducing pop-up), overhauled the configuration system and fixed lots of bugs, amongst billions of other changes. For your astonishment, the full, vast, change log is linked to below. Other work by Chris has produced an array of utilities for editing the game's data files and from time to time he even finds time to work on creating a full desktop map and mission editor!</p><p>Upgrades are a free download for anyone who has ever purchased a commercial copy of the game, and are available from the official Star Fighter 3000 site, linked to below.</p><h3>Links</h3><ul><li><a href="http://starfighter.acornarcade.com/">Star Fighter 3000</a> - Official site<ul><li><a href="http://starfighter.acornarcade.com/sfdownloads.htm">Downloads</a></li><li><a href="http://starfighter.acornarcade.com/r2changes.html">Change log</a></li><li><a href="http://starfighter.acornarcade.com/utils.htm">Utilities</a></li><li><a href="http://starfighter.acornarcade.com/sfeditor.htm">Map / mission editor progress</a></li></ul></li><li><a href="http://www.riscosopen.org/">RISC OS Open</a> - Official site</li></ul></p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1238.html">7 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Sun, 08 Nov 2009 13:17:00 GMT</pubDate>
  </item>
  <item>
   <title>Game City Squared</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1234.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1234.html</guid>
   <description>This was going to be a pretty dry fluff piece about the gaming events going on in my home city, something I'd pop in to between renewing my travel pass and getting some new shoelaces.  Then something slightly surreal happened to me.</description>
   <content:encoded>
    <![CDATA[
    <img src="http://www.iconbar.com/news/images/uploaded/ST831282.JPG" width="120" height="160" alt="[Game City] Elite: Paper Universe" title="[Game City] Elite: Paper Universe" align="right" hspace="5" />This was going to be a pretty dry fluff piece about the gaming events going on in my home city, something I'd pop in to between renewing my travel pass and getting some new shoelaces.  Then something slightly surreal happened to me.</p><p>I've just spent around an hour in the company of one of the men partly responsible for getting me into computers in the first place.  And I didn't recognise him. </p><p><a href="http://gamecity.org/">Game City</a>, which is in its fourth year, has been described as the Sundance Festival of gaming.  It takes over the centre of Nottingham for five days, from marquees in the square to random Pac Man cabinets in shopping arcades, so it's difficult to miss.  However, although I've known about it in the past, I failed to even get photographs of UK games premieres playing on the giant screens because I didn't even have the foresight to charge my 'phone.</p><p>But this year, I'd already read that there was going to be several events to commemorate the 25<sup>th</sup> anniversary of Elite, which is one of my all-time top 10 games.  Top 3, even.   Maybe even top 1.  So folding origami Elite ships seemed right up my proverbial street.</p><p>Entering the tent, I saw that one whole side was inundated with tiny kiddlings who were probably too young to even pronounce "origami", never mind have a clue about Elite.  This not being my sort of crowd I decided to sit on a table across the way, the only other occupant being a balding man with glasses and a beard.  Having nearly spilled his coffee sitting down, we made small talk and tried to fix the wobbly table, and then set about furiously folding spaceships: him a Mamba, me a Cobra Mk III.</p><p>After a while we were joined by two other men, a Commodore 64 fan from back in the day and an ex-student who had only just been born when Elite was released.  We laughed about how impenetrable the instructions were without the accompanying videos available on the website, that the space station they were making had seemed like the easy choice but in reality came in six parts, and chatted about what games we liked and how we'd got into Elite.  It was only when the original origami-ist left the table that the C64 fan hissed: "Wasn't that Ian Bell?"</p><p>Ian Bell, in case you don't know, was the guy that created Elite in the first place, along with David Braben.  It was seeing Elite on the BBC B that convinced me that I really, really needed a computer of my own, although my family could only afford an Electron.  It was enough – and crucially, had its own version of Elite.  I just commented that I thought Ian Bell had a bigger beard.</p><p>He came back, although we all seemed too polite to actually ask him if he was who we thought he was.   So we sat there folding and chatting, until someone walked past and said "Hi, Ian!"</p><p>(It was later reinforced by one of the organisers handing him a big VIP badge.  "If you'd have been wearing that," I pointed out, "we would have known right away!"  At which he smiled, took it from around his neck and tucked it away in a pocket.)</p><p><img src="http://www.iconbar.com/news/images/uploaded/ST831286.JPG" width="160" height="120" alt="Ian Bell" title="Ian Bell" align="right" hspace="5" />"We thought it was you!" said the ex-student, and we started to grill him about what he was doing now, if he was still writing games, if he played many himself, and I rather rudely took a photo of him without asking.  He said that he'd tried writing games until recently, but it was difficult for one man to get anywhere on his own.  Because he wanted to create a psychedelic world to take you somewhere that you'd never been before, instead of using an existing game engine that made most games look alike, he had tried to do everything from scratch.  That hadn't panned out, so now he had a paying job with someone else.  He didn't seem that in to talking about himself though, so we all went back to discussing games in general.</p><p>Although he didn't play games himself, and didn't know the names of any space-based games of recent times (even Eve didn't seem to ring any bells), he had more to say when we got into some of the mechanics of gaming.  I mentioned how I'd started Elite on the Electron many times after losing my saved games (they had to be saved on audio cassette!), and came to like the start more because when you were striving to get all the equipment the anticipation was often more exciting than being all-powerful (rather like the tipping point in RPGs, where the scrabble to defend ends, and all that's left is rather dull (counter-)attack).  Rather than being offended that I seemed to be less excited about later parts of his game, he admitted that levelling at the start of Elite were something he thought they'd got particularly right.  He also commented on his amusement at some of the myths that came out of the user groups (Mr. C64 noted that these were often school groups set up to do maths but which inevitably ended up as Elite-playing sessions), although all the people trying to track down the Generation Ships were the fault of his use of a little artistic licence. And I probably wasn't the only one that left Elite running while I read in my room, choosing to fly through space like I was really there rather than use the interspace jump to get to planets quicker.</p><p>I noticed he'd finished his Mamba some time before, and my Cobra was also complete (if not entirely space-worthy).  So we all had a go at trying to fix the six parts of the space station together, which was pretty much impossible.  I got some sticky tape from one of the many interns hanging around, and it ended up with him making a large cube that in no way resembled a space station, and me holding out little bits of tape on the end of my fingers.  I pointed out that if anyone should know the design, it surely had to be him – but he neatly ducked it by pointing out some subtle differences in the corners.  I'm still not convinced.</p><p>Eventually the space station was complete, but by then Mr. Bell and the younger member of our team had already drifted away.  After an almost frantic amount of folding, followed by some intense fiddling to try and get it all to fit together, all that was left was to shake the hand of the remaining fellow folder and walk away.</p><p>They say you should never meet your heroes: they inevitably disappoint.  I'm not one for hero worship, to the point where I was completely clueless as to the identity of the man sitting opposite me, but I have to admit that Ian Bell had quite some effect on my formative years.  And it turns out that he's just like us – happy to sit there making paper spaceships and chat about games, not wanting to be in the limelight.  What was most telling however was the charming way in which he left us.</p><p>He put a piece of photocopied paper down on the table with a picture of a cat on it.  "Our Burmese has just had some kittens," he said quietly.  "If you're interested..."<br /><center><img src="http://www.iconbar.com/news/images/uploaded/badly_folded.JPG" width="320" height="200" alt="Our combined efforts" title="Our combined efforts" vspace="5" /><br /><i>Our combined efforts</i></center></p><p><hr /> That's probably a slightly soppy way to end, so here's some other odd Game City-related items that cropped up in the local paper.</p><p>First up: "Keita Takahashi, director of the cult Katamari games, is spending a month in the city working on designs for the play area at Woodthorpe Grange."  A few months ago, the idea that a top Japanese games designer would come to Nottingham – and then design a park – would have seemed too far-fetched.  But then Sven-Goran Eriksson, international football manager, turned up at lowly Notts County – a team who almost fell out of the football league entirely last year, and could now be one of the richest clubs in the world (owned by a consortium of billionaires, rather than a single sugar daddy).  And after staying in Nottingham for a while, had the chance to jump ship and manage his home country – but decided to stay, and bring one of his old friends in for good measure.  So now, yes, sure, whatever!</p><p>Apparently this is something Mr Takahashi's been talking about since his first appearance at Game City in 2006.  He's never designed a park before, but he's got a background in sculpting and fine arts, so along with a landscaping expert and input from local schoolkids he might be able to do something interesting.  Konami are paying for him to stay here, and the local Council are just paying for the construction.</p><p>The second thing I noticed was a rather awkward piece of advertising.  "At 2pm, Lord Puttnam of Queensgate will reflect on changes in the creative industries in A Tale of Two Industries."  It took me a while to realise that this was David Puttnam, producer of such film greats as <a href="http://www.imdb.com/title/tt0082158/">Chariots of Fire</a>, <a href="http://www.imdb.com/title/tt0087553/">The Killing Fields</a> and, um, <a href="http://www.imdb.com/title/tt0074256/">Bugsy Malone</a>, and that the second industry would probably be movies.  Not the greatest of adverts then!</p><p><b>Links:</b><br /><a href="http://gamecity.org/">Game City</a><br /> (<a href="http://twitter.com/gamecity">Twitter feed</a>)<br /><a href="http://www.thisisnottingham.co.uk/news/Video-games-guru-design-city-playground/article-1458337-detail/article.html">Video games creator Keita Takahashi is re-designing a playground at Woodthorpe Grange Park</a><br /><a href="http://www.imdb.com/name/nm0701298/">David Puttnam</a><br /><a href="http://www.iancgbell.clara.net/cats/kittens/index.htm">Ian Bell's Asian Kittens</a></p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1234.html">2 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Wed, 28 Oct 2009 14:00:00 GMT</pubDate>
  </item>
  <item>
   <title>Retro Reunited and Acorn World 2009</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1228.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1228.html</guid>
   <description>Acorn World - now there's a name from the past. The final show was cancelled in 1998 when Acorn closed its workstations division - now it's back thanks to Dave Moore and the Retro Reunited team. The show, held over the weekend at the Cedar Court Hotel in Huddersfield, offered a range of vintage games consoles and bizarre Acorn hardware hacks. The Acorn scene was mostly 8-bit oriented although there was some RISC OS coverage too.</description>
   <content:encoded>
    <![CDATA[
    <a href="/news/acornworld2009/IMG_6997/IMG_6997.jpg"><img align="right" src="/news/acornworld2009/IMG_6997/thumb.jpg" alt="Acorn World and Retro Reunited" width="202" height="152" title="Acorn World and Retro Reunited" /></a>Acorn World - now there's a name from the past. The <a href="http://www.houseofmabel.com/past/aws98/">final show</a> was cancelled in 1998 when Acorn closed its workstations division - now it's back thanks to Dave Moore and the Retro Reunited team. The show, held over the weekend at the Cedar Court Hotel in Huddersfield, offered a range of vintage games consoles and bizarre Acorn hardware hacks. The Acorn scene was mostly 8-bit oriented although there was some RISC OS coverage too.</p><p><hr style="clear: both"><br />The atmosphere in the retro gaming room was certainly warm (those games consoles churn out quite some heat) and lively with The Beatles Rock Band being played on stage with a projector and speakers. In one corner was a Sinclair C5 in which you could sit and have your photo taken for £1. As well as the usual old and new Nintendo and Sony consoles and a host of Spectrums and Amigas there were some quirky old machines like the bright orange Nintendo Block Kuzushi (a Japanese bat and ball game with a rotary dial to move the bat) and the Virtual Boy (a console for people who like expensive migraines).</p><p><center><a href="/news/acornworld2009/IMG_7089/IMG_7089.jpg"><img src="/news/acornworld2009/IMG_7089/thumb.jpg" alt="Jupiter Ace" width="202" height="152" title="Jupiter Ace" /></a><a href="/news/acornworld2009/IMG_7005/IMG_7005.jpg"><img src="/news/acornworld2009/IMG_7005/thumb.jpg" alt="Sharp Twin Famicom" width="202" height="152" title="Sharp Twin Famicom" /></a><a href="/news/acornworld2009/IMG_7006/IMG_7006.jpg"><img src="/news/acornworld2009/IMG_7006/thumb.jpg" alt="Nintendo Block Kuzushi" width="202" height="152" title="Nintendo Block Kuzushi" /></a><a href="/news/acornworld2009/IMG_7022/IMG_7022.jpg"><img src="/news/acornworld2009/IMG_7022/thumb.jpg" alt="Grandstand" width="202" height="152" title="Grandstand" /></a></center><center><a href="/news/acornworld2009/IMG_7065/IMG_7065.jpg"><img src="/news/acornworld2009/IMG_7065/thumb.jpg" alt="Altair 8800" width="202" height="152" title="Altair 8800" /></a><a href="/news/acornworld2009/IMG_7066/IMG_7066.jpg"><img src="/news/acornworld2009/IMG_7066/thumb.jpg" alt="Amstrad" width="202" height="152" title="Amstrad" /></a><a href="/news/acornworld2009/IMG_7068/IMG_7068.jpg"><img src="/news/acornworld2009/IMG_7068/thumb.jpg" alt="NeoGeo" width="202" height="152" title="NeoGeo" /></a><a href="/news/acornworld2009/IMG_7070/IMG_7070.jpg"><img src="/news/acornworld2009/IMG_7070/thumb.jpg" alt="River Raid" width="202" height="152" title="River Raid" /></a></center><center><a href="/news/acornworld2009/IMG_7080/IMG_7080.jpg"><img src="/news/acornworld2009/IMG_7080/thumb.jpg" alt="Virtual Boy" width="202" height="152" title="Virtual Boy" /></a><a href="/news/acornworld2009/IMG_7081/IMG_7081.jpg"><img src="/news/acornworld2009/IMG_7081/thumb.jpg" alt="Dragon 32" width="202" height="152" title="Dragon 32" /></a><a href="/news/acornworld2009/IMG_7088/IMG_7088.jpg"><img src="/news/acornworld2009/IMG_7088/thumb.jpg" alt="Commodore" width="202" height="152" title="Commodore" /></a><a href="/news/acornworld2009/IMG_7092/IMG_7092.jpg"><img src="/news/acornworld2009/IMG_7092/thumb.jpg" alt="Osbourne" width="202" height="152" title="Osbourne" /></a></center></p><p>A Panasonic 3DO console caught my eye as there was a copy of Star Fighter available to play. This port from the Archimedes was developed by Krisalis and wasn't something I had ever seen running before. It was possible to compare this souped up version to the original running on an A3010 in the other room. Naturally I had a go - it felt remarkably similar to the Acorn version in terms of how the plane handled and I was happy that I had retained the skills to dock with the mothership despite not playing the game for about 10 years. The main changes were how weapons were selected, the isometric map and a lack of shop. Some more advanced graphical effects like mountains and rippling water were nice but didn't really add to the gameplay.</p><p><center><a href="/news/acornworld2009/IMG_7011/IMG_7011.jpg"><img src="/news/acornworld2009/IMG_7011/thumb.jpg" alt="Panasonic 3DO" width="202" height="152" title="Panasonic 3DO" /></a><a href="/news/acornworld2009/IMG_7016/IMG_7016.jpg"><img src="/news/acornworld2009/IMG_7016/thumb.jpg" alt="Star Fighter front cover" width="202" height="152" title="Star Fighter front cover" /></a><a href="/news/acornworld2009/IMG_7019/IMG_7019.jpg"><img src="/news/acornworld2009/IMG_7019/thumb.jpg" alt="Star Fighter back cover" width="202" height="152" title="Star Fighter back cover" /></a><a href="/news/acornworld2009/IMG_7026/IMG_7026.jpg"><img src="/news/acornworld2009/IMG_7026/thumb.jpg" alt="A3010 playing Star Fighter 3000" width="202" height="152" title="A3010 playing Star Fighter 3000" /></a></center></p><p>Over in Acorn World there was a mixture of old and new. In the far corner was a collection of RISC OS computers and emulators including a Risc PC rocket ship fitted with a pizza oven. Sadly this wasn't running but considering the number of BBC Micros emitting noxious fumes elsewhere in the room it seemed sensible to avoid further fire hazards!</p><p><center><a href="/news/acornworld2009/IMG_7029/IMG_7029.jpg"><img src="/news/acornworld2009/IMG_7029/thumb.jpg" alt="Risc PC rocket ship" width="152" height="202" title="Risc PC rocket ship" /></a><a href="/news/acornworld2009/IMG_7042/IMG_7042.jpg"><img src="/news/acornworld2009/IMG_7042/thumb.jpg" alt="BBC controlled robot arm" width="152" height="202" title="BBC controlled robot arm" /></a><a href="/news/acornworld2009/IMG_7062/IMG_7062.jpg"><img src="/news/acornworld2009/IMG_7062/thumb.jpg" alt="Robot arm" width="152" height="202" title="Robot arm" /></a><a href="/news/acornworld2009/IMG_7193/IMG_7193.jpg"><img src="/news/acornworld2009/IMG_7193/thumb.jpg" alt="BBC robot in a bucket for its own good" width="152" height="202" title="BBC robot in a bucket for its own good" /></a></center></p><p>Paul Stewart's home-brew laptop was on display again. He's made quite a few enhancements since I saw it at Wakefield last year: there's a larger 15" monitor and a CD drive. The aluminium suitcase has been replaced by a more conventional looking case - glossy black but rather battered around the edges. He mostly uses it just at home but plans to take it out more when it's complete. I asked him about his plans for his new online PDF magazine called Drag and Drop. Work is ongoing and he hopes to get the first issue out in the next month or so. He has no plans for printed copies; he wants to avoid the printing issues which have plagued other RISC OS magazines in the past and he likes to provide clickable links in the content. It will be produced almost entirely on RISC OS.</p><p><center><a href="/news/acornworld2009/IMG_7032/IMG_7032.jpg"><img src="/news/acornworld2009/IMG_7032/thumb.jpg" alt="A9 portable" width="202" height="152" title="A9 portable" /></a><a href="/news/acornworld2009/IMG_7036/IMG_7036.jpg"><img src="/news/acornworld2009/IMG_7036/thumb.jpg" alt="Paul Stewart" width="202" height="152" title="Paul Stewart" /></a><a href="/news/acornworld2009/IMG_7064/IMG_7064.jpg"><img src="/news/acornworld2009/IMG_7064/thumb.jpg" alt="Modern RISC OS" width="202" height="152" title="Modern RISC OS" /></a></center></p><p>Nearby was the BBC Domesday machine, ably maintained and demonstrated by Joel Rowbottom. The Domesday system seems to never lose its magic - whenever I see it at these shows it is always surrounded by an eager queue of people wanting to look up their home town. Invariably they find some little treasure of information that would otherwise have been lost. Absolutely captivating. I was sorry to hear that the <a href="http://www.domesday1986.com/">Domesday 1986</a> site had gone offline following the untimely death of its author and maintainer, Adrian Pearce. Plans are afoot to make it accessible again, possibly using an online BBC Micro emulator or as a Google Maps mashup. Both of these are very exciting projects - the emulator would really show how early multimedia programs operated, and the Google Maps mashup could provide a whole host of exciting new possibilities. I'm really tempted to write an iPhone app to use it - imagine being able to travel anywhere in the UK and hit a button to see how it looked 25 years ago!</p><p>Other nutty delights included an Acorn Electron reimplemented on an FPGA (I'd love somebody to mod their Omega with this!) - apparently the most time consuming step was getting the 6502 processor working (the design was downloaded from the internet). I also saw a BBC Master hosting an ARM 7 processor.</p><p><center><a href="/news/acornworld2009/IMG_7044/IMG_7044.jpg"><img src="/news/acornworld2009/IMG_7044/thumb.jpg" alt="Chuckie Egg" width="202" height="152" title="Chuckie Egg" /></a><a href="/news/acornworld2009/IMG_7045/IMG_7045.jpg"><img src="/news/acornworld2009/IMG_7045/thumb.jpg" alt="Acorn Electron with GoMMC" width="202" height="152" title="Acorn Electron with GoMMC" /></a><a href="/news/acornworld2009/IMG_7048/IMG_7048.jpg"><img src="/news/acornworld2009/IMG_7048/thumb.jpg" alt="FPGA Electron" width="202" height="152" title="FPGA Electron" /></a><a href="/news/acornworld2009/IMG_7093/IMG_7093.jpg"><img src="/news/acornworld2009/IMG_7093/thumb.jpg" alt="BBC Micro with ARM 7" width="202" height="152" title="BBC Micro with ARM 7" /></a></center></p><p>Retro Software were there in force with a range of new titles including The Krystal Connection and Zap which you could actually buy on disk or cassette to run on your BBC! The packaging looked great and it was very reminiscent of the classic Superior Software titles. Speaking of which, you could buy large prints of the artwork for Superior games such as Ravenskull, Codename Droid and Repton 3. Retro are also developing games for the Android mobile platform, handing out free fluffy balls with goggly eyes to promote their new Mole Miner game.</p><p><center><a href="/news/acornworld2009/IMG_7060/IMG_7060.jpg"><img src="/news/acornworld2009/IMG_7060/thumb.jpg" alt="ZAP" width="152" height="202" title="ZAP" /></a><a href="/news/acornworld2009/IMG_7100/IMG_7100.jpg"><img src="/news/acornworld2009/IMG_7100/thumb.jpg" alt="Repton: The Lost Realms by Paras Sidapara" width="152" height="202" title="Repton: The Lost Realms by Paras Sidapara" /></a><a href="/news/acornworld2009/IMG_7050/IMG_7050.jpg"><img src="/news/acornworld2009/IMG_7050/thumb.jpg" alt="FPGA Electron" width="152" height="202" title="FPGA Electron" /></a><a href="/news/acornworld2009/IMG_7024/IMG_7024.jpg"><img src="/news/acornworld2009/IMG_7024/thumb.jpg" alt="MB Vectrex" width="152" height="202" title="MB Vectrex" /></a><a href="/news/acornworld2009/IMG_7025/IMG_7025.jpg"><img src="/news/acornworld2009/IMG_7025/thumb.jpg" alt="Nintendo" width="152" height="202" title="Nintendo" /></a></center></p><p>Acorn World shared the room with the presentation theatre. The main presentation of interest to Acorn users on the Saturday was the Q and A session with Kenton Price, Jamie Woodhouse and Matthew Atkinson.</p><p>Kenton was infamous for writing a Repton clone called Ripton which I'd not come across until today. He wrote it when he was 16 (and some of the humour in the game shows that!) following delays with the official Repton 3 release. It was submitted to A&B Computing but they rather wisely decided not to publish it. There was great rivalry between A+B and Superior back in the day although looking back now Kenton and Matthew aren't really sure why. Kenton went on to talk about Mole Miner which - quite bizarrely - has 36 sound samples of Nicholas Parsons (who was kind enough to record them especially for the game last month in Edinburgh).</p><p><center><a href="/news/acornworld2009/IMG_7054/IMG_7054.jpg"><img src="/news/acornworld2009/IMG_7054/thumb.jpg" alt="The Krystal Connection" width="202" height="152" title="The Krystal Connection" /></a><a href="/news/acornworld2009/IMG_7056/IMG_7056.jpg"><img src="/news/acornworld2009/IMG_7056/thumb.jpg" alt="The Krystal Connection" width="202" height="152" title="The Krystal Connection" /></a><a href="/news/acornworld2009/IMG_7095/IMG_7095.jpg"><img src="/news/acornworld2009/IMG_7095/thumb.jpg" alt="Cyroid-X (Electron conversion by Tom Walker)" width="202" height="152" title="Cyroid-X (Electron conversion by Tom Walker)" /></a></center></p><p>Next up, Jamie Woodhouse talked about releasing Zap - a brand new old title that has been sitting in a disk box for 25 years. He also wrote Qwak which appeared on a Play It Again Sam compilation for the BBC and Electron (I remember playing this game lots when it came out). He later released it for the Game Boy Advance. This was self published after sometimes feeling disgruntled with publishers and wanting more freedom.</p><p>Matthew Atkinson was a prolific Acorn game programmer who was responsible for Repton 3 and UIM. When Superior asked him to write Repton 3 he had no idea how successful the series would become. It's amazing that they are still being played today. He described a game based upon the Cadbury's Milk Tray adverts called 'And All Because'. Superior were keen to break into new markets and Cadbury were keen to licence it. Sadly halfway through development the marketing team decided against it as they wanted to head upmarket and not be associated with games.</p><p><center><a href="/news/acornworld2009/IMG_7073/IMG_7073.jpg"><img src="/news/acornworld2009/IMG_7073/thumb.jpg" alt="Ripton" width="202" height="152" title="Ripton" /></a><a href="/news/acornworld2009/IMG_7077/IMG_7077.jpg"><img src="/news/acornworld2009/IMG_7077/thumb.jpg" alt="Jamie Woodhouse, Kenton Price and Matthew Atkinson" width="202" height="152" title="Jamie Woodhouse, Kenton Price and Matthew Atkinson" /></a><a href="/news/acornworld2009/IMG_7002/IMG_7002.jpg"><img src="/news/acornworld2009/IMG_7002/thumb.jpg" alt="Retro Reunited" width="202" height="152" title="Retro Reunited" /></a></center></p><p>I had an interesting talk with Jason Fitzpatrick from The Centre of Computing History. He'd been working on the forthcoming Micro Men documentary for BBC Four and had been tasked with finding appropriate computers and magazine advertisements to be shown onscreen. He was on set during filming to ensure that the computers behaved themselves (unfortunately during one take the power supply for BBC Micro blew up resulting in authentic but unwanted black smoke) - the Centre had even modified a Beeb to become a prototype Proton. It was all quite hectic but he hopes they've managed to keep everything looking authentic.</p><p>Sunday was quieter around the stands and the real focus was on the presentations. Unfortunately I arrived too late for the first impromptu talk from Mel Pullen, a contractor at Acorn who engineered the Teletext and Prestel adaptors. In the afternoon the second talk was by Robert Sprowson who was representing RISC OS Open Ltd. He began with a brief history of Acorn and RISC OS (not quite managing 31 years in 31 seconds but a good attempt!) leading on to the founding of ROOL and the current state of development. He compared the efforts of 30,000 Microsoft OS programmers to around 100 at Acorn to effectively just one - The Icon Bar's very own Jeffrey Lee - working on the port to the Beagle Board. He also showed us a slide of the Iyonix ROM image - literally a bitmap image made of the raw data - and pointed out the bits that he had worked on. Releasing the source code isn't just a case of uploading a CVS repository to the internet; great care has to be taken to remove commercially sensitive sections and some fruity words in the comments.</p><p><center><a href="/news/acornworld2009/IMG_7104/IMG_7104.jpg"><img src="/news/acornworld2009/IMG_7104/thumb.jpg" alt="Robert Sprowson" width="202" height="152" title="Robert Sprowson" /></a><a href="/news/acornworld2009/IMG_7109/IMG_7109.jpg"><img src="/news/acornworld2009/IMG_7109/thumb.jpg" alt="Robert Sprowson's contribution" width="202" height="152" title="Robert Sprowson's contribution" /></a><a href="/news/acornworld2009/IMG_7111/IMG_7111.jpg"><img src="/news/acornworld2009/IMG_7111/thumb.jpg" alt="Censored!" width="202" height="152" title="Censored!" /></a><a href="/news/acornworld2009/IMG_7116/IMG_7116.jpg"><img src="/news/acornworld2009/IMG_7116/thumb.jpg" alt="Beagle Board" width="202" height="152" title="Beagle Board" /></a></center></p><p>He was careful about the situation between ROOL and RISC OS Ltd, understanding that ROL are a commercial (though not for profit) organisation who need to sell products. The general aim to converge APIs is a "lofty goal". Questions were asked about the shared source licence granted by Castle and whether it would discourage developers from contributing. It was also unclear how much Castle would charge per licence if a commercial product was to be released using RISC OS. The cheapest option would be to sell the hardware (such as a Beagle based netbook) and let the end user download and install the ROM image themselves (much as happens with Linux in the desktop world today). Someone from the audience suggested that RISC OS could supplant the terrible Windows Mobile OS, but Rob said that even if RISC OS could be ported to such a device, there would still be a huge amount of work creating all the applications to run on it (such as phone diallers and text messaging).</p><p><center><a href="/news/acornworld2009/IMG_7123/IMG_7123.jpg"><img src="/news/acornworld2009/IMG_7123/thumb.jpg" alt="Jason Fitzpatrick introduces" width="202" height="152" title="Jason Fitzpatrick introduces" /></a><a href="/news/acornworld2009/IMG_7120/IMG_7120.jpg"><img src="/news/acornworld2009/IMG_7120/thumb.jpg" alt="Steve Furber meets Mel Pullen (Soft Machinery)" width="202" height="152" title="Steve Furber meets Mel Pullen (Soft Machinery)" /></a><a href="/news/acornworld2009/IMG_7128/IMG_7128.jpg"><img src="/news/acornworld2009/IMG_7128/thumb.jpg" alt="Cambridge Processor Unit" width="202" height="152" title="Cambridge Processor Unit" /></a><a href="/news/acornworld2009/IMG_7132/IMG_7132.jpg"><img src="/news/acornworld2009/IMG_7132/thumb.jpg" alt="Steve Furber" width="202" height="152" title="Steve Furber" /></a></center></p><p>The final presentation was by Steve Furber; now Professor of Computer Engineering at the University of Manchester, he was famous here for his work on the BBC Micro and ARM processors. His talk was about the heritage of the BBC Micro, and he joked that the audience members - still living in the past - would know or remember more about the topic than he did. Back in the day, Steve worked for the Cambridge Processor Unit who were helping fruit machines make the transition from purely mechanical devices to computerised systems. Acorn started as a trading name (quite possibly chosen because it came before Apple in the telephone directory) but eventually became the company's full name.</p><p><center><a href="/news/acornworld2009/IMG_7134/IMG_7134.jpg"><img src="/news/acornworld2009/IMG_7134/thumb.jpg" alt="Acorn System One powering Blake's 7" width="202" height="152" title="Acorn System One powering Blake's 7" /></a><a href="/news/acornworld2009/IMG_7142/IMG_7142.jpg"><img src="/news/acornworld2009/IMG_7142/thumb.jpg" alt="Steve Furber" width="202" height="152" title="Steve Furber" /></a><a href="/news/acornworld2009/IMG_7145/IMG_7145.jpg"><img src="/news/acornworld2009/IMG_7145/thumb.jpg" alt="ARM development with BBC BASIC" width="202" height="152" title="ARM development with BBC BASIC" /></a><a href="/news/acornworld2009/IMG_7146/IMG_7146.jpg"><img src="/news/acornworld2009/IMG_7146/thumb.jpg" alt="ARM development" width="202" height="152" title="ARM development" /></a></center></p><p>Steve talked in detail about some of the engineering challenges they encountered when designing the BBC Micro and the limitations of other processors when looking to build its successor. After disregarding chips like the 32016 and 68000, and encouraged by Herman Hauser's belief that silicon design was crucial to the success of the company, Acorn set about creating their own. The main problem was this: nobody in small companies designed processors because big corporations spent millions getting them wrong. So it was with some surprise that he and Sophie Wilson discovered that the Western Design Centre in California was not a grand building but a small bungalow on the edge of town filled with Apple IIs and populated by students. This gave them the confidence to design their own RISC chip and the rest is history.</p><p><center><a href="/news/acornworld2009/IMG_7173/IMG_7173.jpg"><img src="/news/acornworld2009/IMG_7173/thumb.jpg" alt="Steve Furber" width="202" height="152" title="Steve Furber" /></a><a href="/news/acornworld2009/IMG_7180/IMG_7180.jpg"><img src="/news/acornworld2009/IMG_7180/thumb.jpg" alt="Conclusions" width="202" height="152" title="Conclusions" /></a><a href="/news/acornworld2009/IMG_7183/IMG_7183.jpg"><img src="/news/acornworld2009/IMG_7183/thumb.jpg" alt="Steve Furber" width="202" height="152" title="Steve Furber" /></a></center></p><p>Interestingly, the ARM chip was designed and tested on a BBC micro. Steve recently found the ARM reference model - coded in BBC Basic and only 808 lines long - on a disk in his garage. This was deeper than an emulator (which only has to mimic the processor at an instruction level) and it turned out to be important evidence for several ongoing patent defence cases in America. (It also means you won't find it free to download on a web site any time soon). Having no money and no people kept the ARM design simple. Even the power consumption was a happy accident: without being able to accurately measure the power consumption they managed to stay well under the target of 1 watt - by a factor of ten!</p><p>There was immense public interest in microcomputers in the early 1980s and the BBC gave Acorn a trustworthy reputation. Similarly when wanting to spin off ARM Ltd as a separate company it was Apple (who wanted the ARM chip for their Newton) who made the company credible. Now all the ARM processors produced to date have more combined computing power than all other processors put together. Steve then talked about his recent projects and plans. He is working on SpinNaker, a multiprocessor computer built using thousands of ARM 9s yet offering only around 1% of the capacity of the human brain.</p><p><center><a href="/news/acornworld2009/IMG_7186/IMG_7186.jpg"><img src="/news/acornworld2009/IMG_7186/thumb.jpg" alt="Announcements" width="202" height="152" title="Announcements" /></a><a href="/news/acornworld2009/IMG_7191/IMG_7191.jpg"><img src="/news/acornworld2009/IMG_7191/thumb.jpg" alt="Joel Rowbottom" width="202" height="152" title="Joel Rowbottom" /></a><a href="/news/acornworld2009/IMG_7053/IMG_7053.jpg"><img src="/news/acornworld2009/IMG_7053/thumb.jpg" alt="Acorn World" width="202" height="152" title="Acorn World" /></a></center></p><p>Overall it was a fascinating weekend. It was sometimes hard to differentiate exhibitors from guests - but maybe that didn't matter; everyone could just get on and chat about what they were interested in. It was obvious that everyone had put a lot of effort in to organising the event (not least carrying all the heavy equipment upstairs!) There was a nice friendly atmosphere and it was great to be able to just go up to any machine and play with it. The crowd seemed quite different from the Wakefield shows - a reasonably younger crowd, perhaps including quite a few people who were probably too young to see all this when it was new. Here's to the next 25 years!</p><p><b>See also:</b><br /><a href="http://blog.joel.co.uk/?itemid=870">Joel Rowbottom's show report</a><br /><a href="http://photos.jml.net/tags/rre09.html">More photos</a><br /><a href="http://www.flickr.com/photos/c4pnb/3915646473/">Group photo taken at the end of the show</a><br /><a href="http://twitter.com/#search?q=%23rre09">Retro Reunited as it happened on Twitter</a><br /><a href="http://www.youtube.com/watch?v=u2_LRUW9uXs">Acorn World video</a></p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1228.html">5 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Mon, 14 Sep 2009 11:00:00 GMT</pubDate>
  </item>
  <item>
   <title>Time to stop buying via Steam?</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1226.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1226.html</guid>
   <description>Back at the start of this month I decided to take a break from debugging some code and have a quick de-stressing blast on Team Fortress 2. As I loaded the Steam client, the "updates" window popped up what seemed to be a bargain - Fallout 3, half price just for that weekend! That'll be fun, thinks I, and cheap too!</description>
   <content:encoded>
    <![CDATA[
    Back at the start of this month I decided to take a break from debugging some code and have a quick de-stressing blast on Team Fortress 2. As I loaded the Steam client, the "updates" window popped up what seemed to be a bargain - Fallout 3, half price just for that weekend! <i>That'll be fun,</i> thinks I, <i>and cheap too!</i></p><p>It really didn't turn out that way.</p><p>I never got to see the game in action at all. I mean, I got to see the menu - loads of times - but after "Start New Game", all I'd be seeing is my own desktop. All the more galling, I'd get little messages popping up telling me "Phlamethrower is now playing Fallout 3", taunting me. I would have liked to have been playing Fallout 3, too.</p><p>There are, alas, two main problems with buying games from Valve via their Steam client:<ol><li>They don't support games they don't write</li><li>They don't do refunds</li></ol>The first point is kind of understandable - if they didn't write it, they probably don't know enough about it to help get the game running. On the other hand, most developers just develop games for delivery on shiny disks, whereas Valve would be the experts on Steam itself - so if the problem was to do with a corrupted download, you might expect at least a "delete the cache and re-download" raindance. You could also argue that most first line support is done from a script these days, so it's not so hard for anyone to support a product - but that's an arguement that could cut both ways (if anyone can do it equally well, why hassle Valve?).</p><p>What I got was a stock response telling me to go to their support page and follow a link to the developer's website. Which didn't work. So via Google I got to the Bethesda forums, which gave a link to a Microsoft download to fix the Live software. That link didn't work. After thrashing around on my own I went back to Valve, who finally gave me a link that did work, to Bethesda's generic support contact form. Guess what? It didn't work. The email server seemed to be rejecting mail from the web server.</p><p>In the mean time I'd been reading the Valve forums, and it appeared the game has problems on a certain operating system - there was a <i>long</i> line of "me too!" posts from Vista users. I followed a number of suggestions - updating .Net, my video drivers, Live; disabling software such as ffdshow; even installing a hack to disable the game's Live component completely - all to no avail. Needless to say, the game didn't exactly take my mind off that debugging quite as much as I'd hoped.</p><p>The only option seemed to be to take the game back to where I'd bought it, and ask for a refund. Only, Valve don't do refunds.</p><p>Actually, I didn't know that at this point of the proceedings, mainly because Valve didn't bother to answer when I informed them I couldn't get through to Bethesda. After ten days, I sent yet another request, pointing out that this level of service didn't bode well for future Steam purchases. It was only then that I found out about their refund policy:<blockquote>Please note [...]<br />that Steam purchases, per the Steam Subscriber Agreement, are not refundable</blockquote>There are a number of problems with this. It's well established that very few people read "shrink-wrapped" contracts, which makes their <a href="http://en.wikipedia.org/wiki/Shrink_wrap_contract">enforcability somewhat dubious even in the States</a>. In the UK I should be protected by laws such as the Sale of Goods Act - if a product you've purchased is "unfit for purpose", you're entitled to a full refund, which trumps any amount of small print. I purchased the game in the UK, and prices are all in pounds sterling, so don't UK laws apply? The problem is I just don't know - the company is obviously American, and on further inspection it appears the "store" is hosted in America too, despite detecting where you're accessing it from and using your local currency. I'm not even sure I purchased the game, or if I'm just renting it in some way - and come to think of it, what happens if Valve go bankrupt and their servers go offline?</p><p>Whatever the legal technicalities, you would expect if a game doesn't run at all, you can just go back to the shop you got it from and ask for a refund. True, some people might abuse this by playing the game and then taking it back afterwards, but here Valve is in a somewhat unique position - they know exactly when I purchased the game, exactly when I first started saying I had problems, and in all probablility when I connected to their service to actually play the game. None of that really matters however, because in retail most stores would probably just give the money back anyway, just to keep the customer sweet. But I had a game that didn't work - never got past the title screen, likely it never would - and I was expected to just write the money off.</p><p>I should come clean and say that, for dramatic effect, I snipped the ends from my previous quoting. The line that informed me of the refund policy reads in full:<blockquote>Please note in the future that Steam purchases, per the Steam Subscriber Agreement, are not refundable -<br />this refund was issued as a one-time customer service gesture.</blockquote>So I did get back my money eventually. So all's well that ends well, right? Well, not really. <i>This</i> time I got my money back. But what about <i>next</i> time? The only reason I got a refund might have been because my message slipped through the cracks for 10 days - or they might refund anyone who makes enough noise. Whereas if I just buy games on shiny disk from a bricks and mortar shop (or a "proper" online shop like Amazon), I'm pretty certain of their refund policy. And that, if it does work (as is most often the case), the game will continue to be mine in the future.<br /> <div style="font-size:0.8em">And that I don't have to spend all day downloading it over my Virgin broadband connection that drops to 1Mb part-way through.</div></p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1226.html">17 comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Tue, 28 Jul 2009 13:07:00 GMT</pubDate>
  </item>
  <item>
   <title>Building the Dream 4 - Random city basics</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1214.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1214.html</guid>
   <description>As stated in the last article, this time I'll be looking at what went into the MK I map generator for my eternally work-in-progress game, DeathDawn.</description>
   <content:encoded>
    <![CDATA[
    <img src="/news/images/dream/logo.png" align="right" hspace="2" vspace="2">As stated in <a href="/articles/Building_the_Dream_3_-_Random_map_generators_redux/index1211.html">the last article</a>, this time I'll be looking at what went into the MK I map generator for my eternally work-in-progress game, <a href="http://www.phlamethrower.co.uk/riscos/deathdawn.php">DeathDawn</a>.</p><p>Specifically, I'll be looking at the implementation and evolution of the following components of the generator:<ul><li><b>City block placement</b>. This is arguably the most important stage as it defines the overall layout of the city.</li><li><b>Edge and node linking</b>. A housekeeping stage that prepares the data structures for the road weighting stage.</li><li><b>Road weighting</b>. A city with roads which all have the same number of lanes isn't very realistic, so this stage uses an algorithm to determine the number of lanes each road should have.</li><li><b>Road and building painting</b>. With the city structure generated, all that's left is to translate it into the format used by the engine during actual gameplay.</li></ul> <h3>City block placement</h3><p><h4>Choice of algorithm</h4><p>If I wanted the city to look like a city, the choice of algorithm for laying out the city blocks is undoubtedly one of the most important choices to be made. At the time, I had several options available:<ol><li>The <a href="/articles/Random_map_generators/index1114.html">previously-described algorithm used in maze game GAIO</a>, where one large room is recursively split into smaller rooms along either the horizontal or vertical axis. Except in the case of DeathDawn the rooms would be buildings and the walls would be roads.</li><li>A solution borrowed from elsewhere, for example that used by <a href="https://www.cs.auckland.ac.nz/~roboteam/">Team Black Sheep</a>'s <a href="https://www.cs.auckland.ac.nz/~roboteam/documents/RandomMapGenerator.pdf">Robocup Rescue city generator</a>. In the above-named example roads are placed onto the lines of an irregularly-spaced grid, then some roads are removed at random to enlarge the size of some city blocks, and then random offsets are applied to the node coordinates in order to add more bends and hide the fact that the roads are based around a rigid grid structure. All except the last step would be applicable for DeathDawn, due to the near impossibility of representing roads that don't run along the 4 cardinal directions.</li><li>An entirely new algorithm developed with DeathDawn in mind</li></ol>In the end, the decision was made to develop a new algorithm. The GAIO algorithm was deemed inappropriate due to its tendency to generate one long road running from one edge of the city to another, making the output feel too artificial. The Black Sheep Robocup Rescue generator was also deemed inappropriate, since it relied too much on the random displacement of nodes (and thus support for diagonal roads) in order to generate the desired effect.</p><p>Other useful food for thought during this development process included Nikos A. Salingaros's keynote speech <a href="http://zeta.math.utsa.edu/~yxk833/connecting.html">"Connecting the Fractal City"</a>, presented at the 5th Biennial of towns and town planners in Europe.<h4>Implementation</h4><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:220px;float:right;"><a href="/news/images/dream/4_fig1.png" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/4_fig1sm.png"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 1</strong><br>Output of the first city block generator (Click for larger)</p><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0 0;"><a href="/news/images/dream/4_fig2.png" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/4_fig2sm.png"></a></p><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 2</strong><br>Output of the tweaked city block generator (Click for larger)</p></div>I was essentially back at square one - how do I create a realistic looking city block structure? Some roads need to be long and straight, others need to be narrow and twisty. Some buildings need to be big, others need to be small. Some need to be regular, some need to be irregular.</p><p>Although I could try building a complex fractal-based generator, I decided to go with the simplest approach possible and build from there. Starting in the top-left corner of the map, the confusingly-named <tt>magic_road_algorithm()</tt> function would fill the map with city blocks (<tt>cblocks</tt>), laying them down one at a time next to each other. Each block would be rectangular in shape (for now, at least), and would be a random size (within certain limits). With a little tweaking, this algorithm worked surprisingly well.<h5>Initial problems</h5><p>Although the first version worked, it did suffer from problems. Mainly that everything had a habit of shrinking and shifting to the left as it went further down the map, and there were many instances of city blocks which are either too small or non-existent (i.e. two roads placed directly next to each other). When you take into account the fact that roads shown in figures 1 and 2 are single-lane roads, you can see how this could cause problems when the roads are widened by later stages of the generator.<h5>Tweak #1 - cblock size selection</h5><p>The first tweak was to the <tt>cblock</tt> size selection. In the initial code, the algorithm would scan the map to work out the largest <tt>cblock</tt> that could be placed, and then select a block that fits within that area (and also obeys the min/max block size). However this fails to take into account the requirements of the next block to be placed, and frequently results in situations where the next block is forced to be smaller than the minimum size. Due to the top-to-bottom, left-to-right scanning and filling of the map this results in the large number of thin yet tall blocks seen in figure 1, particularly along the right hand edge of the map.</p><p>By altering the algorithm to take into account the minimum size constraint of the next block (both in the X and Y axes), avoiding a split if the next block would be too small, the number of too-small blocks was reduced significantly.</p><p><h5 style="clear: both;">Tweak #2 - Generate longer straight roads</h5><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:256px;float:right;"><img style="display:block;" border=0 src="/news/images/dream/4_fig3.png"><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 3</strong><br>A diagram showing city block creation. The numbers indicate the order in which the blocks are created.</p></div>The output of the first generator suffered from a problem where the average length of the vertical roads was higher than the average length of the horizontal roads. This is another artifact that's the result of the top-to-bottom, left-to-right scanning order. As you can see from figure 3, the uneven heights of blocks 2, 3 and 4 places width constraints on blocks 6 and 7. Unless those constraints are broken, the vertical road running between 2 and 3 (and 3 and 4) will stretch to the bottom of the map, and there will never be a horizontal road below block 3 that's wider than block 3. The only way to break the constraints is to make two adjacent blocks have their bottom edges in line with each other, like with blocks 7 and 4.</p><p>The problem with the original generator was that because the widths and heights of the blocks are both random, the chances of a situation like 7 and 4 occuring are relatively slim - only 1 in N, where N is the maximum block height.</p><p>A simple solution to this problem was discovered; a <tt>uniformity</tt> parameter was added to the function. This parameter gives the random chance of the new <tt>cblock</tt> having its bottom edge in line with the bottom edge of the block to the left. If the <tt>uniformity</tt> says not to place the two in line, then a random height will be chosen as usual. By tweaking this value (current generators use the value of 30%) a satisfactory result was produced, where the city appears to have an equal number/length of long horizontal and vertical roads.<h3>Edge and node linking</h3><p>Although the <tt>magic_road_algorithm()</tt> function creates a list of <tt>cblocks</tt>, and those <tt>cblocks</tt> are linked into the <tt>cbmap</tt>, the blocks don't have any direct way of enumerating their neighbours. And more importantly for the road weighting code, there are no <tt>edge</tt> or <tt>corner</tt> structures for the road code to manipulate.</p><p>The <tt>build_edges_and_nodes()</tt> function fixes this by using the <tt>cbmap</tt> to scan the area surrounding each <tt>cblock</tt>, creating <tt>edge</tt> structures between each pair of neighbouring blocks. The <tt>edge</tt> list is then used along with the <tt>cbmap</tt> again to work out what <tt>cblocks</tt> are at the end of each edge, to create and link the <tt>corner</tt> structures.</p><p>The end result is a fully interlinked network of <tt>cblocks</tt>, <tt>edges</tt> and <tt>corners</tt>, as seen in figures 5 and 6 from the preceding article. <a href="/articles/Building_the_Dream_3_-_Random_map_generators_redux/index1211.html">Remember to have a quick look back at that article if none of this is making any sense!</a><h3>Road weighting</h3><p>The <tt>edge</tt> structures are treated by the map generator as being individual segments of road. But a city that contains roads that are all the same width isn't very realistic, so a 'weighting' algorithm is used to decide how popular (and therefore how wide) each road should be. This algorithm (in the <tt>weight_road_algorithm()</tt> function) uses an idea borrowed from The Black Sheep's Robocup entry, whereby a number of simulated journeys through the city are made and statistics gathered for what the most popular roads are. These journeys are simulated using an <a href="http://en.wikipedia.org/wiki/A*_search_algorithm">A* algorithm</a> to find the 'best' route between two random points in the city (i.e. two <tt>corner</tt> structs). By performing several thousand journeys and counting how many times each road is used, the most popular roads can be identified, and they can be upgraded to the widest width possible (for DeathDawn, this is 6 lanes). Other, lesser popular roads are given 4 lanes, while the majority are left with 2 lanes. Finally the least popular roads are downgraded to footpaths, to add some more variety to the city.<h4>Implementation details</h4><p>Like all A* implementations, the one used by the road weighting algorithm relies on a <a href="http://en.wikipedia.org/wiki/Priority_queue">priority queue</a> data structure to store all the partial paths and decide which to process next. In the case of the road weighting algorithm, the priority queue contains pointers to <tt>road_path</tt> structures:</p><p><code>typedef struct _road_path {<br />  int l;<br />  struct _road_path *next;<br />  corner *c;<br />  struct _road_path *lnext;<br />} road_path;</code><ul><li>The <tt>l</tt> member contains the current total length of the path. This is used as part of the priority queue sorting function to decide which <tt>road_path</tt> to expand next.</li><li>The <tt>next</tt> member points to the <tt>road_path</tt>'s predecessor along the travel route. A more logical name would probably be <tt>prev</tt>, but <tt>next</tt> is the name that's stuck.</li><li>The <tt>c</tt> member points to the <tt>corner</tt> which this path stops at.</li><li>The <tt>lnext</tt> member is used to manage a linked list of all the <tt>road_paths</tt>, to allow them all to be deleted at the end of each journey simulation. It has no bearing upon the A* algorithm itself.</li></ul>At the start of each journey simulation, a single <tt>road_path</tt> is inserted into the priority queue. This has a route length of 0, a null <tt>next</tt> pointer, and points to the 'start' <tt>corner</tt> in the journey. Then, for each iteration of the A* algorithm, the head element is removed from the priority queue, and the <tt>weight_road_add()</tt> function is called to expand the partial path in every possible direction (i.e. along the four <tt>edges</tt> pointed to by the <tt>edges</tt> member of the <tt>corner</tt> that the path links to). Once a <tt>road_path</tt> is generated which lies ontop of the 'end' <tt>corner</tt>, the process stops.</p><p>But how does this help us find the quickest route?</p><p>Simple: The <tt>next</tt> pointer of each new <tt>road_path</tt> is made to point towards the parent <tt>road_path</tt>. This means that, for the <tt>road_path</tt> which lies ontop of the 'end' <tt>corner</tt>, if you followed the <tt>next</tt> pointers you would travel along the quickest route back to the 'start' <tt>corner</tt>. With a little bit of extra logic to translate <tt>corner</tt> pairs into <tt>edges</tt>, you can therefore work out which <tt>edges</tt> are used in the journey and increase their use counts.</p><p>One important optimisation applied to the basic algorithm is that each <tt>corner</tt> is only processed once. This is implemented by the use of the <tt>visited</tt> flag of the <tt>corner</tt> structure. The flag is set the first time a <tt>road_path</tt> is generated for that corner, and any subsequent attempts to generate a path for that corner will fail. This optimisation is permissible because although there may be multiple paths towards each <tt>corner</tt>, we are only interested in the best (i.e. shortest) path to each corner - and due to the nature of A* the best path will always<sup>1</sup> be the first one generated. Without this optimisation the number of generated partial paths has the potential to increase exponentially, increasing both memory costs and execution time of the algorithm (and when you've got to perform several thousand route simulations to generate the road widths, execution time becomes very important). With the optimisation in place, you can be guaranteed to generate no more <tt>road_paths</tt> than there are <tt>corners</tt>. Care is taken to make sure the <tt>visited</tt> flag is cleared after each journey simulation - this is done in the loop that runs through the <tt>lnext</tt> pointer chain and deletes each path element.</p><p>One important thing to remember if you're implementing your own A* algorithm is that unless you implement a similar system to avoid generating redundant or looping paths, the algorithm may not terminate if there is no possible path between the two points. Well, it'll terminate when it runs out of memory, but that could easily take an unacceptably long time, or result in other bits of code failing.</p><p>Once the ten thousand or so simulated journeys have been made and the road use counts tallied, an array is produced containing pointers to each road <tt>edge</tt>. This array is then sorted in order of road popularity, from most popular to least. The first 10% of the array entries are upgraded to 6-lane roads; the next 20% to 4-lane, the next 60% to 2-lane, and the remaining 10% are downgraded to 1-lane footpaths.</p><p><small><sup>1</sup> Actually this is probably false - particularly once the following algorithm tweaks are taken into account - but at the very least the first path generated for each <tt>corner</tt> is good enough as far as the road weighting algorithm is concerned.</small><h4>Tweaking and improvements</h4><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:256px;float:right;"><a href="/news/images/dream/4_fig4.png" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/4_fig4sm.png"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 4</strong><br>Sample output of the current road weighting algorithm (Click for larger)</p></div>Initially the evaluation function used by the A* algorithm to find the 'best' route was concerned with only finding the shortest route. However during testing this was seen to have two problems: Firstly the most popular roads were all in the city centre, which resulted in the widest roads being placed there in a big cluster. This is somewhat unrealistic since the city centre, due to its popularity, is likely to be the part of the city with the least space available for wide roads to be placed. The second problem observed was that the wider roads tended to zig-zag quite a bit, which is again rather unrealistic since wide roads are meant to simulate motorways, which are generally wide and straight to allow high speeds and reduced travel time.</p><p>Fixing these problems required some quite simple tweaks to the code: When adding a new section to the route path, the path length is increased by 1 if it runs through the center of the map. The path length is also increased by 1 if it involves turning a corner. Since the A* algorithm aims to find the route with the lowest distance travelled, these changes successfully discouraged the code from generating wide roads in the city center, and significantly reduced the number of twists and turns in wide roads (although there are still various problems left to fix with wide roads).</p><p>Later on, beyond the MK 1 city generator, a problem was also identified where wide roads were being placed next to small city blocks - in fact, the roads were so wide that they were taking over the entire surface of the block (or more). Despite choosing a minimum <tt>cblock</tt> size that should avoid this, this situation is still possible due to the city block placement code being unable to guarantee that overly-small blocks won't be generated. To counter this, the <tt>edge</tt> creation function identifies when the edge is next to a too-small <tt>cblock</tt> and sets a flag in the edge (actually just changing its <tt>type</tt> it to <tt>SURFTYPE_PATH</tt>). Then the road weighting algorithm detects when a <tt>SURFTYPE_PATH</tt> edge is being inserted as part of the route, and adds a penalty of 2 to the route length, to discourage use of such paths and thus reduce the chances of wide roads being placed there.</p><p>Another post-MK 1 addition was a post-processing stage. Once the road widths have been calculated, any roads which overlap the map edge are forcibly reduced to paths, and any roads which are too wide for the <tt>cblock</tt> they are next to will be reduced in width until they no longer overlap the center of the <tt>cblock</tt> (This is in addition to the much gentler tweak where 2 is added to path lengths). Also it was observed that maps frequently contained unrealistically short sections of wide road (often only one <tt>edge</tt> long), so to combat this another processing step was added where any wide roads that are one <tt>edge</tt> long will be reduced in width.<h3>Road and building painting</h3><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:240px;float:right;"><a href="/news/images/dream/4_fig5.jpg" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/4_fig5sm.jpg"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 5</strong><br>Ugly road/building painting from the MK 1 generator (Click for larger)</p></div>Road and building painting in the MK 1 generator was very simple. Buildings were just large rectangular structures placed inside <tt>cblocks</tt> (preferably avodiing placing them ontop of roads, although that was often not the case), and roads were painted using a semi-intelligent algorithm designed to correctly place road markings (although it also failed rather poorly).</p><p>The only noteworthy feature of the MK 1 road and building painting was the use of the <tt>canvas</tt> system - although I've deliberately glossed over the structure of the final map representation, it's based around a simple compression system that doesn't lend itself well to modification. As a work around the <tt>canvas</tt> system was introduced, which allows sections of the map to be extracted in an uncompressed form, manipulated by the road/building painting code (including functions for rotating the <tt>canvas</tt> in 90 degree increments), and then inserted back into the map in its original position. Although the current implementation results in some redundant data being left behind in the compressed map, the canvas system has greatly simplified the task of generating the world.<h3>Next time...</h3><p>Next time I'll be taking a look at the stages added in the MK 2 generator, and any improvements made to existing stages which haven't been discussed above. In particular I'll go into detail about the method used to paint the road navigation flags, and into more detail about how the road and building painting works using its system of surface and building definitions.</p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1214.html">No comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Fri, 28 Nov 2008 12:00:00 GMT</pubDate>
  </item>
  <item>
   <title>Phaethon Soundtrack</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1212.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1212.html</guid>
   <description>You may have spotted in the forums that Dan Wilson has released the soundtrack from hit game Phaethon in MP3 format. Well, we now have the whole lot archived in downloads section!</description>
   <content:encoded>
    <![CDATA[
    <img src="http://www.acornarcade.com/downloads/_images/Phaethon_Sound_Track.jpg" align="right" width="160" height="128" alt="Phaeton" hspace="5" />You may have spotted in the <a href="http://www.iconbar.com/forums/viewthread.php?threadid=10933#108403">forums</a> that <a href="http://www.last.fm/music/D.A.Wilson">Dan Wilson</a> has released the soundtrack from hit game <a href="http://www.last.fm/music/D.A.Wilson/!Phaethon+Game+Sound+Track">Phaethon in MP3 format</a>. Well, we now have the whole lot archived in <a href="/downloads/">downloads</a> section!</p><p><a href="http://www.acornarcade.com/downloads/Phaethon_Sound_Track.zip">Download file Phaethon_Sound_Track.zip (59803K)</a></p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1212.html">No comments in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Sun, 28 Sep 2008 07:35:00 GMT</pubDate>
  </item>
  <item>
   <title>Building the Dream 3 - Random map generators, redux</title>
   <link>http://www.acornarcade.co.uk/comments/rss/news1211.html</link>
   <guid isPermaLink="true">http://www.acornarcade.co.uk/comments/rss/news1211.html</guid>
   <description>After writing my first article about random map generators, I said I was going to write a city generator. Well now I have, and I'm here to tell you about it over the course of the next few Building the Dream articles.Blow your own trumpet much?</description>
   <content:encoded>
    <![CDATA[
    <img src="/news/images/dream/logo.png" align="right" hspace="2" vspace="2">After writing my <a href="/articles/Random_map_generators/index1114.html" target="_blank">first article about random map generators</a>, I said I was going to write a city generator. Well now I have, and I'm here to tell you about it over the course of the next few <i>Building the Dream</i> articles.<h3>Blow your own trumpet much?</h3><p>Although this article could just be dismissed as me blowing my own trumpet, I'm hoping that it will serve a somewhat more useful purpose. Before, during, and after working on the map generator I've searched the Internet for examples of similar generators and failed to find any. Sure, there are odd bits and pieces - descriptions of simpler generators that have given me ideas on some techniques to use, or <a href="http://kotaku.com/352086/new-introversion-game-will-spawn-cities-like-a-god" target="_blank">screenshots of sexy work-in-progress realtime generators</a>, but no actual algorithms or code samples from generators that come close to the required complexity of my generator.</p><p>So hopefully this article will become a useful reference point for anyone else wanting to undertake the task of writing a city generator, whether they're targeting a grid-based world representation like mine or a vector-based one.</p><p>Apart from discussing the algorithms used in the generator (and why they're used) I'll also talk about the data structures that are used - so even if you're not interested in random map generators you should be able to find plenty of examples of uses for the data structures <a href="/articles/Building_the_Dream_1_-_Container_data_structures/index1162.html" target="_blank">covered in the first Building the Dream article</a>, as requested quite some time ago.</p><p> <h3>Why random?</h3><p>This is the first question I asked myself - and the first question you should ask yourself if you're planning a random map generator (or any other kind of procedural content, really).<div style="border:2px solid #aaf;margin:2px;padding:0;width:171px;float:right;"><a href="/news/images/dream/3_fig1.png" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/3_fig1sm.jpg"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 1</strong><br>The Vice City map from GTA 1 - would you want to create a map as large and detailed as that? (Click for larger)</p></div>For me, the answer was fairly simple. <a href="http://www.phlamethrower.co.uk/riscos/deathdawn.php" target="_blank">DeathDawn</a> development had reached the limits of what the diminutive test map could offer. If I wanted to continue working, I had to create a new, full-size map for use in the game. I could either create the map by hand (after first writing a map editor), or get a random map generator to create it for me.</p><p>Although writing a map editor would probably take less time and effort than writing a map generator, I decided to go down the generator route. This is because I've tried creating a city by hand before, for GTA 1, and know that it's a lot of hard work. I'd be constantly scrutinising the map, wondering if two adjacent buildings are too similar to each other, or whether the road layout of the map feels right, or whether there's too much or too little detail in a certain area. And every time I need a new unique building for a mission I'd have to go back and rip an existing generic building out - potentially changing the layout of large areas of the map in order to make it fit correctly. So although writing an editor would be quick and easy, creating the maps would likely be not.</p><p>However a map generator, although it would take a certain amount of time and effort to get working right, could potentially spawn millions of detailed maps just at the click of a button, with minimal effort on my part to feed the generator with input parameters. This would be particularly useful since at the time I started I also had no idea exactly how many maps I wanted the game to have.</p><p>As an added bonus, writing a random map generator would also be a hell of a lot more interesting than a boring old level editor.<h3>The goal</h3><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:250px;float:right;"><a href="/news/images/dream/3_fig2.jpg" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/3_fig2sm.jpg"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 2</strong><br>Liberty City from GTA 1, rendered in full 3D with the Junction 25 editor. (Click for larger)</p></div>The goal of the map generator is to create city maps for DeathDawn. But how big do they need to be, and what format should they be in?</p><p>In the interests of keeping things simple and not reinventing the wheel, the DeathDawn map structure is based around that of GTA 1. GTA 1 was capable of providing large cities (about 1km square) to the player, using under 500K of storage for the map itself. Each city consisted of a set of cubes arranged in a 256x256x6 grid. In real-world terms the length of the side of each cube is around 4m (or at least that's the length I've based DeathDawn around). The cubes were fairly limited in what they could do - you could specify the textures of the 5 visible sides, and the slope of the top surface - but that's about it as far as architectural details go. In addition to the visible features of the map there were also certain invisible features - such as the content type of the block (solid, air, or water), and how the AI should behave (whether it's pavement and should have pedestrians walking on it, or whether it's road and should have cars drive along it - and in which direction). Uncompressed this data could easily be 6 or more megabytes in size, but by relying on the fact that most blocks are identical, and many vertical stacks of blocks are identical, the size can easily be reduced to under 500K, leaving much more space for textures and sound effects.</p><p>Although DeathDawn's map format is slightly more advanced than that of GTA 1, the goals are pretty much the same - for the map generator to produce a map typically 256x256 block-stacks in size, with as much building detail as possible, and with the right AI flags to allow for pedestrians and cars to spawn and find their way around the map. The generator should also be capable of producing any secondary data needed - such as the locations of traffic lights, train tracks, and the territories of the different facitons. It should also be able to add specific buildings to the map at the demand of the mission script, so that missions can use unique buildings if they want.<h3>Evolutionary development</h3><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:240px;float:right;"><a href="/news/images/dream/3_fig3.jpg" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/3_fig3sm.jpg"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 3</strong><br>Sample output of the MK 1 generator (Click for larger)</p></div>The map generator has gone through roughly three distinct stages of development. The first stage (the MK 1 generator) was capable of placing roads and buildings, as well as splitting the map into different zones (The zone information is used to dictate which faction owns the territory, as well as provide place names for the player as he drives around). But the buildings were just simple textured boxes, and the roads were buggy - apart from visual problems (bad road markings at intersections) there were also situations where the navigation flags the AI uses had been placed wrong, resulting in cars driving off the road and onto the pavement or into walls. The generator was also severely limited, with no support for extra city features like hills, bridges, train tracks, or traffic lights. There was also no system in place to allow for mission-specific buildings to be added.</p><p>The MK 2 generator was designed as a partial restructuring, partial rewrite of the MK 1 generator, in order to solve all of the major bugs as well as provide scope for the addition of new features - such as hills, bridges, train tracks, and the mission buildings. Although the MK 2 generator managed to fulfil most of these goals, several design flaws became apparent during its implementation, the most important of which was that there was no way of guaranteeing that the mission buildings that were requested actually made it into the map.</p><p>And so the MK 3 generator was devised - a reordering of the stages the MK 2 generator goes through, in order to ensure as best as possible that the mission buildings will actually be placed. Plans are also being made to improve the MK 3 generator further, in particular to improve the level of detail and placement of regular buildings.</p><p>Note that the DeathDawn source code currently available on my site contains the source for the MK 2 version of the generator; however by the time this set of map generator articles is complete I'm planning on having the latest version available for your viewing (dis)pleasure.<h3>Overview</h3><p><div style="border:2px solid #aaf;margin:2px;padding:0;width:228px;float:right;"><a href="/news/images/dream/3_fig4.png" target="_blank"><img style="display:block;" border=0 src="/news/images/dream/3_fig4sm.jpg"></a><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 4</strong><br>Sample output of the current MK 3 generator (Click for larger)</p></div>The generator, as it currently stands, performs the following operations, in the order detailed below. Each article will be covering one or more of the stages.<ol><li><b>Zoning #1</b>. This stage splits the empty map into zones, and assigns each zone a style, dependent upon which factions have been chosen to inhabit the map. The size of each zone is determined based upon how many mission buildings must be spawned there (and how large they are), in an attempt to ensure that enough space is available when it comes to placing them.</li><li><b>City block placement</b>. This fills the map with a series of rectangles, in a grid-like pattern. Each rectangle will later contain a building, and the edges of the rectangles will become roads. The zone location data that was generated in the first stage is used to apply different road and building styles to each city block.</li><li><b>Edge and node linking</b>. This doesn't add any new features to the map; it's just a housekeeping stage to correctly link together all the structures created by the city block stage.</li><li><b>Road weighting</b>. This stage decides how wide each road should be, by simulating a large number of trips through the city using an algorithm similar to the one a real-world computer route planner would use. After the trips have been simulated, the most-used roads will be chosen to be the widest roads (i.e. motorways), and the least-used will be downgraded to footpaths.</li><li><b>Zoning #2</b>. This stage examines the map to find the true size and shape of each zone (the earlier zoning stage just gives estimated bounds). It also assigns names to each zone, which will be seen by the player as he drives around the city.</li><li><b>Mission building placement</b>. Using the city block and zone information generated in the previous stages, this stage searches for suitable locations to place the mission script buildings that have been demanded by the mission script.</li><li><b>Layer splitting</b>. Added in the MK 2 generator, layers allow the generator to support hills, by storing the data for different altitudes in different structures. The current layer splitting code merely splits the map from one layer into two, by randomly placing hills throughout the map and moving all the buildings that lie inside a hill up onto the second layer. Eventually the layering code may be expanded to allow for more complex structures (notably bridges), or it may be discarded altogether in favour of a more streamlined approach.</li><li><b>Road prepainting</b>. The final map structure, as used by the game, is wholly incompatible with the data structures used by the generator. The map painting (and pre-painting) stages are therefore concerned with translating the map generator data into the final map data structure. In the case of road pre-painting, this involves marking into a temporary 2D array the location of each road.</li><li><b>Road and building painting</b>. This is a fairly complex stage. Not only does it paint each building into the main 3D map structure, but it also paints the surrounding road and ground blocks. In particular it contains code for placing the correct road textures on the surface of each block, as well as the navigation flags used by the AI.</li><li><b>Hill side painting</b>. A more correct name for this stage may be 'cliff face painting'; it involves a brute-force examination of the map to look for gaps in the joins between the upper and lower layers of the map, and places wall textures at the appropriate places to ensure that the player can't see through to the void underneath the map.</li><li><b>Traffic light placement</b>. Now that all the roads and buildings have been painted, each road intersection is examined to see if it is suitable for hosting a set of traffic lights. Although this stage could probably be performed before the road and building painting, it's easier to do it after, as it provides a much more robust method of verifying that the traffic lights won't be placed incorrectly.</li><li><b>Train track placement</b>. The map generator is capable of generating elevated train tracks for inner-city and inter-city rail travel. Similar to the hill side and traffic light placement code, a brute-force approach is used to examine the finished map, to ensure that the train track weaves around buildings instead of ploughing straight through them.</li></ol><h3>In detail</h3><p>For this first article about the map generator, I'm going to be talking solely about the data structures that are used. Understanding the data structures is vital to understanding the flow of the generator as a whole. Later articles will go into more detail about each stage of the map generation.</p><p>If you're put off by all these wordy descriptions, don't worry, because there's a few diagrams at the end showing how everything fits together.<h4>The layer structure</h4><p>First off there is the layer structure. This was introduced in the MK 2 generator as a way of tieing together various variables and structures that the generator uses.<div style="float: right;width:300px;border:2px solid #aaf;margin:2px;padding:0;"><small><b>Aside: Why use a linked list and an array at the same time?</b></p><p>Throughout the code there are two basic ways in which the collection of <tt>cblock</tt>s are accessed:<ol><li>Group access - an identical operation needs to be performed on all <tt>cblock</tt>s.</li><li>Spatial queries - given a certain point in the map, the <tt>cblock</tt> that contains that point needs to be discovered.</li></ol>As with most computational problems there are two solutions - one that's optimised for speed and one that's optimised for memory usage. At the moment I'm currently more interested in speed (and ease of implementation) than memory usage, so I went with the simple approach of a linked list for group access to <tt>cblock</tt>s and a big array of pointers for spatial access. In the future I may switch to a different approach, such as an <a href="http://en.wikipedia.org/wiki/R-tree" target="_blank">R-tree</a>, which is able to provide fast group and spatial access to most types of N-dimensional data, without incurring large memory costs.</small></div><br /><code>typedef struct _layer {<br />  rect r;<br />  int z;<br />  gdll *cblocks;<br />  cblock **cbmap;<br />  fbll *corners;<br />  int *surfmap;<br />} layer;</code><ul><li>The <tt>r</tt> member of the structure, a '<tt>rect</tt>', contains the minimum and maximum X and Y bounds of the layer, measured in blocks. Currently this is just set to the bounds of the map, but in the future it may be used to limit development to certain areas (e.g. if there is water at the edge of the map the layer would be restricted to just the island of land in the middle).</li><li>The <tt>z</tt> member gives the layer its height above ground, measured in blocks.</li><li>The <tt>cblocks</tt> member is a pointer to a <tt>gdll</tt> - a linked list structure that I often use in my code to make handling linked lists slightly easier. The linked list will contain a list of all the city blocks that are contained in the layer.</li><li>The <tt>cbmap</tt> member points to a 2D array of pointers to <tt>cblock</tt>s, allowing rapid lookup of which city block falls on which map block. The <tt>cblock</tt>s pointed to by the <tt>cbmap</tt> are the same <tt>cblock</tt>s that are contained in the <tt>gdll</tt> list.</li><li>The <tt>corners</tt> member is another of my linked list structures, but a different type - a frame-based linked list, which is basically just a linked list of arrays. A frame-based linked list allows you to quickly and easily look up the Nth element of the list, at the cost of much slower insertion/removal of items in the middle of the list. In the case of the map generator, this speed trade off was deemed worthwhile to ensure the speedy operation of the road weighting algorithm. As the name suggests, the data contained in the <tt>corners</tt> linked list is a list of all the corners of the city blocks; or more correctly, a list of all the end points of the edges which join city blocks. More about this later.</li><li>The <tt>surfmap</tt> member is similar to the <tt>cbmap</tt>, in that it points to a 2D array. But instead of indicating which city block each location belongs to, it instead indicates which surface type (road, pavement, grass, water, etc.) each location is. This is mainly used by the road painting code to ensure that roads aren't painted where they shouldn't be. Although the final map structure contains similar data, it works out easier for the map generator to store it in a temporary array as well.</li></ul><h4>The cblock structure</h4><p>Each <tt>cblock</tt> represents a city block; i.e. a plot of land with one or more buildings inside it, and surrounded by pavements and roads. Currently only one building is placed in each cblock, but this will likely change with the MK 3+ generator - take a look at figure 4 and you'll see how much empty space there currently is inside each city block.</p><p><code>typedef struct _cblock {<br />  rect r;<br />  rect br;<br />  gdll *neighbours;<br />  gdll_item *i;<br />  zonedef *z;<br />  struct _layer *l;<br />  builddef *b;<br />  int msi;<br />} cblock;</code><ul><li>The <tt>r</tt> member provides the bounding box of the block. This box stretches from the middle lane of the road one one side to the middle lane of the road on the other side. This represents the maximal area that the painting stages will paint grass or pavement into, to fill in the gaps between the building and the road.</li><li>The <tt>br</tt> is another bounding box, but this time provides the bounding box of the building that sits inside the block. This is computed by looking at the widths of the roads that surround the block.</li><li><tt>neighbours</tt> is a linked list of <tt>edge</tt>s that surround the block. <tt>edge</tt> structures are created whenever two <tt>cblock</tt>s touch, and are used to generate the roads and paths that run through the city.</li><li><tt>z</tt> points to a <tt>zonedef</tt> - a structure that dictates which building, pavement and road styles to use when painting the <tt>cblock</tt>. The <tt>z</tt> field is also used by the 'Zoning #2' stage to calculate the true bounds of each of the named map zones and faction territories.</li><li><tt>l</tt> points to the <tt>layer</tt> that the city block belongs to. During map generation certain information (most notably the Z coordinate) of the city block is needed, so a reference back to the parent layer is the easiest way of providing that information.</li><li><tt>b</tt> points to a <tt>builddef</tt>, i.e. a building definition. It indicates the type of building that's been selected to spawn at the location. Currently this field is only used for the mission buildings; for all other city blocks a random building is selected at painting time, using the list given in the <tt>zonedef</tt>.</li><li>If a mission building is being used, the <tt>msi</tt> field will be set to the index in the master mission building list. If no mission building is being placed in this block then the index will be -1. The <tt>msi</tt> field is crucial to allow the building location to be fed back to the mission script.</li></ul><h4>Edges</h4><p>The <tt>edge</tt> structure is used to link neighbouring <tt>cblock</tt>s together, and dictates the locations of the roads and paths that run through the city.</p><p><code>typedef struct _edge {<br />  gdll_item *a,*b;<br />  corner *c,*d;<br />  int type;<br />  int weight;<br />  short clip,dlip;<br />} edge;</code><ul><li><tt>a</tt> and <tt>b</tt> are two <tt>gdll_item</tt> pointers; <tt>gdll_items</tt> are used to reference individual entries in <tt>gdll</tt> lists. There are two of them because the edge is shared between two <tt>cblock</tt>s, each of which has a different list of neighbouring <tt>edge</tt>s.</li><li><tt>c</tt> and <tt>d</tt> are two <tt>corner</tt> pointers, dictating the two end points of the edge.</li><li><tt>type</tt> is the type of edge - road, pavement, cliff, etc.</li><li><tt>weight</tt> has a dual meaning. During the road weighting stage it's a counter of how many times the edge has been used, and after the stage it's the number of lanes in the road (assuming it is a road).</li><li><tt>clip</tt> and <tt>dlip</tt> are the distances from <tt>c</tt> and <tt>d</tt> at which the straight part of the road exists; i.e. it's how large any crossroads or T-junctions are. This information is mostly redundant with information stored in the <tt>corner</tt>s themselves, but for the moment it stays where it is. <tt>short</tt>s are used to try and keep memory usage down, although in reality there are still many other memory optimisations I could apply if I wanted.</li></ul>Note that an <tt>edge</tt> can cross from one layer into another, e.g. to create the slope of a hillside or bridge. This is why there's no <tt>layer</tt> pointer in the edge, and each <tt>layer</tt> doesn't have a list of edges.<h4>Corners</h4><p>As their names suggest, corners are the places where edges meet.</p><p><code>typedef struct {<br />  struct _edge *edges[4];<br />  short x,y;<br />  int visited;<br />  short w,h;<br />  struct _layer *l;<br />  int type;<br />} corner;</code><ul><li><tt>edges</tt> is a small array listing the <tt>edge</tt>s that the corner is connected to. Since edges only run horizontally or vertically, there's no chance of there being more than 4 edges connected to a specific corner.</li><li><tt>x</tt> and <tt>y</tt> are the coordinates of the corner within the layer.</li><li><tt>visited</tt> is a flag used by the road weighting algorithm.</li><li><tt>w</tt> and <tt>h</tt> are the dimensions of the corner, in terms of the total number of lanes (map blocks).</li><li><tt>l</tt> is a reference to the layer that this <tt>corner</tt> belongs to.</li><li><tt>surftype</tt> is the surface type of the corner (road, pavement, etc.) This could be calculated just by looking at the surface types of the connected edges, but storing it locally helps keep things simple.</li></ul><h3>What?</h3><p>If all those data structures are confusing you, then perhaps these diagrams will help. Figure 5 shows how the different data structures fit together to represent different parts of the city. Figure 6 shows the actual relationships between the different structures, from the datas point of view (i.e. what pointers point to what).<div style="border:2px solid #aaf;margin:1em auto;padding:0;width:531px;"><img style="display:block;" border=0 src="/news/images/dream/3_fig5.png"><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 5</strong><br>How the data structures represent the city</p></div><div style="border:2px solid #aaf;margin:1em auto;padding:0;width:433px;"><img style="display:block;" border=0 src="/news/images/dream/3_fig6.png"><p style="background-color:#ccf;margin:0;border-top:2px solid #aaf; padding:0.5em 0.3em;"><strong>Figure 6</strong><br>How the data structures are related in code</p></div><h3>Next time...</h3><p>The next article, due shortly after judgement day, will take a look at what constituted the MK 1 map generator - i.e. the city block placement, edge and node linking, and road weighting stages of the generator. If there's space I may also describe the algorithm used to paint the road navigation flags for the intersections.</p><p><a href="http://www.acornarcade.co.uk/comments/rss/news1211.html">1 comment in forum</a>

    ]]>
   </content:encoded>
   <pubDate>Sat, 23 Aug 2008 11:00:00 GMT</pubDate>
  </item>

  </channel>
</rss>
