Paul's profilePaul's spacePhotosBlogListsMore Tools Help

Blog


    January 18

    Observations of games at the weekend

    So I’ve set up this Wordpress blog.  I think I’m going to try and update it on the weekend… weekdays tend to be a little unpredictable as far as free time goes.  Right now I should be able to take advantage of not being in crunch, so the hours I’m doing aren’t always hugely outside of core hours.  My Windows Live blog doesn’t give me satisfying stats… I think I may let that go fallow.  Facebook is where I update for just friends and family – this I want to try and keep for developer thoughts.

    Civilization Revolution

    Played quite a bit of this weekend and last.  It is a really good turn based strategy game, and I have had fun playing it.  There are a ton of cool touches that have made me laugh and smile.  The advisors pushing each other out of the way when you skip them before they finish.  There are some funny gifts you get given now and again like dancing bears, jugglers and dancers.  They have made use out of a collection mechanic by having a big museum with busts of various leaders, pivotal people you meet through the games you play, and models of the wonders that you have built over the games you have played.

    There is a slight curve on the user interface that I’m not sure I’m all the way through yet – and perhaps that’s why when I jacked up the difficulty again this morning and tried another scenario that I started to see the games numbers.  You know how in the Matrix when Neo starts seeing the world around him as green text flying around?  Well certain predictable patterns that were there in previous levels are not… and the virtual dice would seem to roll against you a little more often.  Perhaps I see this because I’m a developer and know what I’m looking out for.  After all artificial intelligence in games is more about creating a believable illusion of being smart, then academics actually trying to make something smart.

    I will go back to it no doubt, the game has unbelievable depth.  If you want to get a kid interested in history this would be a game to give them to play… it actually has historical documentation, pictures and even media clips of the various resources and people that make up the game.

    Fable II – Knothole Island Expansion Pack

    Fable II is a great game, go buy it.  ;0)  Seriously, despite being part of the team and having played the game in the various states it has been in – to still be wowed and awed by it even after it stole so many unpaid hours of my life shows that the game must be good.

    Danni, my wife, loves the game.  She loves the controls, the art, the style and humour of the game.  She finds the menu a little fiddle and because she plays on my gamertag sometimes has to have the orbs and stuff switched off, but apart from that it has been a game that turned the head of a casual / Sims 2 player to a role playing game… which is saying something.  The people who have complained about the lack of depth in reviews just plain didn’t go looking for it.

    She is loving the island so far, apart from the dexterity challenges (flit-switch squash, timed run through flames, etc).  I guess the pack is probably aimed more at the hardcore – I think I could do the challenges and find them more fun then frustrating.  The ones who are most likely to know how to download content, have a hard drive, etc I guess are the hardcore anyway.  The extra places to visit and other content like the new potions and enemy variants are cool for all though.  It should be enough to make you want to keep Fable II and not trade it in for a bit longer!

    Geometry Wars I

    Still on the original Geometry Wars… the other day something in my head clicked and I managed to push through a previous upper score boundary.  That game is awesome, easy to pick up and hard to master.  The whole pushing A button a bunch of times to try again is genius for an arcade game like that.  Still looks beautiful today, without a doubt a modern classic.

    October 22

    Not Friday Friday Entry

    Looks like I’m missed the beat again.  Lots of exciting things, on Thursday 16th the Champagne flowed freely at the official launch party for Lionhead & Fable II staff only.  I was on a coach that got lost, but when we got there fun was had, awards given, and Peter Molyneux gave a very emotional speech.  Actors played characters wandering through the party and luckily at the end of it all my wife came and picked me up at some silly hour in the morning.  I’m a very lucky guy :-)

    Friday was a slow day as most people either had the day off or were recovering a bit from the night before.

    Monday many, many reviews come out… most of them glowing and between 9/10 and 10/10.  Congrats Fable II team, I am so proud to be in the credits with you guys it’s untrue!  It has been a life aspiration to be credited on a successful game… and now I have been. :-)

    http://www.metacritic.com/games/platforms/xbox360/fable2?q=fable%20II is a good place to start, but here’s a breakdown here (from 21st October)

    PC World

    100/100                                             (http://www.pcworld.com/article/152527/fable_ii_is_peter_molyneuxs_smartest_game_yet.html)

    Eurogamer

    10/10                                                  (http://www.eurogamer.net/article.php?article_id=263778)

    XboxLife              

    10/10                                                  (http://www.xboxlife.dk/review/285/Fable-2.html)

    Snappy Gamer

    5/5                                                       (http://www.snappygamer.com/2008/10/20/fable-ii-review-xbox-360/)

    Xplay

    5/5                                                       (http://www.g4tv.com/xplay/blog/index.html?t=690277#690277)

    Xbox RPG

    9.6/10                                                 (http://xbox360.rpgsite.net/reviews/122/101.html)

    OXM US                              

    9.5/10                                                 (Magazine)

    GamePlayer

    95/100                                                 (http://www.gameplayer.com.au/gp_documents/081020FableIIREVIEW.aspx)

    ABC

    9.5/10                                                (http://www.gameplayer.com.au/gp_documents/081020FableIIREVIEW.aspx)

    Planet Xbox 360               

    9.5/10                                                (http://www.planetxbox360.com/article_4881/Fable_2_-_Review/2)

    IGNUK

    9.5/10                                                (http://xbox360.ign.com/articles/921/921516p1.html)

    GoodGame 1

    9.5/10                                                (http://www.abc.net.au/tv/goodgame/default.htm)

    C&VG

    9.2/10                                                (http://www.computerandvideogames.com/article.php?id=199747)

    IGN Australia

    9.2/10                                                 (http://xbox360.ign.com/articles/921/921857p3.html)

    GCHD

    9/10                                                    (http://gamecinemahd.com/article/2008/10/20/fable_ii_review)

    Jeux Video

    18 / 20                                                (http://www.jeuxvideo.com/articles/0000/00009829-fable-ii-test.htm)

    Edge

    9/10                                                    (Magazine)

    Meristation

    9/10                                                    (http://www.meristation.com/v3/des_analisis.php?id=cw48f7b92e9fc7e&idj=cw436fb572a9b54&pic=360)

    Gamesradar

    9/10                                                    (http://www.gamesradar.com/xbox360/fable-ii/review/fable-ii/a-2008101714187490010/g-20061010115312575037)

    Gamespy

    4.5/5                                                   (http://xbox360.gamespy.com/xbox-360/fable-2/921728p1.html)

    Cheat Code Central

    4.5/5                                                   (http://www.cheatcc.com/xbox360/rev/fable2review.html)

    Consol

    90/100                                                (http://www.consol.at/Reviews.29+M54fd8726277.0.html)

    GamingXP                          

    90/100                                                (http://www.gamingxp.com/bericht-2423-kategorie-4_5-fable_ii.htm)

    Videogamer

    9/10                                                    (http://www.videogamer.com/xbox360/fable_2/review.html)

    Kikizo

    9/10                                                    (http://games.kikizo.com/reviews/xbox360/fable-2-p1.asp)

    GoodGame 2

    9/10                                                    (http://www.abc.net.au/tv/goodgame/default.htm)

    GameCinema

    9/10                                                    (http://gamecinemahd.com/article/2008/10/20/fable_ii_review)

    GameReactor DK

    9/10                                                    (http://gamereactor.dk/anmeldelser/71468/Fable+2/)

    Team Xbox                        

    8.9/10                                                 (http://reviews.teamxbox.com/xbox-360/1598/Fable-II/p1/)

    GamePro

    88/100                                               (http://www.gamepro.de/test/spiele/xbox360/rollenspiel/fable_2_test/1308462/fable_2_test.html)

    Play.tm               

    88/100                                                (http://play.tm/review/21902/fable-2/)

    IGN US

    8.8/10                                                 (http://xbox360.ign.com/articles/921/921508p1.html)

    Game Revolution

    B+ (85%)                                           (http://www.gamerevolution.com/review/xbox360/fable_2)

    Gamespot

    8.5/10                                                 (http://www.gamespot.com/xbox360/rpg/fable2/review.html?tag=topslot;thumb;1)

    OXM UK

    8/10                                                    (http://www.oxm.co.uk/article.php?id=6641)

    GameReactor Sweden

    8/10                                                    (http://gamereactor.se/recensioner/15646/Fable+II/)

    GameReactor Norway

    8/10                                                    (http://gamereactor.no/anmeldelser/115329/Fable+2/?sid=6bd68b4307e783d9b2a02bd08405ffb7)

    DailyGame

    7.8/10                                                 (http://www.dailygame.net/news/archives/008448.php)

    A few more goodbyes this week, Martin (awesome engine coder), Mark (great scripter) and Neil (thank him for co-op in Fable II).  Work continues a pace on the other project’s editor, gutting FablEd for bits and trying to get the new one as lean and focused as possible.  Refactoring like this the interest meter can go between refactoring zen and frustrating chases down seemingly endless rabbit holes.

    Landlord did quarterly visit yesterday, and apparently wants to charge us for a gardener to cut the rear garden hedge to his specifications.  To be honest that hedge has never been that great, so it’s a bit of a cheek.  Still there might be a fully tiled bathroom on the way so best to keep things cordial.  We’ll see what we can do for Friday I guess.

    Yesterday evening I actually got to put a retail Fable II copy in my machine.  Peter said everyone could have the afternoon off to go play after we got our copies… I have things I had to do for the other team I’m still on but managed to leave a little early.  Danni finally got to see what the late nights and weekend were all about.  She seems impressed so far :-)

    October 13

    Friday Entry

    … on a Monday… whoops…

    Early on the week I sat with Dave B for a little while going through his physics test bed he had made in C# to simulate hair and help him out with some flickering on the display… later on the week I revisited him and saw some of the stuff working in the Fable II test bed, all very interesting!

    James left on Thursday… he was one of CTG and I think the first person to buy me a pint at lunch!  He will be sorely missed by the team, but I am sure will infuse some of that Lionhead magic in to the company he has gone to in his new position :-)

    The Fable II TV ad is fab!  http://videogames.yahoo.com/events/fable-ii/fable-ii-trailer/1251513 

    Also I am on the telly in America (G4TV)… for like two seconds in the background, specifically on this one: http://www.g4tv.com/xplay/previews/29112/Fable_II_The_Art_Direction.html (30 seconds in) – this is the entire series of shows:

    1. http://www.g4tv.com/xplay/previews/29108/Fable_II_Molyneuxs_Game_Philosophy.html
    2. http://www.g4tv.com/xplay/previews/29113/Fable_II_A_Dogs_Life.html
    3. http://www.g4tv.com/xplay/previews/29109/Fable_II_The_Story.html
    4. http://www.g4tv.com/xplay/previews/29110/Fable_II_The_Gameplay.html
    5. http://www.g4tv.com/xplay/previews/29111/Fable_II_The_World.html
    6. http://www.g4tv.com/xplay/previews/29112/Fable_II_The_Art_Direction.html

    Friday I ended up staying late (by my own choice mind you) to move my stuff up to a new desk on the second floor… the pillars are blue here ;-)

    Created a couple of different versions of the editor that will be released sometime on Monday.

    October 03

    The Friday Entry

    Monday… unexpected announcement about Fable II Live.  Move along shall we?

    Tuesday played some Little Big Planet in the Lionhead Cafe.  Before 10am messed with it with a couple of other devs – then at the end of lunch I started messing with it some more and Peter Molyneux came through and asked for the pad.   So I gave it up and watched him play and we made comments about what we thought was good (art) and bad (controls) about the game and then he gave me the pad back… and I managed to get myself killed by messing up a jump that involved three blocks, a movable block and some ghosts.  D’oh! 

    There is no doubt the Little Big Planet is a work of art but everything in it a 360 could do.  The poppet interface is great, though a few times people got a bit lost about what to do (flipping pages to find techniques, etc).  I got frustrated with the ghost thing – a couple of times the arms seemed to get me but didn’t kill me, and other times I didn’t feel like I was close and I got killed – I think it’s that poisonous gas thing that trails behind the ghosts that was confusing.  The whole having to jump to move towards / away platforms in 2.5d I think I could get used too though again not 100% intuitive.  Not dragging blocks towards and away from the screen I’m guessing is a game-play decision made on purpose – not sure if I agree with it but I guess it opens up different puzzles.

    The emoting in Little Big Planet, along with the art, would be the thing that stands out for me.  I’ve not created any levels with it, but I would wager that would be pretty fun to do.  Little Big Planet makes me want a PS3… but I’m not going to buy one for just one game! ;-)

    Wednesday managed to make it to yoga at lunch, and get a new version of the editor together and ready to test and deploy on Thursday.

    Thursday released new version of editor.  Microsoft Adjusts Contents & Pricing for Fable II Collector's Edition Gutted… :-(.  Had a great talk with Dan D and Matt H about university, games distribution and narrative at lunch.  Started to look at fog editing within FablEd but engine side had a fix.  Thinking about documenting Height-fields some more.  Tried out some more networking on Facebook – hope the requests work out!

    Friday figured out that a function call had some expectations… probably down to it’s name… that people were ignoring when calling it (despite the <summary/> block saying otherwise).  Was going to fix those instances… but instead figured it would be better to just have the function live up to the expectation.  One has to be pragmatic about such things ;-)  New version of editor ready to release on Monday.  Actually *held* a normal version of Fable II in my hands and skim read the manual at the team meeting when a few copies were being passed around today.  Finally PM accepted my Facebook friend request… w00t!  Oh and Kostas is now a Fable II Widows party admin – which will hopefully help with the recruitment process :-)

    September 28

    The Friday Entry

    Another week in review!  This week I have been bug fixing the editor and deploying new builds.  In particular improving the visualisation of the ranges of "Creature Generators"... which as the name indicates spawn creatures in to a level.

    More Fable II in the press this week, I hope the buzz increases... there's Forza 2 Fable II paint job, and a real NASCAR going out soon with Fable II all over it. http://www.joey-logano.org/nationwide/gamestop-fable-ii-paint-scheme.html

    Kev has been writing a few interesting blog entries about .Net 3.0 stuff... check it out here: http://kevmooresblog.blogspot.com/

    I figured out that a bad 512meg memory bank in the Home Server I've got running was causing problems, not before I seem to have loose the ability to restore it back to how it was... because I didn't work out what the problem was until I was already in the middle of reinstalling it because I thought it was the software.  Whoops.  So I don't think I've lost anything terribly important, but I would like to figure out how to restore the laptop backups.  I did mail the internal WHS discussion mail group but have not got any joy from them yet.

    Played a little 4 player Castle Crashers on Wednesday at lunch (forgot about yoga... doh) - completely different game couch co-op to single player.  It's amazing how much better some games are when you play together.

    Thursday I was wandering around the Studio and noticed a really interesting locomotion prototype being demoed on someone's screen.  It is the amazing the research and development that goes around the place... even the prototypes look futuristic and cool.  I remember seeing Adams combat prototype before it was integrated in to Fable II and being blown away.  The creativity that blossoms around the place is so energising and inspiring to be around!

    Friday I spent trying to track down the real cause to a crash bug in the editor.

    Sorry this Friday Entry was late... I draft it over the week but for whatever reason didn't get to publish it until today!  Bad Paul, Bad!  Still at least I managed to get a Lionhead Blog posted: http://community.lionhead.com/blogs/lionhead_ctg/archive/2008/09/26/3080599.aspx

    September 20

    The Friday Entry

    Another week in review!  A friend is leaving Lionhead to pastures new stateside, and his party is on Saturday.  During this week I have worked a little on Fable II and testing it, but most of my time has been spent on the tools and thinking about the future of the Lionhead Text System.  In the news Fable II has been getting good amounts of buzz thanks to the efforts of the pr and community teams.  Dev news, in .Net land Shawn Burke announced that new controls are coming, source and all, delivered in an agile way.  XNA Game Studio 3.0 Beta is out and ready for those who like to be on the bleeding edge to play with. 

    It is sad to see Neil go - he made an effort to make me feel welcome and part of the Lionhead family - which was great because when I first joined Danni was away in the States at a funeral and I was left to start the whole moving house thing.  It is an excellent opportunity he's got at the new place though.  That's the thing about the software industry... seems like you have to move between jobs (or at the very least departments / sites) to get on the next step of the career ladder.  I am sure it was a tough decision because I would wager there is nowhere else like Lionhead in the world, even within the wings of MGS - but the move is very understandable.  I am def looking forward to the party though, I'm sure it will be a blast!

    I don't think I should talk details about Fable II - although I am looking forward to having the opportunity to properly look at the tools bits of the LHTS when the dust settles some more.  There are a number of .Net technologies I think that could be applied to an improved version that would make the whole thing more accessible and the entire process more controlled.

    In other news, have started looking in to throwing an unofficial launch party for Fable II for partners, friends and alumni of the project.  It will be interesting to see if we (wife and I) can pull it off :-)

    Some Fable II links:

     

    XNA Game Studio 3.0 Beta has been released - here's the blog advisory :-)

    XNA Game Studio 3.0 Beta is GO!

    That's right! You can download it now! We'll be asking your help to put this baby through her paces as we lead up to the official release later this year. It is your input that makes us stronger, faster and better.

    Download XNA Game Studio 3.0 Beta at Launch Center

    If you do find any bugs or just have a suggestion on ways we can make XNA Game Studio 3.0 more awesome head over to Microsoft Connect to submit them to us.

    In case you missed Michael's post last week here is a list of the changes:

    Zune

    • Compatibility with the upcoming Zune 3.0 Firmware release. Please note that the XNA Game Studio 3.0 CTP will no longer work once you have upgraded your Zune device to the 3.0 firmware.
    • Improved deployment stability.
    • Support for Zune deployment on Windows Vista x64 Systems!
    • You can now use the Remote Performance Monitor for Zune games.

    Xbox 360

    • Xbox 360 project templates (You will not be able to develop on the Xbox 360 until our final release. We felt this was important to include so that you could get projects converted over and look at the system, even if you are not able to run the games, yet).
    • Support for the Big Button Pad.

    Framework & Visual Studio Features

    • Enumerate and play back media on your Windows computer or Xbox 360.
    • Simple sound effect support on Windows computers and Xbox 360.
    • Support for Rich Presence (lets friends know what’s going on in your game).
    • Support for Invites (ask your friends to join you in a multiplayer game) and Join Session In Progress (after you see what your friends are doing, you can join their current session with just a couple of button presses, even if that’s a different game to the one you are currently playing)
    • Compress your content and save space with the new content compression features!
    • ClickOnce packaging support for distributing your XNA Framework games on Windows.
    • Upgrade your project from XNA Game Studio 2.0 using the Project Upgrade Wizard!
    • Take screen captures of your game running on Zune through the XNA Game Studio Device Center.
    • Support for .NET language features like Linq
    • Create multiple content projects and leverage cross project synchronization in Visual Studio.
    FBX importer improvements: read materials containing multiple textures, and export custom shader materials directly out of Max or Maya.
    September 12

    The Friday Entry

    This week I have spent quite a bit of time playing the game.  Fable II is lots of fun to play - the customisation of is fun on its own.  Want to be a physically strong hero?  Sure.  Really spending your experience beyond a certain level turns you from toned to beefcake - perhaps not the look you want but it's a choice you make :-)

    A term I've heard bounded about in Lionhead for a function that write to memory not their own is "scribbler", which can be particularly tricky to track down.  I subscribe to a few development blogs, recently Cowboy Programming posted a blog titled Debugging Memory Corruption in Game Development - if you are interested in debugging unmanaged applications, games or not... it's a good article to read.

    I've not had time to mess around with Silverlight myself, but I enjoy reading about it and getting familiar with it.  Silverlight being a browser hosted platform that can run .Net stuff.  There are some excellent Flash games out there, and I have a feeling that Silverlight games are going to become more common.  Mike Snow has an awesome Silverlight blog with a game dev slant.  I think Flash and Silverlight probably give some developers a playground for decent ideas.  The last few evenings I've found myself making Fantastic Contraptions :-)

    Completely non-dev related, last night I watched a film called "The Freedom Writers" - pretty inspirational really.  Based on a true story, it is about how one teacher made a huge difference on a class of kids when the rest of the school system had more or less given up - to the point of getting two other jobs and giving up her personal life... though she just oozes positive energy.  Acting is really good throughout, and the extras on the dvd are interesting as the actual teacher is interviewed.

    Hopefully I'll get around to working on some XNA stuff over the weekend, though the house needs a good tidy before I can settle down and work on code.

    September 05

    Importance of Style... and when to let it go

    This body of this entry was written in April... but never made it out of my drafts.  I'm going to try again to keep a blog entry going at least once a week.  Perhaps every Friday would be good - with possible other extra entries through the week.  But I think every Friday would be a good goal.

    Gamefest 2008 notes are up here: http://www.xnagamefest.com/presentations08.htm

    The tools team has shrunk down in size as people are poached to help polish other parts of the game.  Right now I'm supporting the tools and working a bit on the game too.  At one point I was actually in charge of the tools team... though at that point the editor team was just me ;-)  Congrats to Sam who had another little girl and took some paterinity leave. He's back at work now and looking after his other baby... Concrete and the editor :-)

    I don't think I can blog much detail at the moment - I want to write something for the Lionhead blog but not sure what I *can* write about.  Or what might be interesting to the diverse community there.

    So my original draft follows below - a little essay on style...


    Style in code is a religious thing - something that makes perfect sense to you might look like an abomination to someone else.  Beauty truly is in the eye of the beholder.  Lets see...

    Do you like your local variables:

    • likeThis
    • LikeThis
    • like_this
    • Like_This

    Then of course you have the warts.  Lets say for class fields:

    • likeThis
    • _likeThis
    • m_likeThis
    • m_like_this
    • m_Like_This
    • m_pLikeThis

    Sometimes a standard mixes the above up to differentiate for use... so...

    • Local variables: are_like_this
    • Class variables: m_AreLikeThis
    • Read only / const: AreLikeThis
    • Properties: AreLikeThis
    • Functions: AreLikeThis(int parameters_like_this)

    Thing is *you* might be used to something else.  *You* might believe in something else.  Well time to suck it up :-)  I'm still guilty myself of lapsing against the established standard of a project sometimes, because of being used to something else... but as a developer you just want to write beautiful code, right?

    So lets make an analogy between a book and a code project.  Changing style per book (project), well it doesn't matter very much at all.  It does mean that developers moving from one project to another will accidentally (or otherwise) slip up though. Per paragraph (file), well I guess it's not so bad. Is it?

    Per sentence (function) changing style looks really bad

    So beautiful code probably has more to do with consistency of style applied rather then the style itself.  Spacing is less of an issue then naming, because of the glories of Control+K and Control+D in Visual Studio.  Of course that gets rid of tab aligned variable declarations where your equals is always x amount of spaces away from your value.  But who wants to maintain that anyway?  If you just set up a style in Visual Studio that can automatically be derived... the auto-formatting takes care of the rest for you.  This includes sticking braces on separate lines and taking out stray spaces from your parameter lists.  Or perhaps putting an opening brace on the same line as the function declaration. 

    I guess the standard I use at work is starting to come through as the standard I use by choice at home.  I'm kind of glad the braces go on separate lines here myself :-)

    May 07

    XNA announcement: XNA Game Studio 3.0 Community Technical Preview (CTP) now available

    XNA Game Studio, the technology that allows you to develop C# games on the PC, 360 and utilise Live has a new update.  Note how "Express" is now not affixed to the end :-)

    This preview release of XNA Game Studio 3.0 is now available through the XNA Creators Club Online site (http://creators.xna.com), with a final release scheduled for Christmas 2008.  Please download and test out the new stuff though, feedback is important to the team!

    Key points

    Features

    • The XNA Community Games Platform team has delivered on their promise to enable game development for Zune devices with the release of the XNA Game Studio 3.0 Community Technical Preview (CTP).  Some key features that are available in this release:
    • Create and deploy 2D games for all Zune v1 and v2 devices
    • Ability to support local ad-hoc wireless play with multiple Zunes.
    • Discoverability/access to user’s music – allowing the user to customize background soundtracks or create real-time visualizations
    • Improved sound effect API (drop sound files directly into the content pipeline).
    • Either Visual Studio 2008 Standard Edition and higher (C# language support must be installed), or Visual C# 2008 Express Edition are required to install and run the XNA Game Studio 3.0 CTP

    Limitations

    · Please note this current CTP does not enable Xbox 360 game development.  Only Windows and Zune are supported in this CTP.  If you want to build and deploy games for the Xbox 360, you must continue using XNA Game Studio 2.0 for now.

    · Visual Studio 2005 SKUs are not supported with XNA Game Studio 3.0 and beyond.  However, you do not need to uninstall Visual Studio 2005 or XNA Game Studio 2.0, as those products will work side-by-side with Visual Studio 2008 and XNA Game Studio 3.0 CTP.

    About today's announcement

    Today the XNA Community Games Platform team has delivered the first CTP of XNA Game Studio 3.0, enabling developers to build games for Zune.  XNA Game Studio 3.0 allows all game developers to create unique and imaginative games for the entire family of Zune media devices.  This feature gives game developers access to the majority of the XNA framework APIs while retaining a seamless sense of integration with the Zune media experience.  Using these tools, developers will have the capability to develop once for all three platforms: the Xbox 360, Windows, and Zune in the final release of XNA Game Studio 3.0.  Developers can write one game and target any platform, however, cross-platform networking between all three platforms is not supported. 

    Keeping with Zune media experience, the XNA Game Studio 3.0 CTP integration includes discoverable access to user’s non-DRM music – allowing the user to customize background soundtracks or create real-time visualizations.  In addition, the XNA Community Games Platform team has announced the ability to create networked games on Zunes using the built in ad-hoc wireless capabilities. 

    April 29

    Slightly obscure .Net - What does the ?? operator do?

    It's all to do with something introduced in .Net 2.0 called "Nullable Value Types".  I like that the shorthand declaration is like a question... I'm a bool?  Well that means this bool really has three states, true, false and not set.  That kind of thing is useful when dealing with databases, which can have null columns in a table.  Or perhaps there is an option for the user which is either true, false, or whatever the default is.  You see this pattern (although not using Nullables) in the ThreeState checkbox - where the third state is "Indeterminate" and the checkbox is shaded and unchecked while in that state.

    Below is a small snippet illustrating use of the ?? operator with an int? type.

    using System;
     
    namespace NullableNoddy
    {
        class Program
        {
            static void Main(string[] args)
            {
                int? nullable = new int?();    //Declare.  new Nullable<int>(); is equivalent.
     
                Console.WriteLine("nullable is {0}", nullable);    //Not set, so nothing is output after is
     
                int test1 = nullable ?? 1;    //Nullable is null (HasValue is false), so 1 is used
                Console.WriteLine("test1 is {0}", test1);    // test1 is 1
     
                nullable = 2;    //Set value using normal int
     
                int test2 = nullable ?? 1;    //Nullable is set (HasValue is true), so current value used
                Console.WriteLine("test2 is {0}", test2);    // test2 is 2
            }
        }
    }

    If you are interested, the MSDN has a good launch point in to deeper documentation: http://msdn2.microsoft.com/en-us/library/1t3y8s4s(VS.80).aspx

    April 28

    Fable 2 Mentioned in OXM Podcast and Blog Pondering

    Well this being the first game I've been on the team for professionally... even if I'm just helping out on the tools side... I get goose-bumps every time I hear someone talking about it in the media.

    OXM Podcast 111

    I'm trying to figure out how often I should blog too.  Once a week enough?  Twice a week?  I am thinking twice a week is probably enough content for a semi-professional blog - which I guess this is trying to be.

    I have also decided the format of the blogs will try and stick to around the title and not veer too far off that.  The length of each blog entry I'll try and keep to something you can read in a couple of minutes or less.  Any more then that and I'm probably abusing your time, and well it could probably be broken up in to multiple parts anyway.

    April 22

    Buddying - Code quality control without the paperwork

    Every line of code that is entered in to the Mainline (release branch) either through integration of a branch to main... or a smaller change set directly on that branch, gets seen by at least one other coder.

    In fact, many of the developers also monitor the diffs (differences between what was there and what is in there now) - and have them mailed to them, so the potential of someone seeing something wrong and alerting the submitter early to something wrong is increased.  Of course, having diffs mails to you also exposes you to parts of a large system you might not otherwise see.

    The quality of these buddying sessions relies on three things:

    1. The ability of the coder to communicate
    2. The ability of the buddy to communicate
    3. Size of the change set

    The best buddies sessions come from when a coder is open to criticism from the buddy, the buddy being able to constructively critique the code without putting the coder on the defensive (and resist rewriting it in his own image!), and the change list is reasonably small so the buddy doesn't glaze over towards the end.

    It is a good way of spreading knowledge, a great way of getting to know your team, and awesome for stopping some real howlers getting in to a build.

    I guess this is somewhere between pair "extreme" programming and normal programming - and personally I really enjoy the balance it gives.  It makes you think really hard about what you are about to submit, because you know you are going to have to explain it.  Of course, some times your buddy might come up with something you don't necessarily agree with - and you have to talk it out... or even bring in another party to sort out the dispute.  But those times are way outweighed by the pleasant experience of knowing your code is much less likely to break something.

    Often, during a buddy the coder will self-critique, or realize something while explaining it to the buddy.  Buddy goes away, coder fixes, buddy comes back and everyone feels better about that code.  Any rank of developer can buddy any other rank too.

    So when something is checked in, it will have your name on it, and that of your buddy.  What is important though is that as far as my experience here thus far - it is not used as a big bat to splat a developer or two with if something goes wrong because of that change.  Obviously if it's broken, you fix it... but if the coder is away or unavailable, perhaps the buddy can fix it.  It is also not used as some kind of metric here... not as far as I can tell anyway... it is just about the quality of the code.

    I tried to set up something similar at a different employer with some colleagues... however it got twisted.  Management took over and wanted complicated forms to be filled out and signed... basically there was an undertone of blame and shame over code quality... it was a little too beaurcratic for my tastes.  It made the developers feel watched, defensive and resentful... as some people were immune... some had absolute veto... etc.  Bring in an all powerful third party company that could veto anything in house and well... cue a massive dip in the development department morale.

    So "buddying" can have a very positive effect on bugs introduced, spread knowledge and encourage discussion among a team.  When executed correctly, everyone is happy!

    April 21

    Tutankhamen Exhibition at the O2 in London

    The Tutankhamen exhibition was awesome.  For whatever reason I just assumed it would have the casket and mummy of the boy king - but I think in the back of my mind I knew that stuff wasn't travelling around anymore.

    Still the stuff they had on show was fascinating.  Unfortunately for my ever-suffering wife, I was mesmerised by the workmanship and ancient religious rites linked to the artifacts... so we did spend a great deal of time there.

    There were classes of school children running around too, drawing pictures and pestering their teachers (and at some points adults just wanting to look at the things!) - I think some were really taking it all in.  Others were more interested in someone dropping a tissue, then playing some kind of impromptu soccer game with it until one of their teachers stopped them.

    A couple of things stood out - one was the mini casket used for holding the Tutankhamen's liver... there were ancient spells carved out inside that little mini version of what one day I really must try and see.  For Amiga people who liked deluxe paint, you'll know the casket I want to see! :-)

    The most expensive part of the trip was the travel... despite not living that far away from London.  Danni manage to find a four star hotel for 38GBP including tax... and it was a lovely room.  We ate out in Covent Garden, using some 2 for 1 vouchers that we got with the tickets, which mitigated that cost some what.

    We got a few pictures of things around London - it was my first time to Canary Wharf - and it seemed kind of futuristic to me with it's heavy use of glass on shiny metal.  Also it was my first visit to what was the Millennium Dome... I wonder if the architects were going for a kind of Crown shape.  It was cool to think of that scene at the beginning of one of the bond films exploding around that place.

    Windows Vista SP1 Installed on Laptop

    Installed the Vista Service Pack 1 on the laptop.  I did try and download the full install for all languages, because I keep the laptop en-uk where possible... even if it does have an American background (and keyboard!)

    For some reason the install from MSDN wouldn't have any of it, and gave me an error code I didn't write down.  On reflection, probably should have just to have a record of it.  Anyway using Windows Update it installed just fine - and although I may be trying to *will* this... it does seem more responsive and faster.

    April 20

    Windows Vista Wireless Networking - Why can one profile see and connect to wireless networks... but not mine?

    I had a strange problem happen to me over Christmas, where my wife's profile on the laptop could see wireless networks but mine couldn't.  This was very frustrating, as I had to log in as her - and then switch to me with that network connect to the hotel still open.  Any network that was paired seemed to be fine.

    First of all I broke out regmon, then got a message saying it was replaced by the excellent process monitor (download).  With that amazing tool at my disposal, I discovered a locked down registry was not my friend.  During opening up the blank "Control Panel\Manage Wireless Networks" Window, this was one of the lines in the log:

    6653 17:32:26.8356089 Explorer.exe 4000 RegOpenKey HKCR\CLSID\{88D96A05-F192-11D4-A65F-0040963251E5}\Progid ACCESS DENIED Desired Access: Query Value

    Looking up that value in regedit.exe - I found it was the COM Component for "XML DOM Document 6.0".

    That sounded kind of important to me.  Possibly some way internally of collating results or displaying them?  I don't know, only guessing.

    So right clicking on that {88D96A05-F192-11D4-A65F-0040963251E5} folder I found Danni's user there and not mine... and not the Administrators group either.  Ah ha! So I added myself with read privileges and restarted.  Next time I opened up that "Control Panel\Manage Wireless Networks" Window, I could actually see the wireless networks again in my own profile.

    I could have also added the Users group with read only access and that probably would have done the trick too.

    Windows Vista Hidden Network Settings

    Did you know about what the Alt button on the keyboard does in Vista?  Apparently magical things sometimes.

    Some programs... I'll use XNA Game Studio Connect as an example... like to have the network interface being used to connect to your Xbox 360 to be the first network interface.  I believe it's something to do with UDP broadcasting, and possibly getting back the reply over an interface you aren't expecting.

    In Vista you can reorder the network cards by using the special advanced menu that pops up when you use the Alt key:

    • You will need admin rights to the machine
    • At the start menu type and execute: ncpa.cpl
    • If you can't see a file menu with "Advanced" on it on the new window (Control Panel\Network Connections) then select the window and press ALT
    • With any luck the advanced menu has appeared... select "advanced settings" from that
    • A dialog pops up, the top list allows you to change the order of the adapters
    April 18

    The Tower of Cam

    (Posted on Lionhead the other day, figured I'd post it on my blog too)


    Since the last time I’ve blogged, a certain senior developer whom I shall call “Sam” (he blogged a little while back) has had a webcam set up on his desk (Fable 2 Cam). 

    Now and again it points towards my screens and off in to the distance you can see artists in the gloom, working away making Fable 2 look incredibly cool… surrounded by everything from Star Wars action figures to Pokemon and Scooby Doo.  Who wouldn’t want to work in a place where there’s an epic battle between ships of the Empire and Rebel Alliance hanging from the ceiling?

    Very recently dev Sam has constructed a tower for that web-cam.  In true engineering tradition that of course involves cardboard and sticky tape.  I am sure it will not be long before version two of that tower comes along… perhaps it even deserves a little picture somewhere. :0)

    If you are lucky and watching the webcams… now and again you might see a test level running on my dev-kit - but G o o d [Good] luck making anything out with the cam resolution! ;0)

    Recently I have continued work on the editor bits of the LHTS (Lionhead Text System), plus some other parts to do with triggers for level exits.  Georg checked in gigabytes of final recorded speech to our repository… and on Monday Louise did a little demo to the team with that content in.  It is great hearing *actor to be announced* in Fable 2, especially sounding a little corrupt… I didn’t really think of him like that before ;0) Next up for me is adding extra bits to the stuff that allows the editor to update the game running on the 360 with data live.   Should be interesting!

    GDC 2008 Presentations are up!

    Here’s an email I received the other day.  This seems like a good way of testing out the email blog stuff of Live Spaces :0)

     

    From: David Weller
    Sent: 14 April 2008 18:56
    To: XNA Game Studio Discussion; XNA Academic Evangelism
    Subject: GDC 2008 Presentations are up!

     

    I’m pleased to announce the availability of the GDC presentations on MSDN  for public consumption, effective immediately!  The quality and quantity of the presentations was second to none, and we should all thank the speakers for their effort in creating and presenting these decks.  I would also like to personally thank Mitch Walker and Mark Seminatore, who helped insure that the decks were cleaned up and ready for the public. 

     

    Without further ado, here’s the complete list of decks:

     

    XAudio2 - Audio Building Blocks For The Future

    Speaker: Brian Schmidt

     

    Game audio has evolved well beyond simple wave-file playback with 3D positioning. Now, a great sounding game needs programmable DSP effects, submixing of sounds, surround processing and more. XAudio 2 is the new low-level audio API for Xbox 360 and Windows, providing these features and more through a highly efficient software mixing engine. XAudio 2 supplants DirectSound on Windows and XAudio on Xbox 360, allowing you to write code that is easily portable between Xbox 360 and Windows. This session will cover the XAudio 2 architecture and XAudio 2 features. It will also show programming examples for solutions such as occlusion and environmental modeling, how 3D is implemented and its use of data compression.

     

    XDK Update GDC 2008

    Speaker: Cameron Egbert

     

    Microsoft continues to add exciting new features and tools to the Xbox 360 XDK.  Recent additions include XAudio2, XMCore, APIMon, PGOLite, and /Analyze support.  This presentation provides an overview of these new features and discusses best practices for how they can be utilized to create great games.

     

    XNA Game Studio 2.0 for Xbox LIVE Arcade

    Speaker: Mitch Walker

     

    One question resounds as more and more developers discover the productivity gains from XNA Game Studio. How do you make money from the games you create? This talk offers a sneak peek into the XNA Arcade Extensions to Game Studio 2.0 along with details of how professional developers can take advantage of XNA Game Studio to produce commercial games.

     

    Understanding XNA Framework Performance

    Speaker: Shawn Hargreaves

     

    This talk is for programmers who want to understand how the XNA Framework works on Xbox 360, and the implications for writing high-performance code. The talk explains when and why the framework transitions between the Xbox user and supervisor modes, and why should you care. The talk also presents best practices for writing efficient graphics and math code, how to use multiple cores to parallelize your game, and which XNA Framework APIs can be called while doing so. Finally, the talk demonstrates what tools are available for investigating performance on Xbox 360, and how Windows tools can help you understand Xbox 360 performance issues.

     

    The Evolving Windows Gaming Platform

    Speaker: Chuck Walbourn

     

    The Windows platform must keep with the times, and gamers drive the bleeding edge of the technology curve. This presentation covers recent developments in the Windows platform for games with Windows Vista Service Pack 1, Direct3D 10.1, and the on-going 64-bit technology transition as well as strategies for coping with and moving beyond the long-standing 2 GB memory barrier.

     

    Performance Tools Update

    Speaker: David Cook

     

    Everybody’s favorite profiler Pix has gotten even better. Hear about the new additions, including continuous capture, Dr. Pix warnings, optical drive monitoring, and more. Learn how to use Pix to investigate performance spikes, detect anomalies, and improve load times.

     

    Networking with the XNA Framework

    Speaker: Shawn Hargreaves

     

    Playing games by yourself can be fun, but it’s far better when you can play with others, whether cooperatively or head-to-head. Creating multiplayer games using XNA Game Studio, however, requires networking support in the XNA Framework for both Windows and Xbox 360. And that support simply wasn’t there…until now! With the release of XNA Game Studio 2.0, we have augmented the XNA Framework to include support for networked games. Come learn about networking in the XNA Framework, what is supported and what’s not, and how you can enable multiplayer support in your games.

     

    Getting More From Multicore

    Speaker: Ian Lewis

     

    Multithreaded programming doesn’t seem as hard as it used to, but it’s still challenging to wring the greatest amount of performance out of multiple processor cores. From experience with multiple game developers and Microsoft’s internal SDK teams, we’ve found a set of best practices to follow, as well as some common techniques that are best avoided. We’ll present tips and tricks for getting the most out of multiple processors on Windows and Xbox 360, and discuss new Microsoft technologies that can help make high-performance multicore programming a little easier.

     

    Games for Windows - LIVE Just the Facts

    Speaker: Ray Thompson

     

    With Games for Windows – LIVE, Microsoft is extending the Xbox LIVE® gaming and entertainment network to Windows. Learn about the features and find out the basics. This presentation will help you understand what it takes to ship a basic single-player game, and also help you understand the differences between the platforms as you move a game from Xbox 360 to Windows.

     

    CLR Performance

    Speaker: Frank Savage

     

    This talk is for those who want to understand the inescapable performance consequences of the managed programming method: the things you cannot avoid and the things you can. Comparing and contrasting the consequences for the .NET Compact Framework and the classic .NET runtime, the talk explains the reasons for these overheads, the benefits they provide, and what practices minimize the associated costs. Additionally, we discuss some commonly occurring costs, such as boxing, that aren’t inherent to all managed code, and we offer some tips for minimizing those costs.

     

    D3D10 - Getting from 0 to 60 Hz

    Speaker: Kevin Gee

     

    Learn about performance tools and best practices for driving the DirectX 10 renderer in your game from XNA Developer Connection's experiences in the trenches. This talk identifies common issues from developing high-end graphics experiences on Windows Vista using DX10 and outlines approaches to mitigate those issues.

     

    Extending the Content Pipeline

    Speaker: Frank Savage

     

    The XNA Framework Content Pipeline allows developers to use Visual Studio to build their art into resources for use with the XNA Framework and XNA Game Studio. This talk covers how to create new importers and processors using C# to extend the functionality of the Content Pipeline as well as how to debug these importers and processors using XNA Game Studio. We go in-depth into the creation of the code for the importers and processors and do hands-on debugging of the resulting processor and importer to give the audience a clear idea of how to work with and extend the Content Pipeline.

     

    Advanced Debugging with Managed Code

    Speaker: Matthew Picoccio

     

    XNA Game Studio offers a robust debugging experience that can greatly enhance a developer’s ability to investigate a game as it runs. Developers of managed games have many debugging techniques at their disposal, but not all of them are self-evident. This talk covers advanced debugging techniques useful to game developers, including demonstrations of powerful IDE debugger features and other tools provided by Microsoft.