<?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/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>untoldentertainment.com &#187; Flash</title>
	<atom:link href="http://www.untoldentertainment.com/blog/tag/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.untoldentertainment.com/blog</link>
	<description>We Make Flash Games</description>
	<lastBuildDate>Wed, 01 Feb 2012 15:18:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<copyright>Copyright &#xA9; untoldentertainment.com 2011 </copyright>
	<managingEditor>ryan@untoldentertainment.com (untoldentertainment.com)</managingEditor>
	<webMaster>ryan@untoldentertainment.com (untoldentertainment.com)</webMaster>
	<image>
		<url>http://www.untoldentertainment.com/blog/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>untoldentertainment.com</title>
		<link>http://www.untoldentertainment.com/blog</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>We Make Flash Games</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>untoldentertainment.com</itunes:author>
	<itunes:owner>
		<itunes:name>untoldentertainment.com</itunes:name>
		<itunes:email>ryan@untoldentertainment.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.untoldentertainment.com/blog/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Flash to iOS: A Step-by-Step Tutorial (Part 5)</title>
		<link>http://www.untoldentertainment.com/blog/2011/12/21/flash-to-ios-a-step-by-step-tutorial-part-5/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/12/21/flash-to-ios-a-step-by-step-tutorial-part-5/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:54:38 +0000</pubDate>
		<dc:creator>Sina Kashanizadeh</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=4272</guid>
		<description><![CDATA[This is the fifth part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch. Jump to other parts in the series: Part 1 &#8211; Sign up [...]]]></description>
			<content:encoded><![CDATA[<p><center></p>
<div class="displayed">
<img src="http://www.untoldentertainment.com/blog/img/2011_12_07/iPadAIR.png" alt="Flash to iOS: A Step-by-Step Tutorial" />
</div>
<p></center></p>
<p>This is the fifth part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch.</p>
<p>Jump to other parts in the series:</p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/" title="Flash to iOS: A Step-by-Step Tutorial (Part 1)"><b>Part 1</b> &#8211; Sign up for an Apple iOS Developer Account</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 2)"><b>Part 2</b> &#8211; Obtain your Signing Certificate &#038; Mobile Provisioning Profile, and create your App ID</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 3)"><b>Part 3</b> &#8211; Use FlashDevelop to build your mobile AIR app</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/" title="Flash to iOS: A Step-by-Step Tutorial (Part 4)"><b>Part 4</b> &#8211; Modify your project settings and test your app on an Apple device</a>
</ul>
<h2>Distribution Certificate</h2>
<p>Now that you&#8217;ve tested your app and it&#8217;s to your liking, guess you want to put it up on the App Store? Never fear, my friend! I will now show you how to get your app uploaded on the App Store so the whole world can ignore it and buy <b>Angry Birds</b> instead.</p>
<p>This process of distribution is a bittersweet one. It&#8217;s sweet because it&#8217;s <em>extremely similar</em> to the development process that you just went through, so you should be familiar with the convoluted certificates and hoops you have to jump through at Apple&#8217;s pleasure. It&#8217;s bitter because it&#8217;s <em>extremely similar</em> to the development process that you just went through.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/groundhogDay.jpg" alt="Groundhog Day" /></p>
<p>Something about this seems awfully familiar &#8230;
</p></div>
<p>Enough talk. Let’s get cracking!</p>
<h2>Generate a Signing Certificate Request</h2>
<p>Remember that OpenSSL program that you installed in <a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Guide Part 2 by Untold Entertainment">Part 2 of this tutorial</a>? You have to open that bad boy up again to create another <b>Certificate Signing Request</b>. Now, it <em>is</em> possible to just use your old Signing Certificate &#8211; however, just to be super clear and to avoid any confusion or difficulty, we&#8217;re going to create another one.</p>
<p><b>Note:</b> We&#8217;ll use this new Signing Certificate Request to get a <b>Distribution Certificate</b> rather than a <b>Development Certificate</b>.</p>
<ol>
<li>Open a command prompt window. You can do this by clicking the Windows <b>Start</b> button and typing in <b>cmd</b> in the search field. Alternately, you can also hold the Windows key on your keyboard and hit the &#8220;R&#8221; key (for &#8220;Run&#8221;), then type <b>cmd</b> and hit Enter.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/cmd.jpg" alt="Windows CLI" /></p>
</div>
<li>Once you are in the command prompt, navigate to your Open SSL <b>bin</b> folder. Depending on where you installed it, you will have to navigate to a different path than in this example. (i hope you installed Open SSL in a location that you can remember!)  Check <a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Guide Part 2 by Untold Entertainment">Part 2</a> if you need a refresher on Windows CLI (Command Line Interpreter) commands.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/cd.jpg" alt="Open SSL folder" /></p>
</div>
<li>Punch this command into the CLI and hit the ENTER key when you’re finished:

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl genrsa -out mykey.key 2048</pre></div></div>

<p>You should see this response:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/response.jpg" alt="Response" /></p>
</div>
<li>Next, type (or highlight the line, right-click, choose &#8220;Copy&#8221;, and right-click/&#8221;Paste&#8221; in the CLI):

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl req -new -key mykey.key -out CertificateSigningRequest.certSigningRequest  -subj &quot;/emailAddress=yourAddress<span style="color: #33cc33;">@</span>example.com, CN=John Doe, C=US&quot;</pre></div></div>

<p>Now, before you hit ENTER you’ll want to edit a couple of things. First, replace &#8220;John Doe&#8221; with your own name or company name. Then replace the &#8220;yourAddress@example.com&#8221; email with your own email. Press ENTER.</p>
<p>You should get a message similar to this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/response2.jpg" alt="Response 2" /></p>
</div>
<p>You just generated the <b>Signing Certificate Request file</b> that you&#8217;ll use to ask Apple for your <b>Distribution Signing Certificate</b>. The Signing Certificate Request file is located in the <b>bin</b> folder of your Open SSL install. It has a <b>.certSigningRequest</b> file extension and should look like this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/signingRequest.jpg" alt="Signing Certificate" /></p>
</div>
</ol>
<h2>Obtain a Signing Certificate for Distribution</h2>
<p>You have to upload your <b>Signing Certificate Request file</b> to the <b>Apple Provisioning Portal</b> to get your <b>Distribution Signing Certificate</b>.  Onward.</p>
<p><b>Note:</b> There have been instances where this upload does not work with Google Chrome. Just to be safe, use another browser like Firefox.</p>
<ol>
<li>Navigate to the <a href="http://developer.apple.com/devcenter/ios/index.action" title="Apple iOS Provisioning Portal">Apple iOS Provisioning Portal</a> within the Dev Center.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/portal.jpg" alt="Apple Provisioning Portal" /></p>
</div>
<li>Log in with your developer account and click on <b>Certificates</b>.
<li>Click on the <b>Distribution</b> tab.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/distribution.jpg" alt="Apple Provisioning Portal" /></p>
</div>
<p><b>Note:</b> In our previous tutorials, you requested a certificate from the <b>Development</b> tab.  An app signed with a Development certificate cannot be successfully submitted to the Apple App Store.</p>
<p>If you have an old <b>Distribution Certificate</b> because you&#8217;ve made a prior app, and you&#8217;d still like to follow along, you can go ahead and <b>Revoke</b> it. Revoking the Certificate will not affect your apps that are already on the App Store, because the Certificate is primarily used during the upload process so that Apple can identify you.</p>
<p><b>Note:</b> I recommend revoking an existing Certificate because Apple seems to issue only one Certificate per Team Agent. You must revoke any existing Certificate to be able to request another. Why is it set up like this? I have no idea.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/revoke.jpg" alt="Revoke your Apple Signing Certificate" /></p>
</div>
<li>If you don&#8217;t have a pre-existing <b>Distribution Signing Certificate</b>, you can just go ahead and click <b>Request Certificate</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/requestCertificate.jpg" alt="Request your Apple Signing Certificate" /></p>
</div>
<p>On the next screen, you will upload the <b>Signing Certificate Request file</b> that you generated in the previous section.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/request.jpg" alt="Request" /></p>
</div>
<li>Click the <b>Browse</b> button and navigate to the OpenSSL <b>bin</b> folder.
<li>Select the <b>Signing Certificate Request file</b> and click <b>Submit</b>.  When you are finished, you&#8217;ll see your <b>Distribution Signing Certificate</b> ready to download from the web page.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/yourCertificate.jpg" alt="Your Apple Signing Certificate" /></p>
</div>
</ol>
<p>Don&#8217;t download your <b>Distribution Certificate</b> quite yet. You still need to create an <b>App ID</b> and a <b>Mobile Provisioning Profile</b>.</p>
<h2>Create a New App ID</h2>
<p>When deciding what you want your App ID to be, you have two choices:</p>
<ul>
<li>Create an entirely new App ID
<li>Use the Existing App ID that you create in <a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial by Untold Entertainment">Part 2</a>
</ul>
<p>If you want to use your existing App ID, then just skip to the next section. If for some reason you don’t like the name of your App ID, go ahead and make a new App ID, following the steps outlined in <a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial Part 2 by Untold Entertainment">Part 2</a>.</p>
<h2>Create a Mobile Provisioning Profile for Distribution</h2>
<p>Now that you have an App ID, you can create your <b>Mobile Provisioning Profile</b>.</p>
<ol>
<li> Within the Provisioning Portal website, click <b>Provisioning</b> in the sidebar.
<li>Click the <b>Distribution</b> tab.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/newProfile.jpg" alt="New Provisioning Profile" /></p>
</div>
<p>In previous tutorials, you created a <b>Development</b> profile for testing.  You won&#8217;t be able to upload your app to the Apple App Store unless you create a <b>Distribution</b> profile, so make sure you select the correct tab.</p>
<p>You can either create a new <b>Provisioning Profile</b>, or modify an existing one.  Modifying an existing profile if you want to switch between <b>App Store</b> and <b>Ad Hoc</b> distribution. If you&#8217;ve never created a Distribution profile, read on. Instructions for modifying a profile are in the section following.</p>
<li>Click on <b>New Profile</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/newProfileButton.jpg" alt="New Provisioning Profile Button" /></p>
</div>
<p><b>Note:</b> You&#8217;ll only see this option if you are the fee-paying Team Admin.</p>
<li>In the next section, you&#8217;ll have to fill out a bunch of options. The first option is the <b>Distribution Method</b>. As you can see, you can choose between <b>App Store</b> and <b>Ad Hoc</b>.
<ul>
<li>Choose App Store if you are completely satisfied with your app and you want to submit it to Apple for review. If all goes well, then your app will be released whenever Apple deems it worthy.
<li>The Ad Hoc option can be thought of as a closed beta for your app. When you choose Ad Hoc, you are able to release your app to a maximum of 100 people, and only they will have access to it. Your App will NOT appear in the public App Store if you choose Ad Hoc.
</ul>
<p><b>Note:</b> Notice when you choose <b>App Store</b>, the &#8220;Devices&#8221; option is greyed out. When you choose <b>Ad Hoc</b>, it allows you to choose a number of devices that you have registered. The <b>App Store option</b> releases your app on the public App Store, so it doesn&#8217;t make sense to target specific devices.</p>
<li>Your <b>Profile Name</b> is the name that you want for your <b>Provisioning Profile</b>. The <b>Distribution Certificate</b> that you created should be visible here.
<li>Finally, you have to choose which <b>App ID</b> with which you want to register your <b>Provisioning Profile</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/profileOptions.jpg" alt="Profile Options" /></p>
</div>
<li>Click <b>Submit</b>.
<li>You should ee a list of the <b>Provisioning Profiles</b> that you&#8217;ve created. Click <b>download</b> on the <b>Provisioning Profile</b> that you just created, and save it to you computer.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/saveIt.jpg" alt="Save Your Provisioning Profile" /></p>
</div>
</ol>
<h2>Modify your Provisioning Profile</h2>
<p><b>Note:</b> If you&#8217;re not modifying an existing <b>Provisioning Profile</b> (say, from <b>Ad Hoc</b> to <b>App Store</b>), skip over this section.</p>
<ol>
<li>Within the <b>Provisioning Portal</b> website, click <b>Provisioning</b> in the sidebar.
<li>Click the <b>Distribution</b> tab.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/newProfile.jpg" alt="New Provisioning Profile" /></p>
</div>
<li>Click <b>Modify</b> on the <b>Provisioning Profile</b> that you want to reuse.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/modifyProfile.jpg" alt="Modify Provisioning Profile" /></p>
</div>
<li>Switch to either <b>Ad Hoc</b> or <b>App Store</b>. The distinction between these two options is explained in the preceding section.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/edit.jpg" alt="Edit Provisioning Profile" /></p>
</div>
<li>Click <b>Submit</b>.
<li>You should see a list of the <b>Provisioning Profiles</b> that you&#8217;ve created. Click <b>download</b> on the <b>Provisioning Profile</b> that you just modified, and save it to your computer.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/saveIt.jpg" alt="Save Your Provisioning Profile" /></p>
</div>
</ol>
<h2>Download your Distribution Certificate</h2>
<p>You just need to download the <b>Distribution Signing Certificate</b> that you created at the top of this tutorial,  and then you are ready to bundle your <b>.ipa</b> file to submit to the App Store.</p>
<ol>
<li>Click on the <b>Certificates</b> section in the sidebar.
<li>Click the <b>Distribution</b> tab.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/distribution.jpg" alt="Apple Provisioning Portal" /></p>
</div>
<li>You&#8217;ll see that your <b>Distribution Signing Certificate</b> is ready to download. You can also see that it contains the <b>Distribution Provisioning Profile</b> that you just made.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/ready.jpg" alt="Your Certificate is Ready" /></p>
</div>
</ol>
<li>Click download and save the file to your computer. Just to make things easier, you can save that certificate in the Open SSL <b>bin</b> folder, where your <b>Certificate Signing Request</b> file is sitting.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/hooray.jpg" alt="Hooray!" /></p>
</div>
</ol>
<p><b>Note:</b> Make sure not to get confused between your <em>Development</em> Certificate and Profile, and your <em>Distribution</em> Certificate and Profile.  You won&#8217;t be able to upload your app to the App Store if you accidentally use the Distribution set of certs in these next steps.</p>
<h2>Convert the Signing Certificate to a .p12 File</h2>
<p>You&#8217;ll have to perform the .p12 conversion on your Certificate again, as you did in an earlier tutorial.  Here are the steps:</p>
<ol>
<li>Open up your command prompt.
<li>Navigate to your Open SSL bin folder.
<li>Copy and paste this command:

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl x509 -in distribution_identity.cer -inform DER -out distribution_identity.pem -outform PEM</pre></div></div>

<p>After you enter that command, you&#8217;ll see a .pem file show up in your OpenSSL <b>bin</b> folder.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/pem.jpg" alt=".pem file" /></p>
</div>
<li>Copy and paste this command in the CLI:

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl pkcs12 -export -inkey mykey.key -in distribution_identity.pem -out iphone_dev.p12</pre></div></div>

<p><b>Note:</b> These are the exact same commands that you used for our Development Certificate in an earlier tutorial, except that the file name has been changed from &#8220;development&#8221; to &#8220;distribution&#8221;.</p>
<li>After you punch in the command, enter a password and then verify that password. Make sure the password is something that you will remember. (Save it in a .txt file! – Ed.)
<p><b>Note:</b> Remember that you may get an error mentioning a &#8220;random state&#8221;. Just type in the command set <b>RANDFILE=.rnd</b> and it should fix the problem for you.</p>
<li>Navigate to the <b>bin</b> folder in your Open SSL directory and you should see your <b>.p12</b> file. Hooray!
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_20/p12.jpg" alt=".p12 file" /></p>
</div>
</ol>
<h2>Hello, Planet</h2>
<p>As we mentioned off the top, much of this is familiar territory.  With all of your Distribution certs sorted out, you&#8217;re ready to bundle up your final <b>.ipa</b> file and foist it onto an unsuspecting public.  In the next tutorial, you&#8217;ll follow familiar instructions to bind your certs to your <b>.ipa</b>, and experience that magical moment of uploading your app for Apple&#8217;s approval (followed shortly by that equally magical moment of getting your app rejected cuz BEWBZ.)  Let&#8217;s do it!</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F21%2Fflash-to-ios-a-step-by-step-tutorial-part-5%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F21%2Fflash-to-ios-a-step-by-step-tutorial-part-5%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/12/21/flash-to-ios-a-step-by-step-tutorial-part-5/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=4272&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/12/21/flash-to-ios-a-step-by-step-tutorial-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash to iOS: A Step-by-Step Tutorial (Part 4)</title>
		<link>http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 21:43:56 +0000</pubDate>
		<dc:creator>Sina Kashanizadeh</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=4171</guid>
		<description><![CDATA[This is the fourth part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch. Jump to other parts in the series: Part 1 &#8211; Sign up [...]]]></description>
			<content:encoded><![CDATA[<p><center></p>
<div class="displayed">
<img src="http://www.untoldentertainment.com/blog/img/2011_12_07/iPadAIR.png" alt="Flash to iOS: A Step-by-Step Tutorial" />
</div>
<p></center></p>
<p>This is the fourth part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch.</p>
<p>Jump to other parts in the series:</p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/" title="Flash to iOS: A Step-by-Step Tutorial (Part 1)"><b>Part 1</b> &#8211; Sign up for an Apple iOS Developer Account</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 2)"><b>Part 2</b> &#8211; Obtain your Signing Certificate &#038; Mobile Provisioning Profile, and create your App ID</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 3)"><b>Part 3</b> -Use FlashDevelop to build your mobile AIR app</a>
</ul>
<p>In this section of the tutorial, the rubber meets the road.  You&#8217;ll make all the finicky adjustments to FlashDevelop and the AIR bundling files to get your Hello Planet app up and running on your testing device.</p>
<h2>Point FlashDevelop to the Merged SDK Folder</h2>
<p>Now that your (cr)app is successfully up and running, you have to make a few tweaks and adjustments to FlashDevelop. You&#8217;ll start by telling FlashDevelop all about that merged SDK folder you created in Part 3. </p>
<ol>
<li>In the Project panel on the right, you&#8217;ll see a file called AIR_iOS_readme.txt. Double click that file to open it.
<p>This txt file lists a number of settings needed to get your ipa file working.  The ipa file is the Holy Grail- the native app file that you&#8217;ll send to your testing device to see everything working properly. A window pops up with a bunch of options.</p>
<li>Click the Project Properties button at the top of the Properties Panel (alternately, you can use the menus to navigate to Project>Properties).
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/projectProperties.jpg" alt="FlashDevelop Project Properties"></p>
</div>
<li>Change the version of your AIR SDK from 2.7 to <b>3.0</b> because (at the time of this writing), that is the latest version.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/projectPropertiesOptions.jpg" alt="FlashDevelop Project Properties Options"></p>
</div>
<li>Click on the SDK tab, and click <b>Manage</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/manage.jpg" alt="FlashDevelop Project Properties Options - Manage"></p>
</div>
<li>On the next screen you will see list of installed Flex SDKs. Click the ellipsis (&#8230;) button at the end of that line.  An <b>InstalledSDK Collection Editor</b> window pops up.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/ellipsis.jpg" alt="FlashDevelop Project Properties Options - Flex SDK Location"></p>
</div>
<li>You&#8217;re going to point FlashDevelop to the location of our recently-downloaded Flex SDK (the same folder that contains both the Flex SDK and AIR SDK  that you created earlier in this tutorial).  First click the <b>Add</b> button, and then click on the <b>Path</b> line to get another ellipsis. Click on THAT ellipsis to browse your computer.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/add.jpg" alt="Add"></p>
</div>
<li>Once you have clicked the ellipsis button, a Windows File Browser appears. Navigate to the merged SDK directory. Select that folder and click <b>OK</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/navigate.jpg" alt="Navigate to your merged SDK folder"></p>
</div>
<li>Click <b>OK</b> again to exit the <b>InstalledSDK Collection Editor</b> window.
<li>Click <b>Close</b>.
<li>In the drop-down menu, you should see the Default option. Click on the drop-down list and choose the SDK location you just told FlashDevelop about.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/dropDown.jpg" alt="Choose your Merged SDK profile from the drop-down menu."></p>
</div>
<li>Click <b>Apply</b>.
<li>Click <b>OK</b>. Voila! Your SDK is now setup for your FlashDevelop Project.
<p>Let’s just test it out quickly to see if it works. The code you pasted in the previous tutorial prints out the words &#8220;Hello Planet&#8221; within your app. Well, I&#8217;m going to change mine to say &#8220;Sina is Cool&#8221;, just because I can, and also because I AM COOL. (You may be tempted to replace &#8220;Sina&#8221; with your own name.  Please don&#8217;t, because uh &#8230; your code won&#8217;t work.)</p>
<p>Your resulting app should look like this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/sinaIsCool.jpg" alt="Breaking: Sina is cool."></p>
</div>
<p>A beautiful sight, isn&#8217;t it?</p>
<p>(At this point, Sina actually is pretty damned cool. &#8211; Ed.)</p>
</ol>
<h2>Delete the Extra Icons Folder</h2>
<p>Now you have FlashDevelop set up to create mobile-formatted AIR apps. Your app compiles, and you have your <b>Mobile Provisioning Profile</b> and your <b>.p12 Signing Certificate</b> waiting in the wings. All you need to do is combine all these amazing files together to create the Holy Grail .ipa file.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/holyGrail.jpg" alt="The .ipa file is the Holy Grail of this tutorial series"></p>
<p>Ah &#8211; this is truly the .ipa of a FlashDeveloper.
</p></div>
<p>An <b>.ipa</b> file is like the program file &#8211; the Windows executable (.exe) &#8211; that you need to test your iPhone/iPad App on a device, and ultimately upload it to the Apple App Store.</p>
<p>The creators of FlashDevelop 4 made a minor error when they created the Mobile App template: the template generates a duplicate <b>icons</b> folder that will cause a conflict when you try to bundle your <b>.ipa</b> file. You need to get rid of this extra folder to make sure your .ipa file to builds properly. </p>
<ol>
<li>Look in the right sidebar that lists your files and folders. You&#8217;ll see a folder called <b>bin</b>.  (This is one of the folders that FlashDevelop created for you automatically when you created your project.)
<li>Click on the little plus sign beside the <b>bin</b> folder to expand it. You will see a folder called <b>icons</b> tucked inside. Right-click the <b>icons</b> folder and click <b>Delete</b>. Problem solved.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/delete.jpg" alt="Delete the icons folder to avoid a conflict later"></p>
</div>
</ol>
<h2>Integrate Your Cert Files</h2>
</ol>
<li>Copy your <b>Mobile Provisioning Profile</b> and your <b>.p12 Signing Certificate</b> into the <b>certs</b> folder of your project. If you&#8217;ve been following along with this tutorial from the beginning, you probably saved these two files in the <b>bin</b> folder of your OpenSSL install.
<p>Once the files are in the right place, they should show up in your Project sidebar:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/certs.jpg" alt="You put yer WEED in there."></p>
</div>
<p>To create the <b>.ipa</b>, you have to edit a couple of lines in a <b>batch file</b> so that the app compiles properly. Don’t be scared: a batch file (.bat) is simply a text file that runs a script when you double-click it in Windows. You can open up a batch file by using a text editor of any kind.  Since you&#8217;ve already got FlashDevelop open, it makes a lot of sense to use it to edit the batch files.</p>
<p>In the following screenshot, I&#8217;ve opened up the ReadMe file that describes the iOS compilation steps. Step 5 talks about editing a batch file. Take a read if you&#8217;re nervous.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/readme.jpg" alt="iOS compilation readme"></p>
</div>
<li>In the sidebar, find the <b>bat</b> folder and expand it.
<li>Double-click the <b>SetupApplication.bat</b> file. The file should open in FlashDevelop.
<li>In the batch file, you should see some green text that says <b>ios packaging</b>, and a bunch of <b>set</b> options beneath it. This is where you have to add or adjust some text. In the IOS_DEV_CERT_FILE line, type the path to your .p12 <b>Signing Certificate</b> file (the one you just copied into the <b>certs</b> folder). You only have to use a <em>relative path</em> (one that describes where the file is in relation to the compilation target), so just copy what I have and you should be fine:

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">cert\iphone_dev.p12</pre></div></div>

<li>In the IOS_DEV_CERT_PASS line, you have to enter password that you set when you made your <b>Signing Certificate</b>. (Don&#8217;t come crying to me if you don&#8217;t remember it &#8211; i told you to write it down &#8211; Ed.)
<li>In the IOS_PROVISION line, type the name of your <b>Mobile Provisioning Profile</b>.
<p>All in all your SetupApplication.bat should look like this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/setupApplication.jpg" alt="SetupApplication.bat"></p>
</div>
<p><b>Note:</b> Make sure you have the path properly setup as well as the same exact filename. If you have any sort of typo, it&#8217;s not going to work.
</ol>
<h2>Get Your Ducks in a Row</h2>
<p>You&#8217;re almost there! All you have to do is edit the <b>SetupSDK.bat</b> file.</p>
<ol>
<li>Double-click the <b>SetupSDK.bat</b> file to open it in FlashDevelop.
<li>At the top of the file, you&#8217;ll see a line that says <b>path to Flex SDK</b> in green. Right under that line is the path to the SDK. However, it&#8217;s not pointing to the merged SDK folder that we created earlier. Replace the default path with the path to your merged SDK folder. It might look similar to this:
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/setupSDK.jpg" alt="SetupSDK.bat"></p>
</div>
<p><b>Note:</b> Remember to save often!</p>
<li>Open the <b>application.xml</b> file. This xml file is the descriptor file for your application. You have to double-check to ensure everything in there is correct. Everything from your App name to the version of your App is located in this file.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/applicationXML.jpg" alt="Application.xml"></p>
</div>
<li>Change the version number at the end of the <b>xmlns</b> parameter of the root <b>application</b> node to the version of AIR you&#8217;re running. In this case (and at the time of this writing), it&#8217;s <b>3.0</b>.
<li>In the <b>id</b> node, enter the package name that you created for your <b>Mobile Provisioning Profile</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/applicationXMLChanges.jpg" alt="Application.xml changes"></p>
</div>
<p>If you don’t remember what your Bundle ID was, go to the Provisioning Portal on the <a href="http://developer.apple.com" title="Apple Developer Site">iOS developer website</a> and click on <b>Provisioning</b>.</p>
</ol>
<h2>Compile Time</h2>
<p>After all that, you&#8217;re finally ready to compile your <b>.ipa</b> file to test on an iOS device.</p>
<ol>
<li>In the sidebar, right-click the <b>PackageApp.bat</b> file and select <b>Execute</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/execute.jpg" alt="Execute!"></p>
</div>
<li>You&#8217;ll see a bunch of options. Since this is only a test, you can pick the <b>fast test</b> option. This option will quickly create an <b>.ipa</b> file for you to throw onto your iWhatever. Once you choose <b>fast test</b>, sit back and relax.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/choices.jpg" alt="Choices"></p>
</div>
<li>Look in the <b>dist</b> folder in the sidebar. You now have an <b>.ipa</b> file!
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/success.jpg" alt="Success!"></p>
</div>
</ol>
<h2>Test Your New App</h2>
<p>Take a moment and soak in what you&#8217;ve accomplished. You&#8217;re in the final steps of your epic journey of iEnlightenment. All you have to do now is load the hard-fought <b>.ipa</b> file up on your iWhatever.</p>
<p>I made a copy of my <b>Mobile Provisioning Profile</b> and my <b>.ipa</b> file and put them in a separate folder. I suggest you do the same as a backup measure &#8230; better safe than sorry.  Now let&#8217;s get that sucker onto your device.</p>
<ol>
<li>Plug in your iPhone/iPad/iPod Touch/iEtCetera and let it sync in iTunes.
<li>After it&#8217;s synced, go to <b>Library -> Apps</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/iTunes.jpg" alt="iTunes"></p>
</div>
<li>To add your <b>Mobile Provisioning Profile</b>, click and drag it from your folder into the <b>iTunes Library</b>.
<li>Follow the same process to add your <b>.ipa</b> file.
<p><b>Note:</b> You have to add your <b>Mobile Provisioning Profile</b> before you add your <b>.ipa</b> file! If you add these files in the wrong order, you may get errors!</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/dragAndDrop.jpg" alt="Drag and drop your files into iTunes"></p>
</div>
<p>After dragging your <b>.ipa</b> file into iTunes, you&#8217;ll see a generic App icon that FlashDevelop/AIR generated for you.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/genericIcon.jpg" alt="Generic Apple App Icon"></p>
</div>
<li>In the left sidebar, click on <b>Devices -> Your iPad/iPod/iPhone</b>.
<li>Click on the little <b>Apps</b> button at the top of iTunes. You&#8217;ll see a screen that displays all your Apps. Within that screen, you should be able to find your App (you may have to scroll around a little to find it).
<li>Click the <b>Apply</b> button to transfer everything to your device.
<p>iTunes will go through the syncing process, and will add your App to your device. You can click sync a few more times just to make sure everything is good &#8211; iTunes doesn&#8217;t always behave perfectly on a PC.</p>
<p><b>Note:</b> If you get an error saying that the App failed to install, your <b>Bundle ID</b> or something within your <b>Application.xml</b> may be wrong. Double-check everything! There is no harm in deleting your App and from iTunes and transferring it again. You can also overwrite your <b>Mobile Provision Profile</b> with a corrected one.</p>
<p><b>DOUBLE NOTE:</b> If you change anything in your project, you must compile your <b>.ipa</b> file again, because it contains all the new information necessary for iTunes to run your App.</p>
<li>Fire up your iPad/iPhone and BAM!
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/beautiful.jpg" alt="AIR on iOS"></p>
</div>
<p>It’s so &#8230; beautiful. *sniff*
</ol>
<h2>To the App Store &#8230; and Beyond!</h2>
<p>In this section of the tutorial, you:</p>
<ul>
<li>Pointed FlashDevelop to your merged AIR/Flex SDK folder
<li>Corrected an error with the Mobile AIR template by deleting an extraneous icons folder
<li>Copied your <b>Mobile Provisioning Profile</b> and your <b>.p12 Signing Certificate</b> into your project and pointed FlashDevelop to them
<li>Pointed the SetupSDK.bat file to the merged SDK folder
<li>Modified the application.xml descriptor file to match your project settings
<li>Compiled your project and created an <b>.ipa</b> file
<li>Copied your <b>.ipa</b> file and <b>Mobile Provisioning Profile</b> into iTunes
<li>Synced your app and ran it on your testing device!
</ul>
<p>With your project set up, you can continue developing your application until you have an amazing <em>thing</em> that you&#8217;re ready to foist on the app-buying public. There are still a few more things you need to know to deploy your app to the live iTunes store.  What about that generic AIR icon?  Wouldn&#8217;t you like to see something nicer in its place?  And how do you get your <b>.ipa</b> file in front of the app-approvers at Apple to get it to show up in iTunes?  And are we finished with certificates and profiles, or is there more to do?</p>
<p>Short answer? <em>There&#8217;s more to do.</em>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F14%2Fflash-to-ios-a-step-by-step-tutorial-part-4%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F14%2Fflash-to-ios-a-step-by-step-tutorial-part-4%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=4171&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Buy This Book! Buttonless: Incredible iPhone and iPad Games and the Stories Behind Them</title>
		<link>http://www.untoldentertainment.com/blog/2011/12/13/buy-this-book-buttonless-incredible-iphone-and-ipad-games-and-the-stories-behind-them/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/12/13/buy-this-book-buttonless-incredible-iphone-and-ipad-games-and-the-stories-behind-them/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 16:59:32 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[ponycorns]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=4239</guid>
		<description><![CDATA[A few months ago, an author named Ryan Rigney contacted me and asked if i would provide an interview about Sissy&#8217;s Magical Ponycorn Adventure, the iPad game i created with my 5-year-old daughter Cassandra. Ryan&#8217;s been collecting interviews from top iOS developers to create]]></description>
			<content:encoded><![CDATA[<p>A few months ago, an author named Ryan Rigney contacted me and asked if i would provide an interview about <b><a href="http://www.ponycorns.com" title="Sissy's Magical Ponycorn Adventure">Sissy&#8217;s Magical Ponycorn Adventure</a></b>, the iPad game i created with my 5-year-old daughter Cassandra.  Ryan&#8217;s been collecting interviews from top iOS developers to create <b><a href="href="http://www.amazon.com/gp/product/1439895856/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=worgamwor-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1439895856" title="Buttonless: Incredible iPhone and iPad Games and the Stories Behind Them">Buttonless: Incredible iPhone and iPad Games and the Stories Behind Them</a></b>, which gives a behind-the-scenes look at the development of your favourite touch-based games:  </p>
<div class="displayed">
<p><a href="http://www.amazon.com/gp/product/1439895856/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=worgamwor-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1439895856"><img src="http://ecx.images-amazon.com/images/I/51p5JslCL6L._SL500_AA300_.jpg" alt="Buttonless: Incredible iPhone and iPad Games and the Stories Behind Them"></a></p>
</div>
<p>The book includes interviews from the developers of these fine titles:</p>
<ul>
<li><b>Canabalt</b>
<li><b>Sword and Sworcery EP</b>
<li><b>Infinity Blade</b>
<li><b>Angry Birds</b>
<li><b>Words with Friends</b>
<li><b>Plants vs. Zombies</b>
</ul>
<p>It really is a remarkable collection of stories, and a very current must-read book for you if you&#8217;re currently embroiled in, or are considering, iOS development.</p>
<p>Ponycorns started life as an online Flash game, but now enjoys success on mobile platforms.  For a lesson on how to port your Flash games to iOS, check out <a href="http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/" title="Flash to iOS: A Step-by-Step Tutorial">Flash to iOS: A Step-by-Step Tutorial</a> right here at Untold Entertainment.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F13%2Fbuy-this-book-buttonless-incredible-iphone-and-ipad-games-and-the-stories-behind-them%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F13%2Fbuy-this-book-buttonless-incredible-iphone-and-ipad-games-and-the-stories-behind-them%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/12/13/buy-this-book-buttonless-incredible-iphone-and-ipad-games-and-the-stories-behind-them/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=4239&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/12/13/buy-this-book-buttonless-incredible-iphone-and-ipad-games-and-the-stories-behind-them/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash to iOS: A Step-by-Step Tutorial (Part 3)</title>
		<link>http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:25:16 +0000</pubDate>
		<dc:creator>Sina Kashanizadeh</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=4193</guid>
		<description><![CDATA[This is the third part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch. Jump to other parts in the series: Part 1 &#8211; Sign up [...]]]></description>
			<content:encoded><![CDATA[<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_07/iPadAIR.png" alt="Flash to iOS: A Step-by-Step Tutorial"></p>
</div>
<p>This is the third part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch.</p>
<p>Jump to other parts in the series:</p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/" title="Flash to iOS: A Step-by-Step Tutorial (Part 1)"><b>Part 1</b> &#8211; Sign up for an Apple iOS Developer Account</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 2)"><b>Part 2</b> &#8211; Obtain your Signing Certificate &#038; Mobile Provisioning Profile, and create your App ID</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/" title="Flash to iOS: A Step-by-Step Tutorial (Part 4)"><b>Part 4</b> &#8211; Modify your project settings and test your app on an Apple device</a>
</ul>
<h2>Luke Loses His Hand</h2>
<p><a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 2)">Part 2</a> of this tutorial was like <b>The Empire Strikes Back</b>.  It was the crisis moment in the story of deploying a Flash project to the Apple iOS platform.  It was dark, it was difficult, and Han Solo wound up frozen in carbonite.  Part 3 is redemptive: with all that command line and certificate red tape out of the way, you can finally build our AS3 app using FlashDevelop. Watch closely, friends: you may spot some ewoks.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/iPhone.jpg" alt="It's a trap."></p>
<p>It&#8217;s a trap.
</p></div>
<h2>Install Flash Develop</h2>
<p>As I mentioned earlier in the series, FlashDevelop is a FREE, PC-only coding environment that is used throughout the industry and loved by many. If you haven&#8217;t installed it, <a href="http://www.flashdevelop.org/community/viewforum.php?f=11">head here to download the latest version.</a></p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/fd4.jpg" alt="FlashDevelop 4"></p>
</div>
<p>FlashDevelop is an IDE (Integrated Development Environment) where you can create many different types of applications from scratch.  The most amazing thing about FlashDevelop is that you don’t actually need to buy Adobe&#8217;s Flash Professional software to create Flash (swf) content. FlashDevelop has amazing, time-saving features like importing code libraries on the fly, and numerous awesome templates. At the time of this writing, the latest edition of FlashDevelop is 4.0.0. This version of FlashDevelop contains a template for Mobile AIR applications which you can use for iOS and Android development. In this tutorial, you&#8217;ll use the iOS version of the template.</p>
<h2>Create a Merged SDK Folder</h2>
<p>There are two SDKs (Software Development Kits) you&#8217;ll need to deploy Flash content to the iOS platform: Flex and AIR. Depending on the version of FlashDevelop you install, these two SDKs may already be included in the download.  You&#8217;re going to download them both anew and put them in a single folder. That way, if you mess anything up, you can take off and nuke the site from orbit instead of messing up your main FD install.  It&#8217;s the only way.</p>
<ol>
<li><a href="http://www.adobe.com/special/products/air/sdk/thankyou.html?download=win" title="Download Adobe AIR SDK">Download the latest AIR SDK</a> (which, at the time of this writing, was v3.0)
<li><a href="http://opensource.adobe.com/wiki/display/flexsdk/Downloads" title="Download the latest Flex SDK">Download the Flex SDK</a>.
<li>These two packages download as <b>.zip</b> files.  Extract them wherever you like on your computer &#8211; just make sure you know where you put them.
<li>Once you have both SDK&#8217;s extracted to separate folders, copy everything in the AIR SDK folder into the Flex SDK folder. Windows will ask you if you want to overwrite certain files. Say &#8220;yes&#8221; to everything.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/merge.jpg" alt="Merged SDK folder"></p>
</div>
<p>You now have a folder with the <b>Flex SDK</b> and the <b>AIR SDK</b> merged into one. This is a Good Thing™.</p>
</ol>
<h2>Point FlashDevelop to the Flex SDK</h2>
<p>In order to compile (build and execute) your app, you have to point FlashDevelop to the merged SDK folder that you just created.</p>
<ol>
<li>Open up FlashDevelop and hit <b>F10</b> or go to <b>Tools->Program Settings</b> in the menus.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/programSettings.jpg" alt="Program Settings"></p>
</div>
<li>In the Program Settings menu, click on <b>AS3 Context</b>.
<li>Find the <b>Language</b> section, and the <b>Flex SDK Location</b> line within it.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/as3Context.jpg" alt="AS3 Context"></p>
</div>
<li>Click the ellipsis button at the end of that line, and navigate to the merged SDK folder.
<li>Click <b>Close</b> to commit the change.
</ol>
<h2>Set Up Your Mobile AIR Application</h2>
<p>Once you have downloaded and installed FlashDevelop, open it up and you should see it in all its glory:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/fdInterface.jpg" alt="FlashDevelop 4 Interace"></p>
</div>
<p>To begin with, you&#8217;ll need to create a new FlashDevelop project, which is a group of folders governed by a file filled with metadata about your project.</p>
<ol>
<li>Create a new project by clicking <b>Project -> New Project</b> in the menu.
<li>Now you will see a screen with a multitude of options. These are all project starter templates that FlashDevelop has for you to use. The one you want is the <b>AIR Mobile AS3 App</b>. Select this template, choose a location on your hard drive to save it, give a name to your project, and hit OK.
<p>Note: A package name is not required but the option is there if you&#8217;d like to use it.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/fdTemplates.jpg" alt="FlashDevelop 4 Project Templates"></p>
</div>
<p>After you hit OK, FlashDevelop creates a number of folders and files for you, including:</p>
<ul>
<li>The .as3proj file, which is a FlashDevelop project file filled with metadata that keeps track of various aspects of your project.
<li>The <em>bin</em> folder. This is where your finished files end up.
<li>The <em>lib</em> folder, where you can put your &#8220;construction&#8221; files and artwork.
<li>The <em>src</em> folder, which contains your .as AS3 code files.
</ul>
<li>Once you&#8217;ve created your project file, FlashDevelop starts you off with a blank screen. To open up your code, click on the <b>src</b> folder in the Project sidebar on the right. (The Project sidebar lists your computer&#8217;s actual directory structure so that you can access your Actionscript files quickly and easily.)
<li>Inside the <b>src</b> folder, double click the <b>Main.as</b> file to open it. This is your project&#8217;s point of entry, where you can start writing the code for your app.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/main.jpg" alt="FlashDevelop 4 Main.as"></p>
</div>
<li>Push the F5 key on your keyboard, or the click the little play button at the top-middle of FlashDevelop to compile and run your project.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/compile.jpg" alt="FlashDevelop 4 Compile Button"></p>
</div>
<p>The first compile will take little bit of time, but any compile after that should be quick, because the compiler builds on an as-needed basis, compiling only your most recent changes (as opposed to Flash Professional, which compiles your ENTIRE project every single time. Bleh!). Once you run your new project, the FlashPlayer should pop up and you should see a blank screen. Luckily, this is exactly what we want. As of right now, this is your App.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/blankApp.jpg" alt="FlashDevelop 4 Blank App"></p>
</div>
</ol>
<h2>Hello, Planet</h2>
<p>This is nice and all, but let&#8217;s try to the write a simple message on screen so that when we are testing, we know it actually works. Let&#8217;s write &#8220;Hello Planet&#8221; on-screen.</p>
<ol>
<li>Just below the green commented line where it says //entry point in your <b>Main.as</b> file, copy and paste these lines into your code:

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> tf:<span style="color: #0066CC;">TextField</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextField</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;  
<span style="color: #000000; font-weight: bold;">var</span> format:<span style="color: #0066CC;">TextFormat</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextFormat</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;  
format.<span style="color: #0066CC;">font</span> = <span style="color: #ff0000;">&quot;_sans&quot;</span>;  
format.<span style="color: #0066CC;">size</span> = <span style="color: #cc66cc;">48</span>;  
tf.<span style="color: #006600;">defaultTextFormat</span> = format;  
tf.<span style="color: #0066CC;">text</span> = <span style="color: #ff0000;">&quot;Hello Planet&quot;</span>;  
tf.<span style="color: #0066CC;">width</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span> - <span style="color: #cc66cc;">20</span>;  
tf.<span style="color: #006600;">x</span> = <span style="color: #cc66cc;">10</span>;  
tf.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">10</span>;  
addChild<span style="color: #66cc66;">&#40;</span>tf<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/entryPoint.jpg" alt="Code Entry Point"></p>
</div>
<li>Click the compile button (or press F5). Did it screw up? Good. There are a couple more things you have to do before you are ready to compile without errors.
<li>In your code, click to place your cursor carat on the word <b>Textfield</b> and hit Ctrl+Shift+1 on your keyboard. The word turns blue. If you scroll to the top of the class, you&#8217;ll notice that there is an extra import line at the top of your code. CTRL+SHIFT+1 is a special feature of FlashDevelop that does code completion. In this instance, CTRL+SHIFT+1 automatically handles your import statements for you.  You need to import the TextField code with this statement if you want your TextField to work.
<li>Use CTRL+SHIFT+1 on the <b>TextFormat</b> word and you should see this:
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/imports.jpg" alt="Import Statements"></p>
</div>
<li>Now click Compile (or press F5).
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_03/helloPlanet.jpg" alt="Hello Planet"></p>
<p>Thar she blows!
</p></div>
<p>(It works, but it&#8217;s no Angry Birds. &#8211; Ed.)
</ol>
<h2>Bust Out the Hardware</h2>
<p>This is moving along nicely.  You:</p>
<ul>
<li>Installed FlashDevelop, a free and open-source IDE for creating Flash and AIR content
<li>Downloaded and sunk the latest AIR SDK and Flex SDK into a single, merged folder
<li>Pointed FlashDevelop to the Flex SDK to use its superior compiler
<li>Created a new FlashDevelop project using the Mobile AIR application template
<li>Wrote and compiled a new Hello Planet AIR app that you can deploy to a testing device
</ul>
<p>In the next part of the tutorial, you&#8217;ll fine-tune FlashDevelop and modify a number of settings and batch files to create the magical, mystical <b>.ipa</b> file, and you&#8217;ll see that file running on your testing device.<br />
</a></p>
<p><a href="http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/" title="Flash to iOS: A Step-by-Step Tutorial (Part 4)">Continue to <b>Part 4</b></a>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F07%2Fflash-to-ios-a-step-by-step-tutorial-part-3-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F12%2F07%2Fflash-to-ios-a-step-by-step-tutorial-part-3-2%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=4193&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Flash to iOS: A Step-by-Step Tutorial (Part 2)</title>
		<link>http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 15:09:49 +0000</pubDate>
		<dc:creator>Sina Kashanizadeh</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=4097</guid>
		<description><![CDATA[This is the second part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch. Jump to other parts in the series: Part 1 &#8211; Sign up [...]]]></description>
			<content:encoded><![CDATA[<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_07/iPadAIR.png" alt="Flash to iOS: A Step-by-Step Tutorial"></p>
</div>
<p>This is the second part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch.</p>
<p>Jump to other parts in the series:</p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/" title="Flash to iOS: A Step-by-Step Tutorial (Part 1)"><b>Part 1</b> &#8211; Sign up for an Apple iOS Developer Account</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 3)"><b>Part 3</b> -Use FlashDevelop to build your mobile AIR app</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/" title="Flash to iOS: A Step-by-Step Tutorial (Part 4)"><b>Part 4</b> &#8211; Modify your project settings and test your app on an Apple device</a>
</ul>
<h2>Drudgery</h2>
<p>Without a doubt, this section of our tutorial series on bundling your Adobe AIR App for Apple&#8217;s iOS platform is the pits.  You have to use a complicated command line interpreter, you have to juggle what may feel like a million different certificates and profiles, and you have to jump through a dizzying array of hoops just to get everything set up &#8230; and you&#8217;re not even going to <em>start</em> building your app at all!  But trust me: once you&#8217;ve cleared these hurdles, the rest of the process is gravy. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/gravy.jpg" alt="Gravy"></p>
<p>Thick, delicious gravy.
</p></div>
<p>The first goal of this tutorial is to create a <em>signing certificate</em>, which is used very much like a hot brand on cattle. It&#8217;s the digital signature of you or your company that identifies an app as your own. We need to use a program called OpenSSL to create this signing certificate.</p>
<h2>Install Open SSL</h2>
<p>In order to turn your future AIR project into a native app, you need to create two important files: a Signing Certificate and a Mobile Provisioning Profile. If you are working on a Mac, you actually use a program called Keychain to do some fancy voodoo magic and get the certificate you need.  We are working on a PC and we do not have that luxury, so there are a couple of confusing steps that we must go through. </p>
<p>The first thing you have to do is go to <a href="http://www.slproweb.com/products/Win32OpenSSL.html">http://www.slproweb.com/products/Win32OpenSSL.html</a>. Scroll down, and then download the Visual C++ 2008 Redistributables and install the resulting file. Next, download the <b>Win32 OpenSSL v1.0a Light</b> file and install that after you have installed the first package. These two files will help you create the Signing Certificate Request you so richly deserve.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/openSSL.jpg" alt="OpenSSL"></p>
</div>
<p>Be sure to keep track of where you installed those last two elements. Next, visit this site:</p>
<p><a href="http://help.adobe.com/en_US/as3/iphone/index.html">http://help.adobe.com/en_US/as3/iphone/index.html</a>.</p>
<p>These are Adobe&#8217;s help files for generating your signing certificate and then converting that certificate into a .P12 file. If you get lost in this tutorial, that page will be your safety net.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/adobeHelpPage.jpg" alt="Adobe Help Page"></p>
</div>
<p>On that Adobe support page, you will see some instructions for Mac machines. Ignore them.  Scroll down to the Windows instructions and give them a once-over.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/instructions.jpg" alt="Instructions"></p>
</div>
<p>The instructions say that you have to install Open SSL. You&#8217;ve already done that. Open a command prompt window. You can do this by going to your <b>Start</b> button and typing in cmd in the search field.  (You can also hold the Windows key on your keyboard and hit the &#8220;R&#8221; key (for &#8220;Run&#8221;), then type <b>cmd</b> and hit Enter.)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/cmd.jpg" alt="CMD"></p>
</div>
<p>Once you are in the command prompt, travel your way to your Open SSL bin folder. Depending on where you installed it you will have to travel to a different path than in this example.  (For your sake, i hope you installed Open SSL in a location that you can remember!) </p>
<p>If this is your first time using the command prompt, here&#8217;s a quick primer on the commands that will help you get around:</p>
<ul>
<li><b>cd</b> This command means &#8220;Change Directory&#8221;. If you are in a directory and you want to go into one of its sub-directories, use this command plus the directory name (example: cd directoryName)
<li><b>cd..</b> This command will pull you up one level in your directory structure
<li><b>dir</b> Type this command to see a list of all of the files and folders within your current directory
<li><b>dir /w</b> The /w (wide) switch spreads a directory listing across multiple columns.  This is useful for seeing all the folder names at a glance, instead of in one big long scrolling list.
</ul>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/cd.jpg" alt="CLI Commands"></p>
</div>
<p>You may have some problems getting some of the following commands to work. A fine commenter (and Ontario resident!) named Dan Zen mentioned on the Adobe guide&#8217;s comments section that you may need to input <b>set RANDFILE=.rnd</b> in your command prompt before the following commands will work properly.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/randfile.jpg" alt="RANDFILE command"></p>
</div>
<h2>Generate a Signing Certificate Request File</h2>
<p>With all of that taken care of, you can start inputting some commands to create your Signing Certificate Request file.  Once you have that file, you&#8217;ll use it to ask Apple for your proper Signing Certificate file that you&#8217;ll use to identify your app. </p>
<ol>
<li> Punch this command into your command line interpreter and hit the ENTER key when you&#8217;re finished:

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl genrsa -out mykey.key 2048</pre></div></div>

<p>You should see this response:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/response.jpg" alt="response"></p>
</div>
<li>Next, type (or highlight the line, right-click, choose &#8220;Copy&#8221;, and right-click/&#8221;Paste&#8221; in the command line interpreter):

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl req -new -key mykey.key -out CertificateSigningRequest.certSigningRequest  -subj &quot;/emailAddress=yourAddress<span style="color: #33cc33;">@</span>example.com, CN=John Doe, C=US&quot;</pre></div></div>

<li>Now, before you hit ENTER you&#8217;ll want to edit a couple of things. First, replace &#8220;John Doe&#8221; with your own name or company name. Then replace the &#8220;yourAddress@example.com&#8221; email with your own email. Then press ENTER.
<p>You should get a message similar to this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/response2.jpg" alt="response"></p>
</div>
<p>You just generated the Signing Certificate Request file that you&#8217;ll use to ask Apple for your Signing Certificate. The  Signing Certificate Request file is located in the <em>bin</em> folder of your Open SSL install.  It has a <em>.certSigningRequest</em> file extension and should look like this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/signingRequest.jpg" alt="Certificate Signing Request file"></p>
</div>
</ol>
<h2>Obtain a Signing Certificate for Development</h2>
<p>You have to upload your Signing Certificate Request file to the Apple Provisioning Portal to get your signing certificate.</p>
<p>Note: There have been instances where this upload does not work with Google Chrome. Just to be safe, use another browser like Firefox.</p>
<ol>
<li>Navigate to the iOS Provisioning Portal after logging in with your <a href="http://developer.apple.com">developer account</a> and click on <b>Certificates</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/certificates.jpg" alt="Certificates"></p>
</div>
<li>Click <b>Request Certificate</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/requestCertificate.jpg" alt="Request Certificate"></p>
</div>
<p>Note: If you are a team member and/or you have not paid the annual developer fee of $99 dollars, then you cannot request a Signing Certificate. Only the Team Admin &#8211; the person who has paid the development fee &#8211; will be able make this request.</p>
<p>On the next screen, you will upload the Signing Certificate Request file that you generated in the previous section.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/generateCertificate.jpg" alt="Generate Certificate"></p>
</div>
<li>Click the <b>Browse</b> button and navigate to the <b>bin</b> folder located within your OpenSSL folder.
<li>Once you have selected the Signing Certificate Request file, click Submit. Your next screen should show this:
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/pending.jpg" alt="Certificate Pending"></p>
</div>
<li>Just hit <em>Refresh</em> a couple of times on your browser and you should eventually see this:
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/certificateReady.jpg" alt="Certificate Ready"></p>
</div>
<li>It&#8217;s your Signing Certificate! Go ahead and download it. Just to make things easier, you can save that certificate in the <b>bin</b> folder in the Open SSL folder, where your Certificate Signing Request file is sitting.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/saveCertificate.jpg" alt="Save Certificate"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/saveCertificate2.jpg" alt="Save Certificate 2"></p>
</div>
<h2>Convert the Signing Certificate to a .p12 File</h2>
<p>Are you having fun yet? Yeah, me neither. We are making good progress though. The next step is converting that Signing Certificate to a p12 certificate, because <em>Apple loves certificates</em>.</p>
<ol>
<li>From the Adobe help page, visit the link describing the process of <a href="http://help.adobe.com/en_US/as3/iphone/WS144092a96ffef7cc-371badff126abc17b1f-7fff.html">converting a developer certificate to a p12 file</a>. You get a list of more commands that you&#8217;ll have to punch into your trusty old command prompt.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/helpPage2.jpg" alt="Adobe Help Page 2"></p>
</div>
<li>Copy the first command (highlight the text, right-click and select &#8220;Copy&#8221; from the context menu):

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM</pre></div></div>

<li>Open up your command prompt as I showed earlier, and navigate to the <b>bin</b> folder of your Open SSL directory.
<li>Once you&#8217;re there, paste in the first command (right-click and select &#8220;Paste&#8221; from the context menu), and press ENTER.
<li>Skip ahead to Step 3 of the Adobe help guide and copy that command. (The command in Step 2 is for Macs only.)

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12</pre></div></div>

<li>Once you punch in the command, enter a password and then verify that password. Make sure the password is something that you will remember.  (Save it in a .txt file in that folder if you&#8217;ve got a lousy memory like me &#8211; Ed.) When you are typing in your password, the command prompt does not give you the luxury of seeing dots or asterisks to indicate how many letters you are typing in. Rest assured that the command is accepting your input.
<p>Note: You <em>may</em> get an error mentioning a &#8220;random state&#8221;. Just type in the command <b>set RANDFILE=.rnd</b> and it should fix the problem for you.</p>
<li>Go into the <b>bin</b> folder in your Open SSL directory and you should see your .p12 file.  Hooray!
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/p12file.jpg" alt="p12 Signing Certificate"></p>
</div>
</ol>
<h2>Create an App ID</h2>
<p>Now that you have the precious file you need, it&#8217;s finally time to create your Mobile Provisioning Profile.  You&#8217;ll start by setting up a unique ID for the app you&#8217;re creating.</p>
<ol>
<li>Navigate back to the <b>Provisioning Portal</b> in your web browser to create an App ID for your app. <a href="http://developer.apple.com" title="Apple Developer Portal">Log in</a>, click on <b>Provisioning Portal</b>, and click on <b>App IDs</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/appIDs.jpg" alt="App IDs"></p>
</div>
<li>Click <b>New App ID</b>.
<p>Note: If you have not paid the developer fee, or if you are just a team member of the Team Admin, you will not see this option. Ask your Team Admin to complete this step.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/newAppID.jpg" alt="New App ID"></p>
</div>
<li>On the next screen you&#8217;ll start by writing a Description for your app, which can be anything you want. (This is what the player will see when he sees your app in the App Store. Obviously, there&#8217;s a whole marketing concern here that&#8217;s outside the scope of this tutorial.  Since we&#8217;re just building a test app, i recommend you punch SOME CRAZY NONSENSE in there for your description.  Take THAT, marketing.  -Ed)
<p>Within the <b>Bundle Seed ID (App ID Prefix)</b> you will have various options, depending on your account status. If you are the Team Admin, you&#8217;ll have a &#8220;Generate New&#8221; option. Team Members will only see a &#8220;Use Team ID&#8221; option.  (If this is not your first App, you could also choose the Bundle Seed IDs for previous project). Either way, leave it at the default.</p>
<p>The <b>Bundle Identifier</b> lets you create a specific package for your App. The standard way to make this package is to reverse the name of your website domain. I used com.sina.ipadtest. (Our team uses com.untoldentertainment.whatever &#8211; Ed.)</p>
<p>Alternately, you can use a generic Bundle Identifier by just putting an &#8220;*&#8221; in the field.</p>
<p><b>Note:</b> There have been cases where the asterisk does not work for some people. It is a safe bet you make a specific namespace like the examples above.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/appDescription.jpg" alt="App Description"></p>
</div>
<li>Click <b>Submit</b>.
<p>Voila &#8211; you have now created your App ID! On the next screen you will see all of the app profiles you&#8217;ve created. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/appIDResults.jpg" alt="App ID Results"></p>
</div>
</ol>
<h2>Create a Mobile Provisioning Profile</h2>
<p>Now that you have an <b>App ID</b>, you can now create your <b>Mobile Provisioning Profile</b>.  This is the crowning touch to everything we&#8217;ve done in this tutorial so far. The Mobile Provisioning Profile glues your developer(s), your Signing Certificate, your app ID and your testing device together.  Once you have this file, you&#8217;ll be able to test an app on your device.  </p>
<ol>
<li>Within the Provisioning Portal website, click <b>Provisioning</b> in the sidebar.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/provisioningPortal.jpg" alt="Apple Provisioning Portal"></p>
</div>
<li>Click on <b>New Profile.</b>
<p>Note: You only see this option if you are the fee-paying Team Admin.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/newProfile.jpg" alt="New Apple Provisioning Portal"></p>
</div>
<li>Give your provisioning profile a <b>Profile Name</b>.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/nameProfile.jpg" alt="Apple Name Your Provisioning Profile"></p>
</div>
<li>Choose the <b>Signing Certificate(s)</b> that you want to use with this profile.
<li>Use the drop-down list to indicate the app for which you&#8217;re creating this profile.
<li>Finally, indicate the testing device you want to test it on.
<li>Click Submit.
</ol>
<p>You&#8217;ll be taken to a screen that says your Mobile Provisioning Profile is pending. Just click your browser&#8217;s refresh button a couple of times until the <b>Download</b>button appears, and download your precious, hard-fought profile. Make sure to save it in a location you&#8217;re likely to remember.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_29/profilePending.jpg" alt="Apple Provisioning Profile"></p>
</div>
<h2>Are We There Yet?</h2>
<p>That was a big pile of hoops to jump through just to test an app on your device, and we haven&#8217;t even begun building the app yet!  Here&#8217;s what you just accomplished:</p>
<ol>
<li>You used the command line and OpenSSL to create a Certificate Signing Request file.
<li>You sent that file to Apple. Apple responded by enabling you to download your Signing Certificate file. This file identifies you as the developer of your app.
<li>You converted your Signing Certificate to the .p12 format.
<li>You created an ID for your app.
<li>You created your Mobile Provisioning Profile, the glue that holds all these elements together and enables you to test your app on an iOS device.
</ol>
<p>The good news is that you DO NOT need to repeat the steps to create your Signing Certificate for additional apps. Now that you have that file, you&#8217;ll use it to sign all of your iOS apps from here on in. Similarly, you won&#8217;t have to re-enter your developer ID or device ID for future projects (unless, of course, you gain a new team member or device). The App ID and Mobile Provisioning Profile are the two pieces that are unique to your app &#8211; you WILL need to repeat those steps for additional projects.  </p>
<p>The next part of this tutorial series will cover the process of creating your actual Adobe AIR app using FlashDevelop, bundling it up with this mess of certificates and profiles you just built, and deploying the app to your testing device.  </p>
<p><a href="http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 3)">Continue to Part 3</a></p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F11%2F30%2Fflash-to-ios-a-step-by-step-tutorial-part-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F11%2F30%2Fflash-to-ios-a-step-by-step-tutorial-part-2%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=4097&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Flash to iOS: A Step-by-Step Tutorial (Part 1)</title>
		<link>http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 15:33:33 +0000</pubDate>
		<dc:creator>Sina Kashanizadeh</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod Touch]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=4087</guid>
		<description><![CDATA[This is the first part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch. Jump to other parts in the series: Part 2 &#8211; Obtain your [...]]]></description>
			<content:encoded><![CDATA[<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_12_07/iPadAIR.png" alt="Flash to iOS: A Step-by-Step Tutorial" /></p>
</div>
<p>This is the first part of our tutorial series by Intern Sina on creating an AIR application for free on a PC using FlashDevelop, and deploying it as a native app on an iOS device like the Apple iPad, iPhone or iPod Touch.</p>
<p>Jump to other parts in the series:</p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 2)"><b>Part 2</b> &#8211; Obtain your Signing Certificate &#038; Mobile Provisioning Profile, and create your App ID</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/07/flash-to-ios-a-step-by-step-tutorial-part-3-2/" title="Flash to iOS: A Step-by-Step Tutorial (Part 3)"><b>Part 3</b> -Use FlashDevelop to build your mobile AIR app</a>
<li><a href="http://www.untoldentertainment.com/blog/2011/12/14/flash-to-ios-a-step-by-step-tutorial-part-4/" title="Flash to iOS: A Step-by-Step Tutorial (Part 4)"><b>Part 4</b> &#8211; Modify your project settings and test your app on an Apple device</a>
</ul>
<h2>Dead Wrong</h2>
<p>There&#8217;s a lot of <a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt">FUD</a> floating around about Flash these days. Ever since Steve Jobs took to the mic and sounded the death knell of at least the <em>perception</em> of Flash, there&#8217;s been heaping gobs of misinformation about what you can and can&#8217;t, should and shouldn&#8217;t do with Flash. i chalk it up to the fact that death is news. It&#8217;s BIG news when Michael Jackson dies, BIG news when Steve Jobs dies, and equally big news if you can be among the first to report on the death of a technology or company &#8211; RIM, Flash, Palm, HP &#8211; take your pick. If it bleeds, it leads.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/tombstone.jpg" alt="Saying stuff is dead is dead" /></p>
<p>Saying stuff is dead, is dead. You heard it here first.</p>
</div>
<p>This hyperbolic and sensational misreporting is particularly damaging for those of us who have made our living developing with Flash and Actionscript. Back in 2000, when i first got into Flash, i chose it because the alternative was HTML. HTML appeared and performed <em>completely differently</em> depending on a number of different factors:</p>
<ol>
<li>The platform (Mac, PC or Linux)</li>
<li>The screen resolution (640&#215;480, 800&#215;600, 1024&#215;768, etc)</li>
<li>The browser (Netscape, Internet Explorer, Safari)</li>
<li>The browser <em>version</em> (HTML could render completely differently from IE6 to IE7)</li>
</ol>
<p>Meanwhile with Flash, i could build something inside the little Flash Player box, and it would look and behave reasonably identically across platforms, resolutions, browsers, and browser versions. (Subsequent versions of the Flash player complicated things a smidge, but we were still WORLDS away from the pain of HTML). What&#8217;s more, as a visual person, i could actually lay things out within the tool, instead of coding them abstractly and waiting to see how the browser would render them. If i wanted something to appear <em>over there</em>, i picked it up and put it <em>over there</em>. No futzing around with padding or align tags for hours.</p>
<p>The push towards HTML5 doesn&#8217;t scare me &#8211; more accurately, it makes me feel ill. It&#8217;s a step backwards. Without proper tooling, i see myself banging my head against the wall picturing absolutely everything in <em>codespace</em> (rather than concretely laid out in front of me in <em>designspace</em>), and programming all kinds of exception cases so that my content performs properly depending on platform, browser and version. You know what? No thanks.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/butterChurn.jpg" alt="Butter Churn" /></p>
<p>Thank God Flash is dead! Now we can finally move forward.</p>
</div>
<h2>Prying Flash from my Cold, Dead Hands</h2>
<p>As long as the tools for other technologies stink, and as long as i can keep making and monetizing projects in Flash, i&#8217;m going to stay the course until there&#8217;s a compelling technological /creative/workflow reason to make a jump. Untold Entertainment has deployed two games <em>written in Actionscript</em> (<strong><a title="Sissy's Magical Ponycorn Adventure on the Apple iPad" href="http://click.linksynergy.com/fs-bin/click?id=S5athXGL5Y4&amp;subid=&amp;offerid=146261.1&amp;type=10&amp;tmpid=3909&amp;RD_PARM1=http%3A%2F%2Fitunes.apple.com%2Fca%2Fapp%2Fsissys-magical-ponycorn-adventure%2Fid445696590%3Fmt%3D8">Sissy&#8217;s Magical Ponycorn Adventure</a></strong> and <strong><a title="Untold Entertainment's Heads on the BlackBerry App Store" href="https://appworld.blackberry.com/webstore/content/reviews/38777?lang=en">Heads</a></strong>) across two different mobile platforms (Apple iPad and the BlackBerry Playbook), and we&#8217;re just getting warmed up.</p>
<p>Here are the facts, at the time of this writing:</p>
<ol>
<li>No one really wants to play a game in a browser on a phone. Native apps are where it&#8217;s at.</li>
<li>Yes, you CAN put Flash- and Actionscript-created content on an iPhone, in native app format.</li>
<li>You can even do it without having to buy Flash Professional or Creative Suite.</li>
<li>You can develop entirely on a PC until the very last step (uploading content to the App Store).</li>
<li>Untold Entertainment is about to show you how.</li>
</ol>
<h2>What You&#8217;ll Need</h2>
<p>While buying Adobe&#8217;s tools is optional, you&#8217;ll still need to spend a bit of money (or mug the right people) to pull this off. Here&#8217;s what you&#8217;ll need:</p>
<ol>
<li>An Apple Developer account, which is $99 USD/year. Once you start down this path, you&#8217;re in it for the long haul &#8230; if you let your developer account lapse, they pull all your products off the store. For realsies.</li>
<li>A Mac (not free) running the latest version of Xcode (free).</li>
<li>An iOS device (optional, but obviously recommended).</li>
<li>FlashDevelop v4 or better (free, PC-only)</li>
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/mac.jpg" alt="Macs are not free" /></p>
<p>A Mac: not free.</p>
</div>
<h2>Introducing Sina</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/pop.jpg" alt="Sina looks like Prince of Persia" /></p>
<p>He&#8217;s the spitting image of this guy &#8211; i swear.</p>
</div>
<p><a href="http://twitter.com/#!/sinakash">Sina Kashanizadeh</a> is a Sheridan College computer programming student and an intern here at Untold Entertainment. He&#8217;s done all the legwork in this process, and has written this step-by-step guiding on porting your Actionscript projects to iOS. Take it away, Sina!</p>
<h2>Flash on iOS? So You Want to Be a Hero&#8230;</h2>
<p>With the mobile world expanding at a crazy rate you may have had the crazy idea to try making an App yourself and putting it on the iPhone. Well, you&#8217;re a brave soul, because it can be a confusing task. This is why I have scoured the internet and composed a step by step tutorial of this process. This tutorial would not have been possible without the fantastic people that maintain <a href="http://www.flashdevelop.org">FlashDevelop</a> and the wonderful community behind it. I would also like to thank <a href="http://www.gotoandlearn.com">Lee Brimelow</a> and <a href="http://seaships.in">Adobe</a> for putting out some great tutorial videos that helped me out a lot. Last but not least, I would like to thank <a href="http://www.CodeandVisual.com">CodeandVisual.com</a> for putting up a fantastic comprehensive guide that inspired me to move forward whenever I had trouble writing this tutorial.</p>
<p>I just want to be clear that this tutorial is not the &#8220;be-all, end-all&#8221; of this process. There are many different ways of transferring your Flash App to iOS, and the problems I cover are specific to my method. Also, the process I cover is PC-specific.</p>
<h2>Getting Started</h2>
<p>Before we begin, I would like to recommend a <a href="http://www.gotoandlearn.com/play.php?id=133">very good video resource</a> by Adobe Evangelist Lee Brimelow, in which he explains the basics of adding an app to the App Store when using Flash. If you do not know how this process works, I highly recommend this video, as it breaks down the somewhat painful process of adding an AIR App to the App Store when using a PC (thanks again, Lee!). The good news is that if you go through this once, you&#8217;ll understand the ins and outs of the process. You only have to do the most painful parts once.</p>
<p>The video covers a myriad of stuff but the basics boil down to this: Your end goal is to create an .ipa file, which is what you&#8217;ll upload to the App Store. To do this you will require:</p>
<ul>
<li>An App</li>
<li>An iOS developer ID from Apple ($)</li>
<li>An iPad or iPhone ($)</li>
<li>A Mac ($, but required for one step only &#8230; borrow one from a friend!)</li>
<li>A Signing Certificate</li>
<li>A Mobile Provisioning Profile</li>
<li>YOUR SOUL</li>
</ul>
<p>Sounds like fun? Well it isn’t, but let’s get cracking anyway!</p>
<h2>Any Club that would Have Me as a Member</h2>
<p>As I mentioned above, you&#8217;ll need a developer ID from Apple. Head over to the <a href="http://developer.apple.com/devcenter/ios/index.action">iOS Dev Center</a> and register for &#8220;free&#8221;.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/lie.jpg" alt="It ain't free" /></p>
<p>&#8220;Free&#8221; as in &#8220;Free Beer &#8230; that you have to pay for.&#8221;</p>
</div>
<p>Go through the steps of signing up and the email verification and you will acquire an Apple ID. Now, the unfortunate thing is that you get the Apple ID for free, but if you want to develop anything with it on a device &#8211; even a silly test app that you will never release &#8211; you will have to pay $99 a year. You&#8217;d better be positive that your <strong>Angry Birds</strong> clone will be worth at least a hundred bucks a year in revenue. You can sign up for a free student account, but again you can’t really do anything with it unless you drop some cash. If you are helping someone develop an App for the iPhone/iPad and they are paying the developer fee, they can add you as a partner to their project.</p>
<h2>Adding a Device to Your Developer Account</h2>
<p>If you want to test and ultimately launch this App, you will need an Apple device such as an iPhone, iPod Touch or iPad. You will also need to register your Apple device with your Apple ID. Follow these steps:</p>
<ol>
<li>Go into the iOS Developer website and log in with your new account info. Here, you will see the iOS Provisioning Portal. Click on it to see further options.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/provisioningPortal.jpg" alt="iOS Provisioning Portal" /></p>
</div>
</li>
<li>click Devices in the sidebar.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/devices.jpg" alt="iOS Devices menu" /></p>
</div>
</li>
<li>Click Add Devices.Note: if you are a partner developer with a team member profile, you will not be able to add a device. The option will only appear for the master account holder.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/addDevices.jpg" alt="iOS Add Devices" /></p>
</div>
</li>
<li>On this screen, you can add up to 100 devices to your account. Start off by adding your Device Name. Nothing fancy here &#8211; just enter something that will help you identify it &#8211; ie &#8220;Sina&#8217;s iPad&#8221;, or &#8220;iPhone what i stole from that guy that one time&#8221;.</li>
<li>Enter the Device ID (40 hex characters). This is the serial number that is associated with the device that you are trying to register. To find this Device ID, open iTunes while your device is connected. On the main screen, you will see all the information about your device, including a field called Serial Number. It doesn&#8217;t look clickable, but click on that field anyway and the number changes to a hex code. That&#8217;s your device ID.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_11_21/deviceID.jpg" alt="iOS Device ID" /></p>
</div>
</li>
<li>Once you&#8217;ve filled in those details, click Submit and the device will be added to your Developer account. Now you can build an Adobe AIR application and test it on your device.The next tutorial will take you through the process of requesting and creating a Signing Certificate, converting that certificate to the p12 format that Apple requires, and generating a Mobile Provisioning Profile for your new app.
<p><a title="Flash to iOS: A Step-by-Step Tutorial (Part 2)" href="http://www.untoldentertainment.com/blog/2011/11/30/flash-to-ios-a-step-by-step-tutorial-part-2/">Continue to Part 2</a></li>
</ol>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F11%2F23%2Fflash-to-ios-a-step-by-step-tutorial-part-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F11%2F23%2Fflash-to-ios-a-step-by-step-tutorial-part-1%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=4087&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/11/23/flash-to-ios-a-step-by-step-tutorial-part-1/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Untold Entertainment Goes Forth</title>
		<link>http://www.untoldentertainment.com/blog/2011/08/07/untold-entertainment-goes-forth/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/08/07/untold-entertainment-goes-forth/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 20:50:34 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Bidness]]></category>
		<category><![CDATA[Canadian Media News]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Game Ideas]]></category>
		<category><![CDATA[GDC]]></category>
		<category><![CDATA[Kahoots]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[Pimp My Portal]]></category>
		<category><![CDATA[ponycorns]]></category>
		<category><![CDATA[Spellirium]]></category>
		<category><![CDATA[TOJam]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[ZombieGameWorld.com]]></category>
		<category><![CDATA[Zombies]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3895</guid>
		<description><![CDATA[When Untold Entertainment Inc. turned three last year, we were reeling from the fallout of the global economic collapse. It&#8217;s been a slow, difficult recovery, and we still have a lot of work left to do, but i&#8217;m happy to say we&#8217;ve nosed out of the tailspin. This was a landmark year for Untold; we [...]]]></description>
			<content:encoded><![CDATA[<p><center><br />
<img src="http://www.untoldentertainment.com/blog/img/2011_08_07/untoldGoesForth.png" alt="Untold Entertainment Goes Forth"><br />
</center></p>
<p>When Untold Entertainment Inc. <a href="http://www.untoldentertainment.com/blog/2010/08/09/untold-entertainment-turns-three/">turned three last year</a>, we were reeling from the fallout of the global economic collapse. It&#8217;s been a slow, difficult recovery, and we still have a lot of work left to do, but i&#8217;m happy to say we&#8217;ve nosed out of the tailspin. This was a landmark year for Untold; we are poised to have an absolutely incredible fifth year going forward.  If last year was our <em>Empire</em>, this year is our <em>Jedi</em>.  Bring on the Ewoks, baby.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/ewok.jpg" alt="Ewok"></p>
<p>Yub nub, motherf*cker.
</p></div>
<p>Here&#8217;s a look at the Year That Was.</p>
<h2>2010</h2>
<p><b>August</b></p>
<p>Last fiscal ended on a dark note.  We were struggling through <b>Spellirium</b>, our post-apocalyptic puzzle adventure game, as various production problems saw the budget sapped with very little to show for our efforts.  The year ahead had us planning to complete service projects in the hope that we&#8217;d bank enough margin to continue working on the game.</p>
<p><center><br />
<img src="http://www.untoldentertainment.com/blog/img/2011_08_07/spellirium.png" alt="Spellirium"><br />
</center></p>
<p><b>September</b></p>
<p>My book was published!  Unity 3D Game Development by Example: A Beginner&#8217;s Guide is a great introduction to game development, computer programming, and Unity 3D itself, which is a super-powerful game engine for creating on a wide variety of platforms.  Thanks to you all for buying a copy, or for recommending the book to your friends.</p>
<div class="displayed">
<p><a href="http://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book/mid/2709105s93kf?utm_source=untoldentertainment.com&#038;utm_medium=affiliate&#038;utm_content=authorsite&#038;utm_campaign=mdb_004881"><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/unity3dGameDevelopmentByExample.jpg" alt="Unity 3D Game Development By Example"></a></p>
</div>
<p><b>Fall</b></p>
<p>We launched <b><a href="http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/">Jinx 3: Escape from Area Fitty-Two</a></b> on YTV.com.  Jinx 3 was the first game to use UGAGS, the Untold Graphic Adventure Game System.  It supported multiple playable characters, an inventory system, a subtitle system, game variable control, and a &#8220;puppet&#8221; guidance system, which enables the developer to write commands to build in-game cutscenes.  Jinx 3 was the first UGAGS game we developed, but the second one to launch, after Heads.</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/"><img src="http://www.untoldentertainment.com/games/jinx3/featured.jpg" alt="Jinx 3: Escape from Area Fitty-Two" /></a>
</div>
<p>i spoke about UGAGS at <a href="http://www.untoldentertainment.com/blog/2010/10/23/ryan-goes-to-camp/">Gamercamp Level 2.0</a>, a Toronto convention celebrating the joy of video games.</p>
<p>October saw the publication of a now-infamous article about the <a href="http://www.untoldentertainment.com/blog/2010/10/19/canadian-vortex-game-competition-named-a-scottish-team-to-win/">Vortex Game Development Competition</a>, where the previous year&#8217;s winners were revealed to have never worked on the winning game.</p>
<p>i experimented with a feature called <a href="http://www.untoldentertainment.com/blog/linkbait-tuesdays/">Linkbait Tuesdays</a>, where i used the <a href="http://linkbaitgenerator.com/index.php">Linkbait Generator</a> to spit out randomized titles for blog posts.  It wasn&#8217;t much appreciated by my readership, and didn&#8217;t appreciably increase blog traffic, so i killed the feature.</p>
<p>On Hallowe&#8217;en, we launched our second free games portal called <a href="http://www.zombiegameworld.com">ZombieGameWorld.com</a>.  If you know the song about the old woman who swallowed the fly, you&#8217;ll understand our challenge with these portals.  We built <a href="http://www.wordgameworld.com" title="Word Game World - Play the Best Free Word Games Online">WordGameWorld.com</a> in order to attract a word game-playing audience, so that we could control the site&#8217;s ad inventory and find an audience for Spellirium.  When the site suffered from flagging traffic, i decided to build a <em>network</em> of game portals; ZombieGameWorld.com was ostensibly created to help drive traffic to WordGameWorld.com, which should drive traffic to Spellirium.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/oldLady.jpg" alt="Old lady who swallowed a fly"></p>
<p>She swallowed the spider to catch the fly.  i don&#8217;t know why she swallowed the fly. i guess she&#8217;ll die?
</p></div>
<p>To round out the fall, i <a href="http://www.untoldentertainment.com/blog/2010/11/27/movember-2010/">grew a beard</a> to win hockey tickets, despite not enjoying hockey.  i spoke at an <a href="http://www.untoldentertainment.com/blog/2010/11/03/the-mistake-i-make/">interactiveontario luncheon</a>. And i wrote an article for Mochiland.com on the disgraceful refusal by contracting companies to <a href="http://www.untoldentertainment.com/blog/2010/11/24/where-credit-is-due/">credit their Flash game developers</a>. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/movember.jpg" alt="Ryan Henson Creighton's epic moustache"></p>
<p>Why wouldn&#8217;t you want your game to be associated with this guy?
</p></div>
<p><b>Winter</b></p>
<p>As the cold weather set in, i took a position at a private college teaching Unity 3D game development.  i had hoped for a better experience than i had at Hervé Velasquez School for the Digitally Inclined, but no such luck: halfway through the course, which was dubbed Programming II (the students had supposedly been taught Flash/Actionscript for <em>four months</em> prior to my arrival), i had to dial everything back and re-teach programming basics to them.  And by basics, i mean stuff like &#8220;What does the &#8216;=&#8217; symbol do?&#8221; and  &#8220;What is a variable?&#8221; </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/name.jpg" alt="name"></p>
<p>What &#8230; is your NAME?
</p></div>
<p>The class was only eight students, but i had no fewer than two of those students&#8217; parents call or email me to ask why little Billy was getting low grades on tests. YaRly.</p>
<p>In this, i further proved the thesis in my contentious What&#8217;s Wrong with Ontario Colleges articles (<a href="http://www.untoldentertainment.com/blog/2010/02/18/whats-wrong-with-ontario-colleges-part-1/">Part 1</a> and <a href="http://www.untoldentertainment.com/blog/2010/02/23/whats-wrong-with-ontario-colleges-part-2/">Part 2</a>). Helicopter parenting and failure aversion have created a generation of non-functional kids, which i later dubbed <a href="http://www.untoldentertainment.com/blog/2011/05/18/the-most-useless-generation/">The Most Useless Generation</a>. My diagnosis is that many college undergrads have escaped high school without ever understanding <a href="http://www.untoldentertainment.com/blog/2011/08/07/how-to-be-a-student/">How to Be a Student</a> (an article i wrote while teaching last winter, which i&#8217;ve only just posted now that i&#8217;ve put some distance between myself and the situation).  </p>
<p>In the interest of helping young people be more successful, i offered <a href="http://www.untoldentertainment.com/blog/2010/11/10/my-prescription-for-more-successful-students/">My Prescription for (More) Successful Students</a>, which my students all ignored, and i wrote a serious of articles called <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Understanding Programming</a> to explain programming basics, which my students also ignored.  Oh well. As the saying goes, you can lead a horse to water, but sometimes you just have a retarded horse.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/retardedHorse.jpg" alt="retarded horse"></p>
</div>
<h2>2011</h2>
<p><b>Spring</b></p>
<p>In 2011,  we launched an exciting blog series called <a href="http://www.untoldentertainment.com/blog/pimp-my-portal/">Pimp My Portal</a>, detailing our struggles to drive traffic to ZombieGameWorld.com and WordGameWorld.com.  The hook here was <b>The World&#8217;s Most Meager Marketing Budget</b>, a pot of just $100 that i spent on Fiverr.com to buy testimonial videos to promote the site, the rationale being that search loves video.  The Old Lady who Swallowed the Fly reared her ugly head again, as i found that i had no audience to watch the videos to go to the portal to go to the OTHER portal to find out about Spellirium.  The Pimp My Portal series is ongoing.</p>
<p>Around this time, we were commissioned by The Centre for Skills Development and Training to produce a series of games to help teach workplace skills to 15-30-year-olds. The resulting game, <a href="http://www.untoldentertainment.com/blog/2011/06/22/summer-in-smallywood/">Summer in Smallywood</a>, enabled us to make a number of improvements to UGAGS, including auto-save, debug tools, navigation meshes, saved game profiles, and threaded conversations. We&#8217;re looking forward to working further with The Centre in the coming year to expand our educational gaming experience.</p>
<div class="displayed">
<p><a href="http://www.summerinsmallywood.ca"><img src="http://www.untoldentertainment.com/blog/img/2011_05_21/smallywoodTitle.jpg" alt="Summer in Smallywood by Untold Entertainment" /></a></p>
</div>
<p>In March, i admit i was feeling a little bit desperate and squirrely.  Work was trickling into the shop in fits and starts, and i was really wondering whether renewing our lease would be wise.  Wild-eyed and hungry at GDC, i was overcome with the need to let the world know <em>i am here</em>, like the tiny Whos living on a speck on a clover stalk, who ultimately issue a resounding YOPP! to show the jungle animals that they exist (and to keep from getting boiled in beezlenut oil).</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/horton.jpg" alt="Horton"></p>
<p>A game dev&#8217;s a game dev, no matter how small.
</p></div>
<p>To that end, i pulled some shenanigans at the conference, which came to be known as the famous <a href="http://www.untoldentertainment.com/blog/2011/03/05/holding-the-bag-how-i-gamed-gdcs-top-social-game-developers/" title="GDC Coin Stunt">GDC Coin Stunt</a>.  The <a href="http://www.untoldentertainment.com/blog/2011/03/15/have-you-met-my-friend-spike/">resulting press</a> on most major online games sites greased the wheels for what was to be our greatest victory yet.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/coinsShirt.jpg" alt="i have all the coins shirt"></p>
</div>
<p>Over the years, we&#8217;ve found it so difficult to drive enough steady Flash game development work that we haven&#8217;t been able to bank enough time or enough money to do our own thing.  To date, the only chance we seem to get is TOJam, an annual weekend-long Toronto game jam, during which we always produce a complete and original game.  Indeed, nearly every title in the <a href="http://www.untoldentertainment.com/games/">Original Games</a> section of our portfolio is a TOJam game, completed in one weekend by <em>me alone</em>.</p>
<p>This year, we used UGAGS to create <b><a href="http://www.ponycorns.com">Sissy&#8217;s Magical Ponycorn Adventure</a></b>.  i worked on the game with my 5-year-old daughter Cassandra.  It was no accident that i was wearing my &#8220;I have all the coins&#8221; T-Shirt in the TOJam group photo this year. After the game went live, it went viral, initially being featured on many of the same sites that covered the coin stunt. In the few months since its launch, the ponycorns game has gone on to become an international sensation (i just granted an interview to a Japanese newspaper this week!).  </p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/cassieAndDaddy.jpg" alt="Cassie and Daddy"></a></p>
<p>[photo by <a href="http://www.flickr.com/photos/brendanlynch/tags/tojam6">Brendan Lynch</a>]
</div>
<p>With the ponycorns game, we took a very important step to improving our viability as a dev studio by launching the game on the <a href="http://itunes.apple.com/us/app/sissys-magical-ponycorn-adventure/id445696590?mt=8">Apple iPad</a> and the <a href="http://appworld.blackberry.com/webstore/content/45781">BlackBerry Playbook</a>. On the third day of its launch week, Sissy&#8217;s Magical Ponycorn Adventure was featured by Apple in its New &#038; Noteworthy section.</p>
<p>Ponycorns also drove us to develop our first alternate revenue stream based on our original IP.  We launched the <a href="http://untoldentertainment.com/store/">Untold Booty</a> merchandise store with a number of different ponycorns-based SKUs, and have been very happy with the results.  </p>
<p>Throughout the year, i remained active with the IGDA Toronto Chapter, organizing some well-received events including the speed dating-style Game.Set.Match, the Open Mic Night rant session, Straight Outta TOJam: Pint-sized Postmortems, and the Fund in the Sun workshop. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_08_07/posters.jpg" alt="IGDA Toronto Chapter posters"></p>
</div>
<p>Through the spring, we developed a great puzzle/platformer game called <a href="http://www.untoldentertainment.com/blog/2011/07/29/spladder/">Spladder</a>, which currently runs on a number of kids&#8217; broadcaster sites &#8211; YTV.com. TVO.org and CBBC.co.uk among them.</p>
<p>We launched a new games portal called <a href="http://www.tdgameworld.com" title="Tower Defense Game World - Play the best free tower defense games">TowerDefenseGameWorld.com</a> and filled it with free tower defense games, because it&#8217;s difficult to prove a theory about a network of games portals lending each other traffic if you only have two portals.  We also gave a major upgrade to ZombieGameWorld.com by expanding it to feature zombie games and goodies on other platforms.</p>
<p>i know an old lady who swallowed a horse.  She&#8217;s dead, of course. </p>
<p><b>Summer. Future.</b></p>
<p>We&#8217;ve come full circle.  Spellirium remains unfinished, but we&#8217;re finally spending time on it again.  We poked Kahoots with a stick to see if it was still twitching. Thankfully, it is! We&#8217;ve made some creative changes to it to spare a fellow indie game dev company some unpleasant legal strife; look forward to a Kahoots-related announcement in the coming months.  </p>
<p>i&#8217;m writing the 3.x update to my Unity 3D book, which will be ready shortly (send me an email and i&#8217;ll add you to our notification list when the update is released).</p>
<p>Going forward, our plan is to leverage the success of the ponycorns game to make major in-roads into game development and education for kids (see our article on CBC.ca).  i&#8217;m preparing a pilot project with Cassie&#8217;s elementary school this fall.  We&#8217;re preparing the unstoppable UGAGS engine for a business-to-business, and then consumer, release &#8211; expect it to have a kid-friendly interface.    We&#8217;re polling people for their interest in an iPhone/iPod version of the game (send us an email!).  i&#8217;ll be delivering my conference session <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=118&#038;presentation_id=1656" title="Ponycorns: Lightning in a Jar">Ponycorns: Lightning in a Jar</a> at the Screens festival this fall, and at other conventions throughout the year.  Ponycorns is being translated into Japanese in anticipation of the Sense of Wonder Night at the Tokyo Games Show.  </p>
<p>Untold Entertainment&#8217;s fifth year will be filled with low-life panda bears, daily word puzzles, gamesByKids, and more great articles about game development and education, peppered with rude jokes and stolen LOLcat pictures.  Thanks so much for your support, everyone!  i&#8217;m really looking forward to writing an amazing recap next year.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F08%2F07%2Funtold-entertainment-goes-forth%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F08%2F07%2Funtold-entertainment-goes-forth%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/08/07/untold-entertainment-goes-forth/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3895&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/08/07/untold-entertainment-goes-forth/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hooray!  It&#8217;s Ponycorn P&#8217;toosday!</title>
		<link>http://www.untoldentertainment.com/blog/2011/07/11/hooray-its-ponycorn-ptoosday/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/07/11/hooray-its-ponycorn-ptoosday/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 04:12:54 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Canadian Media News]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[ponycorns]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3840</guid>
		<description><![CDATA[Today marks the iPad release of Sissy&#8217;s Magical Ponycorn Adventure! Now you can take Poo-Pants, Fluffybuns, Lady Fuzzwuzzle, Orangeboy, and (inaudible) with you wherever you go. Impress your extended family! Accost sour-looking strangers in waiting rooms! Play it for a pick-me-up when the boss isn&#8217;t watching! To celebrate, we&#8217;re showcasing the work of some dyed-in-the-wool [...]]]></description>
			<content:encoded><![CDATA[<p>Today marks the <a href="http://itunes.apple.com/us/app/sissys-magical-ponycorn-adventure/id445696590?ls=1&#038;mt=8" title="Sissy's Magical Ponycorn Adventure on the iPad">iPad release of <b>Sissy&#8217;s Magical Ponycorn Adventure</b></a>!  Now you can take Poo-Pants, Fluffybuns, Lady Fuzzwuzzle, Orangeboy, and (inaudible) with you wherever you go.  Impress your extended family!  Accost sour-looking strangers in waiting rooms!  Play it for a pick-me-up when the boss isn&#8217;t watching!</p>
<p>To celebrate, we&#8217;re showcasing the work of some dyed-in-the-wool ponycorn fans.</p>
<h2>Ponycorns at Anime North</h2>
<p>Mike Barltrop is an educator who showed Sissy&#8217;s Magical Ponycorn Adventure to his high school students so they&#8217;d be without excuse &#8211; if a 5-year-old could pull off a game, he can expect a lot more from them.  Mike enjoyed ponycorns so much that he painstakingly re-created a number of Cassie&#8217;s drawings and <em>dressed up as the game</em> for the Anime North nerdfest in Toronto:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/animeNorth.jpg" alt="Sissy's Magical Ponycorn Adventure Anime North costume"></p>
<p>For serious.
</p></div>
<p>To put Mike&#8217;s ponycorns passion into perspective, the game was released on May 25th.  Anime North started the following Friday and ran the length of the weekend.  And people at the conference <em>recognized Mike&#8217;s costume</em>.  Awesomazing!</p>
<h2>The Star&#8217;s Crayon Forgery Shenanigans</h2>
<p>We spotted one piece of fan art that was no less hilarious than Mike&#8217;s costume, but unbelievable for a different reason.  When the <a href="http://www.thestar.com/news/article/1001877--game-drawn-by-toronto-girl-5-becomes-online-sensation?bn=1&#038;sms_ss=twitter&#038;at_xt=4de8578f2d414d61,0">Toronto Star posted its story</a> about the ponycorns&#8217; meteoric rise to prominence, the online piece had two images in its gallery: a shot of Cassie playing the game, and THIS:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/forgery.jpg" alt="Sissy's Magical Ponycorn Adventure Toronto Star forgery"></p>
<p>Also for serious.
</p></div>
<p>It doesn&#8217;t take a keen eye to see that this image is actually a forgery, created by an adult employed at the Star.  When we saw this image on the site, we were a little baffled.  We have a stack of original crayon art from the game that we could have sent to the newspaper at a moment&#8217;s notice.  This kind of thing is in keeping with some of my other dealings with news media, like my <a href="http://www.untoldentertainment.com/blog/2008/12/04/ryan-creighton-on-city-news-at-6-with-dr-karl/" title="Ryan Henson Creighton on CityTV">interview with CityTV</a> from a while back where they grabbed one tiny soundbite from me to prove the point they were trying to make, and completely discarded everything else i said.  Hilarious!  If you don&#8217;t already watch the news and read the paper with a cocked eye, i hope you&#8217;ll start today.</p>
<p>We asked the Toronto Star to correct the article, and the picture was removed in short order.</p>
<p><b>UPDATE</b></p>
<p>Now it&#8217;s ME doing the retracting. The wacky lads over at <a href="http://www.shh-mom.com/shh-mom-in-the-ponycorn-world/">Shh-Mom.com</a> have confessed to penning the offending artwork which, in its original context, isn&#8217;t offending at all.  The folks at the Star must have grabbed it, thinking it to be genuine.  i&#8217;m glad we got to the bottom of this. Has it restored my faith in traditional news media?  No.  Question everything!</p>
<h2>Flannery&#8217;s Fanfic</h2>
<p>We&#8217;re saving the best for last on Ponycorn P&#8217;toosday.  9-year-old Flannery, proud owner of a <a href="http://untoldentertainment.com/store/products/Ponycorns-Mega%252dPack.html">plush ponycorns mega-pack</a>, sent us this fantastic storybook featuring the extended adventures of the ponycorns gang.  Enjoy your face off!</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/01.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/02.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/03.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/04.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/05.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/06.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/07.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/08.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/09.jpg" alt="Ponycorns Fanfic"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_07_12/10.jpg" alt="Ponycorns Fanfic"></p>
</div>
<h2>Get Some</h2>
<p>If this is your first exposure to ponycorns, <a href="http://itunes.apple.com/us/app/sissys-magical-ponycorn-adventure/id445696590?ls=1&#038;mt=8" title="Sissy's Magical Ponycorn Adventure on the iPad">pick up your copy on the iPad today</a>!  The game is also available on the <a href="http://appworld.blackberry.com/webstore/content/45781" title="Sissy's Magical Ponycorn Adventure on the BlackBerry Playbook">BlackBerry Playbook</a> and <a href="http://www.ponycorns.com/game.html" title="Sissy's Magical Ponycorn Adventure">in your browser</a>.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F07%2F11%2Fhooray-its-ponycorn-ptoosday%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F07%2F11%2Fhooray-its-ponycorn-ptoosday%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/07/11/hooray-its-ponycorn-ptoosday/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3840&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/07/11/hooray-its-ponycorn-ptoosday/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Tower Defense Game World Rounds Out Untold&#8217;s Game Portal Network</title>
		<link>http://www.untoldentertainment.com/blog/2011/07/06/tower-defense-game-world-rounds-out-untolds-game-portal-network/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/07/06/tower-defense-game-world-rounds-out-untolds-game-portal-network/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 17:47:16 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Canadian Media News]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ponycorns]]></category>
		<category><![CDATA[Spellirium]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3828</guid>
		<description><![CDATA[5 JULY 2011 &#8211; TORONTO Untold Entertainment is excited to announce the latest addition to its network of free-to-play game collections with the release of Tower Defense Game World. Over 120 games are ready to play, with new additions posted every week. Tower Defense Game World is the newest member of Untold&#8217;s suite of free [...]]]></description>
			<content:encoded><![CDATA[<p><b>5 JULY 2011 &#8211; TORONTO</b></p>
<div class="displayed">
<p><a href="http://www.tdgameworld.com"><img src="http://www.tdgameworld.com/img/logos/tdGameWorldLogo_300x300.png" alt="Tower Defense Game World"></a>
</p>
</div>
<p>Untold Entertainment is excited to announce the latest addition to its network of free-to-play game collections with the release of <a href="http://www.tdgameworld.com">Tower Defense Game World</a>. Over 120 games are ready to play, with new additions posted every week. Tower Defense Game World is the newest member of Untold&#8217;s suite of free game networks, which currently includes <a href="http://www.zombiegameworld.com">Zombie Game World</a> and <a href="http://www.wordgameworld.com">Word Game World</a>.</p>
<p>&#8220;Tower defense&#8221; is a game genre that has become immensely popular in the past five years. Most tower defense games have the player protecting a fortress or base from incoming &#8220;waves&#8221; of enemies.  The player can purchase and place turrets that fend off the hordes of invaders. Through careful placement and upgrading, the player can emerge victorious with an unscathed fortress.</p>
<p>Tower Defense games have proven to be one of the most popular game genres available today, with varieties that appeal to casual gamers, core players, and everyone in between. Plants vs. Zombies by Popcap Games is one of the most well-known tower defense games. Tower Defense Game World offers a curated experience, bringing the best free Tower Defense games currently available into one website.</p>
<p><b>About Untold Entertainment</b></p>
<p>Untold Entertainment Inc. is a boutique game development studio in Toronto specializing in games and apps for kids, teens, tweens, and preschoolers.  Untold developed <b><a href="http://www.ponycorns.com">Sissy&#8217;s Magical Ponycorn Adventure</a></b> which was co-created by a five-year-old girl, and its upcoming post-apocalyptic puzzle adventure game <b>Spellirium</b>.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F07%2F06%2Ftower-defense-game-world-rounds-out-untolds-game-portal-network%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F07%2F06%2Ftower-defense-game-world-rounds-out-untolds-game-portal-network%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/07/06/tower-defense-game-world-rounds-out-untolds-game-portal-network/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3828&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/07/06/tower-defense-game-world-rounds-out-untolds-game-portal-network/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Heads</title>
		<link>http://www.untoldentertainment.com/blog/2011/06/11/heads/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/06/11/heads/#comments</comments>
		<pubDate>Sun, 12 Jun 2011 00:29:20 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Canadian Media News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[Playbook]]></category>
		<category><![CDATA[UGAGS]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3770</guid>
		<description><![CDATA[Our entry for TOJam 5 (the Toronto independent game jam) was Heads. The jam theme was &#8220;missing&#8221;. Heads is about a fellow who wakes up one morning missing &#8230; well, his head. The first puzzle in the game sees you constructing a makeshift head before you can leave the house. From there, we introduce a [...]]]></description>
			<content:encoded><![CDATA[<div class="invisible"><img src="http://www.untoldentertainment.com/games/heads/featured.jpg" alt="Heads by Untold Entertainment" /></div>
<div class="invisible"><img src="http://www.untoldentertainment.com/games/heads/thumb.jpg" alt="Heads by Untold Entertainment" /></div>
<p>Our entry for <a href="http://www.tojam.ca">TOJam 5</a> (the Toronto independent game jam) was <b>Heads</b>.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/games/heads/screenshot.jpg" alt="Heads by Untold Entertainment">
</div>
<p>The jam theme was &#8220;missing&#8221;.  Heads is about a fellow who wakes up one morning missing &#8230; well, his <em>head</em>.  The first puzzle in the game sees you constructing a makeshift head before you can leave the house.  From there, we introduce a somewhat novel mechanic where you can switch heads with other characters to use their abilities.  The game was the second title we created with UGAGS &#8211; the Untold Graphic Adventure Game System.</p>
<h2>Worth 1000 Words</h2>
<p>Heads was one of the games on Untold&#8217;s &#8220;Games to Build&#8221; wiki.  The intended scope was much larger than what we ended up with, but the advantage of creating Heads at a weekend game jam is that we <em>finished</em> it and got the idea out to the world.  The innovation we attempted with Heads came directly out of the first UGAGS game we created, <a href="http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/">Jinx 3: Escape from Area Fitty-Two</a>.  Jinx 3 had a LOT of character dialogue and was very wordy.  Heads was a reaction to that; we tried to create a game with absolutely no character dialogue whatsoever.</p>
<p>The resulting challenge was that everything we needed to communicate to the player required a new animation.  The unique Heads style required us to draw every frame 3 or 4 times to achieve a Squigglevision-style effect.  This all added up to a very time-consuming process that tested the limits of what we were able to pull off in a single weekend.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/games/heads/thoughtBubble.jpg" alt="Heads by Untold Entertainment"></p>
<p>Most goals and challenges are communicated to the player by shrugging and thought bubbles.
</p></div>
<h2>Acclaim for Heads</h2>
<p>Heads won &#8220;Best Use of Theme&#8221; at the public TOJam Arcade exhibition.  It was featured in the <a href="http://www.untoldentertainment.com/blog/2010/09/25/ocad-start-show-marks-latest-bandwagon-bid-to-co-opt-games/">START</a> video game show at the Ontario College of Art and Design.  You can play Heads for free on the <a href="http://appworld.blackberry.com/webstore/content/38777?lang=en">Blackberry Playbook</a>.  </p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F06%2F11%2Fheads%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F06%2F11%2Fheads%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/06/11/heads/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3770&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/06/11/heads/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>5-Year-Old Girl Makes Video Game</title>
		<link>http://www.untoldentertainment.com/blog/2011/05/24/sissys-magical-ponycorn-adventure/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/05/24/sissys-magical-ponycorn-adventure/#comments</comments>
		<pubDate>Tue, 24 May 2011 14:00:14 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Canadian Media News]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[TOJam]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3729</guid>
		<description><![CDATA[As planned, i took my five-year-old daughter Cassie to TOJam, the three-day Toronto independent game jam, to make a game with me. And here it is: Play Sissy&#8217;s Magical Ponycorn Adventure Cassie drew all the pictures, wrote all the titles, and recorded the voice of the main character. She also came up with the NPCs [...]]]></description>
			<content:encoded><![CDATA[<p>As <a href="http://www.untoldentertainment.com/blog/2011/04/29/the-tiniest-tojammer/">planned</a>, i took my five-year-old daughter Cassie to <a href="http://www.tojam.ca">TOJam</a>, the three-day Toronto independent game jam, to make a game with me. And here it is:</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/sissy_title.jpg" alt="Sissy's Magical Ponycorn Adventure"></a></p>
<p>Play <a href="http://www.untoldentertainment.com/games/sissy/">Sissy&#8217;s Magical Ponycorn Adventure</a>
</div>
<p>Cassie drew all the pictures, wrote all the titles, and recorded the voice of the main character.  She also came up with the NPCs (including Mr. Turtle, the Mean Tiger, and the villainous Lemon), and designed some of the puzzles (including the one where you <b>[SPOILER ALERT]</b> have to read a sign to justify your need for a coconut to throw at the Lemon).</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/cassieAndDaddy.jpg" alt="Cassie and Daddy"></a></p>
<p>Cassie and Ryan [photo by <a href="http://www.flickr.com/photos/brendanlynch/tags/tojam6">Brendan Lynch</a>]
</div>
<h2>Send Cassie to College?</h2>
<p>i used Mochimedia&#8217;s ad service to inject ads into the game, which is fitting, because Mochi was a TOJam sponsor this year.  i threw ads in there with the hope that the game might drum up a little bit of cash, which i will put toward the education fund that Cassie&#8217;s grandma started for her.  Wouldn&#8217;t it be cool if Cassie&#8217;s game paid for college?  (Sadly, it won&#8217;t happen.  See the <a href="http://www.untoldentertainment.com/blog/feature-articles/pimp-my-game/">Pimp My Game</a> series for more reasons why.)  For kicks, i added a PayPal Donate button beneath the game.</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/cassieChopsticks.jpg" alt="Cassie tries ot eat with chopsticks"></a></p>
<p>With your help, maybe we can send her to get some etiquette training? [Photo by <a href="http://road-rage-bunny.livejournal.com/127136.html">Paul Hillier</a>]
</div>
<h2>Alert Child Services</h2>
<p>Dragging your kid to a weekend-long game jam, eh?  Before you call Children&#8217;s Aid on me, please understand that i didn&#8217;t actually keep Cassie captive at TOJam all weekend long.  She came in with me at 9:30 Saturday morning, and was the most excited i&#8217;ve ever seen her.  We&#8217;d been preparing her for MONTHS so that she&#8217;d be emotionally ready for TOJam.  After the organizers expressed concern that my rotten kid would be running around the place pestering people and making noise (an entirely likely scenario, if you&#8217;re familiar with my insane children and my lousy parenting style), i spent every evening coaching Cassie.</p>
<blockquote><p><b>Me:</b> Remember, you&#8217;re the first little girl who&#8217;s ever made a game at TOJam.  And everyone&#8217;s worried you&#8217;re going to run around screaming and making noise and wrecking things.</p>
<p><b>Cassie:</b> (shocked face)  No i won&#8217;t!</p>
<p><b>Me:</b> *i* know you won&#8217;t. (totally lying here &#8211; i was as nervous about it as anyone)  But you have to prove to everyone that little girls can make video games too.  If you&#8217;re very well behaved, then next year if another little girl wants to come and make a game, the TOJam people will say &#8220;the little girl who made a game last year was SO wonderful, we&#8217;d LOVE to see more little girls making games.&#8221;</p>
<p><b>Cassie:</b>  i&#8217;ll <em>be have</em>. i will!</p></blockquote>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/cassieBeHave.jpg" alt="Cassie bes have"></a></p>
<p>Cassandra, &#8220;being have&#8221; [Photo by <a href="http://road-rage-bunny.livejournal.com/127136.html">Paul Hillier</a>]
</div>
<h2>Yes, Cassandra, There Is a Game Jam</h2>
<p>The morning of TOJam was like Christmas for her.  i&#8217;m not kidding.  In the days leading up to the event, she told everyone she knew that she was going to TOJam.  Naturally, they had no idea what she was talking about, but the strangers in the elevator and in the grocery store smiled and nodded politely all the same.</p>
<p>By the end of the day on Saturday, Cassie had spent 10 hours at TOJam, and was <em>begging</em> me to let her stay overnight.  She had put in about 6 hours of actual colouring work, and sunk at least another hour into voice acting later that evening at home, where it was quieter.  i tucked her into bed and returned to TOJam late Saturday evening, and then pulled an all-nighter scanning her crayon drawings and integrating them with the game logic using UGAGS (the Untold Graphic Adventure Game System).</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/daddyWorking.jpg" alt="Daddy working"></a></p>
<p>[Photo by <a href="http://road-rage-bunny.livejournal.com/127136.html">Paul Hillier</a>]
</div>
<h2>Family Jam</h2>
<p>Sunday morning after church, the whole family joined me at TOJam with a bunch of instruments in tow.  My wife Cheryl and the two little girls sat together on the carpet down a quiet hallway.  Cassie grabbed the harmonica, i took the drum, Cheryl took the ukulele, and little Isabel used the thumb harp and the Happy Apple.  We recorded some music tracks together.  The one that made it into the game intro is just Cassie and Izzy playing together.  It was really nice to have everyone involved like that.  Here&#8217;s the family track that didn&#8217;t quite make the cut:</p>
<p></p>
<p>Sunday evening, the family regrouped at TOJam.  The game, while still unfinished, was set up in a hallway where Cassie excitedly ran up to any interested passers-by, snatched the mouse out of their hands, and said &#8220;I MADE THIS!  LEMMIE SHOW YOU HOW TO PLAY!&#8221;  </p>
<p>i think it was a really valuable life lesson for Cassie to see that all her hard work and effort went into making a product that brought smiles to the faces of her players. The next step is to brave the hairy Playbook process to get it on the device so that Cassie can bring it to school for Show &#038; Tell.</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/games/sissy/"><img src="http://www.untoldentertainment.com/blog/img/2011_05_23/family.jpg" alt="Creighton family"></a></p>
<p>[Photo by <a href="http://road-rage-bunny.livejournal.com/127136.html">Paul Hillier</a>]
</div>
<h2>Correcting History</h2>
<p>i really hope you enjoy <b>Sissy&#8217;s Magical Ponycorn Adventure</b>. In all of this, our goal as parents is to give our kids the kind of childhood we would KILL to have had.  i can&#8217;t imagine how different my life would have been if i had made a real working video game with my father at age 5.  In fact, i can&#8217;t imagine how different my life would have been if he hadn&#8217;t left when i was eight months old.</p>
<p>But no matter. Some day, the ponycorns will get him.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F24%2Fsissys-magical-ponycorn-adventure%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F24%2Fsissys-magical-ponycorn-adventure%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/05/24/sissys-magical-ponycorn-adventure/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3729&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/05/24/sissys-magical-ponycorn-adventure/feed/</wfw:commentRss>
		<slash:comments>162</slash:comments>
			<enclosure url="http://www.untoldentertainment.com/blog/img/2011_05_23/familyTrack.mp3" length="309000" type="audio/mpeg" />
		<itunes:duration>0:00:19</itunes:duration>
		<itunes:subtitle>As planned, i took my five-year-old daughter Cassie to TOJam, the three-day Toronto independent game jam, to make a game with me. And here it is:


Play Sissy&#8217;s Magical Ponycorn Adventure

Cassie drew all the pictures, wrote all the titles, an[...]</itunes:subtitle>
		<itunes:summary>As planned, i took my five-year-old daughter Cassie to TOJam, the three-day Toronto independent game jam, to make a game with me. And here it is:


Play Sissy&#8217;s Magical Ponycorn Adventure

Cassie drew all the pictures, wrote all the titles, and recorded the voice of the main character.  She also came up with the NPCs (including Mr. Turtle, the Mean Tiger, and the villainous Lemon), and designed some of the puzzles (including the one where you [SPOILER ALERT] have to read a sign to justify your need for a coconut to throw at the Lemon).


Cassie and Ryan [photo by Brendan Lynch]

Send Cassie to College?
i used Mochimedia&#8217;s ad service to inject ads into the game, which is fitting, because Mochi was a TOJam sponsor this year.  i threw ads in there with the hope that the game might drum up a little bit of cash, which i will put toward the education fund that Cassie&#8217;s grandma started for her.  Wouldn&#8217;t it be cool if Cassie&#8217;s game paid for college?  (Sadly, it won&#8217;t happen.  See the Pimp My Game series for more reasons why.)  For kicks, i added a PayPal Donate button beneath the game.


With your help, maybe we can send her to get some etiquette training? [Photo by Paul Hillier]

Alert Child Services
Dragging your kid to a weekend-long game jam, eh?  Before you call Children&#8217;s Aid on me, please understand that i didn&#8217;t actually keep Cassie captive at TOJam all weekend long.  She came in with me at 9:30 Saturday morning, and was the most excited i&#8217;ve ever seen her.  We&#8217;d been preparing her for MONTHS so that she&#8217;d be emotionally ready for TOJam.  After the organizers expressed concern that my rotten kid would be running around the place pestering people and making noise (an entirely likely scenario, if you&#8217;re familiar with my insane children and my lousy parenting style), i spent every evening coaching Cassie.
Me: Remember, you&#8217;re the first little girl who&#8217;s ever made a game at TOJam.  And everyone&#8217;s worried you&#8217;re going to run around screaming and making noise and wrecking things.
Cassie: (shocked face)  No i won&#8217;t!
Me: *i* know you won&#8217;t. (totally lying here &#8211; i was as nervous about it as anyone)  But you have to prove to everyone that little girls can make video games too.  If you&#8217;re very well behaved, then next year if another little girl wants to come and make a game, the TOJam people will say &#8220;the little girl who made a game last year was SO wonderful, we&#8217;d LOVE to see more little girls making games.&#8221;
Cassie:  i&#8217;ll be have. i will!


Cassandra, &#8220;being have&#8221; [Photo by Paul Hillier]

Yes, Cassandra, There Is a Game Jam
The morning of TOJam was like Christmas for her.  i&#8217;m not kidding.  In the days leading up to the event, she told everyone she knew that she was going to TOJam.  Naturally, they had no idea what she was talking about, but the strangers in the elevator and in the grocery store smiled and nodded politely all the same.
By the end of the day on Saturday, Cassie had spent 10 hours at TOJam, and was begging me to let her stay overnight.  She had put in about 6 hours of actual colouring work, and sunk at least another hour into voice acting later that evening at home, where it was quieter.  i tucked her into bed and returned to TOJam late Saturday evening, and then pulled an all-nighter scanning her crayon drawings and integrating them with the game logic using UGAGS (the Untold Graphic Adventure Game System).


[Photo by Paul Hillier]

Family Jam
Sunday morning after church, the whole family joined me at TOJam with a bunch of instruments in tow.  My wife Cheryl and the two little girls sat together on the carpet down a quiet hallway.  Cassie grabbed the harmonica, i took the drum, Cheryl took the ukulele, and little Isabel used the thumb harp and the Happy Apple.  We recorded some music tracks together.  The one that made it into the game intro is just Cass[...]</itunes:summary>
		<itunes:keywords>Blog</itunes:keywords>
		<itunes:author>ryan@untoldentertainment.com</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>no</itunes:block>
	</item>
		<item>
		<title>Dear RIM Blackberry Playbook People: Please Put that Shit on a Button</title>
		<link>http://www.untoldentertainment.com/blog/2011/05/19/dear-rim-blackberry-playbook-people-please-put-that-shit-on-a-button/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/05/19/dear-rim-blackberry-playbook-people-please-put-that-shit-on-a-button/#comments</comments>
		<pubDate>Thu, 19 May 2011 18:40:58 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[AS3 Helper Class]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Playbook]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3722</guid>
		<description><![CDATA[Dear RIM Blackberry Playbook People, Thank you for sending me a Playbook. i like it very much. i didn&#8217;t very much like the steps involved to put my work on the device, though. It was the most needlessly complicated thing i&#8217;ve had to do in all my life. i&#8217;d like to see the Playbook succeed, [...]]]></description>
			<content:encoded><![CDATA[<p>Dear RIM Blackberry Playbook People,</p>
<p>Thank you for sending me a Playbook.  i like it very much.  i didn&#8217;t very much like the steps involved to put my work on the device, though. It was the most needlessly complicated thing i&#8217;ve had to do in all my life. i&#8217;d like to see the Playbook succeed, but you need to put more effort into helping your developers succeed first.  </p>
<p>Here are a few of the issues i ran into while porting my game <a href="https://appworld.blackberry.com/webstore/content/reviews/38777?lang=en">Heads</a> to your platform:</p>
<ol>
<li>i had to download Many Things, and sign up for Many Accounts. Each Thing and each Account came with 15 pages of legalese with an &#8220;I Agree&#8221; button at the bottom.  <em>I Agree</em> &#8230; that this stinks.
<li>One of the Many Things i had to download was Adobe AIR 2.5.  i followed the link on your site to Adobe AIR <em>2.6</em>, which i downloaded instead.  When i tried to follow your workflow, i was told that only AIR 2.5 would work, so i had to cast about the Internatz to find the 2.5 download, which wasn&#8217;t made immediately and obviously available on the Adobe site.  If i&#8217;m creating something for your platform, everything i do should ideally be immediate and obvious.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/clickHere.jpg" alt="Click here">
</div>
<li>i downloaded VMWare and your VMWare Playbook profile so that i could run a virtual Playbook.  But the emulator stalled at the startup screen for a very long time.  i checked message boards, and found two possible solutions:
<ol>
<li>Leave it overnight.
<li>Alternatingly restart your computer or VMWare multiple times (some reports said &#8220;six or seven&#8221;) until it works.
</ol>
<p>i opted to restart VMWare and my computer multiple times until it worked.  This was very frustrating.  i&#8217;m not the only one who experienced this problem, as evidenced by this web comic by my Twitter pal @<a href="http://twitter.com/#!/iqandreas">IQAndreas</a>:</p>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic1.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic2.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic3.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic0.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<div class="displayed">
<p><a href="http://iqandreas.blogspot.com/2011/03/developing-for-playbook-chapter-3.html"><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/comic4.png" alt="Developing for the Playbook: Chapter 3"></a>
</div>
<li>In order to deploy my game to the virtual Playbook, i had to know its IP.  To get that, i had to swipe the &#8220;development&#8221; option into the &#8220;on&#8221; position and punch in my password.  i had to use the software keyboard to punch in my password, because my computer keyboard didn&#8217;t work.  And worse than that, it took about 4-5 tries swiping the slider and punching in my password before the Developer hammer icon would appear on the home screen &#8230; for whatever reason, that slider kept undoing itself.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_05_19/slider.jpg" alt="Playbook Development Slider"></p>
<p>Somebody call Jerry O&#8217;Connell, cuz this slider be busted.
</p></div>
<li>When it came time to bundle my files together in a .bar file, i was dismayed to find that since i don&#8217;t use Flash Builder (but, rather, FlashDevelop), i would need to use the command line to continue.  i hate the command line. HAATE it.  i know that eggheads love it, and that you employ Many Eggheads at RIM, but you have to understand that even though the command line is useful and powerful and 1337 and everything, i absolutely can&#8217;t be arsed with it.  Like, not at all.  So knock it off.
<p>Here is what i had to type into the command line in order to bundle my project into a .bar file:</p>
<blockquote><p>C:\dev\BlackBerryTabletSDK\blackberry-tablet-sdk-0.9.3\bin\blackberry-airpackager -package MyGame.bar -installApp -launchApp MyGame-app.xml blackberry-tablet.xml MyGame.swf blackberry-tablet-icon.png -device 192.168.58.128 -password 123456</p></blockquote>
<p>This is not a fun thing to have to type.  Know what i want to do?  Click a button.  Can you make it so that i just click a button?  Buttons good, typing bad.  It may not be 1337, but it also doesn&#8217;t eat up my entire afternoon.</p>
<li>i am currently rocking three Blackberry accounts: one to develop my game, one to sell my game, and one to talk about my game on your forums.  This is Too Many Accounts.  Know how many there should be? One.  Know why?  Because it&#8217;s easier.  Know what&#8217;s not easy?  You.
<li>When i signed my application, i had to download a file that you sent to me two days after i emailed you and asked you for it.  That&#8217;s Too Many Days.  That&#8217;s because you also took two or three days to approve my vendor account.  Why not do this in one step instead of two?  Clearly, a vendor is always going to need the application signing file.  See how you don&#8217;t make things easy, when you potentially could?
<li>Then i had to use the <em>command line</em> (which, as we&#8217;ve already established, is <em>bad</em>) to create a file that i could send to you so that my computer could sign files.  At least i think that&#8217;s what i was doing. Here&#8217;s what the command looked like:<br />
<blockquote><p>blackberry-signer -csksetup -cskpass DesiredCSKPassword</p></blockquote>
<p>Then i had to use the <em>command line</em> (bad. BAD!) to send you my .csj file <em>to receive permission to sign my other file</em>.  i think.  i&#8217;m not quite sure what was going on, because it was tough to interpret the command, which looked like this:</p>
<blockquote><p>blackberry-signer -register -csjpin PinEnteredWhileRequestingCSJ -cskpass PasswordEnteredWhileGeneratingCSK client-RDK-XXXXXXXXXX.csj</p></blockquote>
<p>Next, i had to create a .p12 certificate using this command:</p>
<blockquote><p>
blackberry-keytool -genkeypair -keystore DesiredCertificateName.p12 -storepass NewPassword -dname &#8220;cn=MyCompanyName&#8221; -alias author</p></blockquote>
<p>Then i had to get you to sign the file using this command:</p>
<blockquote><p>blackberry-signer -verbose -cskpass CSKPassword -keystore CertificateName.p12 -storepass StorePassword BarFileNameForRIMToSign.bar RDK</p></blockquote>
<p>Then i had to sign the file myself using this command:</p>
<blockquote><p>blackberry-signer -keystore CertificateName.p12 -storepass StorePassword RimSignedBarFile.bar author</p></blockquote>
<li>When i finally went to upload my file, in the web form you asked me for an <em>additional</em> icon in some bizarre size (243&#215;717 or something like that).  i went away and produced that icon, and by the time i returned, the web form had timed out.  Know what would be easier?  A checklist!<br />
<blockquote><p><b>YOU WILL NEED:</b></p>
<ul>
<li>A swf
<li>An xml file called whatever.xml &#8211; download it HERE!
<li>A thumbnail icon &#8211; download a template HERE!
<li>A second icon &#8211; download a template HERE!
<li>A brief description of your application &#8211; max X words
<li>A long-form description of your application &#8211; max Y words
</ul>
<p>And HERE&#8217;S an image of how all this stuff looks when it&#8217;s in the Blackberry App World!  We&#8217;ve LABELLED everything for you, so you know where the descriptions and icons appear and how they&#8217;ll look to the user.</p></blockquote>
<p>Really, though &#8211; how long does that kind of thing take to set up?  An afternoon?  Why does this not exist yet?</p>
<li>To add insult to injury, my game was initially rejected because it did not contain the icon.png.  i figured i must have forgotten to include the .png filename when i created the .bar file, so i went through all of those horrible steps <em>again</em>.  For a second time, my game was rejected.  Same reason.
<p>Know what the problem was?  i hadn&#8217;t added this to the xml file:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;icon<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>whatever.png<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/icon<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>N&#8217;awesome.
</ol>
<p>i didn&#8217;t enjoy doing this, and i don&#8217;t want to have to do it ever again.  Know what i want?  i want a big blank <em>area</em> where i can drag and drop my file, with a huge shiny juicy button that says &#8220;GO BITCH GO&#8221; which, when i click it, <em>does all the bullshit i just described above</em>.  Please get your eggheads on that.  </p>
<p>In addition to all of the brilliant software and hardware engineers you employ, you simply need to hire more <em>people</em> to evaluate this process.  An egghead will tell you that using the command line is cool and awesome and that everyone loves doing it.  A <em>person</em> will tell you the actual truth: using the command line blows, and you need to put that shit on a button.  </p>
<p>Please let me know if and when you plan to put that shit on a button, and i&#8217;ll gladly continue developing for your device, because it&#8217;s pretty cool.</p>
<p>Sincerely,</p>
<p>Ryan Henson Creighton</p>
<p>President, Untold Entertainment Inc.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F19%2Fdear-rim-blackberry-playbook-people-please-put-that-shit-on-a-button%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F19%2Fdear-rim-blackberry-playbook-people-please-put-that-shit-on-a-button%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/05/19/dear-rim-blackberry-playbook-people-please-put-that-shit-on-a-button/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3722&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/05/19/dear-rim-blackberry-playbook-people-please-put-that-shit-on-a-button/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Cooking With Flash: Drawing Complex Images using Tweened Animation</title>
		<link>http://www.untoldentertainment.com/blog/2011/05/09/cooking-with-flash-drawing-complex-images-using-tweened-animation/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/05/09/cooking-with-flash-drawing-complex-images-using-tweened-animation/#comments</comments>
		<pubDate>Mon, 09 May 2011 14:41:38 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Cooking With Flash]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3651</guid>
		<description><![CDATA[Drawing repeating elements in Flash can be a real asspain. This tutorial will teach you a valuable trick with the timeline to help you draw things like starbursts, buzzsaws, clock faces, and repeating elements along a path. Check out this vector graphic of a sun. Sure, you can individually copy and rotate all those flames [...]]]></description>
			<content:encoded><![CDATA[<p>Drawing repeating elements in Flash can be a real asspain.  This tutorial will teach you a valuable trick with the timeline to help you draw things like starbursts, buzzsaws, clock faces, and repeating elements along a path.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/sun.jpg" alt="sun">
</div>
<p>Check out this vector graphic of a sun.  Sure, you can individually copy and rotate all those flames and then meticulously hand-position them,  but life&#8217;s too short and you’ve got too much other awesome stuff to do. There&#8217;s a faster, easier way!</p>
<h2>Step 1: Draw your graphics</h2>
<p>To begin, I&#8217;ve just drawn a circle and a little flame graphic. I filled them both with a gradient so they look less junky.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/flameAndCircle.jpg" alt="sun">
</div>
<h2>Step 2: Symbolize your graphics</h2>
<p>Select the circle and press F8, or click Modify > Convert to Symbol.  Enter a name for your symbol – anything you like – and make sure the Registration point is in the center.  Press OK when you’re finished.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/convertToSymbol.jpg" alt="sun">
</div>
<h2>Step 3: Create an Empty Movie Clip</h2>
<p>Press CTRL+F8 or click Insert > New Symbol &#8230; to create an empty Movie Clip.  Again, call it whatever you like and click OK.  Then click the Scene 1 tab to jump back out to the main timeline.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/emptySymbol.jpg" alt="sun">
</div>
<p>Press CTRL + L or click Window > Library to bring up the Library.  Click and drag the empty Movie Clip you just created and drag it to the Stage.  The empty Movie Clip looks like a white dot. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/whiteDot.jpg" alt="sun">
</div>
<h2>Step 4: Align the two Movie Clips</h2>
<p>Press CTRL + K or click Window > Align in the menus to bring up the Align panel.  Click and drag to range-select both Movie Clips at once.  Click the “Align horizontal center” and “Align vertical center” buttons (highlighted in red in the image) to align the center points of the two clips.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/align.jpg" alt="sun">
</div>
<h2>Step 5: Cut and paste the repeated element into the empty Movie Clip.</h2>
<p>Select the artwork for the repeated element and press CTRL+X or Edit > Cut in the menus to delete it and copy it to memory in the clipboard.</p>
<p>Now, double-click the empty Movie Clip (the white dot) to edit it. If you accidentally double-click the circle, click the Scene 1 button to jump back out to the main timeline and try again.  Alternately, you can double-click the empty clip from the library to edit it. </p>
<p>Finally, press CTRL+V or Edit > Paste to paste the repeated element artwork from the clipboard into the empty Movie Clip.  Position the artwork where you’d like it to appear; in the case of our sun graphic, we’ll move the little flame to the edge of the circle.  Click the Scene 1 button to jump back out to the main timeline when you’re ready.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/pasteRepeated.jpg" alt="sun">
</div>
<h2>Step 6: Prep the timeline.</h2>
<p>Select the repeated element (in this case, the flame Movie Clip) and press CTRL+X or Edit > Cut to delete it and copy it to the clipboard.  </p>
<p>Click the New Layer button at the bottom left of the Timeline window.  Click on the first frame of the newly-added layer, and press CTRL+SHIFT+V to paste the repeated element in exactly the same place. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/pasteInPlace.jpg" alt="sun">
</div>
<h2>Step 7: Spin the clip.</h2>
<p>Click on frame 30 of the main timeline in the newly-added layer.  Press F6 or click Insert > Timeline > Keyframe to drop a new Keyframe there.  You’ll see a black dot on frame 30.</p>
<p>Click on Frame 1 of the new layer.  Right-click and select Create Classic Tween.  An arrow with a blue background appears to indicate that Flash will interpolate the position, rotation, scale and color effects of this Movie Clip across the frame range. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/classicTween.jpg" alt="sun">
</div>
<p>Open the Properties panel (Windows > Properties or CTRL+F3).  Select the repeated element Movie Clip.  The context-sensitive Properties panel updates to show Movie Clip properties.</p>
<p>Under the Tweening heading, choose CW (clockwise) from the Rotate: dropdown.  (You may need to click the little triangle to expand the Tweening section).  This makes the repeated element rotate around its registration point for the duration of the animation span.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/clockwise.jpg" alt="sun">
</div>
</h2>
<p>Step 8: Adjust the animation with Onion-Skinning.</h2>
<p>Click the Onion Skin button at the bottom of the Timeline window to turn on Onion Skinning.  Click and drag the grey animation range gizmo at the top of the Timeline window to stretch across the entire animation range. </p>
<p>Now you can clearly see how your repeated element is distributed around its registration point.  If the distribution is too sparse, click the pink rectangular Playhead at the top of the Timeline window and hold down the F5 key (or repeatedly click Insert > Timeline > Frame if you’re a sucker) until the distribution is to your likely.  If the distribution is too dense, press SHIFT+F5 to delete frames until it looks good.  If you’re deleting frames, make sure you either lock the lower layer, or move away from Frame 1, or else you’ll delete the lower layer artwork!</p>
<p>The following images show how differing frame range lengths can affect the distribution of your repeated elements:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/skin1.jpg" alt="sun">
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/skin2.jpg" alt="sun">
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/skin3.jpg" alt="sun">
</div>
<h2>Step 9: Turn the interpolated frames into symbol instances.</h2>
<p>Right now, those repeated elements may look exactly the way you want them, but they’re not “real”.  What you’re seeing is just the motion trail of a single Movie Clip instance as it revolves through its animation.<br />
To turn these phantoms into actual symbol instances, click and drag to select the entire range of animated frames, and press F6 to convert them all to keyframes.  Now, each frame contains an actual “physical” instance of the Movie Clip.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/physical.jpg" alt="sun">
</div>
<h2>Step 10: Gather the elements together on one frame.</h2>
<p>Click the Edit Multiple Frames button at the bottom of the Timeline window.  </p>
<p>Click the dot beneath the Lock column on the lower layer, to keep from messing with the graphics on the lower frame.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/lock.jpg" alt="sun">
</div>
<p>Press CTRL+A to select all of the (unlocked) repeated elements. The Edit Multiple Frames mode enables you to select all of the instances across the frame range.</p>
<p>Press CTRL+X or Edit > Cut to delete all of the repeated elements and copy them to the clipboard.<br />
Uncheck the Edit Multiple Frames button.  Click on the first frame, and press CTRL+SHIFT+V to paste the repeated elements in place.  </p>
<h2>Step 11: Tidy up.</h2>
<p>Click and drag to select the animation range from frame 2 to the last frame.  Press CTRL+F6 to delete all of the empty, blue animated keyframes. Press SHIFT+F5 to delete the frames so that your timeline is back to a single frame.</p>
<p>Click and drag the top layer below the bottom layer to swap their z-depth order.  This put the repeated elements behind the circle.  Looks pretty good!  </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/sun.jpg" alt="sun">
</div>
<p>This trick works for more than just straight lathe effects.  You can animate a MovieClip along a path and add scale effects to it before F6-ing the whole affair.  Check out the tail scales on this super-realistic dinosaur:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_21/dinosaur.jpg" alt="sun">
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F09%2Fcooking-with-flash-drawing-complex-images-using-tweened-animation%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F09%2Fcooking-with-flash-drawing-complex-images-using-tweened-animation%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/05/09/cooking-with-flash-drawing-complex-images-using-tweened-animation/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3651&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/05/09/cooking-with-flash-drawing-complex-images-using-tweened-animation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cooking With Flash: Animating a Bouncing Ball</title>
		<link>http://www.untoldentertainment.com/blog/2011/05/03/cooking-with-flash-animating-a-bouncing-ball/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/05/03/cooking-with-flash-animating-a-bouncing-ball/#comments</comments>
		<pubDate>Tue, 03 May 2011 15:53:39 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3634</guid>
		<description><![CDATA[Animating a bouncing ball is one of the first things you learn in a classical animation program. These days, many programs teach video game development, including art asset prep, concept art, 3d modelling, etc etc, but they gloss over (or don&#8217;t even bother teaching) some very basic concepts than any creator should know. Here&#8217;s how [...]]]></description>
			<content:encoded><![CDATA[<p>Animating a bouncing ball is one of the first things you learn in a classical animation program.  These days, many programs teach video game development, including art asset prep, concept art, 3d modelling, etc etc, but they gloss over (or don&#8217;t even bother teaching) some very basic concepts than any creator should know.</p>
<p>
<object width="300" height="200">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/ball-good.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="300" height="200" src="http://www.untoldentertainment.com/blog/img/2011_04_20/ball-good.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>Here&#8217;s how to animate a bouncing ball convincingly using Flash CS5 (though these steps will work in most &#8211; if not all -iterations of the Flash software).</p>
<h2>Step 1: Create the Ball</h2>
<ol>
<li>In the tool palette, click and hold the mouse button on the &#8220;stroke&#8221; swatch.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/strokeSwatch.jpg" alt="stroke swatch">
</div>
<li>Select the strike-through swatch. Our ball art won&#8217;t have a stroke.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/strikeThrough.jpg" alt="strikethrough">
</div>
<li>Optionally, click and hold the mouse button on the &#8220;fill&#8221; swatch and choose a colour for your ball.  i went with classic cherry red (#0xCC0000).
<li>Again in the tool palette, Select the Oval tool. If you can&#8217;t see it, press and hold on the Rectangle tool &#8211; the Oval tool is hiding in a fly-out. You could also press the &#8220;O&#8221; key on your keyboard.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/ovalTool.jpg" alt="Flash oval tool">
</div>
<li>Click and drag the mouse to draw a circle on the screen. Hold the SHIFT key to constrain the circle&#8217;s proportions so that you don&#8217;t end up with an oblong ellipse.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/drawOval.jpg" alt="draw oval in Flash">
</div>
<li>Click the selection (black arrow) tool. You use this one a lot, so why not learn the keyboard shortcut?  It&#8217;s &#8220;V&#8221;.  (Pointy, like an arrow.  Get it?)
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/blackArrow.jpg" alt="Flash selection tool">
</div>
<li>Either double-click the raw circle artwork, or range select it (drag a selection box around the artwork).  It goes &#8220;fuzzy&#8221;.  (And it wouldn&#8217;t be an Untold Entertainment tutorial without some mention of fuzzy balls.)
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/fuzzyBall.jpg" alt="fuzzy ball">
</div>
<li>With the artwork selected, choose Modify>Convert to Symbol in the menu, or press the F8 key.
<li>In the resulting pop-up, type &#8220;Ball&#8221; as the MovieClip&#8217;s name.
<li>Choose the bottom-middle for the registration point.  <em>This is key to animating a bouncing ball properly!</em>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/convertToSymbol.jpg" alt="Convert to symbol">
</div>
</ol>
<p>On or around the Flash MX release, the Flash engineers added a feature where a MovieClip can have its registration point in a certain place (ours is at the bottom of the ball), but there&#8217;s a second point &#8211; an <em>anchor point</em> &#8211; that can move around according to the needs of our animation.  i don&#8217;t know why the anchor point doesn&#8217;t move to the bottom of the ball when we clearly want it there.  Anyway, the last bit in this section is to move the ball&#8217;s anchor point down to the bottom middle, where its registration point is. </p>
<ol>
<li>Make sure that snapping is turned ON.  The Anchor icon in the Tool palette should be depressed (cheer up, little icon &#8211; things can only get better).  You can quickly toggle snapping with the shortcut CTRL + SHIFT + /.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/snap.jpg" alt="Flash Snap Tool">
</div>
<li>Click on the Free Transform Tool.  In addition to rotating, skewing and scaling things, this tool lets us move our anchor point around.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/freeTransform.jpg" alt="Flash Free Transform Tool">
</div>
<li>The anchor point is the white dot in the center of the ball MovieClip.  Click and drag it to the bottom-middle of the ball. Since snapping&#8217;s turned on, it should snap into place.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/snapAnchor.jpg" alt="Snap Anchor">
</div>
</ol>
<p>With the anchor point snapped to the bottom of the ball, we can properly squash and stretch it.  &#8220;Squash n&#8217; stretch&#8221; is one of the principles of animation laid out by Disney&#8217;s Twelve Old Men in the indispensible book <a href="http://www.amazon.com/gp/product/0786860707/ref=as_li_qf_sp_asin_tl?ie=UTF8&#038;tag=untoldentert-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399353&#038;creativeASIN=0786860707">The ILLUSION OF LIFE: DISNEY ANIMATION</a><img src="http://www.assoc-amazon.com/e/ir?t=untoldentert-20&#038;l=as2&#038;o=1&#038;a=0786860707&#038;camp=217145&#038;creative=399349" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><img src="http://www.assoc-amazon.com/e/ir?t=untoldentert-20&#038;l=as2&#038;o=1&#038;a=0786860707&#038;camp=217145&#038;creative=399357" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. </p>
<div class="displayed">
<p><a href="http://www.amazon.com/gp/product/0786860707/ref=as_li_qf_sp_asin_tl?ie=UTF8&#038;tag=untoldentert-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399353&#038;creativeASIN=0786860707"><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/illusionOfLife.jpg" alt="The Illusion of Life"></a><img src="http://www.assoc-amazon.com/e/ir?t=untoldentert-20&#038;l=as2&#038;o=1&#038;a=0786860707&#038;camp=217145&#038;creative=399349" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><img src="http://www.assoc-amazon.com/e/ir?t=untoldentert-20&#038;l=as2&#038;o=1&#038;a=0786860707&#038;camp=217145&#038;creative=399357" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></a>
</div>
<p>If you&#8217;re interested in animation, i highly recommend studying that book and the Disney principles: arc of motion, squash n&#8217; stretch, anticipation, secondary motion, follow-through &#8230; fantastic stuff!</p>
<h2>Step 2: Rough-In the Animation</h2>
<p>Thanks to the magic of computerized interpolative animation (AKA &#8220;tweening&#8221;), it&#8217;s a pretty quick job to get the ball bouncing.  Getting it bouncing <em>convincingly</em> takes a tiny bit more effort.</p>
<p>So let&#8217;s rough it in first:</p>
<ol>
<li>Click on frame 5 in the Timeline.
<li>Click Insert>Timeline>Keyframe in the menu.  If you&#8217;re going to do even a smidge of animation in Flash, you should really learn the Timeline shortcuts:
<p>    &#8211; F5: insert a blank frame<br />
    &#8211; F6: insert a keyframe<br />
    &#8211; F7: insert a blank keyframe<br />
    &#8211; SHIFT + F5: delete a blank frame<br />
    &#8211; SHIFT + F6: delete a keyframe<br />
    &#8211; SHIFT + F7: delete a blank keyframe</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/frame5.jpg" alt="Flash insert keyframe">
</div>
<p>Inserting a keyframe copies everything from the previous keyframe (the first one Flash finds travelling backwards along the timeline).  In the case of our Ball MovieClip, Flash copies the ball&#8217;s position, rotation, scale, and colour effects. This is a Good Thing.™</p>
<li>Click on frame 10 of the Timeline, and press F6 to add another keyframe.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/frame10.jpg" alt="Flash insert keyframe">
</div>
<p>Now we have three instances of the Ball, on frames 1, 5, and 10.  Frames 1 and 10 will depict the Ball in its &#8220;up&#8221; state, and frame 5 will be the &#8220;down&#8221; state.</p>
<li>Click on frame 5.
<li>Click on the Ball MovieClip, and move it down the screen.  i moved mine about 90 pixels down, and my Ball is 50 pixels in diameter.  Don&#8217;t worry about botching this step &#8211; you can easily adjust your animation later.
<li>Click on any frame in the Timeline from 1-4.
<li>Right-click and choose &#8220;Create Classic Tween&#8221; from the context menu, or choose the same option from the program menu &#8211; Insert>Classic Tween.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/createClassicTween.jpg" alt="Flash Create Classic Tween">
</div>
<p>Flash offers two different styles of interpolative animation: the new Motion Tween, for designers who want full spline control over every axis of an animation, and Classic Tween, for us old-schoolers who can&#8217;t be arsed.  (Guess which kind of developer i am?)</p>
<li>Similarly, add a Classic tween between frames 5 and 10.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/tweens.jpg" alt="Flash Classic Tweens">
</div>
<p>The first tween we created tells Flash to figure out the in-between drawings (&#8220;tweens&#8221;) from the Ball&#8217;s &#8220;up&#8221; keyframe and its &#8220;down&#8221; keyframe.  Likewise, the second tween tells Flash to calculate the in-between drawings from the ball&#8217;s &#8220;down&#8221; keyframe to its &#8220;up&#8221; keyframe.</p>
<p>Play your animation by pressing the ENTER key on your keyboard, or better yet, click Control>Test Movie>Test in the menus, or hit CTRL+ENTER.  Your Ball should animate up and down, <em>crappily</em>.  </p>
<p>
<object width="300" height="200">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/ball-crappy.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="300" height="200" src="http://www.untoldentertainment.com/blog/img/2011_04_20/ball-crappy.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>Our Ball is <em>moving</em>, but it&#8217;s not <em>animating</em>.  The <em>Illusion of Life</em> isn&#8217;t there.  We&#8217;re going to change that.</p>
<h2>Step 3: Breath Some Life Into It</h2>
<p>The type of ball we&#8217;ve got bouncing right now is very very stiff.  It&#8217;s a cue ball or a bowling ball or a brass ball.  It isn&#8217;t a very fun ball.  It&#8217;s not soft or squishy.  It has no personality.  By adding a tiny bit of squash n&#8217; stretch, we can eke a lot more <em>verve</em> out of it.</p>
<p>The squash n&#8217; stretch principal is this: squishy, bouncy, rubbery things are more fun to watch on screen than rigid things.  You&#8217;re &#8220;allowed&#8221; to squash or stretch something as much as you like, even to extremes, as long as the body&#8217;s volume stays the same.  So if you stretch something up very tall, it has to simultaneously get very thin, or else it appears to <em>gain mass</em>, and it just won&#8217;t look right.</p>
<p>By the same token, if you flatten something by making it short, all that <em>stuff</em> has to seep out somewhere, so the shape has to simultaneously become very wide.</p>
<p>It makes sense to add a squash to the ball on the frame when it hits the ground, and maybe a slight stretch when it&#8217;s up in the air.  Let&#8217;s do it:</p>
<ol>
<li>Click on frame 5.
<li>Click on the Free Transform tool.
<li>Select the Ball MovieClip.
<li>Drag the handles around to make your ball short and squat.  Try to conserve the ball&#8217;s mass.  For every inch that you flatten it, you&#8217;ve gotta squash it by the same amount.
</ol>
<p>Now test your movie.</p>
<p>
<object width="300" height="200">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/ballEarlySquish.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="300" height="200" src="http://www.untoldentertainment.com/blog/img/2011_04_20/ballEarlySquish.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>Uh-oh &#8230; this isn&#8217;t good. Something doesn&#8217;t quite look right.  Sure, the ball squishes when it lands, but &#8230; what&#8217;s going on?</p>
<p>The reason it doesn&#8217;t play well is that Flash is interpolating the squish from frame 1, when the ball is up in the air, all the way down to frame 5, when it hits the ground.  Of course, the ball&#8217;s only going to squish when it actually makes contact with a hard surface.  </p>
<p>Pres CTRL+Z or choose the Undo options from the Edit menu to undo the last few steps, until the ball on frame 5 is unsquished, and there are no Classic Tweens in the timeline.  (If you undo too many steps, you can choose CTRL + Y or Edit>Redo to <em>undo your undo</em></p>
<h2>Step 4: Protect the Squish</h2>
<p>In order to prevent Flash from interpolating the squish all the way through the animation, we need to &#8220;protect&#8221; the squish frame.  We can do this by placing two keyframes, one on either side of frame 5.  By doing this, we ask Flash to tween only the ball&#8217;s position on the way down, and only its position on the way up.  Then, on the &#8220;protected&#8221; 5th frame, we squish the ball.</p>
<ol>
<li>Place a keyframe on frame 6.  This copies the ball in its &#8220;down&#8221; state from frame 5.
<li>Press CTRL+C on the keyboard, or Edit>Copy to copy the ball in this position.
<li>Place a new blank keyframe on frame 4.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/blankKeyframe.jpg" alt="Flash blank keyframe">
</div>
<li>Press CTRL+SHIFT+V or choose Edit>Paste in Place to paste the ball in its &#8220;down&#8221; position, exactly as it is on frames 5 and 6.
<li>Re-add the Classic Tweens leading from frames 1 and 6.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/protected.jpg" alt="Protected squish">
</div>
<li>Now that the squish frame is protected, you can go back and add the squish to the ball on frame 5.
</ol>
<p>
<object width="300" height="200">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/ballGoodSquish.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="300" height="200" src="http://www.untoldentertainment.com/blog/img/2011_04_20/ballGoodSquish.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>It&#8217;s better with the squish, but it&#8217;s not perfect.  Let&#8217;s try adding a stretch to the &#8220;up&#8221; positions.</p>
<ol>
<li>On frame 1, stretch the ball out a touch using the Free Transform tool.
<li>Since the animation loops, the first and the last frames have to match. Copy the ball from this frame.
<li>Click on the last frame, frame 10.
<li>Delete the ball from frame 10.  This breaks our Classic Tween, and we get a dotted line leading to a blank keyframe.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/brokenTween.jpg" alt="Broken tween">
</div>
<li>Press CTRL+SHIFT+V or select Edit>Past in Place to paste the stretched ball.  The Classic Tween is back to normal, now that it has something to animate towards.
</ol>
<p>
<object width="300" height="200">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/ballWithStretch.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="300" height="200" src="http://www.untoldentertainment.com/blog/img/2011_04_20/ballWithStretch.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>Okay!  Almost there!  It&#8217;s looking better with that stretch.  You may wonder why i&#8217;m not asking you to &#8220;protect&#8221; the stretch frames like we did with the squashed frame.  That&#8217;s because while the ball shouldn&#8217;t squish until it hits the floor, it actually <em>should</em> lengthen as it travels up through the air.</p>
<p>The worst thing about our animation right now is the timing.  The ball moves pretty robotically, and it has a real &#8220;computer animated&#8221; feel to it.  In order to soften this up, we&#8217;ll apply some timing to the animation.</p>
<h2>Step 5: Apply Timing</h2>
<p>To make the ball a little more phyiscally believable, we need to slow it down on the way up.  If you&#8217;ve ever seen super-slow-motion footage of someone hitting a baseball, or if you&#8217;ve studied Newtonian physics, you&#8217;ll know that the baseball actually comes to a dead stop as its energy is transferred to the bat.  The bat, in turn, applies force in the opposite direction to the ball.</p>
<p>Similarly, there&#8217;s a point at which our ball hangs in the air and stops moving, before heading back down towards the ground.  It decelerates (moves increasingly more slowly) as it reaches the apex of its bounce, and accelerates as it reverses direction and heads towards the ground.</p>
<p>We need to apply some <em>easing</em> to the ball to imitate this real-world behaviour.</p>
<p>Easing can front- or back-load a tween animation so that it&#8217;s slower or faster at the beginning or the end.</p>
<p>Here&#8217;s a picture of a tweened box animation with no easing:</p>
<p>
<object width="550" height="400">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/boxNoEasing.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.untoldentertainment.com/blog/img/2011_04_20/boxNoEasing.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>The box&#8217;s in-between frames are evenly distributed between the start and end points.</p>
<p>And here it is with &#8220;Ease In&#8221;:</p>
<p>
<object width="550" height="400">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/boxEaseIn.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.untoldentertainment.com/blog/img/2011_04_20/boxEaseIn.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>The box appears to move more slowly at the beginning of its animation, and it speeds up as it reaches the end point.  We can see this is because the box&#8217;s in-betweens are bunched together at the beginning.</p>
<p>Finally, here&#8217;s what &#8220;Ease Out&#8221; looks like:</p>
<p>
<object width="550" height="400">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/boxEaseOut.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.untoldentertainment.com/blog/img/2011_04_20/boxEaseOut.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>The box appears to slow down at the end of the animation, because its in-between frames are bunched together there.</p>
<p>So we return to our bouncing ball.  We want the tween coming out of frame 1 to Ease In, so that it accelerates towards the ground.  We want the tween coming into frame 10 to Ease Out, so that the ball slows down when it reaches the top of its bounce.</p>
<ol>
<li>Click on frame 1.
<li>In the properties panel, drag the number 0 next to the &#8220;Ease:&#8221; label all the way to the left, until it reaches -100 and the word &#8220;in&#8221; appears.  You can also single-click on the number and it becomes an input field.  Type &#8220;-100&#8243; into the field and press ENTER.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/easeIn.jpg" alt="Flash Ease In">
</div>
<li>Click on frame 6.
<li>In the properties panel, slide the Ease: to the right until it reaches 100/out, or single-click the field and type &#8220;100&#8243;, then press ENTER.
<li>For the finishing touches, i decided to slow the squish down a bit.  First i added a frame on either side of the squish:
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/finishingTouches1.jpg" alt="Animated ball in Flash finishing touches">
</div>
<li>&#8230; and then i added Classic Tweens coming into and going out of the squish.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_20/finishingTouches2.jpg" alt="Animated ball in Flash finishing touches">
</div>
</ol>
<p>Test your movie.</p>
<p>
<object width="300" height="200">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2011_04_20/ball-good.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="300" height="200" src="http://www.untoldentertainment.com/blog/img/2011_04_20/ball-good.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>The combination of easing and squash n&#8217; stretch give the ball a lot of spunk and life!  Instead of a ball that looks like it was animated by a robot, we&#8217;ve got a spunky, squishy object that&#8217;s a lot more fun to watch.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F03%2Fcooking-with-flash-animating-a-bouncing-ball%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F05%2F03%2Fcooking-with-flash-animating-a-bouncing-ball%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/05/03/cooking-with-flash-animating-a-bouncing-ball/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3634&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/05/03/cooking-with-flash-animating-a-bouncing-ball/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Tiniest TOJammer</title>
		<link>http://www.untoldentertainment.com/blog/2011/04/29/the-tiniest-tojammer/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/04/29/the-tiniest-tojammer/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 06:04:24 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Game Ideas]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[TOJam]]></category>
		<category><![CDATA[Toronto]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3673</guid>
		<description><![CDATA[After a tumultuous delay, the TOJam registration form is currently live! What was the hold-up? Remember that scene from Lord of the Rings, where Gandalf battles the ferocious Balrog and they wrestle each other off a cliff? Well, imagine that Gandalf is TOJam organizer Jim McGinley, the Balrog is the new database system for TOJam, [...]]]></description>
			<content:encoded><![CDATA[<p>After a tumultuous delay, the <a href="http://www.tojam.ca">TOJam</a> registration form is currently live!  What was the hold-up?  Remember that scene from Lord of the Rings, where Gandalf battles the ferocious Balrog and they wrestle each other off a cliff?  Well, imagine that Gandalf is TOJam organizer Jim McGinley, the Balrog is the new database system for TOJam, and i&#8217;m a really sexy elf.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_29/sexyElf.jpg" alt="Ryan Creighton is a sexy elf"></p>
<p>Go on: imagine it.
</p></div>
<p>Seriously, if you want to attend TOJam and you haven&#8217;t signed up yet, i don&#8217;t know why you&#8217;re over here reading this crummy blog. Space is limited.  <a href="http://www.tojam.ca">Go sign up now</a>.  Like, <em>right now</em>.  i&#8217;ll wait.</p>
<h2>Party of One</h2>
<p>This&#8217;ll be the first TOJam that i haven&#8217;t done all by my lonesome.  After creating <a href="http://www.untoldentertainment.com/blog/2007/04/26/two-by-two/">Two By Two</a>, <a href="http://www.untoldentertainment.com/blog/2008/05/12/here-be-dragons/">Here Be Dragons</a>, <a href="http://www.untoldentertainment.com/blog/2009/05/05/bloat/">Bloat.</a>, and <a href="http://appworld.blackberry.com/webstore/content/38777?lang=en">Heads</a> single-handedly, i&#8217;ve finally roped someone into spending an entire weekend with me in a room full of sweaty nerds building video games.  And better than that, she&#8217;s a <em>girl</em>.  How did i do it?</p>
<p>i&#8217;m her legal guardian.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_29/cassie.jpg" alt="Spawn of Creighton"></p>
<p>Behold my progeny!
</p></div>
<p>This year, i&#8217;m teaming up with my five-year-old daughter Cassandra to create a game called <b>Sissy&#8217;s Magical Ponycorn Adventure</b>, which is a magical adventure game featuring ponycorns.  (At this point, i usually have to stop and explain to people what a &#8220;ponycorn&#8221; is, which dismays me &#8230; a ponycorn, <em>clearly</em>, is a single-horned pony &#8211; a pony/unicorn.  A ponycorn.  You see?  Was that so difficult?)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_04_29/ponycorn.jpg" alt="Ponycorn"></p>
<p>Get some fekkin&#8217; imagination, you freaks.
</p></div>
<p>Cassie, who is a great little artist, will be drawing the game&#8217;s pictures in crayon, and i&#8217;ll be scanning them in and trying to shoehorn them into a sensible game experience.  Because the handicap is so high on this one, i won&#8217;t be building the whole thing from scratch.  i didn&#8217;t approach my first TOJam this way &#8230; i was determined to build Two By Two from &#8220;scratch&#8221;, starting with nothing and using Flash to build the game from the ground up.</p>
<p>Having proven that i can do it, over the years i&#8217;ve grown less and less dogmatic about TOJam.  For last year&#8217;s game, Heads, i used UGAGS (the Untold Graphic Adventure Game System), as a sort of proof that the time and money we spent building the engine wasn&#8217;t a total waste.  (It wasn&#8217;t! Heads was our very first release on the Blackberry Playbook, and we&#8217;ve gone on to use UGAGS in other projects).  When i got thinking about it, even using Flash is a bit of a cheat.  i didn&#8217;t write that software, and it does a lot of heavy graphics lifting for me.  i also didn&#8217;t build the computer, or smelt the metals used in its creation.  There&#8217;s only so much &#8220;scratch&#8221; that you can start from.</p>
<p>So this year, Cassie and i will be using the <a href="http://www.citrusengine.com">Citrus Engine</a> to make our ponycorn-themed puzzle platformer game. i&#8217;m not even starting from scratch with the Citrus Engine &#8211; i&#8217;ll be re-skinning an existing game that i completed for a client.  i&#8217;ll even be using some artwork that Cassie already drew months ago, because it&#8217;s <em>adorable</em>.  (&#8220;What&#8217;s that, honey?  An alien?  A slug?  A jelly bean?&#8221;  &#8220;No &#8211; it&#8217;s you and me and Mommy.&#8221;)   As is required for any weekend game jam, we&#8217;re keeping our ambitions reined way in; if we come out the other side of this thing with a title screen and one functional level, i&#8217;ll be happy.  </p>
<p>i&#8217;ve also got Cassie slated to do some voice acting for the game, which will toally rock. Unless someone&#8217;s planning to one-up her, Cass will be the youngest developer ever to attend and work on a game at TOJam.</p>
<p>And i&#8217;ll be the sexiest elf in the room. </p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F04%2F29%2Fthe-tiniest-tojammer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F04%2F29%2Fthe-tiniest-tojammer%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/04/29/the-tiniest-tojammer/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3673&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/04/29/the-tiniest-tojammer/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>i wrote a book.</title>
		<link>http://www.untoldentertainment.com/blog/2011/03/29/i-wrote-a-book/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/03/29/i-wrote-a-book/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 01:44:31 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3557</guid>
		<description><![CDATA[This blog&#8217;s been enjoying a steady influx of new readers since my recent GDC shenanigans. Thank you, and welcome! If you haven&#8217;t peered over to my sidebar, here&#8217;s the story so far: i wrote a book. i wrote a book on a subject i knew almost nothing about, and i did it never having written [...]]]></description>
			<content:encoded><![CDATA[<p>This blog&#8217;s been enjoying a steady influx of new readers since my recent GDC shenanigans.  Thank you, and welcome! If you haven&#8217;t peered over to my sidebar, here&#8217;s the story so far: i wrote a book.  i wrote a book on a subject i knew almost nothing about, and i did it never having written a book before.  This is the story of how that happened.</p>
<h2>i Killed a Guy</h2>
<p>End of story.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/chalk.jpg" alt="Chalk outline"></p>
<p>i swear that&#8217;s how it happened, officer.
</p></div>
<h2>New Header</h2>
<p>Alright, no &#8211; but that would have been interesting.</p>
<p>i&#8217;d been aware of Unity 3D, a game engine, right from its early days. i was working at a kids&#8217; media conglomerate and we were researching development tools for a new kids MMO.  Unity was used to develop Cartoon Network&#8217;s FusionFall MMO.  The drawback was that the software only ran on a Mac.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/mac.png" alt="Running on a Mac"></p>
</div>
<p>A year later i was at GDC, and Unity had announced a PC version. i saw them on the show floor, and tried comparing them with Torque 3D. At that time, reps for the two companies were doing a lot of mud-slinging, and a lot of FUD was bouncing around between the booths.  So when i returned home, i asked a simple question on a LinkedIn forum:  Unity or Torque?  The answer was overwhelmingly in favour of Unity, to the tune of hundreds of responses.  i knew i was on to something.</p>
<h2>Get Me Summa Dat</h2>
<p>i <em>wanted</em> to use Unity, but there were still a few barriers in the way.  One of them was removed in short order when Unity moved to a free model.  But there was still the problem that both 3D Studio Max and Maya, 3D software crucial to developing assets for Unity games, were $4000 a seat (after Autodesk had killed the $2k entry level version of each product).  $Four large is a lot to swing on software for a small studio like mine. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/asshole.jpg" alt="Asshole"></p>
<p>Why don&#8217;t i just pirate the software?  Because unlike the guy at Autodesk who decided to cut the entry-level versions of both pieces of software and price them identically, i&#8217;m not an asshole.
</p></div>
<p>Still, i could tell Unity was special, and i wanted to be involved.  So i started tweeting about it.  i kept a watch through Tweetdeck on the #Unity3D hash tag, and if any interesting info floated by, i retweeted it.  i set up a new blogbook here called <a href="http://www.untoldentertainment.com/blog/unity-nuub/">Unity Nuub</a>, which would hold interesting articles and links related to the software.  i downloaded Unity and goofed off with the software a little bit.  i played Unity games.  My interest was piqued, but my activity level was low.</p>
<h2>Where There&#8217;s a Will&#8230;</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/will.jpg" alt="Unity 3D Game Development Essentials"></p>
</div>
<p>Around that time, a small publisher out of the UK called Packt was putting out the very first book on Unity 3D, by Will Goldstone.  The publisher contacted me and asked if i wanted a free review copy in exchange for a review on my site.  i said &#8220;sure&#8221;.  How did they find me?  Presumably through Twitter, i&#8217;d made a connection between myself and Unity, and i must have come up in a few Google searches.</p>
<p>A short time afterward, David Barnes (<a href="http://www.untoldentertainment.com/fbindie">@fbindie</a>) from Packt wrote me up saying they wanted to do a few more Unity books.  What types of books did i think they should publish?  i gave him my feedback.  His next question, which left me a bit breathless, was: &#8220;Do you have any interest in writing any of them?&#8221;</p>
<h2>Dusting off the Bucket List</h2>
<p>i don&#8217;t know about you, but i&#8217;ve always wanted to be a published author.  That was always just &#8230; something i had on my list, along with &#8220;fly a helicopter&#8221; and &#8220;marry rich&#8221;.  Sadly, few of our childhood fantasies end up coming true &#8230; my wife is flat-ass broke, and we all know helicopters don&#8217;t exist.  Once i was ten years into the games industry, i had resigned myself to the fact that i would probably never be a published author, so i put it out of my mind.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/pianist.jpg" alt="12 Inch Pianst"></p>
<p>Abandoned, too, was my hope of having a twelve-inch pianist.
</p></div>
<p>But here it was: an offer to write a book.  A book on something i knew nothing about.</p>
<p>i was upfront with David. &#8220;i really have no idea how to use Unity.&#8221;  He looked up my <em>bona fides</em>: trained in 3D Studio Max in college, worked 10 years as a game developer working with Flash, had a rockin&#8217; blog packed with dick jokes and Actionscript tutorials (but mostly dick jokes.)  He said a cookbook might be beyond me, but i could probably write a decent beginner book.</p>
<p>i told him i&#8217;d need some time to get up to speed on the software.  i&#8217;d never made a game in Unity. i&#8217;d never done <em>anything</em> in Unity, for that matter.  (But neither had many other people, really &#8211; the software was only 3 years old, and only 1 year out of the gate on the PC.  Unity was news to a lot of people.)</p>
<p>David asked me point blank: &#8220;How long will it take you to learn Unity well enough to write a book about it?&#8221;</p>
<p>Gripping my desk chair and chewing my lips as i answered his email, i typed &#8220;Well, i suppose by the time i finish writing a book on it, i&#8217;ll know the software pretty well.&#8221;</p>
<p>And off we went.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/waterski.jpg" alt="Waterski"></p>
<p>YeeeeHAAAAWWW!
</p></div>
<h2>The Luckiest Boy in the World</h2>
<p>Are you hating me right now?  Maybe you&#8217;ve read my other article, <a href="http://www.untoldentertainment.com/blog/2010/04/20/tenure/">TENure</a>, about how i was hired as a game developer despite not ever having made a game before?  Maybe you want to wrap my face around your foot? </p>
<p>Who do you think should have written the second-ever published book on Unity?  A Unity expert, i suppose!  Well, can that Unity expert write?  Does that Unity expert have the considerable time and energy for a book?  And better yet, will that Unity expert remember what it was like to NOT be an expert? i don&#8217;t know about you, but i&#8217;ve spent a lot of money over the years on books by subject matter experts who move way, way too quickly.  My mandate was to write a beginner book that beginners could <em>truly</em> get through.  And not just Unity beginners: <em>game development</em> beginners.  For example, there&#8217;s a heading in the book that says &#8220;What is code?&#8221;, and another section that briefs the reader on how 3D models are put together.</p>
<h2>The Backlash</h2>
<p>i caught a lot of flack from my colleagues while writing my book. <em>They</em> considered themselves Unity experts, i suppose, and why not? They <em>had</em> actually finished some games with it. i remember one particular tweet that went something like this:</p>
<blockquote><p>Colleague: i&#8217;m going to do open heart surgery, but i&#8217;ve never trained to be a doctor.</p></blockquote>
<p>Of course, his error was in comparing Unity to open heart surgery.  Unity reminds me a lot of Flash &#8230; and not even Flash CSX, but Flash 4 back when i started in 2000. It strips out the whole mystery of writing code to draw stuff on the screen.  If you&#8217;ve had any experience with XNA and wished you could actually see and manipulate your 3D models, you&#8217;ll find Unity a real treat.  </p>
<p>Put another way: if coding to the metal is open heart surgery, working with Unity is cutting a heart out of construction paper using safety scissors.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/heart.jpg" alt="Heart"></p>
<p>Oh God &#8230; so much blood &#8230;
</p></div>
<h2>Gag Me</h2>
<p>If writing a beginner-friendly book was my first mandate, my secondary goal was to write a technical manual that wasn&#8217;t so damned serious as everything else i&#8217;d read. You&#8217;re learning how to make <em>video games</em>.  Why does everything have to read like a Terms of Service agreement?</p>
<p>i&#8217;m a fan of an O&#8217;Reilly series called HeadFirst, which is filled with cartoons and crossword puzzles and pictures &#8211; the idea being that if you are engaged on multiple levels in a variety of different ways, you&#8217;ll retain the material better than straight-up reading block after block of text.  (You can probably tell by now that i&#8217;m a big fan of breaking up text with bullet lists and pictures)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/monorailCat.jpg" alt="Monorail cat"></p>
<p>(why, look &#8211; there&#8217;s one now)
</p></div>
<p>i&#8217;d love to work on a HeadFirst book one day.  For now, as Packt is a small and relatively new publisher, i had to eschew the stock photography and crossword puzzles.  But what i could do, and what David requested i do, was to pepper the text with humour.  David wanted the same sense of humour i forcibly inject into this blog to bleed into the book.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/ouchy.jpg" alt="Ouchy the Clown"></p>
<p>You&#8217;ll laugh and you&#8217;ll LIKE it.
</p></div>
<p>One of the book&#8217;s technical reviewers apparently didn&#8217;t get the memo.  Throughout the drafts of the first two chapters, he filled the page up with comments like &#8220;please cut the humour &#8211; this is a technical manual, not the Muppet Show&#8221;, and &#8220;Well I <em>never</em>!&#8221;  i think i even counted one or two &#8220;harrumphs&#8221; in there.  It was like Packt had hired that wealthy dowager whose house the Three Stooges paint to review my book.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/dowager.jpg" alt="Wealthy dowager"></p>
<p>Well, it&#8217;s a fine day to buy a computer book, isn&#8217;t it Mr. Picklefeather?
</p></div>
<p>i re-connected with David.  This reviewer seemed pretty peeved.  Did i really have to go through the whole book and strip out all of the witty asides and punny paragraph headings?  That would be like taking the red nose and seltzer bottle away from a clown.  And then giving him colon cancer.</p>
<p>It got cleared up in short order.  i&#8217;m not sure Packt even kept that reviewer on for the remainder of the project, and in the end, humour won out.</p>
<h2>Currying Favour</h2>
<p>Packt maintains a staff in India, who were responsible for copy-editing the book.  You may have heard about the cultural growing pains of outsourcing work to foreign countries?  While it was far from a nightmare, i did find myself going to bat more than once for various cultural references or turns of phrase that didn&#8217;t make sense to my editor from Mumbai &#8211; especially whenever i bent the rules of grammar, spelling, and punctuation for the sake of the yuks.</p>
<p>For example:</p>
<blockquote><p>Worst. Game. Evar.</p></blockquote>
<p>was corrected to read</p>
<blockquote><p>Worst Game Ever</p></blockquote>
<p>i had to do the legwork to explain that, well, there&#8217;s this character on the once-popular teevee program The Simpsons, you see, and he enjoys comic books &#8230;  </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/comic.jpg" alt="Comic book guy"></p>
<p>Jokes are so much funnier when you have to explain them.
</p></div>
<p>Explaining why the word &#8220;evar&#8221; had to be spelled that way was even more of a challenge.  Many of our email volleys ended with &#8220;just leave it cuz it&#8217;s funnier that way.&#8221;  After she edited &#8220;cuz&#8221; to &#8220;because&#8221; for spite, i usually won out.  ;) </p>
<div class="displayed">
<p><a href="http://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book/mid/2709105s93kf?utm_source=untoldentertainment.com&#038;utm_medium=affiliate&#038;utm_content=authorsite&#038;utm_campaign=mdb_004881"><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/unity3dGameDevelopmentByExample.jpg" alt="Unity 3D Game Development By Example"></a></p>
</div>
<p>The result is a book that i&#8217;m very, very proud of: one that makes a great introduction to Unity, 3D graphics, game programming and design, and in a way that encourages the reader to start small, finish something (even if it&#8217;s terrible!), and slowly build up those skills until he&#8217;s ready to release his opus.  <b>Unity 3D Game Development By Example</b> is <a href="http://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book/mid/2709105s93kf?utm_source=untoldentertainment.com&#038;utm_medium=affiliate&#038;utm_content=authorsite&#038;utm_campaign=mdb_004881">well worth buying</a>.  And the best news of all? i even managed to sneak in a few dick jokes.</p>
<h2>Carpe Judex</h2>
<p>My grandfather worked as a bailiff in Thunder Bay Ontario.  Once day in the courtroom, there was a man brought in who had a dispute with his wife.  In the middle of the hearing, he stood up and drew his gun.  He shot and killed his wife, the judge, and his lawyer, before turning the gun on himself.  The last two men standing were my grandfather and the court stenographer.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_03_29/chalk.jpg" alt="Chalk outline"></p>
<p>See? It all comes full circle.
</p></div>
<p>Thunder Bay needed a judge.  My grandfather the bailiff, who to my knowledge had had no formal judiciary or legal training, was appointed to the position.  He became a popular judge of young offenders, and there&#8217;s a building in Thunder Bay across from the University that&#8217;s named after him.</p>
<p>Many colleges and Universities now offer programs in video game development, as well as golf course management, creative writing, and even stand-up comedy (!).  Don&#8217;t let the burden of a lack of training or experience get in the way of what you want to do.  Get a job making video games even though you&#8217;ve never made one.  Write a book, even though you&#8217;ve never written one and don&#8217;t know the subject matter.  <em>Perform open heart surgery</em> even though you&#8217;re not a &#8220;doctor&#8221; (whatever <em>that</em> means).  Recognize when the swirling twin tornadoes of chance and opportunity settle on your house, and get swept up.  Otherwise, you&#8217;ll be lying on your death bed wondering what might have been.</p>
<p>And let&#8217;s hope to God you&#8217;re not in for heart disease.   </p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F03%2F29%2Fi-wrote-a-book%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F03%2F29%2Fi-wrote-a-book%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/03/29/i-wrote-a-book/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3557&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/03/29/i-wrote-a-book/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Pimp My Portal Part 5: The Sting</title>
		<link>http://www.untoldentertainment.com/blog/2011/02/17/pimp-my-portal-part-5-the-sting/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/02/17/pimp-my-portal-part-5-the-sting/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 19:21:40 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Pimp My Portal]]></category>
		<category><![CDATA[word games]]></category>
		<category><![CDATA[WordGameWorld.com]]></category>
		<category><![CDATA[zombie games]]></category>
		<category><![CDATA[ZombieGameWorld.com]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3466</guid>
		<description><![CDATA[This series documents my adventures in ultra low-budget, grass roots marketing attempts to drive traffic to my game portal sites, with the hopes of breaking even at $33 a month. For other articles in the series, visit the Pimp My Portal special feature page. •*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*• i love two things in this world: taglines, and deadpan [...]]]></description>
			<content:encoded><![CDATA[<p>This series documents my adventures in ultra low-budget, grass roots marketing attempts to drive traffic to my game portal sites, with the hopes of breaking even at $33 a month.  For other articles in the series, visit the <a href="http://www.untoldentertainment.com/blog/pimp-my-portal/">Pimp My Portal</a> special feature page.</p>
<p><center><br />
•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•<br />
</center></p>
<p>i love two things in this world: taglines, and deadpan humour.  And &#8230; oh, and physically fit young ladies with no moral compass.  They&#8217;re pretty good too.  But taglines and deadpan humour, in lieu of such ladies, are pretty darn good.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part5-theSting/cam.jpg" alt="Cam girl"></p>
<p>Slogans and deadpan humour: no match for a narcissistic young woman with a webcam, but still in the running.
</p></div>
<p>By taglines, i&#8217;m talking about the punchy slogans and sayings which (often punnily) augment a product name.  Ferinstance:</p>
<blockquote><p>Randall&#8217;s Ski and Snowboard Shop: This Time, It&#8217;s Seasonal</p></blockquote>
<blockquote><p>Galaxy Scoops: In Space, No One Can Hear Ice Cream</p></blockquote>
<p>That type of thing.  The tagline for <a href="http://www.spellirium.com"><b>Spellirium</b></a>, our upcoming post-apocalyptic adventure/word puzzle game, is</p>
<blockquote><p>Spellirium: It&#8217;s the End of the Word as We Know It</p></blockquote>
<p>(i thought this one was downright clever, thank you kindly.)</p>
<p>i wrote a tagline for ZombieGameWord, too:</p>
<blockquote><p><a href="http://www.zombiegameworld.com" alt="Free zombie games"> ZombieGameWorld.com</a>.  Check your braaaaaains at the door.</p></blockquote>
<p>Hilarious.  i could write these things all day.  Seriously.  Someone give me a job writing taglines all day, and i&#8217;ll die happy. (And early. Possibly from something i caught from a young lady with no moral compass).</p>
<p>Erm &#8230; i&#8217;m getting sidetracked here.  What am i doing?  Coming up with taglines for young ladies with no moral compass?</p>
<blockquote><p>
Young Ladies with No Moral Compass: Guess Ho&#8217;s Coming to Dinner</p></blockquote>
<p>No &#8211; wait.  We were talking about ZombieGameWorld, weren&#8217;t we?  Alright.  Steady on.</p>
<h2>Gimme Five</h2>
<p>So i love taglines and deadpan humour, and i decided to combine them BOTH in my plan for Internet domination, which involves buying video testimonials from people on <a href="http://www.fiverr.com">Fiverr.com</a>.  Many of the Fiverr<em>ers</em> will shoot a testimonial by reading your script, which struck me as awesome.  Not only are they gonna say nice things about the site, but <em>i&#8217;m</em> going to tell them which nice things they&#8217;re gonna say?  For <em>five bucks??</em>  Unbelievable!  Talk about having no moral compass.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part5-theSting/guy.png" alt="Some camera guy"></p>
<p>&#8220;You know what i think is great?  Genocide.&#8221;
</p></div>
<h2>Uh &#8230; Line?</h2>
<p>i got to work writing scripts for the Fiverr folks willing to shoot testimonials.  i tailored each script to that person&#8217;s unique &#8211; ahem &#8211; talents, in the hope that their acting chops would be decent enough to get a few good jokes out of them. (i was to be somewhat disappointed, as you&#8217;ll see in the next few articles)</p>
<p>The scripts i wrote were all dead-pan and straight-laced.  A crucial part of the ZombieGameWorld brand is that it assumes the zombie apocalypse is either going to happen, or has <em>already</em> happened.  It&#8217;s never a question of &#8220;if&#8221; the walking dead are going to infest polite society &#8211; only a question of &#8220;when&#8221;, and &#8220;how many bullets am i gonna need&#8221;?</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part5-theSting/fatZombie.jpg" alt="Fat zombie"></p>
<p>Protip: the bigger the zombie, the larger the ammo requirement.
</p></div>
<p>So these scripts all involved the actors mundanely discussing how the world&#8217;s changed now that the zombie apocalypse is upon us. The trouble is that i had each person end by saying the site name and tagline, &#8220;ZombieGameWorld.com: Check your braaaaains at the door.&#8221;  When the &#8220;actors&#8221; say this line, it kind of breaks the immersion that they&#8217;ve built up throughout the video.  It&#8217;s like ending each video with &#8220;JUST KIDDING!  <em>JAZZ HANDS!</em> AH CHA CHA CHA CHA CHAAAAAA!  *WIIINK!*  BA-DUM CHING!&#8221; It&#8217;s more than a little obnoxious.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part5-theSting/maudlin.jpg" alt="Bobby Bittman"></p>
<p>Bobby Bittman has no place advertising zombie game portals.
</p></div>
<h2>The Punchline</h2>
<p>My remedy to this was to find a Fiverr.com voiceover artist to record the tagline, which i then appended to each video.  My intent was that the &#8220;sanctity&#8221; or honesty of the deadpan bit would remain intact, while the sting at the end would sort of let the audience off the hook.  They do this in on-air ad spots all the time.  There&#8217;s probably a term for it, but i don&#8217;t really run in those circles so i don&#8217;t know what it&#8217;s called.</p>
<p>The guy i found to record the tagline is named <a href="http://www.ericsaintjohn.com/">Eric Saint John</a>, who&#8217;s entirely too talented to be giving his voice away for next-to-nothing.  i can only imagine he&#8217;s using Fiverr as a promotional tool to drive brand awareness (much like i am!) And i think it worked.  Not only am i profiling Eric St. John in this post &#8211; i&#8217;d definitely consider using him again for a longer-form production.</p>
<p>Here&#8217;s Eric&#8217;s gig that i bought on Fiverr:</p>
<div class="displayed">
<p><a href="http://www.fiverr.com/users/thirtyvoice/gigs/voice-a-movie-trailer-intro-for-your-website"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part5-theSting/ericGig.jpg" alt="Eric Saint John Fiverr gig"/></a></p>
<p>PROTIP: These are not actually Eric&#8217;s lips.  i hope.
</p></div>
<p>And here&#8217;s a video of him in action on another person&#8217;s order (along with some tips for aspiring voice over actors):</p>
<p><center><br />
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/sLU8dE0oQow" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>Here&#8217;s what i asked him to do:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part5-theSting/ericRequest.jpg" alt="Eric Saint John Fiverr request"/></p>
</div>
<p>Eric did not deliver what i wanted, but he delivered exactly what i asked for!  He did one take in the Dracula voice i was describing, which helped me to realize i wasn&#8217;t actually thinking of <em>that</em> voice.  i still don&#8217;t know how to describe the voice in my head or where it came from.  But Eric gave me exactly what i requested.  He&#8217;s like a machine.  It&#8217;s scary.</p>
<p>Here&#8217;s the boatload of takes he delivered for five bucks:</p>
<p></p>
<p><b>UPDATE:</b> As fate would have it, i was queuing up old movie trailers to watch with my daughters, and when i hit the trailer for <b>Little Monsters</b> with Howie Mandel, i realized the trailer guy in THAT clip has the voice i was trying to describe to Eric:</p>
<p><center><br />
<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/_AGPFa1khtE" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>Anyone know whose voice that guy&#8217;s doing?  i&#8217;m a stickler for trivia.</p>
<h2>The Final Cut</h2>
<p>In the end, i decided to use Eric&#8217;s slightly radio-guy-esque second take. i fooled around with the ZombieGameWorld logo to give it a little more spunk, and grabbed a sound effect from my collection to tie it all together.  This is what i ended up with:</p>
<p><center><br />
<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/yklY6RoT3bU" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>Pretty decent for five bucks!  And now i&#8217;ve got a good-looking, good-sounding tagline that i can add to all of the videos i order on Fiverr.com. </p>
<h2>The Numbers</h2>
<p>Now let&#8217;s take a look at how the marketing effort is going.</p>
<h3>The World&#8217;s Most Meager Marketing Budget</h3>
<p>Original investment: $100</p>
<p>Spent: </p>
<ul>
<li>ZombieGameWorld tagline voiceover &#8211; $5
</ul>
<p>Remaining: $95</p>
<h3>Game Portal Balance Sheet</h3>
<p>(includes <a href="www.zombiegameworld.com" alt="Play free zombie games online">ZombieGameWorld.com</a> and <a href="http://www.wordgameworld.com" alt="Play free word games online">WordGameWorld.com</a>)</p>
<p></p>
<table class="wptable rowstyle-alt" id="wptable-3"  cellspacing="1">
	<tr>
		<td style="width:120px" align="left">Hosting</td>
		<td style="width:40px" align="right"><span class="hilite">-$165.00</span></td>
	</tr>
	<tr>
		<td style="width:120px" align="left">Add-On Slot</td>
		<td style="width:40px" align="right"><span class="hilite">-$30.00</span></td>
	</tr>
	<tr class="alt">
		<td style="width:120px" align="left">Domain Names</td>
		<td style="width:40px" align="right"><span class="hilite">-$20.00</span></td>
	</tr>
	<tr>
		<td style="width:120px" align="left">WordPress Theme</td>
		<td style="width:40px" align="right"><span class="hilite">-$30.00</span></td>
	</tr>
	<tr class="alt">
		<td style="width:120px" align="left">Site Redesign</td>
		<td style="width:40px" align="right"><span class="hilite">-$140.00</span></td>
	</tr>
	<tr>
		<td style="width:120px" align="left">MochiAds Revenue</td>
		<td style="width:40px" align="right">$1.60</td>
	</tr>
	<tr class="alt">
		<td style="width:120px" align="left">Google Adsense Revenue</td>
		<td style="width:40px" align="right">$23.35</td>
	</tr>
	<tr>
		<td style="width:120px" align="left">Sweat Equity (not calculated)</td>
		<td style="width:40px" >&nbsp;</td>
	</tr>
	<tr class="alt">
		<td style="width:120px" >&nbsp;</td>
		<td style="width:40px" >&nbsp;</td>
	</tr>
	<tr>
		<td style="width:120px" align="left">Total:</td>
		<td style="width:40px" align="right"><span class="hilite">-$360.05</span></td>
	</tr>
</table><p>
</p>
<h3>Traffic</h3>
<p>(period spanning March 1 2010 &#8211; February 22 2011)</p>
<p>WordGameWorld: <b>5604</b> Visits, <b>5.39</b> Pages/Visit, <b>3.00%</b> Bounce Rate, <b>3:49</b> Avg. Time on Site<br />
ZombieGameWorld: <b>3121</b> Visits, <b>3.85</b> Pages/Visit, <b>30.99%</b> Bounce Rate, <b>5:17</b> Avg. Time on Site </p>
<h2>Prepare Ye the Way</h2>
<p>The ZombieGameWorld tagline isn&#8217;t meant to be a standalone piece, so i didn&#8217;t post it to many video sites &#8211; and therefore, i can&#8217;t report on whether or not it brought any traffic to the portals. In the next article, I&#8217;ll add the tagline to the end of a bona fide Fiverr testimonial and upload it live to the world, to see how the World&#8217;s Most Meager Marketing Budget stacks up against my earlier efforts.</p>
<p>Stick with me, for it involves bewbz. (Talk about young ladies with no moral compass.)</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/pimp-my-portal/"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/pimpMyPortalSeries.jpg" alt="Pimp My Portal"></a>
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F02%2F17%2Fpimp-my-portal-part-5-the-sting%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F02%2F17%2Fpimp-my-portal-part-5-the-sting%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/02/17/pimp-my-portal-part-5-the-sting/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3466&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/02/17/pimp-my-portal-part-5-the-sting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
			<enclosure url="http://www.untoldentertainment.com/blog/wp-content/uploads/2011/02/allTakes.mp3" length="3865144" type="audio/mpeg" />
		<itunes:duration>0:02:41</itunes:duration>
		<itunes:subtitle>This series documents my adventures in ultra low-budget, grass roots marketing attempts to drive traffic to my game portal sites, with the hopes of breaking even at $33 a month.  For other articles in the series, visit the Pimp My Portal special fea[...]</itunes:subtitle>
		<itunes:summary>This series documents my adventures in ultra low-budget, grass roots marketing attempts to drive traffic to my game portal sites, with the hopes of breaking even at $33 a month.  For other articles in the series, visit the Pimp My Portal special feature page.

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•

i love two things in this world: taglines, and deadpan humour.  And &#8230; oh, and physically fit young ladies with no moral compass.  They&#8217;re pretty good too.  But taglines and deadpan humour, in lieu of such ladies, are pretty darn good.


Slogans and deadpan humour: no match for a narcissistic young woman with a webcam, but still in the running.

By taglines, i&#8217;m talking about the punchy slogans and sayings which (often punnily) augment a product name.  Ferinstance:
Randall&#8217;s Ski and Snowboard Shop: This Time, It&#8217;s Seasonal
Galaxy Scoops: In Space, No One Can Hear Ice Cream
That type of thing.  The tagline for Spellirium, our upcoming post-apocalyptic adventure/word puzzle game, is
Spellirium: It&#8217;s the End of the Word as We Know It
(i thought this one was downright clever, thank you kindly.)
i wrote a tagline for ZombieGameWord, too:
 ZombieGameWorld.com.  Check your braaaaaains at the door.
Hilarious.  i could write these things all day.  Seriously.  Someone give me a job writing taglines all day, and i&#8217;ll die happy. (And early. Possibly from something i caught from a young lady with no moral compass).
Erm &#8230; i&#8217;m getting sidetracked here.  What am i doing?  Coming up with taglines for young ladies with no moral compass?

Young Ladies with No Moral Compass: Guess Ho&#8217;s Coming to Dinner
No &#8211; wait.  We were talking about ZombieGameWorld, weren&#8217;t we?  Alright.  Steady on.
Gimme Five
So i love taglines and deadpan humour, and i decided to combine them BOTH in my plan for Internet domination, which involves buying video testimonials from people on Fiverr.com.  Many of the Fiverrers will shoot a testimonial by reading your script, which struck me as awesome.  Not only are they gonna say nice things about the site, but i&#8217;m going to tell them which nice things they&#8217;re gonna say?  For five bucks??  Unbelievable!  Talk about having no moral compass.


&#8220;You know what i think is great?  Genocide.&#8221;

Uh &#8230; Line?
i got to work writing scripts for the Fiverr folks willing to shoot testimonials.  i tailored each script to that person&#8217;s unique &#8211; ahem &#8211; talents, in the hope that their acting chops would be decent enough to get a few good jokes out of them. (i was to be somewhat disappointed, as you&#8217;ll see in the next few articles)
The scripts i wrote were all dead-pan and straight-laced.  A crucial part of the ZombieGameWorld brand is that it assumes the zombie apocalypse is either going to happen, or has already happened.  It&#8217;s never a question of &#8220;if&#8221; the walking dead are going to infest polite society &#8211; only a question of &#8220;when&#8221;, and &#8220;how many bullets am i gonna need&#8221;?


Protip: the bigger the zombie, the larger the ammo requirement.

So these scripts all involved the actors mundanely discussing how the world&#8217;s changed now that the zombie apocalypse is upon us. The trouble is that i had each person end by saying the site name and tagline, &#8220;ZombieGameWorld.com: Check your braaaaains at the door.&#8221;  When the &#8220;actors&#8221; say this line, it kind of breaks the immersion that they&#8217;ve built up throughout the video.  It&#8217;s like ending each video with &#8220;JUST KIDDING!  JAZZ HANDS! AH CHA CHA CHA CHA CHAAAAAA!  *WIIINK!*  BA-DUM CHING!&#8221; It&#8217;s more than a little obnoxious.


Bobby Bittman has no place advertising zombie game portals.

The Punchline
My remedy to this was to find a Fiverr.com voiceover artist to record the tagline, which i then appended to each video.  My intent was that the &#8220;sanctity&#8221; or honesty of the deadp[...]</itunes:summary>
		<itunes:keywords>Blog</itunes:keywords>
		<itunes:author>ryan@untoldentertainment.com</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>no</itunes:block>
	</item>
		<item>
		<title>Pimp My Portal Part 1: Gay Nerds in the Windy City</title>
		<link>http://www.untoldentertainment.com/blog/2011/02/05/pimp-my-portal-part-1-gay-nerds-in-the-windy-city/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/02/05/pimp-my-portal-part-1-gay-nerds-in-the-windy-city/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 17:18:04 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Pimp My Portal]]></category>
		<category><![CDATA[word games]]></category>
		<category><![CDATA[WordGameWorld.com]]></category>
		<category><![CDATA[zombie games]]></category>
		<category><![CDATA[ZombieGameWorld.com]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3392</guid>
		<description><![CDATA[This series documents my adventures in ultra low-budget, grass roots marketing attempts to drive traffic to my game portal sites, with the hopes of breaking even at $33 a month. For other articles in the series, visit the Pimp My Portal special feature page. •*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*• A going concern. If no one knows about your website, [...]]]></description>
			<content:encoded><![CDATA[<p>This series documents my adventures in ultra low-budget, grass roots marketing attempts to drive traffic to my game portal sites, with the hopes of breaking even at $33 a month.  For other articles in the series, visit the <a href="http://www.untoldentertainment.com/blog/pimp-my-portal/">Pimp My Portal</a> special feature page.</p>
<p><center><br />
•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•<br />
</center></p>
<div class="displayed">
<p><a href="http://www.wordgameworld.com"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/wordGameWorldLogo_150x150.png" alt="Word Game World"></a></p>
<p>A going concern.
</p></div>
<p>If no one knows about your website, how do you change that?  i knew that blog technologies like WordPress  are beloved of Google and other search engines, and that blog content gets indexed hungrily by search spiders.  i also knew that people like playing games.  i thought that just by virtue of the fact that i had a game portal containing tons of free word games, people who were searching for free word games would naturally come across my portal.</p>
<p><b>Erroneous assumption #1:</b> people are searching for free word games.</p>
<p><b>Erroneous assumption #2:</b> people who like word games play them online.</p>
<p><b>Erroneous assumption #3:</b> my free word games site, <a href="http://www.wordgameworld.com">WordGameWorld.com</a>, would somehow magically float to the top of Google&#8217;s search results, ahead of all the other web sites that offered free word games.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/wordGameWorldGoogle.jpg" alt="Word Game World on Google"></p>
<p>Reality check: searching &#8220;word games&#8221; in Google doesn&#8217;t turn up WordGameWorld.com within the first TEN pages, let alone the main page.  It&#8217;s effectively invisible.
</p></div>
<p>i originally built <a href="http://www.wordgameworld.com">WordGameWorld.com</a> because i was working on a revolutionary word game called <a href="http://www.spellirium.com">Spellirium</a>.  i thought that by building a site packed with <em>other</em> people&#8217;s word games, i&#8217;d see a number of brilliant benefits:</p>
<ol>
<li>i&#8217;d find and capture the audience appropriate to my game
<li>i&#8217;d own the portal&#8217;s advertising inventory, so i could drive that audience to my game for free (without having to pay advertising costs on another site)
<li>in adding word games to the site in a curated fashion, i&#8217;d become very well-apprised of the best and worst that word games have to offer, which would inform my design decisions on Spellirium
</ol>
<p>The fatal flaw in my plan was this: i had a developing product (Spellirium) that i wanted to drive quality traffic to.  To do that, i began developing a <em>second</em> product that i needed to drive quality traffic to, in order to forward that quality traffic to my first developing product.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/chickenEgg.jpg" alt="Chicken and egg"></p>
<p>Chicken, meet egg.
</p></div>
<p>So what&#8217;s the solution?  Develop a <em>third</em> product and repeat the mistake?  No.  Fool me once, shame on you.  Fool me twice, and i must be some sort of friggin&#8217; idiot or something.</p>
<h2>Um &#8230; </h2>
<div class="displayed">
<p><a href="http://www.zombiegameworld.com"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/zombieGameWorldLogo.png" alt="ZombieGameWorld logo"></a>
</div>
<p>It appears that i must be some sort of friggin&#8217; idiot or something, because that&#8217;s exactly what i did.  Around Hallowe&#8217;en in 2010, we launched <a href="http://www.zombieGameWorld.com">ZombieGameWorld.com</a> to zero fanfare.  &#8230; what was i thinking?  Misguided as i may have been, this was my thought process:</p>
<ol>
<li>Word games are not the most popular genre on the Internatz, and the people who play them may not play them in the browser.
<li>The people who DO play free games in the browser are young and male, and may well be active or aspiring game developers themselves.
<li>Young males like games that are violent or have tits in them, so i should choose content that matches their tastes.
<li>i can&#8217;t stand the results when amateur Flash game artists draw tits, so it had to be violence.
<li>Snag: Untold Entertainment has a company policy against violent video games.
<li>Fortunatly, the company&#8217;s <a href="http://www.untoldentertainment.com/blog/our-team/">third tenet</a> provides a loophole:
</ol>
<blockquote><p>
Untold Entertainment stands on these principles:</p>
<p>&#8230;<br />
3. Non-violence in gaming <em>(barring the presence of zombies)</em></p>
</blockquote>
<p>Aha! We have a winner.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/flashTits.jpg" alt="Flash game tits"></p>
<p>Badly drawn Flash tits: driving nice companies to violence since 1997.
</p></div>
<h2>Schlock and Awe</h2>
<p>Whereas WordGameWorld.com was a curated site, meaning we hand-picked only the best word games to include, i figured that zombie audiences were a different breed.  Zombie fans have learned to live with low-budget b-movie schlock for decades, and if there&#8217;s one arm of the game industry ecosystem that screamed &#8220;low budget b-movie schlock&#8221;, it was free-to-play web-based Flash games.  So i decided that ZombieGameWorld.com would not be curated &#8211; we&#8217;d just throw any old piece of crap on there.</p>
<div class="displayed">
<p><a href="http://zombiegameworld.com/gnome-n-zombies/"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/gnomeNZombies.jpg" alt="Gnome N Zombies"></a></p>
<p>Case in point: play <a href="http://zombiegameworld.com/gnome-n-zombies/">Gnome N Zombies</a> at ZombieGameWorld.com (or better yet, don&#8217;t)
</div>
<p>i derived the whole concept of having multiple niche game portals from some interesting market behaviour i&#8217;d observed in the Flash game scene:  Developer &#8220;JimmyJo&#8221; created a game called &#8220;AwesomeForce&#8221;.  It came and went, as most Flash games do.  And then JimmyJo developed &#8220;AwesomeForce 2&#8243;, which was a slight improvement over its predecessor.  Curious players went back and played AwesomeForce 1 just to compare.  No skin off their noses &#8211; the game is free to play.  JimmyJo kept developing sequels.  By the time he developed AwesomeForce 7, he found that the collective gameplays on his entire AwesomeForce series were boosted each time he released a sequel.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/lookWhosTalking.jpg" alt="Look Who's Talking Now"></p>
<p>Who doesn&#8217;t love a sequel?
</p></div>
<p>i wondered if it was possible to get the sequel/franchise boost from game portals?   Maybe players who came across <a href="http://www.wordgameworld.com">WordGameWorld.com</a> wouldn&#8217;t dig it, but we&#8217;d have a series of badges pointing him to <a href="http://www.zombiegameworld.com">ZombieGameWorld.com</a>, <a href="http://www.towerdefensegameworld.com">TowerDefenseGameWorld.com</a>, and a number of others.  And if there&#8217;s one thing i know about improving site rankings, its that sites get more search love they more they link to other quality sites, and are <em>linked to</em> by other quality sites.</p>
<p>So that&#8217;s where my head was at.  Here&#8217;s how it played out:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/wgwTraffic.jpg" alt="WordGameWorld.com traffic"></p>
</div>
<p>Abysmal traffic on WordGameWorld.com. Not zero, but abysmal. The site debuted in March 2010, nearly a year ago, and was promoted on this blog and through the Spellirium newsletters that i sent out detailing progress on the game.  Here&#8217;s the kind of scratch i was making through my portals via Google Adsense:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/adsense.jpg" alt="Adsense Stats"></p>
<p>The decimal means pennies, right?
</p></div>
<p>i won&#8217;t pretend i know how to interpret all these stats &#8230; all i knew is that i wouldn&#8217;t be earning my $20k advertising revenue to start sponsoring games any time soon. i wasn&#8217;t even close to earning the $33 a month to cover hosting!  My portal strategy was creating a net loss, and i had to DO something about it.  What interested me was that it <em>appeared</em> that i was actually making respectable money from the scant players i <em>did</em> have, and that if i were to scale traffic up (even to the numbers i pull on UntoldEntertaiment.com), i could see a few hundred bucks of revenue a month &#8211; more than enough to cover hosting, and perhaps even enough to start sponsoring some games.</p>
<h2>A Penny Saved is a Penny Wasted</h2>
<p>Conventional marketing wisdom says the solution is this: scrape together a $10k marketing budget and start advertising.  But if you were me, would you spend $10k on a few sites that are earning you 25 cents a day?</p>
<p>Just as i was very reluctant to spend a lot of time and money building a Flash game that may not break even on sponsorships and ads, i similarly didn&#8217;t want to blow a lot of cash promoting a site when my perceived risk of squandering that cash was so high. Instead, i decided to brainstorm some low-cost, grass roots marketing plans.  </p>
<p>The first of these plans was hatched by my wife:  advertising on <a href="http://www.meetup.com">Meetup.com</a>.</p>
<div class="displayed">
<p><a href="http://www.meetup.com"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/meetup.jpg" alt="Meetup"></a></p>
<p>Meetup.com: where chihuahuas gaze longingly skyward.
</p></div>
<p>Meetup is a lot like the Events feature on Facebook, except that it costs its organizers money.  For about $75 a year, you can host your own Meetup group to schedule real-life shindigs in your area.  My wife belongs to a number of Mommy Meet-up groups, which women use to arrange playdates for their kids.  She mentioned that Meetup groups are sometimes sponsored by companies, whose ads appear in the Meetup groups&#8217; sidebars.  Barrier to entry, she suggested, could be as low as $20, which goes a decent way towards paying for a Meetup group&#8217;s annual fee.</p>
<p>In order to maximize my WordGameWorld.com ad&#8217;s exposure, i started looking for large groups, where the participants may be interested in playing word games.  i settled on an online dating service geared toward nerds of every stripe.  The company runs groups for gay nerds, green/eco-nerds, and straight-up classic nerd nerds.  Their customers are looking to meet people while playing board games and programming Arduino microcontrollers, so they can presumably go home with each other after the event and bump nerd uglies. (with the lights off, one would hope)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/kittySanchez.jpg" alt="Kitty Sanchez"></p>
<p>(Did we already try hair up/glasses on?)
</p></div>
<p>This nerd dating company has many outfits across America.  The one i targeted was the 700-member-strong Chicago group. i emailed the group&#8217;s organizers and made my bid: $20 toward the group&#8217;s annual fee in exchange for running a <a href="http://www.wordgameworld.com">WordGameWorld.com</a> badge on the group page sidebar.</p>
<p>Some weeks later, i received a phone call from the company head to work out some technical difficulties with the ad.  During that call, she explained to me that her company was actually a very large organization, and that the Meetup groups represented a small fraction of their enterprise.  She also alluded to the fact that she had <em>many more</em> opportunities for advertisers to get involved.</p>
<p>To my mind, all this translated to &#8220;your 20 bucks is paltry &#8211; can we gouge you for more?&#8221;  i did my best, in business-to-business speak, to explain that i was running a tiny little shop, that i was just dipping my toe in the paid marketing waters for the very first time, and that i needed to keep costs low.  i don&#8217;t think i went into detail about my quest to break even on a $33 monthly hosting charge &#8230; i wanted to appear lowly, but not pathetic.  i left her with some non-committal responses on her request to take more of my money, and off we went.</p>
<p>Her email response was chipper, but disappointing (emphasis mine):</p>
<blockquote><p>
Hey Ryan,</p>
<p>So nice to talk with you earlier and hope we can find some ways to <b>partner more in the future</b>. </p>
<p>We&#8217;ll apply the $20 to a term of two months, beginning from the date we posted your logo on November 11 and ending January 11, 2011. Let us know if you&#8217;d like to <b>continue after that</b> or <b>sponsor additional groups</b> that we run in Chicago and Minneapolis.</p>
<p>Thanks and happy Friday!
</p></blockquote>
<p>Yeah &#8230; ssssssssuper.  Happy Friday indeed.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/darth.jpg" alt="Darth Nooooo"></p>
</div>
<h2>A Fool and His Money</h2>
<p>Lessons learned:</p>
<ol>
<li>Make sure you know what you&#8217;re buying before you spend the money.
<li>You can&#8217;t afford to advertise on the front page of the New York Times, so scale down your ambitions.
<li>Once you scale down your ambitions small enough &#8211; say, to $20 &#8211; you apparently <em>still</em> can&#8217;t afford to advertise, because the world contains no shortage of people who will take your money: as much of it as they can, as often as they can.
</ol>
<p>i learned this same lesson when i <a href="http://www.untoldentertainment.com/blog/2010/05/27/how-to-license-a-song-for-your-game-trailer/">tried to license a well-known song</a> from a famous band for my <a href="http://www.spellirium.com">Spellirium</a> game trailer and couldn&#8217;t afford the $65000 license fee, and then scaled my ambitions down to license a song from a Victoria BC-based band that plays subways and Vancouver Island cultural festivals and i STILL couldn&#8217;t afford them.</p>
<p>The ad ran for a month on the nerd dating Meetup group, yielding these results:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/meetupResults.jpg" alt="Word Game World Traffic Sources"></p>
<p>Sample: November 1 2010-January 1 2011 &#8211; 1119 visits
</p></div>
<p>That&#8217;s right: only <em>four</em> nerds &#8211; gay, green, or otherwise &#8211; visited the site from the Meetup group. i could have seen a better result if i had paid five people four bucks apiece to play a single lousy game on the site. The group is around 700 nerds, so that means my ad is enticing 0.5% of them to click on my ad.  Conversely, if i post a link in an article on this blog, i get about a 15% click-through rate (thank you, btw!).  </p>
<p>(Notice that my advertising strategy is technically out-performing my &#8220;free&#8221; cross-promotional strategy from <a href="http://www.zombiegameworld.com">zombiegameworld.com</a>, but when the numbers are this tiny, you can&#8217;t really hang your hat on them.)</p>
<p>Friends, if you want to do something on the cheap, you&#8217;ve got to be crafty about it.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/part1/macrameOwl.jpg" alt="Macrame Owl"></p>
</div>
<p>The next entries in the <a href="http://www.untoldentertainment.com/blog/pimp-my-portal/">Pimp My Portal</a> feature are about getting crafty.  They&#8217;re about how i tried to get away with spending the least money possible to get the biggest bang for my buck, all in the name of trying to break even at $33/month.  Stick with me &#8230; it&#8217;s going to be fun!</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/pimp-my-portal/"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/pimpMyPortalSeries.jpg" alt="Pimp My Portal"></a>
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F02%2F05%2Fpimp-my-portal-part-1-gay-nerds-in-the-windy-city%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F02%2F05%2Fpimp-my-portal-part-1-gay-nerds-in-the-windy-city%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/02/05/pimp-my-portal-part-1-gay-nerds-in-the-windy-city/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3392&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/02/05/pimp-my-portal-part-1-gay-nerds-in-the-windy-city/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Pimp My Portal: Introduction</title>
		<link>http://www.untoldentertainment.com/blog/2011/01/31/pimp-my-portal-introduction/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/01/31/pimp-my-portal-introduction/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 03:05:11 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Pimp My Game]]></category>
		<category><![CDATA[Pimp My Portal]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3390</guid>
		<description><![CDATA[One of the most popular series of articles i&#8217;ve ever written was called Pimp My Game. It was an experiment in game monetization, back before i&#8217;d ever released a game of my own. i wanted to know how much money i could earn distributing a game, so that i&#8217;d know the amount of money i [...]]]></description>
			<content:encoded><![CDATA[<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/pimpMyPortalSmall.png" alt="Pimp My Portal">
</div>
<p>One of the most popular series of articles i&#8217;ve ever written was called <a href="http://www.untoldentertainment.com/blog/feature-articles/pimp-my-game/">Pimp My Game</a>.  It was an experiment in game monetization, back before i&#8217;d ever released a game of my own.  i wanted to know how much money i could earn distributing a game, so that i&#8217;d know the amount of money i could invest in development in order to break even, at the very least.</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/feature-articles/pimp-my-game/"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/graph.jpg" alt="Pimp My Game"></a>
</div>
<p>The results were &#8230; abysmal. The <b>Pimp My Game</b> feature predates a number of tools and tricks that have made it far more possible for Flash game developers to earn money on their creations &#8211; most notably <a href="http://www.flashgamelicense.com">Flash Game License</a> and microtransactions (<a href="http://www.gamersafe.com">GamerSafe</a>/<a href="http://www.heyzap.com">HeyZap</a>/<a href="http://www.mochicoins.com">Mochi Coins</a>).</p>
<p>Even <em>with</em> those services, it struck me that the amount of money required to develop a game of significant scope and scale to catch the attention of the average portal-goer, versus the relative risk of <em>not</em> landing a large enough sponsorship or earning cash back through scant ad rev share, was not a racket i really wanted to be in.  Untold Entertainment makes custom games as a service for a number of clients, and i feel we&#8217;re paid appropriately for our efforts.  i&#8217;ve never developed a game for a client on the <em>off chance</em> that they&#8217;d pay money for it.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/constructionCrew.jpg" alt="Pimp My Game"></p>
<p>&#8220;Hopefully, we&#8217;ll land a great sponsorship once we&#8217;re finished paving this road.&#8221;
</p></div>
<p>i&#8217;ve been told numerous times, not least of all by the <b>Flash Game License</b> operators themselves, that game sponsorships can get up into five figures, with $20 000 being thrown around most often by people trying to impress me.  Who&#8217;s paying these sponsorships?  The buyers are mostly game portal owners.</p>
<h2>The Cake is a Lie</h2>
<p>What&#8217;s a game portal?  It&#8217;s a websites that aggregate games and sandbags them with assloads of ads.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/jacksmack.jpg" alt="Pimp My Game"></p>
<p><a href="http://www.jacksmack.com">Jacksmack.com</a> is a typical free-to-play Flash games portal.
</div>
<p>So a portal can pay out $20k to sponsor a game.  What&#8217;s in it for the portal?  Usually, portals require the game developers to incorporate the hyperlinked portal logo in the game pre-roll, and possibly other promotional hooks &#8211; a &#8220;more games&#8221; button on the title screen leading back to the portal, portal-specific high scores &#8211; that sort of thing.  The idea is that players play these free Flash games, which are distributed far and wide to tens of thousands of sites, and the players may purposely (or inadvertently) click somewhere in the game to be brought to the sponsoring portal.  Sponsors will often pay extra cash for exclusivity rights.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/gimme5.jpg" alt="Gimme5Games"></p>
<p><a href="http://www.gimme5games.com">Gimme5Games</a> is known as a high-rolling sponsor in the Flash game developer community.
</div>
<p>And how does the portal make enough money to pay a sponsorship? Unless i&#8217;m missing something, the most significant source of revenue for a game portal is advertising.  There are some smaller, secondary streams &#8211; for example, Mochimedia kicks 10% of Mochi Coins sales to the portal when players spend Mochi Coins in games hosted on those portals, and Mochi also cuts the portal in for a small percentage of Mochiads revenue, but there we&#8217;re talking about fractions of fractions of pennies. The bread and butter of any games portal is advertising.</p>
<h2>If You Can&#8217;t Beat &#8216;Em &#8230; </h2>
<p>At this point i began eyeing the portals themselves with keen interest.  $20 000 for a sponsorship?  Again, unless i&#8217;m missing something, that must mean that at some point, a portal earns <em>more</em> than $20k in advertising.  And game portal advertising revenue is <em>passive</em> income, that elusive majestic money creature that i&#8217;m constantly persuing. You just have to throw up a portal, stick some games on there, surround the games with ads, and kick back while waves of money roll over you like a stinky cash tsunami.  &#8220;Beautiful&#8221;, i thought. &#8220;Let&#8217;s do this thing.&#8221;</p>
<p>Here are the steps i followed to set up my first portal, <a href="http://www.wordgameworld.com">WordGameWorld.com</a>:</p>
<ol>
<li>Register the domain name &#8211; $10
<li>Pay for hosting.  i&#8217;m paying $33/mo to a company called 1&#038;1 to host a VPS (Virtual Private Server), which is essentially like having my own (underpowered) web server computer.  i originally started renting the VPS so that we could power <a href="http://www.interruptingcowtrivia.com">Interruping Cow Trivia</a> using the multiplayer ElectroServer software.  You can probably get away with paying a regular web host less than $10/mo to host a portal.
<li>Install <a href="http://www.wordpress.com">WordPress</a>, which is very popular free blog software. The Untold Entertainment blog you&#8217;re reading now runs on WordPress.
<li>Purchase a <a href="http://wparcade.com/">WPArcade</a> theme and plugin.  These guys license a WordPress theme (skin) that makes your site look like a game portal.  The plugin they provide enables you to enter the game distribution rss feed address from MochiMedia and, with the click of a button, inject ten thousand free Flash games into your portal site.
<li>Set up a <a href="http://www.adsense.com">Google Adsense</a> account.  This was the trickiest step &#8211; at first, Google denied my registration because <a href="http://www.wordgameworld.com">WordGameWorld.com</a> had zero traffic.  WordGameWorld.com was live for a long time with no advertising, until i got a hot tip from a Twitter friend that once Adsense approved <em>one</em> of my sites, i could use Adsense ads on other sites that i owned.  i leveraged the traffic on UntoldEntertainment.com to get my account approved, and then placed the ads around the WPArcade WordPress theme using their tool.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/wordGameWorldLogo_150x150.png" alt="WordGameWorld.com"></p>
<p><a href="http://www.untoldentertainment.com/blog/2010/03/22/untold-entertainment-joins-the-dark-side/">Read more about the curation, cross-promotion and niche focus rationale behind WordGameWorld.com</a>
</div>
<h2>Step 4: Proft?</h2>
<p>At this point, i had contractors come in to widen my front door in anticipation of the deluge of cash that would no doubt come blasting into my living room from men with money guns, all owing to this most brilliant idea of mine.  It wasn&#8217;t long before i figured out that setting up a game portal is easy &#8230; driving traffic to it ain&#8217;t.</p>
<p>For the remainder of this series, i&#8217;ll document my madcap methods i used to try to drive traffic to my game portals.  My journey takes me from dating services for gay nerds, to bikini-clad women in Brazil, to the very bowels of The Internatz itself &#8230; all in the name of making money off the backs of the free Flash game developers that i never want to become.  i promise it will be lurid, sleazy, and informative.  But mostly lurid.</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/pimp-my-portal/"><img src="http://www.untoldentertainment.com/blog/img/features/pimpMyPortal/pimpMyPortalSeries.jpg" alt="Pimp My Portal"></a>
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F01%2F31%2Fpimp-my-portal-introduction%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F01%2F31%2Fpimp-my-portal-introduction%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/01/31/pimp-my-portal-introduction/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3390&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/01/31/pimp-my-portal-introduction/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>How to Convert Artwork from Flash to Illustrator</title>
		<link>http://www.untoldentertainment.com/blog/2011/01/26/how-to-convert-artwork-from-flash-to-illustrator/</link>
		<comments>http://www.untoldentertainment.com/blog/2011/01/26/how-to-convert-artwork-from-flash-to-illustrator/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 15:42:59 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3385</guid>
		<description><![CDATA[A client recently asked me if i could supply him with artwork from a game so that another team could produce a video. The video team, of course, couldn&#8217;t/wouldn&#8217;t do anything with the native .fla (Flash) files i had on hand. They wanted Illustrator files. It took a lot of back and forth and futzing [...]]]></description>
			<content:encoded><![CDATA[<p>A client recently asked me if i could supply him with artwork from a game so that another team could produce a video.  The video team, of course, couldn&#8217;t/wouldn&#8217;t do anything with the native .fla (Flash) files i had on hand.  They wanted Illustrator files.</p>
<p>It took a lot of back and forth and futzing to finally convert the artwork properly, and when i finally found the solution, i realized i had known it all along and had merely forgotten it (because i don&#8217;t do this type of thing often).  So i&#8217;m recording the solution here for posterity; the next time i have to do this, a Google search will turn up my own blog :)  It actually wouldn&#8217;t be the first time that&#8217;s happened.</p>
<p>i&#8217;ll keep you on tenterhooks and take you through the frustrating conversion process, just so that you can swear along with me and nod your head and say &#8220;yep &#8211; that&#8217;s happened to me.&#8221;</p>
<h2>Export Image</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/characters1.jpg" alt="Characters"></p>
<p>These are the Flash vector characters the client needed me to convert.
</p></div>
<p>The ability to export artwork to .ai format has actually been removed from Flash Professional as of version CS5, and has been replaced with the Adobe .fxg format, which works as expected. The .fxg format even converts gradients properly, which have been a longstanding asspain for the past 10 years.  If you&#8217;re running CS5 or better, export to .fxg and you&#8217;re done.  If you&#8217;re trapped in CS4 or below, here&#8217;s what you may have tried:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/export.jpg" alt="Export Image">
</div>
<ol>
<li>File > Export > Export Image
<li>Choose Adobe Illustrator (*.ai) from the drop-down filetype list
<li>Punch in a filename, and click &#8220;Save&#8221;
<li>Open the file in Illustrator
</ol>
<p>The first roadblock you encounter may be this message:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/error.jpg" alt="Can't open the illustration.">
</div>
<blockquote><p>Can&#8217;t open the illustration.  The illustration contains an incomplete or garbed object description.</p>
<p>Offending operator: &#8220;&#8221;</p>
<p>Adobe_Illustrator_AI5 / initialize get exec<br />
%%BeginEncoding: _pixelmic &#8230; feh.  i can&#8217;t be arsed to look up the accented characters to type the rest.</p></blockquote>
<p>i&#8217;ve ranted at length before about the error messages eggheads put into their software products.  How on Earth is joe average user &#8211; and an <em>artist</em>, at that &#8211; supposed to react to and troubleshoot a message like this?</p>
<p>Obviously (?), all the egghead wanted the artist to do was this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/characters2.jpg" alt="Characters">
</div>
<p>Select the single movieclip and press CTRL+B to break apart the object into separate objects.  Now, when i go through the export process and bring the file into Illustrator, i get this:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/desaturated.jpg" alt="Characters"></p>
<p>Um &#8230; yuck?  Who sucked all the color out?
</p></div>
<p>The reason why the colors are desaturated and grey-looking apparently has to do with the Flash .ai export routine deciding to convert RGB artwork to CMYK artwork.  i don&#8217;t know why it does this, but it&#8217;s not helpful.  But at least the artwork is in Illustrator in vector format, right?</p>
<p>At this point, you <em>could</em> pick through every piece of vector art and tweak the color by hand &#8230; if you&#8217;re a sucker.  Instead, let&#8217;s get on to the reason you&#8217;re here: the actual solution to this non-working nonsense.</p>
<h2>WMF FTW!</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/wmf.jpg" alt="WMF"></p>
<p>The mighty (and seldom-understood) wmf
</p></div>
<p>The secret is to export as a Windows Metafile.  Mac people, i don&#8217;t know if you have this option.  If not, i&#8217;m not sure how to help you &#8230; but once you counter-intuitively export as a .wmf file instead of an .ai file and bring THAT into Illustrator, voila: your artwork is beautifully preserved with its RGB colors intact.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/characters3.jpg" alt="Characters"></p>
</div>
<p>As i mentioned, the one drawback is that gradients don&#8217;t survive the crossing.  This character&#8217;s cell phone casts an alpha gradient glow across her face, which shows up as a flat white polygon in Illustrator:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2011_01_26/gradient.jpg" alt="Gradient">
</div>
<p>.fxg format will fix that. If you&#8217;re not ready to upgrade your software, this might entail an ugly hand-conversion process of all your gradients &#8230; unless someone else has discovered the esoteric conversion secret to preserving gradients?  Anyone?</p>
<p>Big thanks to Gavin Friesen, my Art Director back at Corus, for originally cluing me in to this solution.</p>
<p>For more Flash AS3 Tutorials and a pile of other useful stuff, check out our <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Flash and Actionscript 911</a> feature.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F01%2F26%2Fhow-to-convert-artwork-from-flash-to-illustrator%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2011%2F01%2F26%2Fhow-to-convert-artwork-from-flash-to-illustrator%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2011/01/26/how-to-convert-artwork-from-flash-to-illustrator/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3385&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2011/01/26/how-to-convert-artwork-from-flash-to-illustrator/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Flash to Unity 3D Glossary</title>
		<link>http://www.untoldentertainment.com/blog/2010/12/21/flash-to-unity-3d-glossary/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/12/21/flash-to-unity-3d-glossary/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 04:54:47 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3321</guid>
		<description><![CDATA[If you&#8217;re thinking of transitioning from Flash to Unity 3D, you&#8217;re in luck: the two programs are very similar, and it shouldn&#8217;t take you very long to feel right at home. The biggest difference that i can see between the two is that Unity is a proper game engine, while Flash is a program that [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re thinking of transitioning from Flash to Unity 3D, you&#8217;re in luck: the two programs are very similar, and it shouldn&#8217;t take you very long to feel right at home.  The biggest difference that i can see between the two is that Unity is a proper game engine, while Flash is a program that you bully, beg and cajole into doing game-like things.  Want collisions, 3D depth-swapping, particle systems, physics, shaders, and a whole lot more right out of the box (instead of implementing Box 2D, Away 3D, Collision Detection Kit, and God knows what else)?  Unity is a real treat!</p>
<p>Here are a few glossary terms that kinda sorta carry over from Flash to Unity: </p>
<p>MovieClip == GameObject (but more accurately, Symbol == Prefab.  Much like a MovieClip/Graphic/Button in Flash, whatever changes you make to a Prefab in Unity will replicate to all instances of that Prefab)</p>
<p>Scene == Scene (but Scenes in Flash are generally useless and glitchy &#8230; Scenes in Unity are the bee&#8217;s knees)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/scenesUnity.jpg" alt="Unity 3D Scenes"></p>
<p>Unity.
</p></div>
<p>Library == Project panel</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/libraryFlash.jpg" alt="Flash Library"></p>
<p>Flash.
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/projectPanelUnity.jpg" alt="Unity 3D Project Panel"></p>
<p>Unity.
</p></div>
<p>Properties panel == Inspector panel</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/propertiesFlash.jpg" alt="Properties panel in Flash"></p>
<p>Flash.
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/inspectorUnity.jpg" alt="Inspector panel in Unity"></p>
<p>Unity.
</p></div>
<p>Timeline == A-NOTHING!!  (except that there IS a timeline that allows you to animate GameObjects.  The resulting animation is stored in an .anim file inside your Project panel.  You can apply an animation to any GameObject in your Scene, so animations are curiously reusable)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/timelineFlash.jpg" alt="Timeline in Flash"></p>
<p>Flash.
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/timelineUnity.jpg" alt="Timeline in Unity 3D"></p>
<p>Unity. (warning: the UX [user experience] on this thing kind of blows ass.)
</p></div>
<p>Instance names == tags &#8230; sorta (but unlike in Flash, you can have multiple GameObject instances with the same tag)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/instanceNamesFlash.jpg"></p>
<p>Flash.
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/tagsUnity.jpg"></p>
<p>Unity.
</p></div>
<p>Layers == layers (but Unity does not display its layers in anything nearly as nice as the Flash timeline)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/layersFlash.jpg"></p>
<p>Flash.
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_21/layersUnity.jpg"></p>
<p>Unity.
</p></div>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/unity-nuub/"><img src="http://www.untoldentertainment.com/blog/img/features/unityNuub/unityNuub.jpg"></a></p>
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F21%2Fflash-to-unity-3d-glossary%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F21%2Fflash-to-unity-3d-glossary%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/12/21/flash-to-unity-3d-glossary/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3321&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/12/21/flash-to-unity-3d-glossary/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Understanding Functions &#8211; Arguments</title>
		<link>http://www.untoldentertainment.com/blog/2010/12/02/understanding-functions-arguments/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/12/02/understanding-functions-arguments/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 05:49:09 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3246</guid>
		<description><![CDATA[There is a very short list of programming structures you have to learn to be reasonably comfortable in most modern object-oriented languages. Functions are one of them. In Understanding Functions, we learned that Functions are a way to bundle code statements together into a tight little unit that we can invoke (or &#8220;call&#8221;) any time [...]]]></description>
			<content:encoded><![CDATA[<p>There is a very short list of programming structures you have to learn to be reasonably comfortable in most modern object-oriented languages. Functions are one of them.</p>
<p>In Understanding Functions, we learned that Functions are a way to bundle code statements together into a tight little unit that we can invoke (or &#8220;call&#8221;) any time we like, and as often as we like.  There are two very important features to learn about Functions: Arguments and Return Values.  We&#8217;ll figure out Arguments in this article.</p>
<h2>Til You&#8217;re Blue in the Face</h2>
<p>Arguments aren&#8217;t as unfriendly as they sound.  They&#8217;re just additional pieces of information we can send to a Function during a Function call.  You&#8217;ll remember that a Function call looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">doSomething<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Quite often, we need to pass additional information to Functions to make them super-useful.  Let&#8217;s imagine we have a text input field where the player can enter his name.  The player types in his name and clicks a button, and the game says &#8220;Hello, John&#8221; (or whatever the player&#8217;s name is).  The <em>dynamic</em>, or changing, part of that Function is the player&#8217;s name.  Here&#8217;s how that Function might look if it was &#8220;hard-coded&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> sayHello<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hello, John.&quot;</span><span style="color: #66cc66;">&#41;</span>;  <span style="color: #808080; font-style: italic;">// ain't nothing dynamic about this</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><b>Note:</b> Unity javascript people will want to start the function name with a capital letter as a best practice, and use either <b>print</b> or <b>Debug.Log</b> in place of trace.</p>
<p>This is okay, but the problem is that every time we <b>call</b> (run, execute, do) that Function, it&#8217;s going to say &#8220;Hello, John.&#8221;  What if the player&#8217;s name isn&#8217;t John?  Well, we need to make that part dynamic, because it changes.</p>
<h2>Dynamic!</h2>
<p>Let&#8217;s set up our Function so that we say &#8220;Hello&#8221;, and then tack on a variable that holds the player&#8217;s name:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> sayHello<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hello, &quot;</span> + playerName<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>(When working with Strings, the <b>+</b> operator glues two strings together.)</p>
<p>It&#8217;s getting better, but we have a new problem: the code interpreter is going to see playerName and think &#8220;playerName?  What the heck is that?&#8221;  Then it&#8217;s going to freak out and the Earth is going to crash into the Sun, and we don&#8217;t want that.</p>
<p>We need to declare and define the playerName variable somewhere.  But instead of just declaring playerName any old place, we&#8217;re going to <em>tell</em> the sayHello Function which playerName we&#8217;d like it to say.  We&#8217;re going to set our sayHello Function up so that it has a <b>parameter</b>.  We do that between the round brackets in the Function declaration:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> sayHello<span style="color: #66cc66;">&#40;</span>playerName : <span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hello, &quot;</span> + playerName<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><b>Parameters</b> go between the round brackets in a Function declaration. In the continuing tradition of seeing our blocks of code as visual elements, check this out:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_02/artistVision.jpg" alt="Parameters"></p>
<p>If you&#8217;re a visual person, learning to see code in blocks like this could help you out a lot.
</p></div>
<p>When we structure a Function this way, we say that the sayHello Function <em>accepts</em> one parameter, which is called playerName.  The <b>type</b> of playerName is a String (a list of letters and/or numbers). Notice that even though this is kind of like a variable declaration, we don&#8217;t need to use the <b>var</b> keyword.</p>
<h2>Exact Change Required</h2>
<p>i like to think of <b>parameters</b> as the <em>payment</em> that a Function accepts. The sayHello Function takes one <b>argument</b> and stores it in its first <b>parameter</b>. Since the first parameter is of type <b>string</b>, we need to &#8220;pay&#8221; it a string.  If we pay any other datatype (int, float, number, boolean, array), the compiler will throw an error. </p>
<p>Here&#8217;s how we &#8220;pay&#8221; a string to the sayHello Function:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">sayHello<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Murphy&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Freeze frame!  Let&#8217;s become the Pac Man-like code interpreter and follow the logic of this statement for a moment.</p>
<p>The interpreter gets to this line and recognizes it as a Function call, thanks to those round brackets at the end.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_02/step1.jpg" alt="Step 1"></p>
</div>
<p>It also sees &#8211; hey! &#8211; the programmer has passed an argument to the Function inside those round brackets.  So Pac Man puts that in his suitcase, hops in the DeLorean, and travels off in search of the sayHello Function.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_02/step2.jpg" alt="Step 2"></p>
</div>
<p>When he finds it, before he starts chewing through the statements in the statement block (between the curly braces), the Pac Man-like code interpreter drops off the argument into the waiting playerName parameter bucket, between the round brackets of the Function declaration.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_02/step3.jpg" alt="Step 3"></p>
</div>
<p>Now the parameter called playerName has a value of &#8220;Murphy&#8221;.  Since &#8220;Murphy&#8221; is a String, and since the sayHello Function demands exact change (one argument of type <b>String</b>), we&#8217;re good to go!</p>
<p>With payment resolved, the code interpreter chews through the statements in the statement block (between the curly braces), reaches the bottom of the Function, and hops back in the DeLorean to pick up where he left off, back at the end of the Function call.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_02/step4.jpg" alt="Step 4"></p>
</div>
<p>Because the value of the variable playerName is the String &#8220;Murphy&#8221;, the result is that the console/output window says <b>Hello, Murphy</b>.  It will say Hello to whatever name we pass in as an argument.</p>
<h2>Breakamage Pt.1 &#8211; Wrong Datatype</h2>
<p>It&#8217;s really important to break code and cause errors, so that when you&#8217;re in a jam on a project and an error comes up, you&#8217;ll know what it means and how to deal with it.</p>
<p>Try tweaking the sayHello Function call so that you pass an int (integer/whole number) instead of a String:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">sayHello<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">42</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>42 is not a String.  Your first clue is that it&#8217;s missing those double-quotation marks around it.  Since the sayHello Function <em>DEMANDS</em> exactly one string as payment, the compiler throws an error.</p>
<p>This is what that error looks like when we use ActionScript 3:</p>
<blockquote><p>Scene 1, Layer &#8216;Layer 1&#8242;, Frame 1, Line 1	1067: Implicit coercion of a value of type int to an unrelated type String.</p></blockquote>
<p>i really take exception to the way eggheads write error messages.  They could stand to be a LOT more clearly written.  But here&#8217;s what this error is trying to say:  &#8220;implicit coercion&#8221; means you&#8217;re trying to force something to be something else, and ActionScript 3 can&#8217;t manage it.  In this case, you&#8217;re trying to force an int (42) to become a String when Pac Man delivers the goods to the sayHello Function, and the compiler is having a minor freak-out.  That&#8217;s your clue that you may have passed a mismatched type as an argument to a Function.</p>
<p>This is the error message that the same mistake will cause in Unity javascript;</p>
<blockquote><p>Assets/NewBehaviourScript.js(4,10): BCE0017: The best overload for the method &#8216;Tutorial.sayHello(String)&#8217; is not compatible with the argument list &#8216;(int)&#8217;.</p></blockquote>
<p>Ugh!  You eggheads are <em>killing me</em>.  Forget what an &#8220;overload&#8221; is and focus in on the part that (sorta) makes sense to you right now: <em>something</em> is not compatible with the argument list.  You can see quite clearly that one is a String, and the other is an int.  That&#8217;s your clue that you&#8217;ve botched the argument type.  Go back and patch this up, and you&#8217;ll be golden.</p>
<h2>Extremely Argumentative</h2>
<p>So is that it?  Can Functions only accept one argument?  No &#8230; they can actually accept multiple arguments.  Be sure to comma-separate them, like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">makePizza<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;pepperoni&quot;</span>, <span style="color: #ff0000;">&quot;mustard&quot;</span>, <span style="color: #ff0000;">&quot;tree bark&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> makePizze<span style="color: #66cc66;">&#40;</span>topping1 : <span style="color: #0066CC;">String</span>, topping2 : <span style="color: #0066CC;">String</span>, topping3 : <span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>B..but &#8230; do they all have to be the same datatype (String)?   Heck no!  You can mix and match.  The only rules are that you need to pass the arguments into the Function in the same order as the parameter list, and you need to pass the same <em>number</em> of arguments the Function requires.  The Pac Man-like code interpreter unpacks these one at a time in order.  So let&#8217;s pretend there&#8217;s a function that takes a String, an int and an Array (in that order):</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> initPatient<span style="color: #66cc66;">&#40;</span>patientName : <span style="color: #0066CC;">String</span>, age : <span style="color: #0066CC;">int</span>, aPhobias : <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>As long as we pass in a String, an int and an Array, in that order, it works:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> theName : <span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;Shaggy&quot;</span>;
<span style="color: #000000; font-weight: bold;">var</span> theAge : <span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">17</span>;
<span style="color: #000000; font-weight: bold;">var</span> aThePhobias : <span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;like, ghosts&quot;</span>, <span style="color: #ff0000;">&quot;like, zombies&quot;</span>, <span style="color: #ff0000;">&quot;like, creepy-crawly things&quot;</span><span style="color: #66cc66;">&#41;</span>;
initPatient<span style="color: #66cc66;">&#40;</span>theName, theAge, aThePhobias<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>That&#8217;s fine.  But as soon as we mix up the order, there&#8217;s trouble:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> theName : <span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;Shaggy&quot;</span>;
<span style="color: #000000; font-weight: bold;">var</span> theAge : <span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">17</span>;
<span style="color: #000000; font-weight: bold;">var</span> aThePhobias : <span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;like, ghosts&quot;</span>, <span style="color: #ff0000;">&quot;like, zombies&quot;</span>, <span style="color: #ff0000;">&quot;like, creepy-crawly things&quot;</span><span style="color: #66cc66;">&#41;</span>;
initPatient<span style="color: #66cc66;">&#40;</span>theAge, theName, aThePhobias<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// ERROR!  Totally long-winded explanation that could really be made a lot more clear, but eggheads aren't about making other people's lives easier (unfortunately).  In short, argument type mismatch.</span></pre></div></div>

<p>So far so good?  You may have noticed that i made the names of the variables i passed into the Function as arguments conspicuously different than the names of the parameters i accepted in the initPatient Function.  This is because i wanted you to see that there is a difference between these two things, and that there CAN be a difference.  When you call a Function and pass it some arguments, the variable names you pass in don&#8217;t matter &#8230; it&#8217;s the values <em>stored</em> in those variables that Pac Man takes with him on his journey.</p>
<h2>Breakamage Pt.2 &#8211; Wrong Number of Arguments</h2>
<p>Just as sending in the wrong <em>type</em> of argument will throw an error (ie paying a quarter when the Function wants a nickel), the compiler will throw an error if you pass in the wrong <em>number</em> of arguments.</p>
<p>In this example, we have a Function that accepts one argument, but we try to pass it two arguments:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> eatBacon<span style="color: #66cc66;">&#40;</span>numberOfStrips : <span style="color: #0066CC;">int</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;OM NOM NOM!  I just ate &quot;</span> + numberOfStrips + <span style="color: #ff0000;">&quot; strips of delicious bacon.&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
eatBacon<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">57</span>, <span style="color: #ff0000;">&quot;i can haz heart attack&quot;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// ERROR!!</span></pre></div></div>

<p>The function wants only one argument, but we&#8217;re sending it two. Here&#8217;s what the error looks like when we use Actionscript 3:</p>
<blockquote><p>Scene 1, Layer &#8216;Layer 1&#8242;, Frame 1, Line 6	1137: Incorrect number of arguments.  Expected no more than 1.</p></blockquote>
<p>Thankfully, this is one of the clearest error message i&#8217;ve ever seen an egghead write.</p>
<p>This is what the error looks like when we use Unity javascript (changing <b>trace</b> to either <b>print</b> or <b>Debug.Log</b> and using a capital letter to begin our Function name):</p>
<blockquote><p>Assets/NewBehaviourScript.js(8,9): BCE0017: The best overload for the method &#8216;NewBehaviourScript.eatBacon(int)&#8217; is not compatible with the argument list &#8216;(int, String)&#8217;.</p></blockquote>
<p>That&#8217;s the same error we get when there&#8217;s an argument type mismatch, so the Actionscript eggheads did a slightly better job of communicating the problem than the Unity eggheads did.  The important thing is that you learn to recognize why Unity or Flash are throwing the error so that you can fix it quickly and get on with your project.</p>
<p>Note that you&#8217;ll throw an error even if you &#8220;overpay&#8221; a Function.  If a Function wants exactly two arguments, and you give it nine, you&#8217;ll get one of these errors. </p>
<h2>But Wait &#8211; There&#8217;s More!</h2>
<p>There are two more advanced topics when it comes to passing and accepting arguments &#8211; optional arguments, and Rest arguments.  They&#8217;re useful, but not crucial.  We&#8217;ll be sure to cover them in future articles.</p>
<p>For now, get some practice passing arguments to your Functions, and writing parameters to store those articles.  <em>The fate of the free world may depend on it!</em>  Or whatever.</p>
<p>For more Flash AS3 Tutorials and a pile of other useful stuff, check out our <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Flash and Actionscript 911</a> feature. </p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F02%2Funderstanding-functions-arguments%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F02%2Funderstanding-functions-arguments%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/12/02/understanding-functions-arguments/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3246&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/12/02/understanding-functions-arguments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding Functions</title>
		<link>http://www.untoldentertainment.com/blog/2010/12/01/understanding-functions/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/12/01/understanding-functions/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 17:02:46 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[AS3 Helper Class]]></category>
		<category><![CDATA[Bizarre]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3243</guid>
		<description><![CDATA[There is a very short list of programming structures you have to learn to be reasonably comfortable in most modern object-oriented languages. Functions are one of them. Bang on De Drum All Day Here&#8217;s a secret about programmers: they are inherently lazy. The less typing a programmer can do, the better. Programming is all about [...]]]></description>
			<content:encoded><![CDATA[<p>There is a very short list of programming structures you have to learn to be reasonably comfortable in most modern object-oriented languages.  Functions are one of them.</p>
<h2>Bang on De Drum All Day</h2>
<p>Here&#8217;s a secret about programmers: they are inherently lazy.  The less typing a programmer can do, the better.  Programming is all about dreaming up complex tasks that programmers don&#8217;t want to do, and delegating those tasks to a computer so that the programmer can blow off and watch cartoons the rest of the day.</p>
<p>Many programming structures are designed to make a programmer&#8217;s life easier.  And a programming rule of thumb is <em>generally</em> that if you have to type something twice, there&#8217;s an opportunity to make your code more efficient.</p>
<p>Functions make your code more efficient.  Let&#8217;s imagine a game where we need to create a bunch of monsters.  If you&#8217;ve read <a href="http://www.untoldentertainment.com/blog/2010/11/24/understanding-loops/">Understanding Loops</a>, you know that you can set up a loop to run an action multiple times.  i&#8217;ll use a combination of pseudocode (in comments) and real code to demonstrate:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// Make 50 monsters.</span>
<span style="color: #000000; font-weight: bold;">var</span> totalMonsters:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">50</span>;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalMonsters; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// make a monster</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>So far so good.  But there are a few other things we have to do with these monsters we create.  We need to put each one on a hill.  Then we need to dress each monster up in a Power Hat.  Next, we need to hide a key to each monster&#8217;s hilly domain.  Let&#8217;s modify the loop:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// Make 50 monsters.</span>
<span style="color: #000000; font-weight: bold;">var</span> totalMonsters:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">50</span>;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalMonsters; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// make a monster</span>
    <span style="color: #808080; font-style: italic;">// put the monster on a hill</span>
    <span style="color: #808080; font-style: italic;">// put a power hat on the monster</span>
    <span style="color: #808080; font-style: italic;">// hide a key</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Mmmm &#8230; we&#8217;re almost there.  Now we need to create a portrait for that each monster and put it inside the castle, so that when the hero defeats a monster, the portrait gets a big checkmark on it.  Then we need to create a magic gem that will kill each monster.  Each gem needs to be buried somewhere underground.  Finally, we need to create a villager for each monster in the game. Each villager will give you a clue as to where to find the monster-killing gem.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// Make 50 monsters.</span>
<span style="color: #000000; font-weight: bold;">var</span> totalMonsters:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">50</span>;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalMonsters; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// make a monster</span>
    <span style="color: #808080; font-style: italic;">// put the monster on a hill</span>
    <span style="color: #808080; font-style: italic;">// put a power hat on the monster</span>
    <span style="color: #808080; font-style: italic;">// hide a key</span>
    <span style="color: #808080; font-style: italic;">// create a portrait</span>
    <span style="color: #808080; font-style: italic;">// put the monster's face on the portrait</span>
    <span style="color: #808080; font-style: italic;">// put the portrait inside the castle</span>
    <span style="color: #808080; font-style: italic;">// create a gem</span>
    <span style="color: #808080; font-style: italic;">// bury the gem underground</span>
    <span style="color: #808080; font-style: italic;">// create a villager</span>
    <span style="color: #808080; font-style: italic;">// give the villager a gem clue</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Oh man.  This loop is getting real ugly, real fast.  There&#8217;s so much STUFF in there.  It&#8217;s getting out of control.</p>
<p>If we take a close look, we see that we&#8217;re running a few tasks that can be grouped together.  All the monster stuff goes together.  All the key stuff goes together.  The gem stuff goes together.  The villager stuff goes together.  That&#8217;s four separate <em>bundles</em> of tasks that, like a pile of sticks, we should be able to wrap up with twine in a tidy little package.</p>
<h2>I Have a Tiny Little Package</h2>
<p>That&#8217;s one of the things Functions do for us:  they allow us to group related tasks together into a little package, and we can refer to that package over and over again without having to repeat any lines.</p>
<p>A <b>Function declaration</b> looks very much like a variable or array declaration.  Instead of the <b>var</b> keyword, we use the <b>function</b> keyword.  In ECMA-based languages like Actionscript 3, Unity javascript and C#, functions are followed by round brackets.  Then you open up a statement block between curly brackets, just like in a <b>For Loop</b> or a conditional (If) statement:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> doSomething<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
   <span style="color: #808080; font-style: italic;">// statements go here</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><b>Note:</b> If you&#8217;re using Unity javascript, best practice is to begin a function name with a capital letter.</p>
<p>So <b>doSomething</b> is our function name.  That&#8217;s a custom name that we came up with.  It makes a lot of sense to use verbs (action words) when naming your functions.  We&#8217;ll see why in a moment.</p>
<p>Let&#8217;s carve out the statements involving the monsters and put them in their own function:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> initMonsters<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// make a monster</span>
    <span style="color: #808080; font-style: italic;">// put the monster on a hill</span>
    <span style="color: #808080; font-style: italic;">// put a power hat on the monster</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>(the &#8220;init&#8221; here is short for &#8220;initialize&#8221;, which means &#8220;set it up&#8221;)</p>
<p>Now, back in the loop, we can substitute those three statements with a <b>Function call</b>.  A Function call always uses the name of the function, followed by round brackets, with a semi-colon to end the statement.  Take a look:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// Make 50 monsters.</span>
<span style="color: #000000; font-weight: bold;">var</span> totalMonsters:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">50</span>;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalMonsters; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    initMonsters<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// We removed these three statements and put them in their own function.</span>
    <span style="color: #808080; font-style: italic;">// Now, we just call the function.</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">// hide a key</span>
    <span style="color: #808080; font-style: italic;">// create a portrait</span>
    <span style="color: #808080; font-style: italic;">// put the monster's face on the portrait</span>
    <span style="color: #808080; font-style: italic;">// put the portrait inside the castle</span>
    <span style="color: #808080; font-style: italic;">// create a gem</span>
    <span style="color: #808080; font-style: italic;">// bury the gem underground</span>
    <span style="color: #808080; font-style: italic;">// create a villager</span>
    <span style="color: #808080; font-style: italic;">// give the villager a gem clue</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>In common programming parlance, this is called <em>calling a Function</em>.</p>
<p>To understand how a function call works, we need to put ourselves back in the role of our code interpreter, which is a lot like Pac Man.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_01/functions.jpg" alt="Pac Man and functions"></p>
</div>
<p>Pac Man hits the first statement in the loop.  It&#8217;s a function call.  So he jumps out of the loop to wherever the Function is declared, and chews through all of the statements in that Function. When he reaches the bottom of the Function, he bounces back to the loop again, and resumes chewing through code at the very next line.</p>
<p>This works very nicely.  Now we can go through and offload all of our chunks of functionality into their own Functions.  When we write it all up, i looks something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// Make 50 monsters.</span>
<span style="color: #000000; font-weight: bold;">var</span> totalMonsters:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">50</span>;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalMonsters; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    initMonsters<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    initKeys<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    initPortraits<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    initGems<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    initVillagers<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Look how much easier to read that loop is now. It&#8217;s very clear that we loop 50 times, and each time we make some monsters, some keys, some portraits, some gems, and some villagers.  The details for each process are buried in their respective functions.  Now, when we look at the initKeys function, we only have to worry about tasks related to initializing those keys.</p>
<p>This bouncing around that the Pac Man-like code interpreter does is the reason why i say that Object Oriented Programming (OOP) is like taking multiple plane flights through time portals. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_23/map.jpg" alt="Pac Man Map"></p>
<p>Pac to the Future
</p></div>
<p>There are two more very important things to learn about functions: Arguments and Return Values.  These are detailed in two additional articles.  Once you read through those, you&#8217;ll know almost everything there is to know about Functions, and you&#8217;ll be ready to start putting that knowledge into practice by building your own stuff!</p>
<p>For more Flash AS3 Tutorials and a pile of other useful stuff, check out our <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Flash and Actionscript 911</a> feature.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F01%2Funderstanding-functions%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F01%2Funderstanding-functions%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/12/01/understanding-functions/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3243&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/12/01/understanding-functions/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Understanding Loops with Arrays</title>
		<link>http://www.untoldentertainment.com/blog/2010/12/01/understanding-loops-with-arrays/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/12/01/understanding-loops-with-arrays/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 16:02:00 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3224</guid>
		<description><![CDATA[There is a very short list of programming structures you have to learn to be reasonably comfortable in most modern object-oriented languages. Arrays are one of them. Loops are another. i covered both of these structures in the previous aptly-named articles Understanding Arrays and Understanding Loops. Now that we understand loops, and we understand arrays, [...]]]></description>
			<content:encoded><![CDATA[<p>There is a very short list of programming structures you have to learn to be reasonably comfortable in most modern object-oriented languages.  Arrays are one of them.  Loops are another.  i covered both of these structures in the previous aptly-named articles <a href="http://www.untoldentertainment.com/blog/2010/11/22/understanding-arrays/">Understanding Arrays</a> and <a href="http://www.untoldentertainment.com/blog/2010/11/24/understanding-loops/">Understanding Loops</a>.</p>
<p>Now that we understand loops, and we understand arrays, we&#8217;re ready to smack their featureless plastic genitals together like we&#8217;re making Barbie have babies. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_01/wonderTwins.gif" alt="Wonder Twins"></p>
<p>(Which one of these is the chick again?)
</p></div>
<p>Arrays really come alive with Loops.  By using an Array&#8217;s <b>length</b> property as the loop limiter, we can step through every element in an Array one by one.</p>
<p>Here&#8217;s what that looks like in code:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> myArray:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Nigel Tufnel&quot;</span>, <span style="color: #ff0000;">&quot;Derek Smalls&quot;</span>, <span style="color: #ff0000;">&quot;David St. Hubbins&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> =<span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>myArray.<span style="color: #0066CC;">length</span>; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>myArray<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// This prints each element in the array, one by one, to the console/output window </span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><b>Note:</b> If you&#8217;re using Unity javascript, try print or Debug.Log instead of trace.</p>
<p>If you truly understand Loops, this shouldn&#8217;t be too challenging for you.  Instead of using some arbitrary value like one thousand as our limiter, we&#8217;re using the array&#8217;s <b>length</b> property, which is the number of elements in the array.  This property is dynamic, so that any time we add things to our array, or take them away, length is updated for us. We don&#8217;t have to rely on a hard-coded value (which means a number that doesn&#8217;t change).</p>
<p>The code snippet shown above traces out each element in the array, one after the other:</p>
<ul>
<li>Nigel Tufnel
<li>Derek Smalls
<li>David St. Hubbins
</ul>
<p>This is because on every <b>iteration</b> of the loop, our <b>iterator</b> variable called <b>i</b> is increased by one.</p>
<p><b>i</b> begins life with a value of 0.  On the first run through the loop, the code interpreter <b>resolves</b> myArray[i] to myArray[0].  The first element in the array, at index 0, is &#8220;Nigel Tufnel&#8221;, so that&#8217;s what you&#8217;ll see in the output console.</p>
<p>On the next iteration, <b>i</b> gets jacked up to 1.  The element at index 1 in the array is &#8220;Derek Smalls&#8221;, so that&#8217;s what prints out.  </p>
<p>Finally, in the third and final round, we print out &#8220;David St. Hubbins&#8221;, because myArray[i] resolves to myArray[2].  The element at index 2 of the array is &#8220;David St. Hubbins&#8221;.</p>
<p>After that, the interpreter bounces back to the top of the loop.  i is incremented to 3.  We check the limiter: </p>
<p><b>i < myArray.length</b></p>
<p>Because <b>i</b> is 3 and myArray.length is also 3, this line resolves to 3 < 3.  Since 3 is not less than 3, the answer here is <b>false</b>.  And because the answer is false, the code interpreter is not allowed to go through the loop any more.  It happily exits the loop and starts chewing through the code beneath the bottom closed curly brace that ties up the loop.</p>
<p><b>Protip:</b> If you&#8217;re a stickler for speed, it&#8217;s marginally faster to store myArray.length in a variable, to prevent your interpreter from having to do the length calculation on every iteration of your loop. Here&#8217;s what that looks like:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> myArray:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Nigel Tufnel&quot;</span>, <span style="color: #ff0000;">&quot;Derek Smalls&quot;</span>, <span style="color: #ff0000;">&quot;David St. Hubbins&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> =<span style="color: #cc66cc;">0</span>;
<span style="color: #000000; font-weight: bold;">var</span> len:<span style="color: #0066CC;">int</span> = myArray.<span style="color: #0066CC;">length</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>len; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>myArray<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>We store myArray.length in a variable called len, and then refer to that variable in the limiter section of the loop header.</p>
<p>For even <em>more</em> of a tiny speed increase, do away with the <b>new</b> keyword and declare the array like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> myArray:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;Nigel Tufnel&quot;</span>, <span style="color: #ff0000;">&quot;Derek Smalls&quot;</span>, <span style="color: #ff0000;">&quot;David St. Hubbins&quot;</span><span style="color: #66cc66;">&#93;</span>;</pre></div></div>

<h2>Who Cares?</h2>
<p>This is all still pretty pointless.  When are you ever going to use this when programming a game?  Well, for the rest of the article, i&#8217;ll lay some real-world examples on you to give you an idea of how to maximize the wonderful union of Loops with Arrays.</p>
<p>Think of any situation in a video game when you have a list of similar things.  In a first person shooter, you need to keep track of all the bullets that get fired.  Makes sense to create an array to store all of those bullets.  You can add bullets to the list and remove them from the list using the Array class methods we looked at in the Understanding Arrays article.</p>
<p>Most games run on one giant loop, with an Update process and a Draw process.  <b>Update</b> figures out where everything should be, and <b>Draw</b> renders those things to the player&#8217;s view.  If you want to update the positions of all the bullets, you may need to use a <b>For Loop</b> to loop through your collection of bullets and move them one tiny bit.  Then in the Draw process, you loop through your list of bullets and render them to the screen. When you repeat these processes quickly enough, you get the illusion of animation.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_01/blackOps.jpg" alt="Black Ops"></p>
<p>We might keep separate lists of the bullets, the enemies, the friendlies, and the bomb shells.
</p></div>
<p>Very often, you&#8217;ll use a loop to create the initial array of objects, and then more loops later to pick through that list.  Here&#8217;s an example of two functions.  One initializes all of the monsters, and the other kills all of the monsters (assuming the player just used the &#8220;Kill All Monsters&#8221; megabomb power-up).</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> aMonsters:<span style="color: #0066CC;">Array</span>; <span style="color: #808080; font-style: italic;">// this array is a bucket that can hold many things: namely, monsters.</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> initMonsters<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
     aMonsters = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;  <span style="color: #808080; font-style: italic;">// Defines an empty instance of the Array class.</span>
     <span style="color: #000000; font-weight: bold;">var</span> totalMonsters:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">50</span>; <span style="color: #808080; font-style: italic;">// this is a variable (bucket) that contains the number of monsters we'd like to begin with</span>
     <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalMonsters; i++<span style="color: #66cc66;">&#41;</span>
     <span style="color: #66cc66;">&#123;</span>
         aMonsters.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Monster<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// Creates a new instance of the Monster class, and adds that instance to the aMonsters array.  </span>
         <span style="color: #808080; font-style: italic;">// If that's confusing to you, we can split this up into two separate lines:</span>
         <span style="color: #808080; font-style: italic;">// var monster:Monster = new Monster();</span>
         <span style="color: #808080; font-style: italic;">// aMonsters.push(monster);</span>
     <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> killAllMonsters<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
     <span style="color: #000000; font-weight: bold;">var</span> len:<span style="color: #0066CC;">int</span> = aMonsters.<span style="color: #0066CC;">length</span>; <span style="color: #808080; font-style: italic;">// store the length of the aMonsters array in a variable called len.</span>
     <span style="color: #808080; font-style: italic;">// By doing this, we speed up our loop ever so slightly.</span>
     <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>len; i++<span style="color: #66cc66;">&#41;</span>
     <span style="color: #66cc66;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">var</span> monster:Monster = aMonsters<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">// stores a reference to the first monster in the array</span>
         monster.<span style="color: #006600;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// calls some sort of death method on the monster instance</span>
         aMonsters.<span style="color: #006600;">shift</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// removes the first element of the array.  The aMonsters array gets shorter and shorter every time we loop, as we remove monster after monster.  By the end of this loop, the aMonsters array is empty.</span>
     <span style="color: #66cc66;">&#125;</span>   
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><b>Note:</b> If some of the initialization stuff here looks a bit spooky, try reading the <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Understanding Classes</a> series.  Hopefully you&#8217;re catching what i&#8217;m throwing regarding loops and arrays, even if the class stuff is a little unfamiliar.</p>
<p><b>For Unity javascript:</b> Everything here is almost identical &#8230; the main difference is that methods like <b>push</b> begin with capital letters.</p>
<p>Those double-slashes, by the way, are <b>comments</b>.  They are ignored by the compiler, and are added to clarify the code.</p>
<h2>Get Carded</h2>
<p>Here&#8217;s another example.  Let&#8217;s say we&#8217;re programming a card game.  We can use an array to store our deck of cards.  Each element in the array is a card.  We use one loop to build the deck.  Then we shuffle the deck.  Finally, we use a loop to deal some cards onto the table, using the Array.shift() method to deal off the top of the deck.  This removes the cards from the array one by one, and adds them to a different array called aCardsOnTable.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> aDeck:<span style="color: #0066CC;">Array</span>; <span style="color: #808080; font-style: italic;">// declare an array to hold all the cards</span>
<span style="color: #000000; font-weight: bold;">var</span> aCardsOnTable:<span style="color: #0066CC;">Array</span>; <span style="color: #808080; font-style: italic;">// declare an array to hold the cards that we deal out</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> buildDeck<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    aDeck = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">// create an empty instance of the Array class and store it in a variable called aDeck</span>
    <span style="color: #000000; font-weight: bold;">var</span> totalCards:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">52</span>; <span style="color: #808080; font-style: italic;">// we want 52 cards in the deck, so that's how many times we'll loop</span>
    <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>totalCards; i++<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
         aDeck.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Card<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// we instantiate the Card class, and add the new card instance to the aDeck array.</span>
         <span style="color: #808080; font-style: italic;">// Once again, if we're doing too much in this line for you to follow along, here's a longer version of the same code in two steps:</span>
        <span style="color: #808080; font-style: italic;">// var card:Card = new Card(); // create the card instance and store it in a variable</span>
        <span style="color: #808080; font-style: italic;">// aDeck.push(card); // add the card instance to the aDeck array</span>
    <span style="color: #66cc66;">&#125;</span>
    shuffle<span style="color: #66cc66;">&#40;</span>aDeck<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// this is a custom function that you'll probably have to write yourself (just like the Card class).  It randomizes all of the elements in the array.</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> dealCards<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    aCardsOnTable = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">// define aCardsOnTable as an empty array</span>
    <span style="color: #000000; font-weight: bold;">var</span> numCardsToDeal : <span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">5</span>; <span style="color: #808080; font-style: italic;">// Let's deal 5 cards to the table.</span>
    <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>numCardsToDeal; i++<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
         aCardsOnTable.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>aDeck.<span style="color: #006600;">shift</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// pulls the first element out of aDeck, and adds it to aCardsOnTable</span>
         <span style="color: #808080; font-style: italic;">// That's a bit of shorthand.  Let me blow that line out into separate steps in case you're having trouble following it:</span>
         <span style="color: #808080; font-style: italic;">// var topCard:Card = aDeck.shift();  // use shift to pull out the first card in the aDeck array, and store it in a variable called topCard</span>
         <span style="color: #808080; font-style: italic;">// aCardsOnTable.push(topCard); // add the card we removed to the end of the aCardsOnTable array.</span>
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #808080; font-style: italic;">// When we finish with this loop, there are 5 cards in the aCardsOnTable array,</span>
    <span style="color: #808080; font-style: italic;">// and 47 cards left in the aDeck array.</span>
    <span style="color: #808080; font-style: italic;">// This is a great way to deal out cards!   By removing a card from the aDeck array each time using shift(), we ensure that we'll never deal the same card twice.</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Those previous two examples are very similar. Here&#8217;s another real-world example that&#8217;s slightly different.</p>
<h2>Looping Through Movieclips on the Stage</h2>
<p>Super eggheads like to lay out their GUIs (graphical user interfaces &#8211; buttons and windows and text boxes and junk) entirely in code.  i don&#8217;t prefer to do it that way, because i&#8217;m a very visual person, and i like to <em>see</em> my interface laid out on-screen.  i like to be able to poke, prod and nudge things around visually.</p>
<p>So often, i&#8217;ll have a bunch of buttons on the stage.  The buttons all have instance names.  i&#8217;ll put those instance names in an array, and then loop through the array to add standard buttonMode, rollover and rollout effects to all the buttons in one shot.  Here&#8217;s how that looks, presuming i have the buttons &#8220;phyiscally&#8221; on my stage and named properly:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">// i call the initBtns function somewhere in my code</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> initBtns<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">var</span> aBtnNames:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;btnPlay&quot;</span>, <span style="color: #ff0000;">&quot;btnQuit&quot;</span>, <span style="color: #ff0000;">&quot;btnCredits&quot;</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">// we store the instance names of my on-stage buttons in an array</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">var</span> len:<span style="color: #0066CC;">int</span> = aBtnNames.<span style="color: #0066CC;">length</span>; <span style="color: #808080; font-style: italic;">// Let's dynamically loop through as many buttons as we have in the array.</span>
    <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span>len; i++<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
         activateBtn<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#91;</span>aBtnNames<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
         <span style="color: #808080; font-style: italic;">// Here's a slower, possibly clearer way to say that:</span>
         <span style="color: #808080; font-style: italic;">// var btnName:String = aBtnNames[i]; // Refers to the i'th element of the array</span>
         <span style="color: #808080; font-style: italic;">// var btn:MovieClip = this[btnName] // Refers to a movieclip instance on stage with that name</span>
         <span style="color: #808080; font-style: italic;">// activateBtn(btn); // Passes the reference to that button to the activateBtn function</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> activateBtn<span style="color: #66cc66;">&#40;</span>btn:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
     <span style="color: #808080; font-style: italic;">// This is standard stuff i want all of my buttons to do:</span>
     btn.<span style="color: #006600;">buttonMode</span> = <span style="color: #000000; font-weight: bold;">true</span>;
     btn.<span style="color: #006600;">mouseEnabled</span> = <span style="color: #000000; font-weight: bold;">true</span>;
     btn.<span style="color: #006600;">mouseChildren</span> = <span style="color: #000000; font-weight: bold;">false</span>;
     btn.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_OVER</span>, rollOverBtn<span style="color: #66cc66;">&#41;</span>;
     btn.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_OUT</span>, rollOutBtn<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Of course, an even <em>better</em> way to handle this button situation is to create your own custom button class, but we&#8217;re taking baby steps here.  That&#8217;s the thing about code &#8211; these pieces we&#8217;re learning are like Lego blocks.  There are tons of different ways to build a sculpture out of Lego.  There are no &#8220;right&#8221; ways &#8211; only <em>preferred</em> ways.  Use this <b>Understanding &#8230;</b> series to get a grip on all the blocks you have to play with, and then &#8230; it&#8217;s time to play!</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_01/lego.jpg" alt="Lego Escher"></p>
<p>(We&#8217;ll work our way up to this.)
</p></div>
<p>For more Flash AS3 Tutorials and a pile of other useful stuff, check out our <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Flash and Actionscript 911</a> feature.  </p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F01%2Funderstanding-loops-with-arrays%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F12%2F01%2Funderstanding-loops-with-arrays%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/12/01/understanding-loops-with-arrays/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3224&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/12/01/understanding-loops-with-arrays/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Where Credit is Due</title>
		<link>http://www.untoldentertainment.com/blog/2010/11/24/where-credit-is-due/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/11/24/where-credit-is-due/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 01:15:27 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Bizarre]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Morality]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3189</guid>
		<description><![CDATA[[this article was originally posted on MochiLand.com] Credits are those long, scrolling pages of text at the end of the movie that you watch just to see if the filmmakers added a special jokey tack-on scene at the end of the flick. If you read closely, you&#8217;ll see that they are the names of people [...]]]></description>
			<content:encoded><![CDATA[<p>[this article was originally posted on <a href="http://mochiland.com/articles/where-credit-is-due-by-ryan-henson-creighton">MochiLand.com</a>]</p>
<p>Credits are those long, scrolling pages of text at the end of the movie that you watch just to see if the filmmakers added a special jokey tack-on scene at the end of the flick.  If you read closely, you&#8217;ll see that they are the names of people who worked on the movie, listed alongside their job titles.  In film, there are credits for the big people &#8211; the executive producer, the director and the principal actors &#8211; all the way down to the little people &#8211; the sandwich grip, the second-line gaffer, and the assistant schloob.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_24/credits.jpg" alt="Credits"></p>
<p>The elusive and rarely-seen credit roll, photographed here in its natural environment.
</p></div>
<p>If you look closely, you&#8217;ll begin to see credits everywhere.  They&#8217;re tacked on to the beginning and end of teevee shows, they&#8217;re inside album liner notes, and they pop up at the end of your favourite home console or computer video games.  But the one place you won&#8217;t find them is in online free-to-play Flash games &#8211; partly because Flash game developers decide not to put them there, and partly because developers are actively blocked from adding credits to their games by corporations with selfish interests.</p>
<h2>Flashsploitation</h2>
<p>More than just being a token kind gesture recognizing the hard work and effort people put into an entertainment product, for mature industries like film, television and music, credits are actually a key cog in the machine.  The CVs and resumes of performers and technicians rely on the credits system; often, your ability to land future jobs is based on the credits you&#8217;ve amassed on earlier projects.  Because of this, there are unions and guilds strictly guiding the practice of giving credit, in order to protect entertainment professionals from exploitation.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_24/nuns.jpg" alt="Nunsploitation"></p>
<p>It&#8217;s equally important to protect entertainment professionals from nunsploitation.
</p></div>
<p>The Flash game ecosystem is notorious for being packed with non-professionals, but we boast our fair share of pros.  Many game developers do what&#8217;s called &#8220;service work&#8221; to pay their bills.  A company will approach a known game developer, and will contract him to build a Flash game to certain specifications.  My own company, <a href="http://www.untoldentertainment.com">Untold Entertainment Inc.</a>, is just such a developer.  We survive on service work, largely building Flash games and Flash websites for clients like kids&#8217; television production companies.  If a prodco has a teevee show, especially if it&#8217;s targeted towards kids, they&#8217;ll also want someone to build them a web game to help promote and extend their brand.  Companies like Cartoon Network, Nickelodeon, and Disney regularly contract Flash game developers to build their arsenal of online games.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_24/disney.jpg" alt="Disney"></p>
<p>Disney. i&#8217;m posting their logo because i have a death wish.
</p></div>
<p>If you wanted to find out which developers built these games though, you&#8217;re largely out of luck. Try fishing through the games on the sites i mentioned and look for production credits &#8211; even a single logo of the developer who built the game.  With a few rare exceptions, you&#8217;ll come up empty-handed, game after game.  Before founding Untold Entertainment, i worked at a media conglomerate serving a number of kids&#8217; teevee stations.  Throughout my time there, i made over fifty games.  i was not credited for a single one.</p>
<h2>Keep it Secret, Keep It Safe</h2>
<p>Once out in the &#8220;real world&#8221;, i began to actively ask my clients for credits in the games i produced for them &#8211; a logo, at the very least.  Credit is one way to boost morale and mutual respect among your developers, and beyond that &#8211; it just seems RIGHT, you know?  When teevee and film are crediting their most important people down to the very guy who tapes the pylons to the road, it just didn&#8217;t seem right that the team or individual who created the entire game wouldn&#8217;t be recognized.  And having my logo feature in the game somewhere could be a compelling driver for future business.  All a prospective client need do is cruise through Cartoon Network&#8217;s site, for example, see my logo, and call me up with a contract offer.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_24/bananaphone.jpg" alt="Bananaphone"></p>
<p>With any luck, they&#8217;ll call me on the bananaphone.
</p></div>
<p>Aye &#8211; there&#8217;s the rub.  That&#8217;s exactly the situation that a client like Disney or Cartoon Network or Nickelodeon wants to avoid.  They don&#8217;t want anyone else contracting out &#8220;their&#8221; developers.  More competition for developers means that the devs will be more highly paid, and it may be more difficult for them to get their games made if the best devs are in higher demand.  </p>
<h2>No Promo</h2>
<p>The second excuse i hear for not allowing credit is that these companies don&#8217;t want to let on that they didn&#8217;t do all the work themselves.  There&#8217;s this strange macho corporate pride in pretending that all of their interactive work was done in-house &#8211; or at least, that&#8217;s the excuse they all give me.  But a quick look through the credits of any special effects-laden film, for example, shows that individual effects shots are farmed out to numerous different special effects houses. This serves the special effects team in two ways: they can say they worked on <b>Blockbuster 2: the Awesoming</b>, and prospective clients can see their name in the credits, which both increases their brand recognition, and enables clients to contract them for new work.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_24/explosion.jpg" alt="Explosion"></p>
<p>The Awesoming is two and a half hours of explosions, nudity, and Hasselhoff.
</p></div>
<p>But surely, a Flash game developer can at least SAY he worked on a given project, right?  Actually, no.  Many of these clients specify in the contract language that the game developer cannot even say he worked on the game.  That means no screenshots on his site, and no link to the game.  The developer must disavow any knowledge that the project ever happened, Mission: Impossible style.  On one of my contracts, the client forbade me from ever mentioning i worked on the project.  This became a sticking point, and when i fought for the right to promote, the client struck a bizarre bargain: i could promote my involvement in the project anywhere but online.  Of course, the web is the <em>only</em> place i ever promote my work with Untold Entertainment.</p>
<h2>It Doesn&#8217;t Ad Up</h2>
<p>You could argue that the work we Flash game developers do for these companies amounts to advertising.  Creating a game to promote <b>The Family Guy</b> or the <b>Mickey Mouse Clubhouse</b> shows is tantamount to creating an interactive advertisement online.  And since teevee commercial spots don&#8217;t credit their creators, games promoting shows don&#8217;t need to either.</p>
<p>This argument falls down for two reasons: for one, there&#8217;s really no room in a teevee spot to credit the creators, but there&#8217;s plenty of room in Flash games, as they&#8217;re not temporally limited to 30 seconds.  On the second count, advertising agencies promote their work all the time. Visit any agency website, and you&#8217;ll see the logos for the brands they&#8217;ve repped displayed proudly and prominently on the main page.  Many sites actually do list credits for the commercials they created.  Industry awards like the Clios list teevee commercial and print ad credits in full on their websites.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_11_24/clio.jpg" alt="2010 Clio Award Winner"></p>
<p>The 2010 Grand Clio Award winner
</p></div>
<p>Credits are important.  They serve as proof that a developer completed the work he said he did.  They help to increase a developer&#8217;s brand awareness, and they help new clients reach Flash game developers that they otherwise may not have known about.  Clients who refuse to credit developers, and who actively block developers from promoting the work are preventing the industry from maturing in the name of their own selfish interests.</p>
<h2>Resistance by Insistence</h2>
<p>So what&#8217;s to be done?  When I started hearing from new clients that they wanted to use me instead of my more well-known competitor, i asked what he&#8217;d done to lose their business.  Their answer?  &#8220;He started getting pushy about credit.&#8221;  Asking for credit, or even demanding credit that is rightly due to us as developers, is apparently hazardous to your health. It can harm your business.  It may even be possible to land new contracts simply by forfeiting your game credit. Clients really seem to go for that type of thing.</p>
<p>But you know what i say?  <em>Screw that</em>.  The solution is for ALL Flash game developers to demand the credit they are due on ALL projects.  Even if you&#8217;re not in this fee-for-service racket, you should add a Credits link to the main page of your Flash game as a matter of course.  You need to create a logo and preface your own game with it &#8211; or simply use your own name (e.x. &#8220;A game by Ryan Henson Creighton&#8221;)  Build your personal brand so that if clients come calling, you&#8217;ll have established a credit expectation in all of your games. </p>
<p>If ALL Flash games have a credits page (just as ALL teevee shows, movies, album liner notes, gallery installations, operas, stage plays, and nearly every other mature form of artistic expression or entertainment already has), then it will be simply <em>unspeakable</em> for a client to ask that you remove your name from the game.  You can also support the IGDA in their <a href="http://archives.igda.org/credit/">efforts to create a Credit Standards guide</a>, and point your clients to that guide during contract negotiations. For our part, Untold Entertainment now requires credit and promotion rights on all of our contracts &#8211; otherwise, we simply don&#8217;t take the job.  If we as developers band together and demand recognition for our creative efforts as they do in so many other entertainment industries, together we can drag online games kicking and screaming from adolescence to adulthood.</p>
<p>Credits: this article was written by Ryan Henson Creighton, assistant schloob.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F11%2F24%2Fwhere-credit-is-due%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F11%2F24%2Fwhere-credit-is-due%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/11/24/where-credit-is-due/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3189&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/11/24/where-credit-is-due/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Jinx 3: Escape from Area Fitty-Two</title>
		<link>http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 06:17:24 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Commissioned]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3281</guid>
		<description><![CDATA[Escape from Area Fitty-Two is the sequel to a pair of great original graphic adventure games on YTV.com (YTV is like the Nickelodeon of Canada). The first two games, A Dark and Stormy Night and Miracle in the 34th Dimension, were featured Hallowe&#8217;en and Christmas games, respectively. They were created by Toronto-area game design phenom [...]]]></description>
			<content:encoded><![CDATA[<div class="invisible"><img src="http://www.untoldentertainment.com/games/jinx3/featured.jpg" alt="Jinx 3: Escape from Area Fitty-Two" /></div>
<div class="invisible"><img src="http://www.untoldentertainment.com/games/jinx3/thumb.jpg" alt="Jinx 3: Escape from Area Fitty-Two" /></div>
<p><!--<div class="pageview">
	
  <iframe src="http://www.ytv.com/gamepad/play/games/Jinx_Episode3_complete/jinx3.swf" frameborder="0" style="" scrolling="no" height="500px" width="700px">Get a better browser!</iframe>
</div>
--><br />
<div class="pageview">
	
  <iframe src="http://www.ytv.com/assets/games/126/jinx3.swf" frameborder="0" style="" scrolling="no" height="500px" width="700px">Get a better browser!</iframe>
</div>
</p>
<p><strong>Escape from Area Fitty-Two</strong> is the sequel to a pair of great original graphic adventure games on <a href="http://www.ytv.com">YTV.com</a> (YTV is like the Nickelodeon of Canada).  The first two games, <a href="http://www.ytv.com/games/165/jinx-episode-1-dark-and-stormy-night.aspx">A Dark and Stormy Night</a> and <a href="http://www.ytv.com/games/169/jinx-episode-2-miracle-in-the-34th-dimension.aspx">Miracle in the 34th Dimension</a>, were featured Hallowe&#8217;en and Christmas games, respectively. They were created by Toronto-area game design phenom Michael Lalonde, whose work you&#8217;ll see in a lot of kids&#8217; games made here in the city.  Michael is also the creator of <a href="http://www.orneryboy.com">Orneryboy</a>, which is a bit like Garfield, if Garfield were a multi-tentacled Lovecraftian demi-god in a zombie-filled world imagined by the love child of Edgar Allen Poe and the creator of the Care Bears. i like to call it &#8220;pop occulture&#8221;. (Content warning: Orneryboy is for older readers. Ask your parents first, kids.)</p>
<p>So working from characters created by Michael, a concept by Michael, and an aesthetic i lifted from Michael&#8217;s first two games, i went for broke and created the biggest Jinx adventure yet. (Michael <em>would</em> be spinning in his grave right now, but despite an occasionally pallid complexion, he&#8217;s very much alive. :)  Audience expectations were very high, and given the nearly ten year release date gap since the second game in the series, we were very worried that the game would never be made.  But last year, YTV pulled through, commissioning the second sequel and making a lot of fans and new players very happy.</p>
<p>Jinx 3 features three playable characters that you can switch between on the fly, a waypoint system for greater freedom of movement, and a bunch more puzzles and cutscenes than you found in the first two games.  i would really like to have added voice-over, because Jinx 3 is pretty text-heavy.  Maybe YTV will commission a Special Edition?</p>
<p>Here&#8217;s a fan-made walkthrough of the first half of the game from teh uTubez, if you want to watch someone else play it:<br />
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/YDWQ9hZYxP8?fs=1&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/YDWQ9hZYxP8?fs=1&amp;hl=en_US" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>Note:</strong> The choppiness in the video is due to the fan&#8217;s screen capture software. The actual game plays smoothly. The writer character&#8217;s disappearing head is due to the YTV site embedding the game at a different aspect ratio, which causes animation glitches.</p>
<h2>Introducing UGAGS</h2>
<p>Jinx 3 was the first game created with UGAGS, the Untold Graphic Adventure Game System, which is a code framework and set of tools we&#8217;re building to help us create these kinds of games more quickly and easily for ourselves and our clients.</p>
<h2>Jinx Fans Only</h2>
<p>Everyone else can stop reading right now, but if you&#8217;re a Jinx/<a href="http://www.ytv.com/sitekick">Sitekick</a>/YTV fan, you may be interested to know how this game ties together the mythology of a lot of the original content on YTV.  Here&#8217;s a list of trivia:</p>
<p><strong>WARNING: Here be spoilers!</strong></p>
<ul>
<li>The game reveals where Dr. Frantic got the red vat of mysterious alien ooze that you see in his lab when you go back in time in the Friday/Sunday chapter of the Sitekick Saga &#8230; he STOLE it from Area Fitty-Two!</li>
<li>The alien ooze comprises the black gelatinous ooze core of the Sitekick, offering a possible explanation as to how Sitekicks gained sentience (note: the current Sitekick redesign doesn&#8217;t allow you to open your robot to see the ooze core any longer, which is a shame)
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_05/ooze.jpg" alt="They Came for the Ooze" /></p>
</div>
</li>
<li>YTV released a casual downloadable game called <a href="http://www.1888freeonlinegames.com/download-sitekick-they-came-for-the-ooze-715.html">They Came for the Ooze</a>.  It was a match-3 game featuring little aliens that look a bit like Sitekick.  The game hinted that the aliens returned to Earth to reclaim their ooze, but it never explained how Dr. Frantic obtained the ooze in the first place.  Now we know!</li>
<li>Dr. Frantic gets the idea for the Sitekick from the design on the wall of the small room inside the hangar. The design was confiscated from the Gnat aliens, which may mean that the Gnat aliens originally designed the Sitekick.</li>
<li>The metal plate on the back of Dr. Frantic&#8217;s head joins a new revelation: when Dr. Frantic walks through the X-Ray, he&#8217;s a robot!
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_12_05/xray.jpg" alt="Dr. Frantic is a robot!" /></p>
<p>Holy crap &#8211; it&#8217;s like the X Files up in here!</p>
</div>
</li>
<li>Michael&#8217;s original concept for the game had Dr. Frantic losing his head, and Jinx had to rewire him to put him back together.  The idea didn&#8217;t make it into this version, but it would be really neat to see it in a sequel.</li>
<li>Michael made a time management <a href="http://www.ytv.com/games/128/sitekick-factory.aspx">Sitekick Factory</a>, where one of Evil Santa&#8217;s E.L.F.s (Evil Loyal Followers) had to build Sitekicks.  At the end of Jinx 3, Dr. Frantic offers the E.L.F. a job, which is a reference to <strong>Sitekick Factory</strong>.</li>
<li>Between Jinx 2 and Jinx 3, Michael created an <a href="http://www.ytv.com/videos/default.aspx?v=EtJn8UvdyfNsMB2yFxXUOyB3yadR0MVq">animated short</a> where a UFO kidnaps Jinx while Jinx is camping.  The UFO was a repurposed asset from Michael&#8217;s quickie game <a href="http://www.ytv.com/games/216/nero-the-hero.aspx">Nero the Hero</a>.  It was reused once more in the hangar in Jinx 3.</li>
<li>At launch time, there was a Sitekick code in the small room inside the hangar. Get it while it&#8217;s still active!</li>
<li><strong>DID U KNOW?</strong> Jinx is never referred to with a gender-specific pronoun, which leaves it up to the player to see Jinx as either a boy or a girl</li>
<li>There&#8217;s nothing under the sheet when Jinx walks through the X-Ray (another of Michael&#8217;s great ideas!)</li>
<li>It&#8217;s tricky to catch, but when the E.L.F. walks through the X-Ray, he has a cupcake in his tummy.  i threw that in there because i know Michael has a thing for cupcakes.</li>
<li>Dr. Frantic gets his hovercar from the hangar, which he uses again in the Sitekick Saga &#8211; Wednesday chapter to battle the rampaging Monster Sitekick.  One early idea was to have the characters all escape in their own hovercars.</li>
<li>The inventory items are consistent and carry over from game to game.</li>
</ul>
<p>YTV.com has a rich creative history packed with some fantastic original content.  It would be great to see Corus, YTV&#8217;s parent company, exploit some of that IP worldwide.  i think it would be a hit!  Meantime, Jinx 3 was a fantastic project to work on &#8211; a real labour of love &#8211; and an itch i&#8217;ve been wanting to scratch for nearly ten years. i think it&#8217;s the funniest game i&#8217;ve ever written. Hope you enjoy it!  (Now go let YTV know you want to see the much-rumoured sequel to <a href="http://www.ytv.com/games/197/freaky-friday.aspx">Freaky Friday</a>! :)
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F10%2F31%2Fjinx-3-escape-from-area-fitty-two%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F10%2F31%2Fjinx-3-escape-from-area-fitty-two%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3281&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/10/31/jinx-3-escape-from-area-fitty-two/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>ZombieGameWorld.com Lurches to Life Just in Time for Hallowe&#8217;en</title>
		<link>http://www.untoldentertainment.com/blog/2010/10/19/zombiegameworld-com-lurches-to-life-just-in-time-for-halloween/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/10/19/zombiegameworld-com-lurches-to-life-just-in-time-for-halloween/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 15:24:33 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[Violence in Gaming]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=3065</guid>
		<description><![CDATA[What do you do when you create a Flash portal filled with word games that fails to catch on? If you&#8217;re a savvy business person, you throw your entire company into a wood chipper and go down in a blaze of glory with a high-class prostitute and a motorbike bought on credit. But when you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>What do you do when you create a <a href="http://www.wordgameworld.com">Flash portal filled with word games</a> that fails to catch on?  If you&#8217;re a savvy business person, you throw your entire company into a wood chipper and go down in a blaze of glory with a high-class prostitute and a motorbike bought on credit.  But when you&#8217;re me, you <em>build another game portal</em>.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_10_19/zombieGameWorldLogo.jpg" alt ="ZombieGameWorld.com logo"></p>
<p>Announcing ZombieGameWorld.com!
</p></div>
<p><a href="http://www.zombiegameworld.com">ZombieGameWorld.com</a> is the newest portal in Untold Entertainment&#8217;s growing Game World Network, a group of sites packed with free-to-play web games catering to niche audiences.  The key difference between ZombieGameWorld.com and WordGameWorld.com is quality: WordGameWorld.com is a curated site, where we hand-pick only the best or most enjoyable word games available online.</p>
<p>But we&#8217;ll throw any old piece of trash on ZombieGameWorld.com.  Our reasoning is that zombie fans historically have a lower quality bar than the rest of us.  With a few notable exceptions, their favourite movies and books are largely low-budget schlocky affairs where concept trumps execution.  An audience accustomed to consuming entertainment that&#8217;s a little rough around the edges may be interested in the more &#8230; <em>strained</em> attempts of amateur game developers trying to cobble together a zombie game.  The Featured section of the site highlights the rare online zombie games that are good-looking and great fun to play.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_10_19/mascot.jpg" alt ="ZombieGameWorld.com mascot"></p>
<p>&#8220;Formerly Earl Peterson&#8221;, the site&#8217;s mascot, tweets news tidbits from the zombie zeitgeist
</p></div>
<p>All new game content is cross-posted to the <a href="http://www.facebook.com/pages/ZombieGameWorldcom/131076633603351?v=app_2373072738&#038;ref=ts#!/pages/ZombieGameWorldcom/131076633603351?v=wall">ZombieGameWorld.com Facebook fan page</a>, as well as the <a href="http://twitter.com/zombiegameworld">ZombieGameWorld Twitter feed</a>.  The Twitter feed adds zombie-related news that gets cross-posted back to the main site.</p>
<p>Future plans for the site include community-based game-on-game elimination battles, badges, and possibly even an online loyalty system.  The current model is advertising rev share through MochiAds and Google Adsense. Our immediate business goal is to earn enough ad revenue to cover hosting &#8211; both ZombieGameWorld.com and WordGameWorld.com are currently operating at a loss.</p>
<p>If you know zombie fans, or you have a GREAT idea for how we can promote the site without spending any money or digging up any corpses, i&#8217;d love to hear from you!  Leave a comment and tell me if you think ZombieGameWorld.com has any potential, or if we&#8217;re just not using our braaaaaains.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F10%2F19%2Fzombiegameworld-com-lurches-to-life-just-in-time-for-halloween%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F10%2F19%2Fzombiegameworld-com-lurches-to-life-just-in-time-for-halloween%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/10/19/zombiegameworld-com-lurches-to-life-just-in-time-for-halloween/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=3065&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/10/19/zombiegameworld-com-lurches-to-life-just-in-time-for-halloween/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Unity 3D Game Development by Example is Now Available for Pre-Order</title>
		<link>http://www.untoldentertainment.com/blog/2010/09/10/unity-3d-game-development-by-example-is-now-available-for-pre-order/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/09/10/unity-3d-game-development-by-example-is-now-available-for-pre-order/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 18:27:44 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[a]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2899</guid>
		<description><![CDATA[Omigosh! i haven&#8217;t been THIS excited since that truck full of (inexplicably) fully-inflated bouncy castles collided with that shipment of Nerf guns on the highway. The first book that i ever paid unskilled labourers from the Philippines to write for me, Unity 3D Game Development by Example, is now available for pre-order on the Pack [...]]]></description>
			<content:encoded><![CDATA[<p>Omigosh!  i haven&#8217;t been THIS excited since that truck full of (inexplicably) fully-inflated bouncy castles collided with that shipment of Nerf guns on the highway.  The first book that i ever paid unskilled labourers from the Philippines to write for me, <b><a href="https://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book">Unity 3D Game Development by Example</a></b>, is now available for pre-order on the Pack Publishing website!</p>
<div class="displayed">
<p><a href="http://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book/mid/2709105s93kf?utm_source=untoldentertainment.com&#038;utm_medium=affiliate&#038;utm_content=authorsite&#038;utm_campaign=mdb_004881"><img src="http://www.untoldentertainment.com/blog/img/2010_09_10/unity3DByExample.jpg"></a></p>
<p><a href="http://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book/mid/2709105s93kf?utm_source=untoldentertainment.com&#038;utm_medium=affiliate&#038;utm_content=authorsite&#038;utm_campaign=mdb_004881">Pre-order your copy today!</a>
</div>
<p>Of course, the cover is still a work in progress.  i&#8217;ve made a few suggestions to the publisher of what i&#8217;d like to see.  For example, here&#8217;s a mock-up of the cover with a cat singing karaoke:</p>
<div class="displayed">
<p><a href="http://www.packtpub.com/unity-3d-game-development-by-example-beginners-guide/book/mid/2709105s93kf?utm_source=untoldentertainment.com&#038;utm_medium=affiliate&#038;utm_content=authorsite&#038;utm_campaign=mdb_004881"><img src="http://www.untoldentertainment.com/blog/img/2010_09_10/unity3DByExampleKaraokeCat.jpg"></a></p>
<p>Nice job, Karaoke Cat, but it was a bit pitchy towards the end.
</p></div>
<div class="mc_error_msg">
			There was a problem loading your MailChimp details. Please re-run the setup process under Settings-&gt;MailChimp Setup		</div>
<p>i&#8217;ve written a FAQ for the book.  At last, all your burning questions will be answered:</p>
<h2>What is Unity 3D?</h2>
<p>Unity 3D is a game engine that&#8217;s been around for only a few years, but is rapidly gaining steam.  It&#8217;s a tool that enables you to create your own 3D (or, with effort, 2D) games.  You can deploy your games to the browser.  That&#8217;s right: after a quick ~3MB plugin download, people can play your full 3D game <em>right inside the browser</em>, without having to download and install an .exe.  If you want people to visit your portfolio site and play your games instantly, Unity 3D is the tool for you.</p>
<h2>Can I Only Deploy to the Web?</h2>
<p>No &#8211; the main Unity engine allows you to create standalone game files that will run on PC and Mac.  If you purchase additional licenses, you can target the iPhone/iPod/iPad and WiiWare. Upcoming support has been announced for Android and Xbox Live Arcade (but keep in mind that you&#8217;ll still have to be a developer in good standing with Nintendo or Microsoft to develop for their consoles &#8211; it&#8217;s not a path you&#8217;ll likely take if you&#8217;re a hobbyist.)</p>
<h2>How Much Does Unity Cost?</h2>
<p>There are two versions of the core engine.  Unity is free, while Unity Pro costs.  Unity lacks a few features of Unity Pro, most notably real-time shadows and video playback support. (note: this lack of features is definitely not something that would get a beginner in much of a twist.)  Games created with Unity are prefaced with a Unity-branded splash screen.  You can check out a <a href="http://unity3d.com/unity/licenses">Unity license comparison grid here</a>. </p>
<p>Beyond those restrictions, you&#8217;re free to make as many games as you like with the free version of Unity without paying a single cent to the engine authors.  This is in contrast to UDK (Unreal Development Kit), Unity&#8217;s main competitor, which starts clawing back cash at (comparitively) alarming rates if you sell a certain number of copies. </p>
<h2>I like Flash. Will I Like Unity?</h2>
<p>Oh, yes!  There are many similarities between the two programs.  The biggest difference is that Flash is a <em>content creation tool</em> that people manhandle to the point where you can make games with it, while Unity 3D is a dedicated <em>game engine</em>. That means that it includes a lot of game systems right out of the box: physics, collision detection, 3D rendering and particle systems, to name a few.</p>
<p>Check out our <a href="http://www.untoldentertainment.com/blog/2009/09/25/five-common-as3-to-unityscript-translations/">Five Common AS3 to UnityScript Translations</a> article in our <a href="http://www.untoldentertainment.com/blog/unity-nuub/">Unity Nuub</a> section.</p>
<h2>What&#8217;s in the Book?</h2>
<p>Unity 3D Game Development by Example contains lessons, code and art assets to build four very simple games in the engine: a keep-up game, a catch game, a memory game and a space shooter. These lessons are written in very plain language with lots of analogies and plenty of pictures, so that readers who have never coded or used a game engine in their lives will be able to get these projects off the ground.  Certain elements, like the three countdown clocks in Chapter 7, are presented as standalone pieces that you can integrate into your games as you like.  The book teaches you how to build standard game bits &#8211; title screens, buttons, timers, collision scripts, sound effects triggers, and endgame scenarios &#8211; that you can remix into your own projects.</p>
<h2>Is This Book Appropriate to Use as a Text Book for my College or High School Game Design Program?</h2>
<p>Absolutely. Please contact Packt Publishing for volume sales.</p>
<h2>Is It Available As an e-Book?</h2>
<p>Yes.</p>
<h2>I Enjoy Murdering Trees.  Is It Available as a Book Book?</h2>
<p>Yes.</p>
<h2>What Language is the Book Written In?</h2>
<p>English, currently.  All code examples are in javascript.  Unity supports three different languages: javascript, C# and BOO. i chose javascript for the book because most of the online examples and tutorials i&#8217;ve come across are in javascript. It&#8217;s probably the best choice for a beginner. </p>
<h2>What&#8217;s the Difference Between This Book and Unity Game Development Essentials by Will Goldstone?</h2>
<p>Will&#8217;s also written a great beginner book &#8211; the <a href="https://www.packtpub.com/unity-game-development-essentials/book">first Unity 3D book on the market</a> &#8211; that you should definitely check out.  Will&#8217;s book contains one large open-world project with a number of smaller activities inside of it.  My feeling was that open-world games open a whole can of worms that could potentially overwhelm someone new to Unity (what happens when you walk out into the water?  What if you get stuck inside a volcano?). My focus was on keeping things simple and manageable, so that you can start with a very controlled and fully-functional project, and ramp up from there as your skills increase.  </p>
<h2>What&#8217;s the Difference Between This Book and an Riding Down an Exhilharating Waterslide on the Back of a Unicorn?</h2>
<p>Not much. </p>
<h2>Preface and Chapter Listing</h2>
<p>By request, here is an excerpt from the book&#8217;s Preface:</p>
<blockquote><p>
&#8220;Game Developer&#8221; has rapidly replaced &#8220;firetruck&#8221; as the number one thing that kids want to be when they grow up. Gone are the days when aspiring developers needed a university education, a stack of punch cards, and a room-sized computer to program a simple game. With digital distribution and the availability of inexpensive (or free) games development tools like Unity 3D, the democratization of game development is well underway.</p>
<p>But, just as becoming a firetruck is fraught with perils, so too is game development. Too often, aspiring developers underestimate the sheer enormity of the multidisciplinary task ahead of them. They bite off far more than they can chew, and eventually drift away from their game development dreams to become lawyers or dental hygienists. It&#8217;s tragic. This book bridges the gap between &#8220;I wanna make games!&#8221; and &#8220;I just made a bunch of games!&#8221; by focusing on small, simple projects that you can complete before you reach the bottom of a bag of corn chips.</p>
<p><b>What this book covers</b></p>
<p><em>Chapter 1, That&#8217;s One Fancy Hammer!</em>, introduces you to Unity 3D—an amazing game engine that enables you to create games and deploy them to a number of different devices, including (at the time of writing) the Web, PCs, iOS platforms, and WiiWare, with modules for Android and Xbox Live Arcade deployment in the works. You&#8217;ll play a number of browser-based Unity 3D games to get a sense of what the engine can handle, from a massively-multiplayer online game all the way down to a simple kart racer. You&#8217;ll download and install your own copy of Unity 3D, and mess around with the beautiful Island Demo that ships with the product.</p>
<p><em>Chapter 2, Let&#8217;s Start with the Sky</em>, explores the difference between a game&#8217;s skin and its mechanic. Using examples from video game history, including Worms, Mario Tennis, and Scorched Earth, we&#8217;ll uncover the small, singular piece of joy upon which more complicated and impressive games are based. By concentrating on the building blocks of video games, we&#8217;ll learn how to distil an unwieldy behemoth of a game concept down to a manageable starter project.</p>
<p><em>Chapter 3, Ticker Taker</em>, puts you in the pilot seat of your first Unity 3D game project. We&#8217;ll explore the Unity environment and learn how to create and place primitives, add Components like physic materials and rigidbodies, and make a ball bounce on a paddle using Unity&#8217;s built-in physics engine without ever breaking a sweat.</p>
<p><em>Chapter 4, Code Comfort</em>, continues the keep-up game project by gently introducing scripting. Just by writing a few simple, thoroughly-explained lines of code, you can make the paddle follow the mouse around the screen to add some interactivity to the game. This chapter includes a crash course in game scripting that will renew your excitement for programming where high school computer classes may have failed you.</p>
<p><em>Chapter 5, Game#2: Robot Repair</em>, introduces an often-overlooked aspect of game development: &#8220;front-of-house&#8221; User Interface design—the buttons, logos, screens, dials, bars, and sliders that sit in front of your game—is a complete discipline unto itself. Unity 3D includes a very meaty Graphical User Interface system that allows you to create controls and fiddly bits to usher your players through your game. We&#8217;ll explore this system, and start building a complete two-dimensional game with it! By the end of this chapter, you&#8217;ll be halfway to completing Robot Repair, a colorful matching game with a twist.</p>
<p><em>Chapter 6, Game#2: Robot Repair Part 2</em>, picks up where the last chapter left off. We&#8217;ll add interactivity to our GUI-based game, and add important tools to our game development tool belt, including drawing random numbers and limiting player control. When you&#8217;re finished with this chapter, you&#8217;ll have a completely playable game using only the Unity GUI system, and you&#8217;ll have enough initial knowledge to explore the system yourself to create new control schemes for your games.</p>
<p><em>Chapter 7, Don&#8217;t be a Clock Blocker</em>, is a standalone chapter that shows you how to build three different game clocks: a number-based clock, a depleting bar clock, and a cool pie wedge clock, all of which use the same underlying code. You can then add one of these clocks to any of the game projects in this book, or reuse the code in a game of your own.</p>
<p><em>Chapter 8, Ticker Taker</em>, revisits the keep-up game from earlier chapters and replaces the simple primitives with 3D models. You&#8217;ll learn how to create materials and apply them to models that you import from external art packages. You&#8217;ll also learn how to detect collisions between Game Objects, and how to print score results to the screen. By the end of this chapter, you&#8217;ll be well on your way to building Ticker Taker—a game where you bounce a still-beating human heart on a hospital dinner tray in a mad dash for the transplant ward!</p>
<p><em>Chapter 9, Game#3: The Break-Up</em> is a wild ride through Unity&#8217;s built-in particle system that enables you to create effects like smoke, fire, water, explosions, and magic. We&#8217;ll learn how to add sparks and explosions to a 3D bomb model, and how to use scripting to play and stop animations on a 3D character. You&#8217;ll need to know this stuff to complete The Break-Up—a catch game that has you grabbing falling beer steins and dodging explosives tossed out the window by your jilted girlfriend.</p>
<p><em>Chapter 10, Game#3: The Break-Up Part 2</em>, completes The Break-Up game from the previous chapter. You&#8217;ll learn how to reuse scripts on multiple different Game Objects, and how to build Prefabs, which enable you to modify a whole army of objects with a single click. You&#8217;ll also learn to add sound effects to your games for a much more engaging experience.</p>
<p><em>Chapter 11, Game #4: Shoot the Moon</em>, fulfills the promise of Chapter 2 by taking you through a re-skin exercise on The Break-Up. By swapping out a few models, changing the background, and adding a shooting mechanic, you&#8217;ll turn a game about catching beer steins on terra firma into an action-packed space shooter! In this chapter, you&#8217;ll learn how to set up a two-camera composite shot, how to use code to animate Game Objects, and how to re-jig your code to save time and effort.</p>
<p><em>Chapter 12, Action</em>, takes you triumphantly back to Ticker Taker for the coup de grace: a bouncing camera rig built with Unity&#8217;s built-in animation system that flies through a model of a hospital interior. By using the two-camera composite from The Break-Up, you&#8217;ll create the illusion that the player is actually running through the hospital bouncing a heart on a tin tray. The chapter ends with a refresher on bundling your project and deploying it to the Web so that your millions of adoring fans can finally experience your masterpiece.</p>
<p><b>What you need for this book</b></p>
<p>You&#8217;ll need to be in possession of a sturdy hat, a desk chair equipped with a seatbelt, and an array of delicious snack foods that won&#8217;t get these pages all cheesy (if you&#8217;re reading the e-book version, you&#8217;re all set). Early chapters walk you through downloading and installing Unity 3D (h<a href="ttp://unity3d.com/unity/download/">ttp://unity3d.com/unity/download/</a>). A list of resources and links to additional software can be found in the appendix.</p>
<p><b>Who this book is for</b></p>
<p>If you&#8217;ve ever wanted to develop games, but have never felt &#8220;smart&#8221; enough to deal with complex programming, this book is for you. It&#8217;s also a great kickstart for developers coming from other tools like Flash, Unreal Engine, and Game Maker Pro.
</p></blockquote>
<h2>What&#8217;s Next?</h2>
<p>Got any more questions?  Drop me a line in the comments section and i&#8217;ll answer them here.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F09%2F10%2Funity-3d-game-development-by-example-is-now-available-for-pre-order%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F09%2F10%2Funity-3d-game-development-by-example-is-now-available-for-pre-order%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/09/10/unity-3d-game-development-by-example-is-now-available-for-pre-order/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2899&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/09/10/unity-3d-game-development-by-example-is-now-available-for-pre-order/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Toronto Fan Expo 2010: State of the Toronto Game Industry Panel</title>
		<link>http://www.untoldentertainment.com/blog/2010/08/30/toronto-fan-expo-2010-state-of-the-toronto-game-industry-panel/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/08/30/toronto-fan-expo-2010-state-of-the-toronto-game-industry-panel/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 12:55:52 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Canadian Media News]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Toronto]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2840</guid>
		<description><![CDATA[i felt really honoured to be invited to speak on a panel at the Toronto Fan Expo this weekend alongside a number of other local industry pros. i couldn&#8217;t attend the event as a non-cosplayer, so my wife Cheryl whipped up a little something to satisfy my desperate desire for attention, and my business need [...]]]></description>
			<content:encoded><![CDATA[<p>i felt really honoured to be invited to speak on a panel at the Toronto Fan Expo this weekend alongside a number  of other local industry pros.  i couldn&#8217;t attend the event as a <a href="http://www.untoldentertainment.com/blog/2010/08/28/toronto-fan-expo-2010-non-cosplayers-gallery/">non-cosplayer</a>, so my wife Cheryl whipped up a little something to satisfy my desperate desire for attention, and my business need to extend the Untold Entertainment brand in ridiculous ways:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/ryanHensonCreighton.jpg" alt="Ryan Creighton's red monster hat"></p>
</div>
<p>The panel was moderated by Jason MacIsaac of Electric Playground fame, late himself of a small Ontario game studio from the Niagara region called Cerebral Vortex Games.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/panel.jpg" alt="Fan Expo State of the Game Industry Panel"></p>
</div>
<p>My fellow guests on the panel were (from right):</p>
<ul>
<li>Ian Kelso, head of <a href="http://interactiveontario.com/">interactiveontario</a>
<li>Leslie Phord-Toy, a producer at <a href="http://en.wikipedia.org/wiki/Horsez">UbiSoft&#8217;s</a> new Toronto Studio
<li>Ryan MacLean, formerly of Pseudo Interactive and a founder of <a href="http://www.drinkboxstudios.com/main/news.php">Drinkbox Studios</a> (also both the second Mac and the second Ryan on the panel)
<li>Philippe McNally, from <a href="http://www.longbowgames.com/">Longbow Digital Arts</a>, who recently released their PC RTS Hegemony: Philip of Macedon
</ul>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/line.jpg" alt="Fan Expo Line-up"></p>
</div>
<p>i was thrilled to see that the line-up for the talk was substantial. A Fan Expo staff member asked us if we were okay with people sitting on the floor when we ran out of seats. Of course, Ubi Soft was the big draw, as many of the audience members wanted to know how to get a job there working on their favourite triple-A console franchises. i made a point to mention that UbiSoft also developed the Nintendo DS Babiez/Petz/Horsez games, as well as a number of cash-in movie licenses that have failed to pull in the same acclaim as their more well-known blockbusters.</p>
<p>i&#8217;m doing my best to end this (apparently prevalent) notion that working in the video game industry is the ultimate fulfillment of this masturbatory <em>Tom Hanks in BIG</em> fantasy everyone has.  Bills gotta get paid, and you may be asked to (gasp!) work on something you don&#8217;t like, such as a (shock!) video-heavy bank website instructing visitors on the various retirement products available to them (as we did last year).</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/ian.jpg" alt="Ian Kelso"></p>
<p>Most people were delighted to see Ian, who they mistakenly thought was cosplaying as either Lex Luthor, Professor Xavier, Kratos, Captain Jean-Luc Picard, John Locke from LOST, or as a member of the Blue Man Group after a bath.
</p></div>
<h2>Half-Remembered Q &#038; A</h2>
<p>i admit, i&#8217;m having a hard time remembering what went on at the panel.  There was a girl in the second row wearing an incredibly distracting Slave Leia costume, so i think most of what i had to say was along the lines of &#8220;hummina hummina hummina.&#8221;  (Slave Leia costumes don&#8217;t usually do it for me, but this one was worth strangling your hutt over.)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/slaveLeia.jpg" alt="Toronto Fan Expo 2010 Slave Leia"></p>
<p>Alternate Star Wars masturbation euphemism: HAND SOLO.
</p></div>
<p>So the pro reporters will definitely cover the panel better, but here are a few questions and answers that i <em>can</em> recall:</p>
<p><b>Q:</b>Why develop games in Toronto?<br />
<b>A:</b>Lesley&#8217;s answer was no secret &#8211; Ubi was attracted by the tax credits and government funding.  Ian hinted that interactiveontario and the government are trying to secure at least one more &#8220;whale&#8221; to move into the province.  For the three small developers, the answer was &#8220;intertia&#8221;.  Our families are here, we live here, and for folks like me who have young kids and ties to grandparents, it&#8217;s very difficult to seek our fortunes elsewhere.  Ian added that the work they&#8217;re doing to attract big companies helps heal the brain drain; if Lesley were to leave UbiSoft (for example), he wants enough studio muscle here to retain top talent in the province.</p>
<p><b>Q:</b>Does your choice of school make you more or less employable?<br />
<b>A:</b>Ryan M seemed to be more impressed by educational pedigree, saying that it was not the only thing he looks for, but that it is an indicator of a qualified applicant.  The only &#8220;good&#8221; Ontario schools mentioned were Waterloo, Sheridan, and University of Toronto.  There are many, many schools that aren&#8217;t on that short top-of-mind list, including yours. Reflect on that.</p>
<p>i took a few digs at the International Academy of Design and Technology, saying that nearly everyone i&#8217;ve known from that school &#8211; both students <em>and</em> faculty &#8211; bad-mouthed the place (and forgetting that the moderator had been an instructor there &#8211; oops).  Despite the school&#8217;s rock-bottom reputation, i&#8217;ve hired two programmers in my stint as a studio owner, and they&#8217;ve both been IADT grads.  For me, individual excellence beats a school&#8217;s bad rep.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/fire-eater.jpg" alt="flaming torch juggler"></p>
<p>i&#8217;m not bothered that this guy is an IADT grad. The moment we need a flaming torch juggler, he&#8217;s hired.
</p></div>
<p><b>Q:</b> Why aren&#8217;t more studios embedding themselves in schools to cherry-pick the best talent?<br />
<b>A:</b>(no one really weighed in on this, but i gave it a shot at a local community college this year with <a href="http://www.untoldentertainment.com/blog/2010/02/18/whats-wrong-with-ontario-colleges-part-1/">disastrous</a> <a href="http://www.untoldentertainment.com/blog/2010/02/23/whats-wrong-with-ontario-colleges-part-2/">results</a>)</p>
<p><b>Q:</b>How do you get a job in the industry?<br />
<b>A:</b>The panel agreed that portfolios were really important.  Ryan M said that demonstrated capability trumps a fancy CV.  Philippe liked to see evidence of problem-solving ability.  i said i&#8217;d much prefer a candidate with a portfolio of a few finished games he&#8217;d created himself, rather than a student project he completed with a number of classmates.</p>
<p><b>Q:</b>Why don&#8217;t more companies take interns?<br />
<b>A:</b>The three indies &#8211; Philippe, Ryan M and myself &#8211; said that interns were a risky proposition for small studios, due to the resources they demand. Leslie said that Ubi takes interns (theirs was in the front row taking pictures), but that the intern would have to have something valuable to commit to the organization.</p>
<p>One thing i didn&#8217;t get a chance to say was that people should be very wary of schools that offer internships.  Picture it: you&#8217;re a college program head, and your school has guaranteed this placement program.  You&#8217;ve got a few great students, a handful of middling ones, and two or three absolute morons who have barely managed to squeak by.  Do you really want your school&#8217;s reputation stymied by those guys?  Do you really want to risk damaging your relationship with industry by sending them out on a placement?  No, you don&#8217;t.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/moron.jpg" alt="duh"></p>
<p>Uh &#8230; hello, UbiSoft? We have a student who&#8217;d like to complete his placement in your shop.
</p></div>
<p>Add to that the fact that there are very few shops in town, compared with the number of schools cranking out game-trained grads (Humber, Waterloo, George Brown, Durham, U of T, UOIT, Ryerson, Trios, Sheridan, Seneca, York, and Max the Mutt off the top of my head).  Some schools churn grads as often as every six months. There&#8217;s a clear internship supply-and-demand problem here.</p>
<p>That&#8217;s why in my personal experience (and from what i&#8217;ve heard anecdotally from others), when you enroll at a school that promises a great placement program, they&#8217;re lying.  It&#8217;s often a marketing ploy to get you in the door.  You&#8217;ll certainly have to complete a placement to earn class marks, but you&#8217;ll have to hunt down the placement yourself.  When i was a student at Seneca College here in Ontario, the school had two or three placements in industry for their favourite sons, and the rest of us scrambled.  One girl got a job at her uncle&#8217;s trucking plant.  i found an internship on my own at the Durham Board of Education, working in the computer lab with students in junior kindergarten.  This was the final program requirement for 3D computer art and animation students.</p>
<p>The type of school you really want to attend is one that has high entrance standards, and that fails students early and often.  There are very few that do this, but i heard an apocryphal tale that Sheriden will refuse to graduate a 4th-year student with a weak portfolio/art thesis presentation.  (Note that Sheridan was on the panel&#8217;s very short list of prestigious schools.)</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/panel2.jpg" alt="Fan Expo State of the Video Game Industry panel"></p>
<p>Ryan M covers his mouth in horror as Ryan C tells Lesley a particularly upsetting fart joke.
</p></div>
<p><b>Q:</b>How do you choose the right school?<br />
<b>A:</b>Most of the panelists were too political to answer frankly.  i don&#8217;t toe the same line, because i feel that many of the schools in this province &#8211; particularly the community colleges &#8211; are doing the industry and their customers a great disservice, and should be held accountable.  i warned against schools with very new programs (which is most of them), because they often work out the kinks at the expense of their initial student intakes.  i also took issue with schools whose teachers have very tenuous connections to industry.  i was speaking to a colleague of mine not long ago, who suggested that every two years, the colleges should kick their instructors back out into industry to ensure they&#8217;re keeping their skills up to date.</p>
<p>Ian mentioned that organizations like io in other countries have partnered with (bullied?) schools into an arrangement where the trade association has to approve its course offering in order for the school to earn a passing grade from industry. As a prospective student, you just look up which schools the association recommends, and apply there.  i like that idea, but i worry it&#8217;s prone to abuse in the name of politics and playing nice.</p>
<h2>Party On and Be Excellent to Each Other</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_30/billTed.jpg" alt="Bill &#038; Ted"></p>
</div>
<p>If there was one main takeaway from the conversation, it was to focus on personal excellence.  The very best stand out, while everyone else falls to the wayside, as in all things.  You wanna make games?  Then the barrier to entry is so low, as Jason said and as Ian reminded us, that you <em>should already be making games</em>.  Don&#8217;t wait on UbiSoft or some small indie shop to give you your big break.  There&#8217;s a golden opportunity for you right here, right now that didn&#8217;t exist when the rest of us were getting our start.</p>
<p>The panelists spoke about a number of groups, technologies and resources.  Here&#8217;s a non-exhaustive list:</p>
<p><b>Groups</b></p>
<ul>
<li><a href="http://handeyesociety.com/">Hand Eye Society</a> Where Toronto&#8217;s indie developers meet.
<li><a href="http://www.igda.org/toronto">IGDA Toronto Chapter</a> This group places more emphasis on professional development than the HES.
<li><a href="http://nomediakings.org/artsygames/">Artsy Games Incubator</a> Artists who want to make games, but have no programming ability, get together to &#8230; make games!  Closely tied to Jim Munroe&#8217;s efforts at the HES.
<li><a href="http://www.tojam.ca/home/default.asp">TOJam</a> The Toronto Indie Game Jam, an annual event where the city&#8217;s pros and hopefuls get together over one weekend to make games. A fantastic event.
<li><a href="http://www.flashinto.com/">FlashInTO</a> The Toronto Flash user group.
</ul>
<p><b>Technologies</b></p>
<ul>
<li><a href="http://unity3d.com/">Unity 3D</a> Create 3D video games in the browser, with a (comparatively) low learning curve.
<li><a href="http://www.adobe.com/products/flash/">Adobe Flash</a> A relatively inexpensive program for creating 2D and quasi-3D browser games.  Lots of books and tutorials &#8211; join our ranks of over two million developers!
<li><a href="http://www.yoyogames.com/gamemaker/">Game Maker</a> A free game creation tool, and the favourite of many indies.
<li><a href="http://scratch.mit.edu/">Scratch</a> An easy-to-grasp game creation tool from MIT
<li><a href="http://www.udk.com/">UDK</a> The consumer version of the Unreal Engine.  i don&#8217;t recommend this one because of its eventual high cost (despite an initially free download)
</ul>
<p><b>Resources</b></p>
<ul>
<li><b>Unity by Example</b>, a book written by me that is coming out very shortly.  It&#8217;s a great resource for new game developers that teaches you how to make small, simple games, and how to approach your game dev career so that you don&#8217;t give up on it. Send an email to info [the at symbol] untoldentertainment.com and i&#8217;ll send you a note once it&#8217;s available.
<li><a href="http://en.mochimedia.com/">MochiMedia</a>, <a href="http://www.kongregate.com/">Kongregate</a>, <a href="http://www.flashgamelicense.com/">FlashGameLicense</a>, <a href="http://www.heyzap.com/">HeyZap</a> Four places (of MANY) to distribute and monetize games you create with Flash.
<li><a href="http://www.wooglie.com/">Wooglie</a> A unity game portal.
<li><a href="http://www.tigsource.com/">TIGSource</a> The de facto site for indies.
<li><a href="http://www.untoldentertainment.com/blog/feature-articles/pimp-my-game/">Pimp My Game</a> Our own series on making money (or not) with Flash games. Includes tons of sites that spill the beans about the financials on their games.
</ul>
<p>Were you at the panel?  Do you have anything to add?  Was there anything you wanted to ask that you didn&#8217;t get a chance to ask?  Leave me a comment and we&#8217;ll have a great discussion. </p>
<p>Thanks to <a href="http://dendritejungle.livejournal.com/">dendritejungle</a> and <a href="http://jason.con.ca">Jason MacIsaac</a> for the pics!</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F08%2F30%2Ftoronto-fan-expo-2010-state-of-the-toronto-game-industry-panel%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F08%2F30%2Ftoronto-fan-expo-2010-state-of-the-toronto-game-industry-panel%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/08/30/toronto-fan-expo-2010-state-of-the-toronto-game-industry-panel/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2840&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/08/30/toronto-fan-expo-2010-state-of-the-toronto-game-industry-panel/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Introduction to A* (A-Star) Pathfinding in ActionScript 3 (AS3)</title>
		<link>http://www.untoldentertainment.com/blog/2010/08/20/introduction-to-a-a-star-pathfinding-in-actionscript-3-as3-2/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/08/20/introduction-to-a-a-star-pathfinding-in-actionscript-3-as3-2/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:37:48 +0000</pubDate>
		<dc:creator>Phil Chertok</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2780</guid>
		<description><![CDATA[Introduction For Spellirium we had to develop a system that could determine the most efficient path between a series of nodes on a point. After some diligent research and careful consideration it became clear that the A* search algorithm was the way to go. Now, I was familiar with the basics behind A* but had [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>For <a href="http://www.untoldentertainment.com/blog/spellirium-designer-diary/">Spellirium</a> we had to develop a system that could determine the most efficient path between  a series of nodes on a point.  After some diligent research and careful consideration it became clear that the A* search algorithm was the way to go.</p>
<p>Now, I was familiar with the basics behind A* but had never actually implemented it.  Thankfully though I had a copy of Keith Peter’s <a href="http://www.amazon.com/AdvancED-ActionScript-Animation-Keith-Peters/dp/1430216085/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1280088548&amp;sr=8-1">Advanced ActionScript 3.0 Animation</a> which has a very nice chapter all about path finding and A*.</p>
<div class="displayed">
<p><a href="http://www.amazon.com/AdvancED-ActionScript-Animation-Keith-Peters/dp/1430216085/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1281753769&amp;sr=8-1"><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/book.jpg" alt="Advanced Actionscript 3.0 Animation" /></a></p>
<p>Why read this post?  Just buy the book instead. ;)</p>
</div>
<p>Before we begin, some prerequisite knowledge is required.  In order to follow along with this you should have a knowledge of AS3 Classes and Interfaces. It is certainly possible to implement A* without knowledge of these concepts but in order to build a flexible, reusable solution, we will be using both. Check out our <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Understanding Classes in AS3</a> tutorials if you need help getting up to speed.</p>
<h2>What is A* path finding?</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/dofus.jpg" alt="Dofus Arena" /></p>
</div>
<p>According to the ever-so-useful <a href="http://en.wikipedia.org/wiki/A*_search_algorithm">Wikipedia</a>,  A* path finding can be described as:</p>
<blockquote><p>(A) computer algorithm that (finds an) efficiently traversable path between points,  called nodes…. A* uses a best-first search and finds the least-cost path from a given initial node to one goal node (out of one or more possible goals).</p></blockquote>
<p>Sounds nice, but what does this mean? It means that A* chooses a node (or tile in a tile based world) searches through all the directly connected nodes and calculates a cost to travel to all of them.  It then selects the node that has the lowest cost and uses it as the starting node for the next phase of the search.  A* continues to do this until it reaches the destination.</p>
<p>To implement the algorithm it is first important to understand a few concepts:</p>
<ul>
<li><strong>Node:</strong> This is a point along a path.  In a tile-based environment you can think of it as a tile.  The reason why we don’t call it a tile is because it can be used for non-tile based worlds.   You will provide A* with a starting node and ending node.  A* will then calculate all the nodes to get from the start to the end.</li>
<li><strong>Parent Node:</strong> When a node is tested in the algorithm all of its directly connected nodes (nodes that are traversable in a single step) are assigned that node as their parent.  By doing so,  we can easily work backwards through all of the parent nodes to create our path after we reach the destination node.</li>
<li><strong>Cost:</strong> Cost is assigned to each node based on two factors.  Nodes with a lower cost are used over nodes with a higher cost.  The two parts that make up the cost are: the cost to get to that node from the starting node and the estimated cost to get from that node to the end node.  The cost of a node is usually expressed via 3 variables f, g and h.</li>
<li><strong>g:</strong> This is the cost to get to this node via the starting node.  We know this value exactly because we can follow the parent nodes all the way to the start and add up their costs.</li>
<li><strong>h:</strong> This is the cost to get from this node to the final node.  This value is estimated.  It is not exact because we don’t know the path that we will take to get to the final node.  Therefore we must estimate the cost and we do so using a function called a heuristic.</li>
<li><strong>f:</strong> This is the total cost of the specific node – it is calculated by adding g + h.</li>
<li><strong>Heuristic:</strong> This is the function that estimates the cost of getting from a particular node to the end node.  The beauty of A* is that it supports a variety of heuristics, therefore you can try out different ones until you get the result you are looking for.  Heuristic functions can differ based on their speed, efficiency and a variety of other criteria.</li>
<li><strong>Open list:</strong> This is a list of all the nodes that have been visited (in an iteration of the search) and have been assigned a cost.  The node that has the lowest cost will be used to perform the next iteration of the search.</li>
<li><strong>Closed list:</strong> This is the list of nodes whose neighbors have been visited.</li>
</ul>
<h2>The Algorithm</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/algorithm.jpg" alt="Algorithm" /></p>
</div>
<p>Now that is out of the way we can move on to the actual algorithm.  Before we actually begin coding, let&#8217;s just take a look at how A* actually works.</p>
<ol>
<li>Provide a starting node and an destination node</li>
<li>Add the starting node to our open list (which should have been empty)</li>
<li>Start our search loop:
<ul>
<li>a. Pick the node currently in the open list with the lowest cost – we will call this node the current node.  When we first run the loop this will obviously be our starting node.</li>
<li>b. If the current node is the same as the destination  then we are done  and we can move on to step 5.</li>
<li>c. Check every directly connected node. In a tile based world this would be up to 8 tiles.  For our implementation we will provide a function that determines all the connected nodes.  For each node that is connected:
<ul>
<li>i. If the node is not traversable (you can’t move to it because it Is occupied or for some other reason) or the node is already in the open list or in the closed list we can skip and move on to the next node in the list of connected nodes. Otherwise continue to ii.</li>
<li>ii. Calculate the cost of that node.</li>
<li>iii. Set the current node as the parentNode.</li>
<li>iv. Add the node to the open list.</li>
</ul>
</li>
<li>d. Add the current node to the closed list.</li>
</ul>
</li>
<li>Now return to step 3 (loop again) with the newly updated open list. (The loop should keep running until it hits the destination node)</li>
<li>We have found the destination node (hurrah!) Now we create a list of nodes that will be our path list and we will add the destination node to that list.</li>
<li>Add the parent node of the destination node to the path list.</li>
<li>Add the parent of the previous node to the path list, we will continue to do this until we have added our starting node.</li>
</ol>
<p>We should now have a list of all the nodes that make up the best path from our starting node to our destination node.</p>
<h2>The Implementation</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/sleeves.jpg" alt="Roll up your sleeves" /></p>
</div>
<p>Now that our theory is out of the way, let’s start writing some code.  First we will start with our Node class.  For this  I will actually create an interface for your node:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">interface</span> INode
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> f<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> g<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> h<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> x<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> y<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> <span style="color: #0066CC;">parentNode</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:INode;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> traversable<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> f<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> g<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> h<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">parentNode</span><span style="color: #66cc66;">&#40;</span>value:INode<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;
	<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> traversable<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>This is a pretty straight-forward interface.  It includes the variables for all the properties we discussed above (f,g,h and parentNode ).  The other variables are fairly self-explanatory.  X and Y obviously indicate the position of the node. We will use these values in our heuristic to estimate the cost of traveling from the node to the destination.  The traversable variable is a simple Boolean that indicates if the node can be used in our path finding.  If it is not then the algorithm will simply skip it when it is encountered.  This is useful in a world where a node might be occupied by a prop (say a rock, tree or wall) or if there is another player/character occupying that space and you don’t want to support multiple characters on a single node.  Implementing this in a class should be very easy.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/pathfinder.jpg" alt="Nissan Pathfinder" /></p>
</div>
<p>Now we will build a class called Pathfinder.  We will create the class only using static methods.  Hopefully this will make it very flexible.  It will not take much to turn this into a standard class but for our purposes static methods will do very well.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Pathfinder
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> heuristic:<span style="color: #000000; font-weight: bold;">Function</span> = Pathfinder.<span style="color: #006600;">diagonalHeuristic</span>;</pre></div></div>

<p>Here, we define the heuristic function we will use to estimate the cost of traveling from a node to the end.  In this example we will use the diagonal heuristic.  At the end of this article, we will discuss some other heuristics and how to implement them.</p>
<p>Let’s move on to our actual path finding function:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> findPath<span style="color: #66cc66;">&#40;</span>firstNode:INode, destinationNode:INode, connectedNodeFunction:<span style="color: #000000; font-weight: bold;">Function</span> <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Array</span> 	<span style="color: #66cc66;">&#123;</span></pre></div></div>

<p>Let’s examine the parameters:</p>
<ul>
<li>firstNode: INode – this is the first node in our path</li>
<li>destinationNode: INode – The is the node that we are going to be traveling to</li>
<li>connectedNodeFunction:Function – This is a function that will return an array of nodes that are connected to a given node.</li>
</ul>
<p>Since each implementation might be different we abstract it out this way.  After we write our class I will use a tile- based example to illustrate how this works, but your method might be different.</p>
<p>Lastly, the function returns an Array. This will contain all the nodes along the path.</p>
<h2>Variable Setup</h2>
<p>So now that is out of the way let’s do some initial work:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> openNodes:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
<span style="color: #000000; font-weight: bold;">var</span> closedNodes:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
<span style="color: #000000; font-weight: bold;">var</span> currentNode:INode = firstNode;
<span style="color: #000000; font-weight: bold;">var</span> testNode:INode;
<span style="color: #000000; font-weight: bold;">var</span> connectedNodes:<span style="color: #0066CC;">Array</span>;
<span style="color: #000000; font-weight: bold;">var</span> travelCost:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1.0</span>;
<span style="color: #000000; font-weight: bold;">var</span> g:<span style="color: #0066CC;">Number</span>;
<span style="color: #000000; font-weight: bold;">var</span> h:<span style="color: #0066CC;">Number</span>;
<span style="color: #000000; font-weight: bold;">var</span> f:<span style="color: #0066CC;">Number</span>;
currentNode.<span style="color: #006600;">g</span> = <span style="color: #cc66cc;">0</span>;
currentNode.<span style="color: #006600;">h</span> = Pathfinder.<span style="color: #006600;">heuristic</span><span style="color: #66cc66;">&#40;</span>currentNode, destinationNode, travelCost<span style="color: #66cc66;">&#41;</span>;
currentNode.<span style="color: #006600;">f</span> = currentNode.<span style="color: #006600;">g</span> + currentNode.<span style="color: #006600;">h</span>;
<span style="color: #000000; font-weight: bold;">var</span> l:<span style="color: #0066CC;">int</span> = nodes.<span style="color: #0066CC;">length</span>;
<span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>;</pre></div></div>

<p>The first two arrays will hold our open nodes and our closed nodes.  Then we have a variable <strong>currentNode</strong> which will keep track of the node we are currently on.  We set this to be our firstNode since that is where we will start.</p>
<p>Next we keep a variable <strong>testNode:INode</strong>, which will be the node that will be a connected node of our current node.</p>
<p>Next we have <strong>g</strong>,<strong>h</strong> and <strong>f</strong> values we will keep track of for each node.</p>
<p>We then set the initial <strong>g</strong> value of the currentNode (which is also our first node) to 0 since it does not cost anything to get there since it is already our current location.</p>
<p>Then, we calculate the estimated cost to reach the end using our heuristic, and finally the final cost which is calculated by adding <strong>g</strong> + <strong>h</strong> (the starting cost plus the final cost).</p>
<p>Lastly, we have some variables that we will use inside of loops in our A* algorithm.</p>
<h2>The Loop</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/loop.jpg" alt="Roller coaster loop" /></p>
</div>
<p>Let’s move on to the actual loop.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>currentNode <span style="color: #66cc66;">!</span>= destinationNode<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	connectedNodes = connectedNodeFunction<span style="color: #66cc66;">&#40;</span> currentNode <span style="color: #66cc66;">&#41;</span>;
	l = connectedNodes.<span style="color: #0066CC;">length</span>;
	<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> l; ++i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		testNode = connectedNodes<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>testNode == currentNode <span style="color: #66cc66;">||</span> testNode.<span style="color: #006600;">travesable</span> == <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">continue</span>;
		g = currentNode.<span style="color: #006600;">g</span>  + travelCost;
		h = heuristic<span style="color: #66cc66;">&#40;</span> testNode, destinationNode, travelCost<span style="color: #66cc66;">&#41;</span>;
		f = g + h;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> Pathfinder.<span style="color: #006600;">isOpen</span><span style="color: #66cc66;">&#40;</span>testNode, openNodes<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">||</span> Pathfinder.<span style="color: #006600;">isClosed</span><span style="color: #66cc66;">&#40;</span> testNode, closedNodes<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>	<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>testNode.<span style="color: #006600;">f</span> <span style="color: #66cc66;">&gt;</span> f<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
&nbsp;
				testNode.<span style="color: #006600;">f</span> = f;
				testNode.<span style="color: #006600;">g</span> = g;
				testNode.<span style="color: #006600;">h</span> = h;
				testNode.<span style="color: #0066CC;">parentNode</span> = currentNode;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
			testNode.<span style="color: #006600;">f</span> = f;
			testNode.<span style="color: #006600;">g</span> = g;
			testNode.<span style="color: #006600;">h</span> = h;
			testNode.<span style="color: #0066CC;">parentNode</span> = currentNode;
			openNodes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>testNode<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	closedNodes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> currentNode <span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>openNodes.<span style="color: #0066CC;">length</span> == <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;
	<span style="color: #66cc66;">&#125;</span>
	openNodes.<span style="color: #0066CC;">sortOn</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'f'</span>, <span style="color: #0066CC;">Array</span>.<span style="color: #006600;">NUMERIC</span><span style="color: #66cc66;">&#41;</span>;
	currentNode = openNodes.<span style="color: #006600;">shift</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> as INode;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Whoa! There’s a lot going on there, so let’s try to break it down piece by piece.</p>

<div class="wp_syntax"><div class="code"><pre class="actioncript" style="font-family:monospace;">while (currentNode != destinationNode) {</pre></div></div>

<p>Start our loop.  If our current node is the same as our destination then we are done and we can build our path!</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">connectedNodes = connectedNodeFunction<span style="color: #66cc66;">&#40;</span> currentNode <span style="color: #66cc66;">&#41;</span>;
l = connectedNodes.<span style="color: #0066CC;">length</span>;
<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> l; ++i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></pre></div></div>

<p>So fetch an array of all of the connected nodes of our current node.  Store the length and then loop through all of them.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">testNode = connectedNodes<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>testNode == currentNode <span style="color: #66cc66;">||</span> testNode.<span style="color: #006600;">travesable</span> == <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">continue</span>;</pre></div></div>

<p>Test each node out of the connected nodes.  If the node is the same as our current node or it is not traversable, move on to the next connected node.</p>
<p><strong>Note:</strong> Your connectedNodeFunction might omit non traversable nodes which would make the above line redundant and unnecessary.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">g = currentNode.<span style="color: #006600;">g</span>  + travelCost;
h = heuristic<span style="color: #66cc66;">&#40;</span> testNode, destinationNode, travelCost<span style="color: #66cc66;">&#41;</span>;
f = g + h;</pre></div></div>

<p>Ok, so now we are calculating the actual cost of our node.  First,  <strong>g</strong>:</p>
<h2>g</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/aliG.jpg" alt="Ali G" /></p>
</div>
<p>In a tile based world, we simply add the cost of the <strong>currentNode</strong> to the <strong>travelCost</strong> to determine the cost of the tile.  In some tile based environments, a diagonal move sometimes cost more than other moves.  In this case you would need to determine if the <strong>testNode</strong> is diagonal to the <strong>currentNode</strong> and adjust the <strong>travelCost</strong> value accordingly.</p>
<p>In our case here at Untold, we had a situation where the cost of each connected node was not the same because the nodes could be spread out across variable distances. So in our case we changed the <strong>g</strong> calculation to use our heuristic between the <strong>currentNode</strong> and the <strong>testNode</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">g  = currentNode.<span style="color: #006600;">g</span> + Pathfinder.<span style="color: #006600;">heuristic</span><span style="color: #66cc66;">&#40;</span> currentNode, testNode, travelCost<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Now, h:</p>
<h2>h</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/heroin.jpg" alt="Horse" /></p>
</div>
<p>This is where we use our heuristic.  Our heuristic takes in our <strong>testNode</strong> and our destination node. We also supply the cost to the heuristic which will return a number.  Again, we will go over the heuristic later.</p>
<h2>f</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/f.jpg" alt="f" /></p>
</div>
<p>Finally, we are at <strong>f</strong>.  This is a straightforward calculation to determine the total cost of the node.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> Pathfinder.<span style="color: #006600;">isOpen</span><span style="color: #66cc66;">&#40;</span>testNode, openNodes<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">||</span> Pathfinder.<span style="color: #006600;">isClosed</span><span style="color: #66cc66;">&#40;</span> testNode, closedNodes<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>	<span style="color: #66cc66;">&#123;</span></pre></div></div>

<p>Here, we use some simple utility functions to determine if the node is in either our open list or our closed list.  If it is, then we should only adjust its <strong>f</strong>,<strong>g</strong> and <strong>h</strong> value if its current cost (<strong>f</strong>) is greater than the cost we just calculated.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">	<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>testNode.<span style="color: #006600;">f</span> <span style="color: #66cc66;">&gt;</span> f<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		testNode.<span style="color: #006600;">f</span> = f;
		testNode.<span style="color: #006600;">g</span> = g;
		testNode.<span style="color: #006600;">h</span> = h;
		testNode.<span style="color: #0066CC;">parentNode</span> = currentNode;
	<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
		testNode.<span style="color: #006600;">f</span> = f;
		testNode.<span style="color: #006600;">g</span> = g;
		testNode.<span style="color: #006600;">h</span> = h;
		testNode.<span style="color: #0066CC;">parentNode</span> = currentNode;
		openNodes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>testNode<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>If the node is not in either the open list or in the closed list, then we definitely want to assign it the values we just calculated.  We also want to add it to the list of open nodes and make sure its parent is set to our <strong>currentNode</strong>.</p>
<p>We are now done our loop and can add our <strong>currentNode</strong> to our list of closed nodes.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">closedNodes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> currentNode <span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>openNodes.<span style="color: #0066CC;">length</span> == <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;
<span style="color: #66cc66;">&#125;</span>
openNodes.<span style="color: #0066CC;">sortOn</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'f'</span>, <span style="color: #0066CC;">Array</span>.<span style="color: #006600;">NUMERIC</span><span style="color: #66cc66;">&#41;</span>;
currentNode = openNodes.<span style="color: #006600;">shift</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> as INode;</pre></div></div>

<p>If there are no more open nodes, then no path is available between the provided nodes, so we return NULL.</p>
<p>Otherwise, sort our open nodes based on their cost and use the one with the lowest cost as our new <strong>currentNode</strong>.</p>
<p>If a path is available, the <strong>currentNode</strong> will eventually be the same as our destination node, and the <em>while</em> loop will exit.  At this point, we will be ready to build our path and end our function which we do with a single line:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #b1b100;">return</span> Pathfinder.<span style="color: #006600;">buildPath</span><span style="color: #66cc66;">&#40;</span>destinationNode, firstNode<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Of course this means we need a function called <strong>buildPath()</strong>.  Luckily, it is quite simple and looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> buildPath<span style="color: #66cc66;">&#40;</span>destinationNode:INode, startNode:INode<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Array</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> path:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #000000; font-weight: bold;">var</span> node:INode = destinationNode;
	path.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>node<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>node <span style="color: #66cc66;">!</span>= startNode<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		node = node.<span style="color: #0066CC;">parentNode</span>;
		path.<span style="color: #0066CC;">unshift</span><span style="color: #66cc66;">&#40;</span> node <span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">return</span> path;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>In this function, we simply keep moving through all the parent nodes of the provided nodes and put them at the front of a new array we return to the caller.</p>
<h2>The Heuristic</h2>
<p>We are almost ready to test out our class with an example but as promised we will first discuss our heuristic.</p>
<p>There is a wide range of heuristics used to calculate an optimum path.  The methodology is based on a variety of criteria.  Different heuristics return different results and you will need to find the one that is best for your case.  Right now, we’ll examine three simple heuristics, but don’t be afraid to go out and find your own.</p>
<p>Now, I was familiar with the basics behind A* but had never actually implemented it.  Thankfully though I had a copy of Keith Peter’s <a href="http://www.amazon.com/AdvancED-ActionScript-Animation-Keith-Peters/dp/1430216085/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1280088548&amp;sr=8-1">Advanced ActionScript 3.0 Animation</a> which has a very nice chapter all about path finding and A*.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/manhattan.jpg" alt="Manhattan A* Heuristic" /></p>
</div>
<p><strong>Manhattan:</strong> This heuristic is the most simple.  It ignores any diagonal movement, so if your world does not allow for diagonal movement it might be a good fit. It simply adds the total number of rows and columns between the two provided nodes.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> manhattan<span style="color: #66cc66;">&#40;</span>node:INode, destinationNode:INode, cost:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>node.<span style="color: #006600;">x</span> – destinationNode.<span style="color: #006600;">x</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> cost + <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>node.<span style="color: #006600;">y</span> + destinationNode.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> cost;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/euclid.jpg" alt="Euclidian A* Heuristic" /></p>
</div>
<p><strong>Euclidian:</strong> This heuristic simply draws a straight line between the two provided nodes and returns its length.  You might recall the Pythagorean Theorem from math class?  Well, here it is in action.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> euclidianHeuristic<span style="color: #66cc66;">&#40;</span>node:INode, destinationNode:INode, cost:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> dx:<span style="color: #0066CC;">Number</span> = node.<span style="color: #006600;">x</span> - destinationNode.<span style="color: #006600;">x</span>;
	<span style="color: #000000; font-weight: bold;">var</span> dy:<span style="color: #0066CC;">Number</span> = node.<span style="color: #006600;">y</span> - destinationNode.<span style="color: #006600;">y</span>;
	<span style="color: #b1b100;">return</span> <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">sqrt</span><span style="color: #66cc66;">&#40;</span> dx <span style="color: #66cc66;">*</span> dx + dy <span style="color: #66cc66;">*</span> dy <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> cost;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/diagonAlley.jpg" alt="Diagonal A* Heuristic" /></p>
</div>
<p><strong>Diagonal:</strong> This heuristic is the most accurate of the three.  It is more complex than the previous two, but runs fewer times because of its accuracy.  It takes into account a diagonal cost, if it is more expensive than a regular movement.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> diagonalHeuristic<span style="color: #66cc66;">&#40;</span>node:INode, destinationNode:INode, cost:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1.0</span>, diagonalCost:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> dx:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>node.<span style="color: #006600;">x</span> - destinationNode.<span style="color: #006600;">x</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #000000; font-weight: bold;">var</span> dy:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>node.<span style="color: #006600;">y</span> - destinationNode.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #000000; font-weight: bold;">var</span> diag:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">min</span><span style="color: #66cc66;">&#40;</span> dx, dy <span style="color: #66cc66;">&#41;</span>;
	<span style="color: #000000; font-weight: bold;">var</span> straight:<span style="color: #0066CC;">Number</span> = dx + dy;
	<span style="color: #b1b100;">return</span> diagonalCost <span style="color: #66cc66;">*</span> diag + cost <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>straight - <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">*</span> diag<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<h2>Make it Go</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_08_13/rocket.jpg" alt="Rocket" /></p>
</div>
<p>Now that we are done with our pathfinding system, we can put it to work.   Take a look at the example below.  You can click on any two tiles in the grid and then we will then draw a path between the two tiles.  You can change the heuristic at any point to see the different results you might get.  Also highlighted are any tiles that the pathfinder tests.  Notice that the Manhattan heuristic tests far more nodes than the other two.</p>
<p>
<object width="640" height="480">
<param name="movie" value="http://www.untoldentertainment.com/blog/img/2010_08_13/pathfinding_example.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="transparent"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="480" src="http://www.untoldentertainment.com/blog/img/2010_08_13/pathfinding_example.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" menu="false" ></embed>
</object>
</p>
<p>I implement the pathfinding simply by calling the <strong>Pathfinder.findPath()</strong> function and passing the start node, end node and the function that determines connected nodes.  I then pass the returned array to a function called <strong>drawPath</strong>. For your usage you probably want to do a lot more than draw a path, you probably want to have a character traverse along that path, but this is just meant to show you how to acquire which path to follow.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">drawPath<span style="color: #66cc66;">&#40;</span> Pathfinder.<span style="color: #006600;">findPath</span><span style="color: #66cc66;">&#40;</span>_startNode, _endNode, findConnectedNodes<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>The findConnectedNodes method is very straightforward.  It simply returns all nodes that are adjacent to a given node.  You can check it out here:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> findConnectedNodes<span style="color: #66cc66;">&#40;</span> node:INode <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Array</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> n:Node = node as Node;
	<span style="color: #000000; font-weight: bold;">var</span> connectedNodes:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #000000; font-weight: bold;">var</span> testNode:Node;
	<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> _nodes.<span style="color: #0066CC;">length</span>; i++<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		testNode = _nodes<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>testNode.<span style="color: #006600;">row</span> <span style="color: #66cc66;">&lt;</span> n.<span style="color: #006600;">row</span> - <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">||</span> testNode.<span style="color: #006600;">row</span> <span style="color: #66cc66;">&gt;</span> n.<span style="color: #006600;">row</span> + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">continue</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>testNode.<span style="color: #006600;">col</span> <span style="color: #66cc66;">&lt;</span> n.<span style="color: #006600;">col</span> - <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">||</span> testNode.<span style="color: #006600;">col</span> <span style="color: #66cc66;">&gt;</span> n.<span style="color: #006600;">col</span> + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">continue</span>;
		connectedNodes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> testNode <span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">return</span> connectedNodes;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Of course, this implementation will not be sufficient if you want different tiles to have different costs based on terrain (quicksand might be more expensive than grass), but if you can grasp the above you should be able to make the adjustments fairly easily.</p>
<p>Hopefully you will now have a solid understanding of A* path finding and you can now use it in your own applications.</p>
<p>Click <a href="http://www.untoldentertainment.com/blog/labs/pathfinding/pathfinding_example.zip">here</a> to download the source code for this tutorial.</p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/"><img src="http://www.untoldentertainment.com/blog/img/features/flash911/flash911.gif" alt="Flash and Actionscript 911" /></a></p>
<p>This article is part of our ongoing <a href="http://www.untoldentertainment.com/blog/flash-and-actionscript-911/">Flash and Actionscript 911</a> Series, which is awesome.</p>
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F08%2F20%2Fintroduction-to-a-a-star-pathfinding-in-actionscript-3-as3-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F08%2F20%2Fintroduction-to-a-a-star-pathfinding-in-actionscript-3-as3-2%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/08/20/introduction-to-a-a-star-pathfinding-in-actionscript-3-as3-2/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2780&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/08/20/introduction-to-a-a-star-pathfinding-in-actionscript-3-as3-2/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>We&#8217;re Doomed</title>
		<link>http://www.untoldentertainment.com/blog/2010/07/27/were-doomed/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/07/27/were-doomed/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 14:32:10 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Bidness]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Spellirium]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2719</guid>
		<description><![CDATA[So we shopped Spellirium around at the Casual Connect conference in Seattle this past week, and the consensus was that the game was good &#8230; for them to poop on. Category Exclusivity i&#8217;ve been billing Spellirium as a &#8220;word puzzle/adventure game hybrid&#8221;, or &#8220;Jim Henson&#8217;s Labyrinth meets Boggle.&#8221; Er &#8211; that&#8217;s &#8220;Boggle&#8221;, not &#8220;Hoggle&#8221;. To [...]]]></description>
			<content:encoded><![CDATA[<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/spellirium-designer-diary/"><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/Spellirium_Logo.jpg" alt="Spellirium"></a></p>
</div>
<p>So we shopped <a href="http://www.untoldentertainment.com/blog/spellirium-designer-diary/">Spellirium</a> around at the Casual Connect conference in Seattle this past week, and the consensus was that the game was good &#8230; for them to <em>poop</em> on.</p>
<h2>Category Exclusivity</h2>
<p>i&#8217;ve been billing <b>Spellirium</b> as a &#8220;word puzzle/adventure game hybrid&#8221;, or &#8220;Jim Henson&#8217;s <b>Labyrinth</b> meets <b>Boggle</b>.&#8221;</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/hoggle.jpg" alt="Hoggle"></p>
<p>Er &#8211; that&#8217;s &#8220;Boggle&#8221;, not &#8220;Hoggle&#8221;.
</p></div>
<p>To the casual games portals and bidnessmen i met at the conference, the phrase &#8220;word puzzle game&#8221; was tantamount to <em>box office poison</em> of Carrot Top-ical proportions.  </p>
<p>Said one acquisitions director for a well-known casual downloadable games portal, &#8220;word games don&#8217;t do well.&#8221;  He cited the only three word games he&#8217;s ever known that <em>did</em> do well: <b>Scrabble</b>, <b>TextTwist</b>, and &#8220;to a far lesser extent&#8221;, <b>Bookworm</b>. Apparently <b>Bookworm Adventures</b>, Spellirium&#8217;s kissing cousin, didn&#8217;t even rate.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/bookwormAdventures.jpg" alt="Bookworm Adventures"></p>
<p>At a reported development cost of over $700k, Bookworm Adventures is the casual downloadable industry&#8217;s Ishtar.
</p></div>
<p>i did my research before embarking on this project.  i knew that word games don&#8217;t sell. i even wrote that fact into our business plan.  i was quick &#8211; perhaps too quick &#8211; to point out to him that there are no other word games quite like Spellirium.  i wasn&#8217;t just shilling, though &#8211; honestly, no other game i know has tried to combine an early-90&#8242;s LucasArts-style adventure game with a word puzzle mechanic.  All other word games i&#8217;ve seen have been <em>just</em> the mechanic, and that can get old quickly.  Even Bookworm Adventures, with its worm-on-monster battles and its levelling and inventory systems, didn&#8217;t <em>do</em> story.  Story is not a <a href="http://www.untoldentertainment.com/blog/2010/07/14/six-ways-to-tell-stories-in-video-games/">blob of text</a> you frantically skip after the title screen, or an explanation of how Character X has to retrieve the Magic Y.  </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/bubbleBobble.png" alt="Bubble Bobble"></p>
<p>Note: this is not &#8220;story&#8221;.
</p></div>
<p>i also tried to explain that Spellirium does word puzzling like no other game.  We&#8217;re really stretching this simple mechanic to its farthest logical limits &#8211; you&#8217;ll be spelling words to paint pictures, navigate mazes, move objects, balance balls &#8230; in many of our modes, <em>spelling words doesn&#8217;t even matter</em>.  It&#8217;s crazy, it&#8217;s creative, and i think players are totally gonna dig it.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/modes.jpg" alt="Spellirium modes"></p>
<p>We&#8217;ve already produced and playtested over twenty unique variations on our main game mechanic, seen here in prototype phase.  One of the goals of Spellirium is to ensure that the puzzling is constantly fresh and surprising.
</p></div>
<h2>Idiocracy</h2>
<p>The casual games publishers do not dig it.  &#8220;Anything that involves thinking&#8221;, they said, &#8220;is a non-starter.&#8221;  The same acquisitions guy told me that one of our other games was &#8220;too cerebral&#8221;, and followed up by saying &#8220;i don&#8217;t wanna say that our audience is <em>dumb</em>, but &#8230; &#8221;</p>
<p>And i won&#8217;t say that either.  i&#8217;m sure that the Big Fishes and the iWins and the Gamehouses have more than their fair share of dim bulbs buying games from them. But i think the real challenge for us with Spellirium is finding the right audience.  The casual downloadable audience is mostly female, and mostly older, and they play games to escape.  Spellirium is not an escape in that clicky-gemmy, findy-object kinda way.  It&#8217;s escapism in that &#8220;i&#8217;ve been transported to a fascinating and fun <em>other world</em> where there are characters who are more interesting than anyone i know, and places more vivid than i&#8217;ve ever visited&#8221; kinda way.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/bejewelled.jpg" alt="Bejewelled"></p>
<p>i actually feel like i have to escape Bejewelled whenever i&#8217;ve played.  Is this lunch break ever gonna end?
</p></div>
<h2>Luna-cy</h2>
<p>i was never more dismayed during the conference than when i attended the talk by Luna Cruz from Boomzap, who talked about economizing story in her game <b>Awakening: The Dreamless Castle</b>.  Look: i <em>know</em> i&#8217;m a wordy writer, and i know the Spellirium script could use trimming as badly as those ladies from the 1970&#8242;s skin mags.  So it was with great hope that i sat down to hear Luna&#8217;s talk.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/awakening.jpg" alt="Awakening"></p>
<p>(Awakening: Not to be confused with that movie where Robin Williams gives drugs to all those old people.)
</p></div>
<p>Early on, Luna said &#8220;We really needed to find a way to simplify this cut-scene and get the most important information out in as few lines as possible.&#8221;  i was all ears.  But then: &#8220;The original cut-scene had six lines of dialogue, which we knew was way too much for our audience, so we worked really hard and gave it a lot of thought, and cut it down to only two.&#8221;</p>
<p>You cut it down to &#8211; guh. What?  <em>How</em> many lines?  And you say <em>six lines</em> was too much for your audience to bear?  i have to say six lines of dialogue before i can even establish one of my characters&#8217; <em>names</em>.  i was going to approach Luna after the talk and ask for her advice, but i began to worry that she&#8217;d look at one of our cut-scenes and start vomiting on me uncontrollably.</p>
<p>But let&#8217;s compare.  Here&#8217;s the <em>entire</em> story of Awakening:</p>
<blockquote><p>
*** spoilers ***</p>
<p>A princess who can&#8217;t wield magic wakes up in a magic-imbued world and must escape the castle, with the help of a magic mirror and some ornery trolls who were sworn to protect her.</p></blockquote>
<p>And here&#8217;s just the <em>backstory</em> to Spellirium:</p>
<blockquote><p>
*** no spoilers ***</p>
<p>In the future, a young apprentice journeys with an ill-fated monster to find his missing guardians, using a dangerously magical device to battle enemies and to overcome challenges.</p></blockquote>
<p>Luna can tell her entire story in the same space that it takes me to write a synopsis of Spellirium.  We&#8217;re dealing with apples and oranges here.  Which suggest to me that the audience, likewise, is like apples and oranges.  </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/storyboard.jpg" alt="Spellirium storyboard"></p>
<p>Three panels from a Spellirium cutscene.
</p></div>
<h2>What Sort of Gamer Plays Spellirium?</h2>
<p>The suggestion was repeated to me by a number of people at the conference, when i asked whether i should just scrap Spellirium and take up pork farming: i need to find the right audience for the game.  So what sort of gamer plays Spellirium?</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/playboy.png" alt="What sort of man reads Playboy?"></p>
<p>The pervy sort. Next question.
</p></div>
<p>We tried to answer this question way back before production began by stating the obvious: people who play word games will play Spellirium.  So we <a href="http://www.untoldentertainment.com/blog/2010/03/22/untold-entertainment-joins-the-dark-side/">built a game portal</a> called <a href="http://www.wordgameworld.com">Word Game World</a> and stocked it with word games leftover from the MochiMedia/Dictionary.com contest they ran last year.  Here are the less-than-stellar results:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/wordGameWorld.jpg" alt="Word Game World Analytics"></p>
<p>Yes &#8211; that says &#8220;40&#8243;, not &#8220;40k&#8221;.
</p></div>
<p>The trouble is that now we found ourselves with the challenge of generating an audience for TWO properties.  It makes more sense to just bring people straight to Spellirium, than to drive them to the game via the scenic route.  That, and many of the word games people have made have turned out <em>less-than-scenic</em>, if you get my drift.  (Yet another nail in the coffin for the genre &#8211; too many people making it look bad)</p>
<h2>Beer Covers a Multitude of Sins</h2>
<p>i got a hot tip from my fellow Christian game designer pal Grant Shonkwiler (who you&#8217;ll remember from our earlier post on <a href="http://www.untoldentertainment.com/blog/2008/03/06/prince-of-persia-prince-of-peace/">the impossibility of Christian gaming</a>). These days, Grant designs games for tabletop bar cabinets (like any good Christian would &#8230; i forgot to ask if he got paid in hooch).   He designed a word game for his company that was a smash success with the audience, and offered that <em>bar patrons love word games.</em> It reminded me of Norm MacDonald&#8217;s old SNL Weekend Update punchline: <em>Germans love David Hasselhoff.</em>  You hit the right niche with the right product, and you&#8217;re sailing.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/norm.jpg" alt="Norm Macdonald"></p>
</div>
<p>So what combination of Knight Riding and Baywatching will Spellirium have to pull off to find its Germany-sized pool of rabid fans? Here are some facts about what i *think* a Spellirium player is like. i think the game will appeal to both sexes, but i&#8217;ll use masculine pronouns for simplicity:</p>
<ol>
<li>He can kick <em>ass</em> at Scrabble. Don&#8217;t mess.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/scrabble.jpg" alt="Scrabble"></p>
</div>
<li>He does crossword puzzles on his way to work. In pen.  He may even feel that British cryptics are far superior to American-style.
<li>He watches movies. Among his favourite films are Labyrinth, The Dark Crystal, The Lord of the Rings Trilogy, The Road Warrior, Twelve Monkeys, The Adventures of Baron Munchausen, The Princess Bride, The Last Unicorn, Dragonslayer, and The Goonies.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/movies1.jpg" alt="movies"></p>
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/movies2.jpg" alt="movies"></p>
</div>
<li>He reads. He likes sci fi and fantasy. He may enjoy Douglas Adams, Terry Pratchett, Lloyd Alexander, J.R.R. Tolkien, C.S. Lewis, Terry Brooks, and Neil Gaiman.
<li>He plays games.  He quite liked Puzzle Quest, Bookworm and Bookworm Adventures, digital versions of Scrabble and Boggle, Wurdle, TextTwist, LucasArts and Sierra On-Line graphic adventure games &#8211; possibly even Infocom text adventures or MUDs &#8211; as well as Out of This World, Beneath a Steel Sky and the Fallout series.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/games.jpg" alt="games"></p>
</div>
<li>When he&#8217;s playing a game that has story elements, including dialogue or cutscenes or even blobs of text, he does not &#8211; does NOT &#8211; push the A button to skip.  He becomes particularly upset if he accidentally skips story, <em>even if he&#8217;s not particularly enjoying that story</em>.  If he&#8217;s gaming with a dumb jock fratboy friend who blithely skips past all the story sequences saying &#8220;let&#8217;s just play already, d00d&#8221;, he punches that friend in the throat.  (Then he gets his ass kicked, because he&#8217;s a lover, not a fighter.)
</ol>
<p>i know, friends.  i know.  i&#8217;ve just described myself. (Or perhaps Jerry Holkins / Tycho Brahe from Penny Arcade &#8211; i&#8217;m convinced we&#8217;re the same person.) i am a little concerned that i have not paid enough attention to the needs and wants of the market, over the needs and wants of the <em>me</em>.  i have not designed Spellirium as an ineffectual, casual click-fest with simple puzzles and two-line cutscenes.  i thought, perhaps foolishly &#8211; perhaps arrogantly &#8211; that if i designed a game that <em>i</em> desperately wanted to play, there would be others like me for whom this game would be a breath of fresh air.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/ryan.jpg" alt="Ryan Henson Creighton"></p>
<p>If the world was as full of me as i am of myself, i&#8217;d be a wealthy, wealthy man.
</p></div>
<p>Was i wrong?  Like chocolate and peanut butter, is our word puzzle/adventure game hybrid born of two great tastes that taste great together?  Or is it born of two disappointments &#8211; an overly cerebral genre that repeatedly fails to perform in the marketplace, and an outdated genre that saw its best days twenty years ago?  Should we finish Spellirium and bury it as quickly as possible, or should we keep working to realize our vision &#8211; the vision of a smart, funny game for well-read, literate players that melds two genres like no other game before it?</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_07_26/player.jpg" alt="Spellirium player"></p>
<p>Muffy and I simply *luuuurve* your game, Ryan.
</p></div>
<p>i defer to your judgment and expertise.  If Untold Entertainment needs to become a Hidden Object Game developer, please tell me now so that i can go get a lobotomy and get myself fitted at the Vagina Depot.</p>
<p>Word.</p>
<p><b><a href="http://www.spellirium.com">Sign up for the Spellirium Newsletter</a></b> to fight the relentless dumbing-down of your favourite hobby. The newsletter contains new screenshots and juicy game gossip that you won&#8217;t find anywhere else.  </p>
<div class="displayed">
<p><a href="http://www.untoldentertainment.com/blog/spellirium-designer-diary/"><img src="http://www.untoldentertainment.com/games/spellirium/promotional/designerDiary/designerDiaryTagImage.jpg"></a></p>
</div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F07%2F27%2Fwere-doomed%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F07%2F27%2Fwere-doomed%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/07/27/were-doomed/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2719&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/07/27/were-doomed/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
		<item>
		<title>Giv&#8217;er on the River</title>
		<link>http://www.untoldentertainment.com/blog/2010/06/24/giver-on-the-river/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/06/24/giver-on-the-river/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 15:15:27 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Bidness]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Original Games]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2659</guid>
		<description><![CDATA[Last week, i was invited by New Brunswick Community College in Miramichi to speak at their Jalloo animation and gaming festival. i was a last-minute replacement, which was expected &#8230; i&#8217;ve only ever been asked to speak at one other event, as a late-breaking replacement on a panel at a local Toronto conference. i&#8217;m the [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, i was invited by New Brunswick Community College in Miramichi to speak at their <a href="http://www.jalloo.net/">Jalloo</a> animation and gaming festival.  i was a last-minute replacement, which was expected &#8230; i&#8217;ve only ever been asked to speak at one other event, as a late-breaking replacement on a panel at a local Toronto conference.  i&#8217;m the guy you get when the guy no one&#8217;s ever heard of can&#8217;t make it.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_24/jalloo_panel.jpg" alt="Ryan Henson Creighton and Andy Moore at Jalloo"></p>
<p>Andy Moore of <a href="http://www.fantasticcontraption.com/">Fantastic Contraption</a> and i deliver a panel on the State of the Flash Game Industry. Photo by Brian McGee.
</div>
<p>Because i&#8217;d really like to do more speaking, i jumped at the opportunity to share my accumulated nuggets of wisdom with the attendees.  i actually agreed to come out before even looking for Miramichi on the map: it was quite far from the bustling metropolis of Moncton.  i clicked &#8220;What&#8217;s nearby?&#8221; and Google Maps said &#8220;you&#8217;re kidding, right?&#8221;</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_24/map.jpg" alt="Moncton to Miramichi"></p>
<p>Ugh &#8230; seriously?
</p></div>
<p>The conference attendees were mostly students. The title of my talk was &#8220;I Know Kung Fu: 10 Years of Gaming in 45 Minutes&#8221;.  The presentation had three sections: Tips for Students, Tips on Game Design, and Tips for Bidness.  The bidness section was the weakest &#8211; i&#8217;m still figuring that stuff out myself.</p>
<p>The Tips for Students started out irrelevantly &#8230; since NBCC&#8217;s game dev program has been hammered out over 13 years, it doesn&#8217;t have many of the problems that the nascent Ontario programs seem to have.  i found myself wondering why the <a href="http://www.untoldentertainment.com/blog/2010/02/18/whats-wrong-with-ontario-colleges-part-1/">Ontario</a> <a href="http://www.untoldentertainment.com/blog/2010/02/23/whats-wrong-with-ontario-colleges-part-2/">colleges</a> didn&#8217;t just visit Miramichi and do a straight lift of their entire program.  Isn&#8217;t that preferable to letting batch after batch of students flounder through your half-baked program while you figure it out?</p>
<p>Here are a few of the game design tips i shared:</p>
<ol>
<li>Mouse control trumps keyboard control for casual web games (source: Chris Hughes from <a href="http://www.flashgamelicense.com/">Flash Game License</a>)
<li>Click and carry beats click and drag, especially for young players (click and carry is where you click once, and the thing sticks to your mouse until you click again to release it)
<li>Control = fun.
<li>Game jams perfectly simulate the Internatz. Big room full of games to try &#8230; if you don&#8217;t hook people in the first five seconds, they flit off to the next station.  Just like on the weeb.
<li>Inconsistent escalation increases player. Instead of making your game get progressively more impossible, every few levels you should ease up on the difficulty.  This encourages the player to keep trying; if he blows a gasket beating level 5, he may think &#8220;to Hell with level 6&#8243;.  But if you throw in easy levels to give the playe a break every once in a while, he&#8217;s more likely to keep at it.  Final Fight used this concept very early on with its car-smashing bonus level.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_24/finalFight.jpg" alt="Final Fight car smash"></p>
<p>Take that, CAR!
</p></div>
<h2>i&#8217;m Also On a Boat</h2>
<p>The Jalloo folks organized a boat ride across the mighty Miramichi to a banquet hall where they fed their guests from enormous buckets of crab.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_24/onABoat.jpg" alt="I'm on a boat"></p>
<p>This is a picture of me watching <a href="http://www.youtube.com/user/thelonelyisland?blend=1&#038;ob=4#p/a/f/1/R7yfISlGLNU">I&#8217;m On a Boat</a> <em>while i&#8217;m on a boat</em>.
</div>
<h2>River Jam</h2>
<p>The conference ended with a 2-day game jam.  You know me &#8211; i can&#8217;t resist a game jam.  So with one hour to go before i had to leave for the airport, i coded up a very quick game structure and pulled out one of my game ideas from the backlog.  The guys on the team took it and ran with it, and worked the next two days producing an absolutely demented little gem called <a href="http://casualmurder.net/toes">Toes</a>:</p>
<div class="displayed">
<p><a href="http://casualmurder.net/toes"><img src="http://www.untoldentertainment.com/blog/img/2010_06_24/toes.jpg" alt="Toes"></a></p>
</div>
<p>This was my fifth game jam, and it was the only one where i worked with other people &#8211; three talented graduating students, and their instructor, who actually invited me out to the conference to begin with.  i met Martin Copp at the flawed <a href="http://www.untoldentertainment.com/blog/2009/10/22/everybody-loves-yannis/">Vortex Game Design Competition</a>, which just goes to show that return on investment from certain events can really surprise you, even many months after the fact.  So get out there and don&#8217;t stop networking!  (tip #5 in the &#8220;Tips for Students&#8221; section of my presentation ;) </p>
<p>The plan is to take <b>Toes</b> further and polish it up, and then put it up for licensing closer to Hallowe&#8217;en.  Answer the quick survey and let us know what you think!  We&#8217;re looking for suggestions to take it from a quick, playable concept to something a little more &#8230; meaty.</p>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F06%2F24%2Fgiver-on-the-river%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F06%2F24%2Fgiver-on-the-river%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/06/24/giver-on-the-river/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2659&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/06/24/giver-on-the-river/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Cooking with Flash: Learning the Timeline</title>
		<link>http://www.untoldentertainment.com/blog/2010/06/08/cooking-with-flash-learning-the-timeline/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/06/08/cooking-with-flash-learning-the-timeline/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 20:00:23 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Cooking With Flash]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2602</guid>
		<description><![CDATA[Prerequisites: Basic Flash Project Setup Drawing with Strokes and Fills Groups and Layers Begin Flash wasn&#8217;t always this difficult to get your head around. Before it was hijacked by codemonkeys, the software was a very capable animation program. The focal point of Flash animation is the Timeline, and all the wonderful things it can do. [...]]]></description>
			<content:encoded><![CDATA[<p><b>Prerequisites:</b></p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2010/05/06/cooking-with-flash-basic-flash-project-setup/">Basic Flash Project Setup</a>
<li><a href="http://www.untoldentertainment.com/blog/2010/05/12/cooking-with-flash-drawing-with-strokes-and-fills/">Drawing with Strokes and Fills</a>
<li><a href="http://www.untoldentertainment.com/blog/2010/05/21/cooking-with-flash-groups-and-layers/">Groups and Layers</a>
</ul>
<h2>Begin</h2>
<p>Flash wasn&#8217;t always this difficult to get your head around.  Before it was hijacked by codemonkeys, the software was a very capable animation program.  The focal point of Flash animation is the Timeline, and all the wonderful things it can do.  This lesson is a primer on how to move around the timeline and to figure out how it works.  In a future lesson, we&#8217;ll delve into different animation styles you can pull off using the Timeline.</p>
<p>Start a project as described in Basic Flash Project Setup, or continue from an existing project.  Make sure that you can see the Timeline in your screen setup.  In the menus, click Window > Timeline.</p>
<h2>1. Time moves from left to right.</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/timeline.jpg" alt="Flash timeline"></p>
</div>
<p>This is an obvious point if you&#8217;ve used any other timeline-based software like Premiere, Audacity, or Director.  Those numbers stretching off into the distance are <em>frame numbers</em>.  A frame is a single picture in your movie.  Play the pictures one after another quickly enough, and our persistence of vision creates the illusion of motion.   </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/flipbook.jpg" alt="Flipbook"></p>
<p>Flipbooks use sequential images to trick the eye into seeing motion. The Flash Timeline is an elaborate flipbook.
</p></div>
<h2>2. FPS Determines how fast your frames play.</h2>
<p>Your default .fla file makes frames whizz by at 30 frames per second. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/fps.jpg" alt="Flash Properties frames per second setting"></p>
</div>
<p>To change the frame rate of your Flash movie, type a different number into the FPS: field in the Properties panel (Window > Properties). </p>
<p><b>note:</b> The Properties panel is context-sensitive, which means that it shows different options depending on what you&#8217;ve selected. To see the FPS setting, click on any blank area of the stage.</p>
<p>30 FPS is standard for most video.  Classical animators used to work at 24 frames per second for feature films, and 12 frames per second for television and lower-quality animation.  12 fps is sometimes called working &#8220;on twos&#8221;, because the camera man would photograph each drawing twice to bring it up to 24 fps.  The fewer the drawings you use in your animation, the choppier your animation will look.</p>
<h2>3. Understanding keyframes</h2>
<p>The word &#8220;keyframe&#8221; is inherited from animation. A common technique for animating a scene &#8211; especially involving a character &#8211; is to draw the <em>key frames</em> in the action.  If you&#8217;re animating a bouncing ball, you might have three key frames: the ball at the top of its drop, the ball at the bottom as it squishes against the ground, and the ball at the top again.  Keys are the most crucial drawings in the action.  A person should be able to completely understand what&#8217;s going on just by looking at the keys.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/keys.jpg" alt="Animation key frames"></p>
</div>
<p>Once you&#8217;ve drawn the keys &#8211; the most important drawings &#8211; you draw the in-betweens.  Without these drawings, we can&#8217;t create the illusion of motion.  They are the pictures that &#8220;move&#8221; us from one key to the next.</p>
<p>Computer animation packages like Flash enable us to set up key frames, and to draw our own in-betweens. Flash can also draw in-betweens <em>for</em> us using a process called <em>interpolation</em>.   We&#8217;ll look at interpolation, or <em>tweening</em>, in another tutorial.</p>
<h2>4. Understanding frame symbols</h2>
<p>There are important symbols that appear on frames.  Understanding them is the key to understanding the Timeline, like learning to read music.</p>
<ol>
<li>Blank keyframe
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/emptyKeyframe.jpg" alt="Flash blank keyframe"></p>
</div>
<p>An empty circle indicates a blank keyframe. There is nothing on the stage on this layer on this frame.  </p>
<li>Keyframe
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/keyframe.jpg" alt="Flash keyframe"></p>
</div>
<p>A black circle with a grey background indicates a filled keyframe.  There is something on the stage on this layer on this frame.</p>
<li>Empty frame
<p>A blank white frame means that our animation will play to at least this point.  The animation continues to play until it reaches the latest keyframe, blank keyframe, blank frame or filled frame in the Timeline. </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/blankFrame.jpg" alt="Flash blank frame"></p>
<p>Even though the stage is empty, this animation will play past frame 30 because the blank frames stretch at least that far.
</p></div>
<li>Filled frame
<p>A frame with a grey background means that the contents of the preceding keyframe appear on stage to at least this point.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/frame.jpg" alt="Flash filled frame"></p>
<p>The contents of frame 1 stay on stage well past frame 30.
</p></div>
<li>Terminal frame
<p>This white rectangle marks the point after which the contents of the preceding keyframe stop appearing on-stage.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_08/terminalFrame.jpg" alt="Flash filled frame"></p>
<p>The contents of frame 1 persist on stage from frame 1 to frame 20.  After frame 20, they stop showing up.
</p></div>
</ol>
<h2>5. The function keys insert frames.</h2>
<p>The F5, F6 and F7 keyboard keys are crucial when using the Timeline.  Used on their own, they insert various frame types. Hold down the SHIFT key and press one of these function keys to delete that frame type.</p>
<p>F5 &#8211; Add a frame.  They will be either blank or filled depending on whether they&#8217;re preceded by a blank or filled keyframe.<br />
SHIFT+F5 &#8211; Delete a frame.</p>
<p>F6 &#8211; Add a keyframe.  <b>note:</b> If you add a keyframe to a blank range of frames, you&#8217;ll drop in a blank keyframe.<br />
SHIFT+F6 &#8211; Remove a keyframe.</p>
<p>F7 &#8211; Add a blank keyframe.<br />
SHIFT+F7 &#8211; Remove a blank keyframe.</p>
<p><b>Sample usage:</b> If you have something on stage, and you want it to disappear at frame 25, add a blank keyframe to frame 25.</p>
<p>You can click and drag to range-select a chunk of frames to delete them, or to convert them to empty or filled keyframes.</p>
<p><b>note:</b> If you insert frames, they don&#8217;t overwrite your existing frames. Rather, the end of your Timeline on that layer gets pushed out farther.</p>
<h2>6. The Playhead controls frames on all layers.</h2>
<p>If you want to add or remove different frame types through all layers of the timeline simultaneously, first click on the pink rectangular Playhead.   Then when you add or remove frames, they&#8217;ll be added to or removed from all layers at once.</p>
<h2>7. Scrub or play your animation. </h2>
<p>Click and hold the mouse button on a frame and move the mouse around to preview your animation.  This is called &#8220;timeline scrubbing&#8221;. </p>
<p>To scrub the Timeline without fear of moving your keyframes around, click and drag the pink Playhead back and forth.</p>
<p>To play your animation within the Flash IDE, press the ENTER key on your keyboard.</p>
<p>To compile your movie to a swf, hold CTRL and press ENTER (Command+Enter on the Mac).  Notice that Flash automatically loops when the Playhead reaches the end of the timeline.</p>
<p><b>note:</b> In order to drag your empty and filled keyframes around, first click on the keyframe to select it, <em>then</em> click and drag to move it around.</p>
<h2>Finish</h2>
<p>This basic Timeline lays the foundation for the actual animation exercises we&#8217;ll be doing.  We&#8217;ll learn how to do &#8220;straight-ahead&#8221; or &#8220;frame-by-frame&#8221; animation, as well as how to get Flash to draw the in-betweens for us.
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F06%2F08%2Fcooking-with-flash-learning-the-timeline%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F06%2F08%2Fcooking-with-flash-learning-the-timeline%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/06/08/cooking-with-flash-learning-the-timeline/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2602&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/06/08/cooking-with-flash-learning-the-timeline/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TOJam Arcade and the Best Day Evar</title>
		<link>http://www.untoldentertainment.com/blog/2010/06/07/tojam-arcade-and-the-best-day-evar/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/06/07/tojam-arcade-and-the-best-day-evar/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 14:53:20 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Awesomazing]]></category>
		<category><![CDATA[Bizarre]]></category>
		<category><![CDATA[Company News]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[TOJam]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2589</guid>
		<description><![CDATA[They say you can&#8217;t win &#8216;em all. That&#8217;s usually true, except in the case of my insane day at the TOJam Arcade when i, in point of fact, actually did win &#8216;em all. This is me, trying to blast off. Photo by the unstoppable Brendan Lynch. Click for the full TOJam 5 Participants Gallery. TOJam, [...]]]></description>
			<content:encoded><![CDATA[<p>They say you can&#8217;t win &#8216;em all.  That&#8217;s usually true, except in the case of my insane day at the TOJam Arcade when i, in point of fact, actually <em>did</em> win &#8216;em all.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/ryanHensonCreighton.jpg"></p>
<p>This is me, trying to blast off.  Photo by the unstoppable Brendan Lynch. Click for the full <a href="http://www.flickr.com/photos/brendanlynch/tags/tojam5">TOJam 5 Participants Gallery</a>.
</div>
<p><a href="http://www.tojam.ca">TOJam</a>, you may know, is the Toronto Indie Game Jam, where sweaty nerds spend a weekend building games.  The fifth anniversary of the event was my fourth time attending.  If i could go back in time, i&#8217;d definitely attend the first one.  i&#8217;d also give Hitler a purple nurple.</p>
<p>A month or so after TOJam, the organizers put together a public exhibition of the games called the TOJam Arcade.  The game creators can use that time to fix whatever didn&#8217;t work by the end of the original weekend (which is usually everything.)</p>
<h2>Beer.</h2>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/beer.jpg">
</div>
<p>This year&#8217;s arcade was held last Saturday night at the Imperial Pub near Yonge and Dundas Square.  We succeeded in putting out the older barflies, who were pissed at not being able to watch their horse races, and  the inebriated college crowd, who came precariously close to sloshing house draft on the data projectors.</p>
<h2>Prizes.</h2>
<p>At the end of the evening, they held a raffle with prizes comped by <a href="http://bigbluebubble.com/">Big Blue Bubble</a>, and some guy named Andy.  They called my ticket number, and i was stunned to find i&#8217;d won the big prize of the evening &#8211; an Xbox 360 Elite bundle with Halo ODST, Forza 3, and a copy of Assassin&#8217;s Creed and Prince of Persia. It&#8217;s been over a decade since i&#8217;ve won something in a raffle, so it was a nice surprise.  Thanks, Big Blue Bubble!</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/xbox.jpg">
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/princeOfPersia.jpg">
</div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/assassinsCreed.jpg">
</div>
<p>Soon after, they announced the People&#8217;s Choice Awards.  Our game <b>Heads</b> was voted &#8220;Best Use of Theme&#8221;.  The TOJam 5 theme was &#8220;missing&#8221;, and <b>Heads</b> is about a guy who wakes up to find that he&#8217;s literally lost his head.  It was a really nice and unexpected win, but i think some other teams came up with far more subtle and clever uses of the theme.  (Don&#8217;t get me wrong, though &#8211; i&#8217;m not complaining!) </p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/heads.jpg"></p>
<p><b>Heads</b>, coming soon to the web and Android.
</div>
<p>After struggling to balance the Xbox home on my bike through rain-slicked streets, i went to lock up in the bike room and found a ten dollar bill on the floor.  True.  That actually happened.  It all made me feel bad for kicking that kitten in the face earlier in the day.</p>
<h2>Other Non-Me Winners</h2>
<p>The top three Peoples Choice games included <b>Nom Nom Nom Nom</b> (a <b>Hungry Hungry Hippos</b> clone with three cats and a goat), <b>MonoClimb</b>, the black-and-white co-operative platformer by prize-donating Andy and friends (i mentioned it in my <a href="http://www.untoldentertainment.com/blog/2010/04/27/jammed/">last TOJam article</a>), and <b><a href="http://www.flickr.com/photos/dvanvliet/4552762699/">Last Hadron Collider</a></b>, a two-player simultaneous obstacle race with randomly-generated levels and great-looking character sprites.  You&#8217;ll be able to play all these games and more at the TOJam site once everything is uploaded. </p>
<p>Once the games are up, i&#8217;ll write another post listing my own People&#8217;s Choice picks with some undiscovered gems.  In the meantime, i&#8217;ll try not to let our productivity on <b><a href="http://www.spellirium.com">Spellirium</a></b> take too much of a hit, now that we can finally put those extra <b>Rock Band instruments</b> to use at the office.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_06_07/rockBand.jpg"></p>
<p>How are we doing on that next milestone, fellas?
</p></div>
<div class="tweetmeme_button" style="margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F06%2F07%2Ftojam-arcade-and-the-best-day-evar%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.untoldentertainment.com%2Fblog%2F2010%2F06%2F07%2Ftojam-arcade-and-the-best-day-evar%2F&amp;source=untoldent&amp;style=normal&amp;service_api=R_44463fc40e5eda8ec585b4088e695066&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p class="fbconnect_share"><fb:share-button class="url" href="http://www.untoldentertainment.com/blog/2010/06/07/tojam-arcade-and-the-best-day-evar/" /></p><img src="http://www.untoldentertainment.com/blog/?ak_action=api_record_view&id=2589&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.untoldentertainment.com/blog/2010/06/07/tojam-arcade-and-the-best-day-evar/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Cooking with Flash: Drawing with Strokes and Fills</title>
		<link>http://www.untoldentertainment.com/blog/2010/05/12/cooking-with-flash-drawing-with-strokes-and-fills/</link>
		<comments>http://www.untoldentertainment.com/blog/2010/05/12/cooking-with-flash-drawing-with-strokes-and-fills/#comments</comments>
		<pubDate>Wed, 12 May 2010 15:49:24 +0000</pubDate>
		<dc:creator>Ryan Henson Creighton</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Cooking With Flash]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.untoldentertainment.com/blog/?p=2515</guid>
		<description><![CDATA[Prerequisites: Basic Flash Project Setup Begin Let&#8217;s learn to draw with Flash! Flash is not the most feature-rich vector drawing package available. During its development lifecycle, the creators of Flash listened more closely to programmers than artists. As a result, many new features for artists fell by the wayside, while Flash developed a (near) fully-featured [...]]]></description>
			<content:encoded><![CDATA[<p><b>Prerequisites:</b></p>
<ul>
<li><a href="http://www.untoldentertainment.com/blog/2010/05/06/cooking-with-flash-basic-flash-project-setup/">Basic Flash Project Setup</a>
</ul>
<h2>Begin</h2>
<p>Let&#8217;s learn to draw with Flash! </p>
<p>Flash is not the most feature-rich vector drawing package available. During its development lifecycle, the creators of Flash listened more closely to programmers than artists. As a result, many new features for artists fell by the wayside, while Flash developed a (near) fully-featured programming language in its own right, ActionScript 3.0.  Meanwhile, other software developers came along and ate Flash&#8217;s lunch &#8211; most notably <a href="http://en.wikipedia.org/wiki/Toon_Boom_Animation">Toon Boom Animation</a> with its Harmony product, which is used in feature film production by Disney and other animation studios.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/harmony.png" alt="Toon Boom Harmony"></p>
<p>Because Toon Boom listened to animators while bulding the product, Harmony embarrasses Flash as an animation production tool.
</p></div>
<p>Still, Flash contains a great set of vector drawing tools, with some decent animation capabilities.  In this tutorial, we&#8217;ll cover the unique way in which Flash handles vector drawing.</p>
<h2>Vector vs. Raster</h2>
<p>Before we begin, we should just cover off what the word &#8220;vector&#8221; means as it pertains to drawing software.  Let&#8217;s take two images: a vector image on the left, and a raster image on the right:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/bunnies.jpg" alt="A vector and a raster bunny"></p>
</div>
<p>Now we&#8217;ll zoom into both images:</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/bunnies_zoomed.jpg" alt="A vector and a raster bunny zoomed"></p>
</div>
<p>Notice that the vector image remains smooth, while we can see the individual pixels (short for &#8220;picture elements&#8221;) that make up the raster image.</p>
<p>This happens is because the computer draws each image differently.  Raster drawing is like painting on a canvas, while vector drawing is like describing shapes with math.  The computer retains the <em>mathematical calculations</em> it needs to redraw a vector image at any size.  But when you blow up a raster image, there&#8217;s only <em>so much</em> picture information the computer knows about the image. It can try filling in the blanks, but the results are usually mediocre.</p>
<p>The other big difference between the two comes when you want to move elements around.  In a vector image, elements are separate, like fridge magnets.  You can move them around, and put them in front of or behind each other, and all is fine and dandy. But when you move a piece of a raster image, it&#8217;s like you&#8217;re taking a pair of scissors to a canvas and cutting a chunk out of it &#8211; you wind up with a gaping hole.  Modern raster programs often have a Layers feature that keeps elements separated, but this is just essentially like working with multiple flat images composited on top of each other. The problem remains.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/monaLisa.jpg" alt="Mona Lisa raster image"></p>
<p>I&#8217;m sorry, Sir &#8211; we&#8217;re going to have to ask you to kindly leave the Louvre.
</p></div>
<p>Some examples of raster image software include Photoshop, GIMP, and MS Paint.</p>
<p>Some examples of vector image software include Fireworks, Illustrator, Flash, and any 3D software (3D Studio Max, Maya, Blender, etc.)</p>
<p>Tricksy falseness occurs when you realize that many vector packages can <em>import</em> raster images.  Many times, i&#8217;ve requested a vector logo from a client so that i can blow it up to a certain size without it looking pixellated.  When i ask for the corporate logo &#8220;in Illustator&#8221;, i usually get an Illustrator file with an imorted raster image. Thees, of course, ees <em>boolchit</em>.  It makes more sense to ask for a <em>vector</em> image instead of an Illustrator file, but not everyone knows what exactly a vector image is.  Now <em>you</em> know!  Spread the word, and share this tutorial.</p>
<h2>1. Strokes vs. Fills</h2>
<p>In Flash, the things you draw are called <b>shapes</b>. The outline of a shape (the &#8220;stroke&#8221;) is separate from the colour inside a shape (the &#8220;fill&#8221;).  Witness:</p>
<ol>
<li>Open Flash.
<li>Click the Rectangle tool in the Tools palette, or press the R key on your keyboard. (If you can&#8217;t see the Tools palette, click Window > Tools in the menus, or hit CTRL/Command + F2 on your keyboard)
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/rectangleTool.jpg" alt="Flash Rectangle tool"></p>
</div>
<li>Click and drag the mouse on the Stage (the rectangular white area in the middle of the screen) to make a rectangle shape. By default, you should see a white rectangle with a black stroke.  You can change the stroke and fill colours before drawing by clicking the stroke and fill colour swatches in the Tools palette, and choosing different colours.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/colourSwatches.jpg" alt="Flash colour swatches"></p>
</div>
<li>Click the black Selection tool at the top of the Tools palette.
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/selectionTool.jpg" alt="Flash selection tool"></p>
</div>
<li>Click once inside the rectangle to select the white filled area.  It goes &#8220;fuzzy&#8221;, indicating that it&#8217;s selected.
<li>Click on any blank area on the Stage to deselect the fill.
<li>Double-click on the black stroke around the edge of the rectangle. The stroke goes fuzzy too, indicating that it&#8217;s selected. (you may notice that you can also single-click the stroke to select one of the four edges individually)
<li>Click and drag to move the stroke away from the fill, independently.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/selectedFill.jpg" alt="Flash selected fill"></p>
<p>A white rectangle on the stage with a selected fill &#8230;
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/selectedStroke.jpg" alt="Flash selected fill"></p>
<p>&#8230; and a selected stroke.
</p></div>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/separated.jpg" alt="Separated stroke and fill"></p>
<p>You can pick up and move the stroke independently of the fill. (i&#8217;ve selected the white fill area so that you can see it against the white Stage)
</p></div>
<p>The stroke and fill are two separate things!  If at any time you want to select the fill and the stroke together, double-click the fill, and the stroke will be selected along with it.</p>
<h2>2. Strokes Cut Fills</h2>
<p>Strokes can behave like cut lines in sewing, or hot wires in clay modeling. They slice fills.  Let&#8217;s see that in action.</p>
<ol>
<li>Press CTRL/Command+A to select everything on the stage, and then press delete to get rid of your last shapes.
<li>Click the fill colour swatch in the Tools palette.  Click to select a non-white colour.  i like yellow, because it reminds me of delicious snow.
<li>Click the Rectangle tool, then click and drag to draw a rectangle on the Stage.
<li>Click the Selection tool (the black arrow)
<li>As before, double-click to select the stroke around the rectangle.
<li>Click and drag the stroke so that it intersects the fill.
<li>Click the part of the fill on the inside of the stroke. Now click the part of the fill on the outside of the stroke. Click and drag to move either of these fills to another part of the Stage.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/strokesCutFills.jpg" alt="Flash strokes cut fills"></p>
<p>Strokes cut fills.
</p></div>
<p>The stroke cut the fill in half, and made it into separate shapes.  For further exploration of this, try drawing a large rectangle, and draw wiggly strokes through it with the Pencil tool.  Note that your wiggly lines split the fills up into separate pieces too, because the Pencil tool creates fill-cutting strokes.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/pencilToolCut.jpg" alt="Flash strokes cut fills"></p>
<p>Here, i&#8217;ve used the Pencil tool to draw a wiggly stroke. It cuts the fill, so i can click and drag a wiggly-cut piece away as its own separate shape.
</p></div>
<h2>3. Working Without Strokes or Fills</h2>
<p>How do you get a rectangle without a stroke, or one without a fill?  In the colour palette fly-out, there is a small swatch with a red slash through it.  Use this to cancel the fill or stroke colour for your next shape.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/noStroke.jpg" alt="Flash no-colour button"></p>
<p>You can find the no-colour button in the top-right corner of the colour palette for both the stroke and fill swatches.
</p></div>
<h2>4. Same Colours Meld</h2>
<p>Two shapes of the same colour automatically fuse together.  Try it:</p>
<ol>
<li>Clear the stage of old artwork.  (CTRL/Command + A, Delete)
<li>Draw a red rectangle with no stroke (see above)
<li>Draw another red rectangle with no stroke overlapping the first.
<li>Click the Selection tool.
<li>Click on one of the two rectangles.  Both rectangles are selected.
</ol>
<p>There actually aren&#8217;t two rectangles any more &#8211; there&#8217;s only one.  Because they are the same colour, they melded together into the same shape.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/sameColoursUnite.jpg" alt="Flash same colours meld"></p>
<p>Two rectangles of the same colour meld together to form one shape.
</p></div>
<p>You can meld two shapes of the same colour even without drawing them on top of each other. Draw one red rectangle over here, then draw another one over there.  Using the Selection tool, drag one rectangle on top of the other. As long as the rectangle is selected, the two rectangles haven&#8217;t had colour sex yet &#8211; you can move the selected rectangle away without any fusion.  If instead you click the Stage to deselect the overlapping rectangle, then BOWM-CHIKKA!  What Flash has joined together, let no man put asunder.</p>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/tooHot.jpg" alt="Flash same colours meld"></p>
<p>Order the VHS box set for $19.99.
</p></div>
<h2>5. Different Colours Cut</h2>
<p>As with strokes, two shapes of different colours will cut each other when they overlap.  Regard:</p>
<ol>
<li>Clear your old artwork (CTRL/Command + A, Delete)
<li>Draw a red rectangle on the Stage.
<li>Choose a new colour for the fill swatch.  i chose green, because it&#8217;s the colour i turned after i ate that delicious snow.
<li>Draw your differently-coloured rectangle on the Stage, overlapping the first rectangle.
<li>Click and drag either of the two rectangles away from each other.
</ol>
<div class="displayed">
<p><img src="http://www.untoldentertainment.com/blog/img/2010_05_07/differentColoursCut.jpg" alt="Different colours cut"></p>
<p>Different colours cut each other, like the Jets and the Sharks.
</p></div>
<p>Two differently-coloured rectangles automatically slice each other, in what i can only assume is Flash&#8217;s way of warning us about racially-motivated violence.  Just as before, the two shapes don&#8217;t have to be drawn on top of each other for them to slice each other up.  Try drawing two shapes at opposite ends of the stage. Then drag one on top of the other.  Click on the Stage to deselect it &#8211; WHIPPOW!! That&#8217;s where the shanking happens.  Now drag one shape away from the other to view the carnage.</p>
<h2>6. Differently-Coloured Strokes are Distinct. Similarly-Coloured Strokes Become Fused.</h2>
<p>Finally, we&#8217;ll see how strokes behave with each other depending on their colours.</p>
<ol>
<li>Clear your old artwork (CTRL/Command + A, Delete)
<li>Choose the no-fill option for the stroke colour swatch.
<li>Choose a colour for your stroke.  i choose black, to reflect the rage and despair in my soul.
<li>Draw a rectangle on the Stage.
<li>Draw another black-stroked rectangle, overlapping the first one.
<li>Choose a different colour for your next stroke, like brown, which is the colour of chocolate when you poop it out.
<li>Draw another overlapping rectangle on the first one.
<li>Using the Selection tool, double-click the black stroke.  The two black rect
