<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Musings of a Game Developer</title>
	<atom:link href="http://www.johnwordsworth.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johnwordsworth.com</link>
	<description>John Wordsworth&#039;s musings on Game Programming &#38; Computer Design</description>
	<lastBuildDate>Wed, 21 Apr 2010 15:41:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone Coding &#8211; Sending In Application Email</title>
		<link>http://www.johnwordsworth.com/2010/04/iphone-coding-sending-in-application-email/</link>
		<comments>http://www.johnwordsworth.com/2010/04/iphone-coding-sending-in-application-email/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 15:41:58 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[iPhone Coding]]></category>
		<category><![CDATA[In App Messaging]]></category>
		<category><![CDATA[iPhone Code Snippets]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/?p=84</guid>
		<description><![CDATA[While I recently added the code snippets to my library for launching mail, websites and the phone app from within your iPhone application, this is not always an elegant solution. In certain use cases, the user will want to send an email from within your application and then continue with what they were originally doing [...]]]></description>
			<content:encoded><![CDATA[<p>While I recently added the code snippets to my library for <a title="iPhone Code Snippets - Opening Safari, Email and the Phone App" href="http://www.johnwordsworth.com/2010/04/iphone-code-snippets-launching-safari-and-other-apps/" target="_self">launching mail, websites and the phone app</a> from within your iPhone application, this is not always an elegant solution. In certain use cases, the user will want to send an email from within your application and then continue with what they were originally doing &#8211; especially if you have a &#8216;mail to a friend&#8217; button in your game or application.</p>
<p>Luckily, the iPhone OS 3.0 added this functionality. Quite excitingly, similar functionality for in-app SMS messages is coming soon (<a title="What's New with the iPhone OS?" href="http://developer.apple.com/technologies/iphone/whats-new.html" target="_blank">in iPhone OS 4.0</a>), but we won&#8217;t talk about that here.</p>
<p><strong>1. Referencing the MessageUI Framework</strong></p>
<p>First up, we have to ensure that we are linking with the MessageUI Framework, which is the library that will provide the functionality we&#8217;re after. If you&#8217;ve not already got the MessageUI Framework referenced in your project, you&#8217;ll want to right click on &#8216;<strong>Frameworks</strong>&#8216; in your projects &#8216;Groups &amp; Files&#8217; and select <strong>Add -&gt; Existing Frameworks</strong>. Select <strong>MessageUI.framework</strong> and insert it into your project.</p>
<p><strong>2. Call up the MFMailComposeViewController view like any other UIView</strong></p>
<p>Next up you need to create and push to the main navigation controller a fresh <a title="MFMailComposeViewController Class Reference" href="http://developer.apple.com/iphone/library/documentation/MessageUI/Reference/MFMailComposeViewController_class/Reference/Reference.html" target="_blank">MFMailComposeViewController</a>. This will control the in-app email view that will allow the user to complete the remaining details for the email they wish to send and then either beam that email off to the lucky recipients across the internet, or to cancel the operation.</p>
<div style="text-align: center;"><a href="http://www.johnwordsworth.com/wp-content/uploads/2010/04/MFMailComposeViewController.png"><img class="aligncenter size-full wp-image-85" style="border: solid black 2px;" title="MFMailComposeViewController" src="http://www.johnwordsworth.com/wp-content/uploads/2010/04/MFMailComposeViewController.png" alt="In App Email Sending on the iPhone" width="321" height="482" /></a></div>
<p>The example below shows how set a whole host of options on the mail compose view. You don&#8217;t have to set all of these &#8211; things like the Subject and the Recipients are optional, but you will more than likely want to set one or two of these depending on the view that is enabling the user to start a new email.</p>
<p>The code for this will often go in an IBAction method and is as follows</p>
<pre class="brush: cpp;">
-(IBAction)sendEmail:(id)sender {
  // Create a new Mail Composer View Controller
  MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
  mailViewController.mailComposeDelegate = self;

  // Optional Configuration Parameters to make life easier for the user
  [mailViewController setSubject:@&quot;Subject&quot;];
  [mailViewController setMessageBody:@&quot;Message Body&quot; isHTML:NO];
  [mailViewController setToRecipients:[NSArray arrayWithObject:@&quot;a@b.com&quot;]];
  [mailViewController setCcRecipients:[NSArray arrayWithObject:@&quot;a@b.com&quot;]];
  [mailViewController setBccRecipients:[NSArray arrayWithObject:@&quot;a@b.com&quot;]];

  // Present the VIew Controller and clean up after ourselves
  [self presentModalViewController:mailViewController animated:YES];
  [mailViewController release];
}
</pre>
<p>Now, we&#8217;ve got an application that shows a compose email view ready for the user to send an email direct from your app. However, there&#8217;s one main problem with the app as it stands &#8211; once you&#8217;ve launched the mail compose view, it&#8217;ll never go away! In order for you to respond when the user has (or hasn&#8217;t) sent an email, and to optionally respond with your own messages depending on whether it worked or not, you&#8217;ll have to implement the <a title="MFMailComposeViewControllerDelegate Protocol Reference" href="http://developer.apple.com/iphone/library/documentation/MessageUI/Reference/MFMailComposeViewControllerDelegate_protocol/Reference/Reference.html" target="_blank">MFMailComposeViewControllerDelegate</a> protocol.</p>
<p><strong>3. Implementing the MFMailComposeViewControllerDelegate Protocol</strong></p>
<p>The third and final step in getting your in app Mail Composer working correctly is to respond to the appropriate delegate protocol. I often find that implementing delegate protocol methods can sometimes be a laborious task &#8211; but you&#8217;re in luck this time, as there is only one method that you have to worry about;</p>
<pre class="brush: cpp;">
-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
  if ( result == MFMailComposeResultFailed )
  {
    // Sending failed - display an error message to the user.
    NSString* message = [NSString stringWithFormat:@&quot;Error sending email '%@'. Please try again, or cancel the operation.&quot;, [error localizedDescription]];
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@&quot;Error Sending Email&quot; message:message delegate:nil cancelButtonTitle:@&quot;Ok&quot; otherButtonTitles:nil];
    [alertView show];
  }
  else
  {
    // If we got here - everything should have gone as the user wanted - dismiss the modal view.
    [self dismissModalViewControllerAnimated:YES];
  }
}
</pre>
<p>There you have it &#8211; 3 easy steps to implementing the MFMailComposeViewController in your iPhone application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2010/04/iphone-coding-sending-in-application-email/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Code Snippet &#8211; The Singleton Pattern</title>
		<link>http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/</link>
		<comments>http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 22:27:09 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[iPhone Coding]]></category>
		<category><![CDATA[iPhone Code Snippets]]></category>
		<category><![CDATA[iPhone SDK]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/?p=73</guid>
		<description><![CDATA[There are many pages of discussions around the internet about whether or not you should use global variables in your applications. I&#8217;m not going to to into the depths of these discussions, but I have come to live by the following ethos when it comes to using global variables in my application;
Use them sparingly; Having [...]]]></description>
			<content:encoded><![CDATA[<p>There are many pages of discussions around the internet about whether or not you should use global variables in your applications. I&#8217;m not going to to into the depths of these discussions, but I have come to live by the following ethos when it comes to using global variables in my application;</p>
<p><strong>Use them sparingly;</strong> Having too many global variables floating around makes it very hard to keep track of what&#8217;s going on. I never use more than one global object for each logical section of my code &#8211; even if that object contains a handful of other objects from that section.</p>
<p><strong>But you do sometimes need them; </strong>I once wrote a small game where I decided not to use my own globals at all. Truth be told, I ended up with a bit of a mess &#8211; a large number of similar constructors with a numbers of parameters to link my objects together. Sure, the units were technically separate and didn&#8217;t rely on each other &#8211; but the reality was, that when you get deep enough into your code &#8211; some classes are only ever going to be used in this project (view controllers etc).</p>
<p><strong>Use them when it&#8217;s applicable;</strong> Generally, global variables are applicable in situations when you&#8217;ve got an object / class of which you are only ever going to need one of them <strong>and</strong> they don&#8217;t logically sit as a child of one single part of the application. For instance, the &#8216;application&#8217; object in some languages &#8211; where the object represents the running application.</p>
<p><strong>So, Singleton Eh?</strong></p>
<p>The Singleton model is often used to instantiate just one instance of a class which doesn&#8217;t allow a second instance of that same class to be loaded anywhere in the application. Some implementations will throw an exception if you try to create a second instance of the class, some will create the singleton for you when you first try to access it, and some will even let you create other instances if you want, but will always manage a &#8217;single shared instance&#8217; for you. Many of the core Apple classes follow this pattern, such as [UIApplication sharedApplication].</p>
<p>Anyway, Apple do a very good job (naturally) of providing a <a title="Apple Singleton Model Example" href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32" target="_blank">good example of the Singleton model</a>. The following code is rather similar to the Apple example, but it also includes what you should have in the header file. It is also a stable part of any library of code snippets, so it has to be here really!</p>
<p><strong>SingletonClass.h</strong></p>
<pre class="brush: cpp;">
#import &lt;Foundation/Foundation.h&gt;
#import &lt;UIKit/UIKit.h&gt;

@interface SingletonClass : NSObject {

}

+ (id)sharedInstance;
@end
</pre>
<p><strong>SingletonClass.m</strong></p>
<pre class="brush: cpp;">
#import &quot;SingletonClass.h&quot;

@implementation SingletonClass

static SingletonClass *sharedInstance = nil;

// Get the shared instance and create it if necessary.
+ (SingletonClass*)sharedInstance {
    if (sharedInstance == nil) {
        sharedInstance = [[super allocWithZone:NULL] init];
    }

    return sharedInstance;
}

// We don't want to allocate a new instance, so return the current one.
+ (id)allocWithZone:(NSZone*)zone {
    return [[self sharedInstance] retain];
}

// Equally, we don't want to generate multiple copies of the singleton.
- (id)copyWithZone:(NSZone *)zone {
    return self;
}

// Once again - do nothing, as we don't have a retain counter for this object.
- (id)retain {
    return self;
}

// Replace the retain counter so we can never release this object.
- (NSUInteger)retainCount {
    return NSUIntegerMax;
}

// This function is empty, as we don't want to let the user release this object.
- (void)release {

}

//Do nothing, other than return the shared instance - as this is expected from autorelease.
- (id)autorelease {
    return self;
}

@end
</pre>
<p>There you go &#8211; copy and paste this into your new project, rename the interface and implementations and you&#8217;re done &#8211; a ready to use Singleton in your project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Code Snippets &#8211; Launching Safari and Other Apps</title>
		<link>http://www.johnwordsworth.com/2010/04/iphone-code-snippets-launching-safari-and-other-apps/</link>
		<comments>http://www.johnwordsworth.com/2010/04/iphone-code-snippets-launching-safari-and-other-apps/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 20:48:32 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[iPhone Coding]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[Launching Safari]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/?p=64</guid>
		<description><![CDATA[Having devoted much of my time over the last few months developing for the iPhone, I thought it was time to start collecting a small library of useful code snippets here on my blog. I&#8217;m mostly posting these for my own use, so that I don&#8217;t have to keep searching Google to keep finding the [...]]]></description>
			<content:encoded><![CDATA[<p>Having devoted much of my time over the last few months developing for the iPhone, I thought it was time to start collecting a small library of useful code snippets here on my blog. I&#8217;m mostly posting these for my own use, so that I don&#8217;t have to keep searching <a title="It's Google, of course..." href="http://www.google.com" target="_blank">Google</a> to keep finding the useful bits of code. However, I&#8217;ll try to make the posts as accessible as possible, with some explanation where necessary.</p>
<p><strong>Launching Safari from within an iPhone App</strong></p>
<p>The <a title="openURL Method Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/openURL:" target="_blank">openURL</a> method of <a title="UIApplication Class Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html" target="_blank">UIApplication</a> is a very useful and valuable method. It provides a quick and simple way to leave the current application and load up the web browser, the email application or even the phone application. It also provides a way for you to set the &#8216;default&#8217; data, such as the start page in safari, or the email recipient for mail.</p>
<p>Using the function to launch Safari with a specific URL is simple, it requires barely any code. The following example shows how one would use <a title="openURL Method Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/openURL:" target="_blank">openUrl</a> to launch Safari having clicked a button.</p>
<pre class="brush: cpp;">-(IBAction)linkButtonClick:(id)sender {
NSString* launchUrl = @&quot;http://www.johnwordsworth.com/&quot;;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];
}</pre>
<p><strong>Launching Mail, the Phone or SMS</strong></p>
<p>Launching the mail client, phone or the SMS client is equally as simple. The <a title="openURL Method Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/openURL:" target="_blank">openURL</a> method examines the first few characters of your URL and then uses this information to determine what information you have provided. It then does it&#8217;s best to enact what you have requested.</p>
<p>The following functions give you a quick and easy way to launch the relevant apps quickly and easily.</p>
<pre class="brush: cpp;">// Launch the email client with mailto://[recipient]
-(BOOL)launchMailWithRecipient:(NSString *)recipient {
NSString* launchUrl = [NSString stringWithFormat:@&quot;mailto://%@&quot;, recipient];
return [[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];
}</pre>
<pre class="brush: cpp;">// Launch the phone with tel://[number]
-(BOOL)launchPhoneWithNumber:(NSString *)number {
NSString* launchUrl = [NSString stringWithFormat:@&quot;tel://%@&quot;, number];
return [[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];
}</pre>
<pre class="brush: cpp;">// Launch the SMS client with sms:[number]
-(BOOL)launchSMSWithNumber:(NSString *)number {
NSString* launchUrl = [NSString stringWithFormat:@&quot;sms:%@&quot;, number];
return [[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];
}</pre>
<p><strong>But the iPod doesn&#8217;t have a phone!?</strong></p>
<p>That&#8217;s right &#8211; there&#8217;s something we&#8217;ve not yet touched upon, and that&#8217;s the fact that <a title="openURL Method Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/openURL:" target="_blank">openURL</a> returns a boolean value. This value lets you know whether or not the operation completed successfully. Obviously, if it did &#8211; then you&#8217;d better clean up your App pretty quick as it&#8217;s not going to be in the foreground for much longer! However, more usefully, it allows you to handle the case when the supported operation is not permitted.</p>
<p>For instance, if you&#8217;re hoping to loading up the phone app on an iPod Touch, then it&#8217;s not going to work. In this case, you might want to popup a <a title="UIAlertView Class Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html" target="_blank">UIAlertView</a> to let the user know that it&#8217;s not going to work. If you&#8217;re really working hard towards a friendly user interface, then you can use the <a title="canOpenUrl Method Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/canOpenURL:" target="_blank">canOpenUrl</a> method to check this out without actually leaving the application. For instance, if <a title="canOpenUrl Method Reference" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/canOpenURL:" target="_blank">canOpenUrl</a> returns false, then you could disable the links or buttons that would otherwise launch the phone or SMS application.</p>
<p>How would you do that?</p>
<pre class="brush: cpp;">-(BOOL)doesDeviceHaveAPhone {
NSString* launchUrl = @&quot;tel://0&quot;;
return [[UIApplication sharedApplication] canOpenUrl:[NSURL URLWithString: launchUrl]];
}</pre>
<p>I&#8217;ll leave you to think about the other cunning things that you can do, such as launching with an http url that links directly to a google map / youtube video or custom Google search string. Anyhow, when combined with other elements of a productivity app, this can be quite useful! Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2010/04/iphone-code-snippets-launching-safari-and-other-apps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vendetta Online Onyx Skin</title>
		<link>http://www.johnwordsworth.com/2010/04/vendetta-online-onyx-skin/</link>
		<comments>http://www.johnwordsworth.com/2010/04/vendetta-online-onyx-skin/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 23:46:10 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[Vendetta Online]]></category>
		<category><![CDATA[MMORPGs]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/?p=52</guid>
		<description><![CDATA[Following on from my previous post about Vendetta Online, I&#8217;ve spent a large portion of my day working on a new skin for Vendetta Online. I&#8217;ve always found the default skin fairly mediocre. While it&#8217;s nice, it doesn&#8217;t scale overly well to my 1080p monitor. Now, in the modern day, it&#8217;s not unusual to have [...]]]></description>
			<content:encoded><![CDATA[<p>Following on from my previous post about Vendetta Online, I&#8217;ve spent a large portion of my day working on a new skin for Vendetta Online. I&#8217;ve always found the default skin fairly mediocre. While it&#8217;s nice, it doesn&#8217;t scale overly well to my 1080p monitor. Now, in the modern day, it&#8217;s not unusual to have a high-resolution monitor, and to have the radar sprites aliased and upscaled to fit the screen was my equivalent of scraping nails down a blackboard.</p>
<p>So, instead of bitching about it, I thought I would &#8217;simply&#8217; fix it. Now, I leafed through a couple of other people&#8217;s skins, browed through the empty &#8216;how to make a skin&#8217; wiki page and thought; &#8220;It&#8217;s not going to be easy, but I&#8217;ll give it a try.&#8221;. Now, if you&#8217;ve ever had any experience re-skinning an application before, you&#8217;ll know that it&#8217;s never as easy as you think it should be. Vendetta Online is, unfortunately, no exception.</p>
<p>I thought it would have been nice if the skins consisted of an XML file that would allow you to set the text colors and provide solid borders without the need for producing graphics, but I can also see how this is low on the priority scales for the developers. Anyway, with over 100 files to produce my head is already turning around ideas of how to produce a piece of software to make the whole process easier, but for now, here are some screenshots of the skin that I have been working on.</p>
<p style="text-align: center;"><a href="http://www.johnwordsworth.com/wp-content/uploads/2010/04/onyx-skin-01.jpg"><img class="size-medium wp-image-53 aligncenter" title="Vendetta Skin Onyx Screenshot" src="http://www.johnwordsworth.com/wp-content/uploads/2010/04/onyx-skin-01-300x173.jpg" alt="Vendetta Skin Onyx Screeshot" width="300" height="173" /></a></p>
<p style="text-align: center;">(Click images to enlarge)</p>
<p style="text-align: center;"><a href="http://www.johnwordsworth.com/wp-content/uploads/2010/04/onyx-skin-02.jpg"><img class="aligncenter size-medium wp-image-54" title="Vendetta Online Skin Onyx Screenshot" src="http://www.johnwordsworth.com/wp-content/uploads/2010/04/onyx-skin-02-300x173.jpg" alt="Vendetta Online Skin Onyx Screenshot" width="300" height="173" /></a></p>
<p style="text-align: center;"><a href="http://www.johnwordsworth.com/wp-content/uploads/2010/04/onyx-skin-03.jpg"><img class="aligncenter size-medium wp-image-55" title="Vendetta Online Skin Onyx Screenshot" src="http://www.johnwordsworth.com/wp-content/uploads/2010/04/onyx-skin-03-300x173.jpg" alt="Vendetta Online Skin Onyx Screenshot" width="300" height="173" /></a></p>
<p style="text-align: left;">As you can see, there are a few bits that need some extra work. Most importantly, the HUD elements are still plagued by an aliasing problem that was the main reason that I wanted to write this skin. However, this time, it&#8217;s not the radar, but the central HUD elements. Anyway &#8211; I&#8217;ll find a good compromise, get it all packaged up, and hopefully release it out to the community at some point soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2010/04/vendetta-online-onyx-skin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vendetta Online Introduction</title>
		<link>http://www.johnwordsworth.com/2010/04/vendetta-online-introduction/</link>
		<comments>http://www.johnwordsworth.com/2010/04/vendetta-online-introduction/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 23:33:49 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[Vendetta Online]]></category>
		<category><![CDATA[MMORPGs]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/?p=47</guid>
		<description><![CDATA[I've been playing Vendetta Online for a couple of months now in the little spare time I have, and I wanted to put a little bit of background onto my blog before launching into some screenshots of the skin that I'm working on for this game.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing <a title="Vendetta Online - Cross-Platform Space MMORPG" href="http://www.vendetta-online.com" target="_blank">Vendetta Online</a> on and off now for a couple of months. For those of you not in the know, Vendetta Online is a space based MMORPG that runs on Windows, OSX and Linux. It offers an experience that is vastly different to <a title="EVE Online - Space Strategy MMORPG" href="http://www.eveonline.com/" target="_self">EVE Online</a>. Where EVE offers a third person &#8216;point and click&#8217; type space experience, Vendetta places you in the cockpit of your chosen space vehicle, battling face to face with bots and players across a variety of missions.</p>
<div style="float: left; padding: 0px 10px 10px 0px;"><a href="http://www.johnwordsworth.com/wp-content/uploads/2010/04/dump0182.jpg"><img class="alignleft size-medium wp-image-48" title="Vendetta Online Screenshot" src="http://www.johnwordsworth.com/wp-content/uploads/2010/04/dump0182-300x225.jpg" alt="Vendetta Online Screenshot" width="300" height="225" /></a></div>
<p>Another important difference, is that Vendetta Online is produced by only 4 people. In my opinion, this has had 2 massive effects on the game. First of all, unfortunately, it means that the game is lacking a little in scope. It&#8217;s not easy to find truly unique missions as the focus seems to have been on the core &#8216;learning the game&#8217; and &#8216;generic always there missions&#8217; to date. This means that the awesome history and thought that&#8217;s gone into the world doesn&#8217;t get to shine through. Also, the graphics aren&#8217;t quite up to EVE&#8217;s standards. Don&#8217;t get me wrong, they&#8217;re great for a team of 4, and produce a wonderful experience, but it&#8217;s unfortunate that they have to sit next to EVE in a comparison.</p>
<p>The second effect on the otherhand, is absolutely amazing. Being led by only a team of 4, and having a tight-nit community has led to some innovation in the MMORPG genre. The game has a Player Contribution Corp; a group of players who have access to a set of tools and guides for contributing missions, plugins and skins to the game. Some of the community made plug-ins really fill those gaps that the development team simply haven&#8217;t had time to plug yet.</p>
<p>Being able to contribute to a live MMORPG is really appealing to me. As someone who is just starting his career in the gaming industry, I love the idea of being able to join a friendly and ambitious community, put a handful of hours into a mission, skin or plug-in and see it in action in a real live game. It was this that spurned me on to write this post. I&#8217;ve started work on a new skin for the engine that I hope will help the engine shine a little more on my monitor, and wanted to share some thoughts about my experience.</p>
<p>The bottom line is this; If you&#8217;re looking for an MMORPG with a small yet friendly player-base that will allow you to contribute ideas and suggestions to the development of the game, then Vendetta Online is definitely something you should try out. I&#8217;m not going to lie &#8211; the first 30-60 minutes might be a little different to your regular MMORPG experience &#8211; it won&#8217;t be quite as shiny, but you will pretty quickly get to witness the community first hand. Hell, they&#8217;ve got an 8 hour trial (that&#8217;s 8 hours in game, you can spread it over a few weeks if you wish) &#8211; so why not give it a shot?</p>
<p><a title="Download the Vendetta Online Client" href="http://www.vendetta-online.com/x/download" target="_blank">Download the Vendetta Online Client Here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2010/04/vendetta-online-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Blog Design</title>
		<link>http://www.johnwordsworth.com/2010/04/new-blog-design/</link>
		<comments>http://www.johnwordsworth.com/2010/04/new-blog-design/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 01:44:53 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[Site Updates]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/?p=44</guid>
		<description><![CDATA[A good evening to you all from behind a warm mug of tea, late at night here in the UK. If you&#8217;ve visited here before, you may have noticed that things are looking a litte bit different here today.
This fantastic evening marks the begining of my revisited blog. There is still much for me to [...]]]></description>
			<content:encoded><![CDATA[<p>A good evening to you all from behind a warm mug of tea, late at night here in the UK. If you&#8217;ve visited here before, you may have noticed that things are looking a litte bit different here today.</p>
<p>This fantastic evening marks the begining of my revisited blog. There is still much for me to do on the blog design before I could consider it done (adding dates into the template in a friendly fashion to start with). Anyhow, this is all leading up to some posts about XNA programming from dicussions that I had a while ago over at <a title="XNA Chat" href="http://xnachat.com" target="_blank">xnachat.com</a>. Anyhow, it&#8217;s late here and there&#8217;s much sleep to be had.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2010/04/new-blog-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XNA 3.0 &#8211; Reading Text Files on the Xbox</title>
		<link>http://www.johnwordsworth.com/2009/01/xna-30-reading-text-files-on-the-xbox/</link>
		<comments>http://www.johnwordsworth.com/2009/01/xna-30-reading-text-files-on-the-xbox/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 12:42:35 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[XNA Programming]]></category>
		<category><![CDATA[Reading Text Files]]></category>
		<category><![CDATA[Xbox Community Games]]></category>
		<category><![CDATA[Xbox XNA]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/blog/?p=28</guid>
		<description><![CDATA[We are making strong progress on an XNA Community Game title that we are working on and I have just spend a good 30 minutes trying to figure this out. Hence, I'm writing this as a future reference for myself and in the hope that it might help any coders out there trying to achieve the same thing.]]></description>
			<content:encoded><![CDATA[<p>We are making strong progress on an XNA Community Game title that we are working on and I have just spend a good 30 minutes trying to figure this out. Hence, I&#8217;m writing this as a future reference for myself and in the hope that it might help any coders out there trying to achieve the same thing.</p>
<p><strong>The Problem</strong></p>
<p>Our game is relatively simple and we would like to define the stages that the player progresses through in a plain text file. While it&#8217;s a very simple task to read a text file in C#, I initially had problems assuming that loading a new StreamReader on the the Xbox like so <strong>StreamReader(&#8220;LevelIndex.txt&#8221;);</strong> would load up a text file in the same directory as my executable. Not the case &#8211; it turns out that, as the Xbox doesn&#8217;t really follow a directory structure like a PC, this doesn&#8217;t work.</p>
<p><strong>The Solution</strong></p>
<p>The solution is also relatively simple, but not east to find &#8211; as it&#8217;s one of those things that you either know how to do or not. There are 2 important things to note before jumping directly into a code listing.</p>
<p><strong>1. StorageContainer.TitleLocation:</strong> In order to construct the file path that you will be feeding into a StreamReader, you must prefix your path with this property. To load up the file &#8216;LevelIndex.txt&#8217;, which resides in the root directory of your solution, you must construct the path as follows; <strong>String fullPath = StorageContainer.TitleLocation + &#8220;LevelIndex.txt&#8221;;</strong></p>
<p><strong>2. Build Action (None), Copy to Output Directory (Copy if Newer):</strong> As your text file is not going to be processed by the Content Processor, you need to tell Visual Studio what should be done with your text file. For my project, I dragged and dropped the text file into my Solution (but NOT in the Content directory). The text file sits alongside your .cs files (although, could reside in a folder). Then, you must change the properties of the text so that Build Action is set to &#8216;None&#8217; and Copy to Output Directory is set to &#8216;Copy if Newer&#8217;. This ensures that Visual Studio doesn&#8217;t try to compile the file as code or include it in your Content repository. It will simply copy the text file to the TitleLocation of your game &#8211; just what you want so that you can read it from within your title.</p>
<p><strong>Code Listing</strong></p>
<p>The following code listing shows how we have implemented a simple text file reader for an Xbox XNA Project;</p>
<pre>function String[] readStageTitles( String filePath ) {
  ArrayList stageTitles = new ArrayList();
  String[] returnData = null;

  // Both Windows and Xbox - Ensures we are looking in the game's folder.
  String StageIndexPath = StorageContainer.TitleLocation + "\\" + file;

  try
  {
    StreamReader streamReader = new StreamReader(StageIndexPath);
    String line;

    while ((line = streamReader.ReadLine()) != null)
    {
      String[] data = line.Split(';');

      if ( data.Length == 2 ) {
        stageTitles.Add(data[1]);
      }
    }

    streamReader.Close();
  }
  catch( Exception ex )
  {
    // Do things here incase it can't read the file
  }

  returnData = (String[])stageTitles.ToArray( typeof(String) );
  return returnData;
}</pre>
<p>Hope this helps someone out there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2009/01/xna-30-reading-text-files-on-the-xbox/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Quick Fix for Really Slow Remote Desktop to Vista (X64)</title>
		<link>http://www.johnwordsworth.com/2008/10/quick-fix-for-really-slow-remote-desktop-to-vista-x64/</link>
		<comments>http://www.johnwordsworth.com/2008/10/quick-fix-for-really-slow-remote-desktop-to-vista-x64/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 18:41:25 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/blog/?p=26</guid>
		<description><![CDATA[I have spent a few hours today trying to use a Remote Desktop Connection from my Macbook to my Vista X64 machine on the same local network. After countless hits of exceptionally slow speed, I realised that it wasn&#8217;t network bandwidth or even heavy CPU usage that was slowing down my experience.
After a few searches [...]]]></description>
			<content:encoded><![CDATA[<p>I have spent a few hours today trying to use a Remote Desktop Connection from my Macbook to my Vista X64 machine on the same local network. After countless hits of exceptionally slow speed, I realised that it wasn&#8217;t network bandwidth or even heavy CPU usage that was slowing down my experience.</p>
<p>After a few searches on Google and many failed attempts, I found that the following command instantly fixed my problem;</p>
<p><strong>netsh interface tcp set global autotuninglevel=disabled</strong></p>
<p>I&#8217;m afraid I have no real idea what other impact this might have on your machine / server. I understand that this disables the built in network &#8216;tuning&#8217; that Vista uses to try to improve your bandwidth usage so that all software on your machine is guaranteed a solid minimum Quality of Service (QoS). I suspect that it&#8217;ll have no noticable impact at all, it&#8217;ll just perform more like XP than Vista (which was fine).</p>
<p>If it does screw things up, you can reverse this action by;</p>
<p><strong>netsh interface tcp set global autotuninglevel=normal</strong></p>
<p>You&#8217;ll have to run this from a cmd.exe shell and will probably need to run cmd.exe with the &#8216;Run as Administrator&#8230;&#8217; command. I have UAC disabled, so it runs fine anyway. You should just get a simple &#8216;Ok&#8217; response from the software if it&#8217;s run ok.</p>
<p>I hope that this helps some people. It&#8217;s been running perfectly fine ever since.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2008/10/quick-fix-for-really-slow-remote-desktop-to-vista-x64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Print Screen on a Mac</title>
		<link>http://www.johnwordsworth.com/2008/08/print-screen-on-a-mac/</link>
		<comments>http://www.johnwordsworth.com/2008/08/print-screen-on-a-mac/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 10:13:03 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[mac tips]]></category>
		<category><![CDATA[OSX]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/blog/?p=24</guid>
		<description><![CDATA[Some tips about the plethora of ways to capture an image of the desktop (or parts of the desktop) on a Mac Book / Apple's OSX.]]></description>
			<content:encoded><![CDATA[<p>As many of you are aware, I&#8217;ve recently converted to a mac through the purchase of a Mac Book laptop. I also tried to convert my desktop life, but after some horrible experiences with the screens on the new iMac&#8217;s, I&#8217;ve decided that will have to come much later down the road in our business when we can afford a Mac Pro for my desk (where I get personal control over my desktop).</p>
<p>This week, I&#8217;ve mostly been playing with the Print Screen options / Screen Capture options. Previously, I&#8217;ve only used a couple of the plethora of screen capture options that OSX offers, but I thought it time to get a definitive list of the (hard to remember) key combinations available, mostly for my own reference.</p>
<p>So, putting Windows to shame, you can actually save a screen capture as a JPEG file with a mouse click. This would be a great addition to windows and would definitely stop me from receiving emails that are 5Mb with 2 BMP screen caps in that I&#8217;ve been receiving a lot of recently. An overview of the commands are;</p>
<p><strong>Saving a Screen Capture Direct to a JPEG File</strong></p>
<p>⌘ ⇧ 3: Capture the entire screen to a jpeg file on the desktop.</p>
<p>⌘ ⇧ 4 (Followed by Drag): Capture the selected area of the screen to a jpeg file on the desktop.</p>
<p>⌘ ⇧ 4 (Then Spacebar, Then click on a window): Capture selected window (and sometimes a border) to a jpeg file on the desktop.</p>
<p><strong>Saving a Screen Capture to the Clipboard</strong></p>
<p>⌘ ⇧ 3 + Ctrl: Capture the entire screen to the clipboard.</p>
<p>⌘ ⇧ 4 + Ctrl (Followed by Drag): Capture the selected area of the screen to the clipboard.</p>
<p>⌘ ⇧ 4 + Ctrl (Then Spacebar, Then click on a window): Capture selected window (and sometimes a border) to the clipboard.</p>
<p>While it&#8217;s fantastic having this much freedom over the print screen process, the last one especially reminds me of trying to learn a 10-hit combo in Soul Calibur. It even feels that way when you&#8217;re trying to press all of the buttons on the keyboard/mouse during the process!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2008/08/print-screen-on-a-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mono &#8211; Running .NET Applications on OSX/Linux</title>
		<link>http://www.johnwordsworth.com/2008/08/mono-running-net-applications-on-osxlinux/</link>
		<comments>http://www.johnwordsworth.com/2008/08/mono-running-net-applications-on-osxlinux/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 18:48:35 +0000</pubDate>
		<dc:creator>John Wordsworth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[OSX]]></category>

		<guid isPermaLink="false">http://www.johnwordsworth.com/blog/?p=19</guid>
		<description><![CDATA[Mono allows users of Linux and OSX to run .NET Applications written in C# and Visual Basic on their computers. While not perfect - it opens up a whole batch of applications to users of Linux and OSX.]]></description>
			<content:encoded><![CDATA[<p>This may be old news to some people, but I have recently found the power of a piece of software called <a title="Mono Project" href="http://www.mono-project.com/" target="_blank">Mono</a>. Now, it actually takes quite a lot of research and a bit of experimentation to realise just how powerful Mono is. Nowhere on their landing page does it tell you that it lets you run .NET Managed EXE files compiled for windows on Linux and even OSX.</p>
<p>I&#8217;m not sure how many of you are aware, but Microsoft&#8217;s .NET languages such as Visual Basic and C# don&#8217;t actually compile into windows specific executable code but they instead get compiled into an &#8216;intermediate&#8217; code similar to Java. This is why you are required to download 80Mb of .NET Framework files to run them on XP.</p>
<p>So, what the clever guys on the Mono Project have done is rewrite the .NET Framework so that it runs on other operating systems. That means that you are able to run software that was compiled for Windows as .NET Managed Code in other operating systems as if it were a native application. Now the system is far from perfect, so you&#8217;re not able to just pick any application and guarantee it will work &#8211; but the project is improving all the time and making more and more programs compatible.</p>
<p>Again, something which is not stated, is how easy this is. Download the Mono application for your machine. And then type: <strong>&#8216;mono MyApplication.exe&#8217; </strong>and wait for the application to run. Hassle free (when it works).</p>
<p>While this may not seem significant to many people, I found it amazing that I could run a bunch of .exe files on my mac directly from my Windows Partition with no problems what-so-ever. My only issue with this technology at the moment, is the inability to have &#8216;browser windows&#8217; in the application run on OSX. They run on Linux apparently, but not on a Mac.</p>
<p>I really hope that .NET developers start making their applications Mono compatible, and I look forward to the browser window component being accessible on a Mac. I&#8217;ll definitely be trying my C# programs on Mono and I may even release some of them soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnwordsworth.com/2008/08/mono-running-net-applications-on-osxlinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
