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

<channel>
	<title>Chaos Garden &#187; Uncategorized</title>
	<atom:link href="http://www.chaoseed.com/garden/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chaoseed.com/garden</link>
	<description>Explorations into game design and creativity</description>
	<lastBuildDate>Sat, 04 Feb 2012 20:54:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Procedural Generation (the basics)</title>
		<link>http://www.chaoseed.com/garden/2010/04/21/procedural-generation-the-basics/</link>
		<comments>http://www.chaoseed.com/garden/2010/04/21/procedural-generation-the-basics/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 05:27:31 +0000</pubDate>
		<dc:creator>JohnEvans</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[procedural generation]]></category>

		<guid isPermaLink="false">http://www.chaoseed.com/garden/?p=85</guid>
		<description><![CDATA[The basics of procedural generation.  With code!]]></description>
			<content:encoded><![CDATA[<p><strong>What is procedural generation?</strong></p>
<p>Computer games have a lot of data associated with them; level designs, monster characteristics, items, all sorts of stuff usually referred to as <strong>content</strong>.  Where does this content come from?  Usually the game designers create it, they make it up and polish it to ensure that it meets requirements.</p>
<p>Still, if all your content is &#8220;hand-made&#8221;, that means someone has to make every bit of it.  For some games it&#8217;s more convenient to have the content <em>automatically</em> generated; generated by a procedure.  The process used to create the content is therefore called <strong>procedural generation</strong>.</p>
<p>Some people will refer to &#8220;random&#8221; generation, but there are usually strong constraints on the content produced.</p>
<p><a title="Diablo, the game series (at Wikipedia)" href="http://en.wikipedia.org/wiki/Diablo_%28series%29">The Diablo series of games</a> uses a lot of procedural generation.  In Diablo 2, there are a certain number of levels set in the sewers under a desert town.  Those levels all use &#8220;desert sewer&#8221; graphics, but the layout is procedurally generation for each game.  The tunnel twists and turns are generated, then populated with monsters.  Enemies and treasure chests drop generated treasure hoards featuring magical items with randomly chosen properties.  And there are many more examples in the computer game world.</p>
<p>(I keep talking about games, but I&#8217;m sure procedural generation has applications in other fields.  I just can&#8217;t think of any off the top of my head.)</p>
<p><strong>How To</strong></p>
<p>I&#8217;m going to cover some basic techniques for procedurally generating content.  They won&#8217;t solve every problem, but they&#8217;ll form a good framework for learning more.</p>
<p>The problem</p>
<p>A while back I wrote <a title="Create Randomized Demon Descriptions (at Chaoseed)" href="http://chaoseed.com/demons1.html">a program to generate randomized &#8220;demon&#8221; descriptions</a>.  Inspired by Dungeons &amp; Dragons demons, it produces descriptions of creatures that appear to be assembled from various creatures:</p>
<blockquote><p>Ramalfal is a female demoness, of a quadreped shape, of generally a gray  color.  She has a woman&#8217;s head mounted on the body of a scorpion.</p></blockquote>
<p>For this post I&#8217;ll go through making a (simpler) version of this program.  I&#8217;ll provide some code in PHP.</p>
<p><strong>Pseudorandom seeds</strong></p>
<p>It&#8217;s nearly impossible to create <em>true</em> randomness in computer programs.  Fortunately, nowadays it&#8217;s easy to create randomness that&#8217;s &#8220;good enough&#8221;.  Most languages provide a facility for creating pseudorandom numbers.  Give the number generator a seed, and it will return a string of numbers.  More precisely, there&#8217;s usually a &#8220;seed&#8221; function and a &#8220;rand&#8221; function; after you seed the generator, you call the rand function repeatedly, and you receive a number each time.</p>
<p>Pseudorandom number generators have two useful properties (assuming they&#8217;re working correctly, of course):</p>
<ol>
<li>Each seed generates a different string of numbers.</li>
<li>A specific seed will generate the same string of numbers each time it is used.</li>
</ol>
<p>The point here is that a seed will generate a string of numbers—and thus it will generate the entire passel of content you&#8217;re creating.  In a sense, the content is &#8220;compressed&#8221; into one seed (which is itself just a number).  The end users can trade seeds that they find interesting.  You&#8217;ll notice that the original demon generator uses user-input seeds.</p>
<p>PHP provides the mt_rand() pseudorandom number generator.  You can seed it with the mt_srand() function, although the generator is automatically seeded when mt_rand() is called for the first time.  (One trick programmers use with pseudorandom number generators is to seed them with the current time&#8230;if you find yourself in need of a seed.)</p>
<p><strong>Modular arithmetic</strong></p>
<p>Modular arithmetic is a simple concept, but powerful and useful in certain areas of programming (like this one).  It all has to do with division.  Imagine you&#8217;re dividing two integers; the divisor goes into the dividend a certain number of times, and then often <strong>a bit is left over</strong>.  This amount, the remainder, is the whole point of modular arithmetic.</p>
<p>7 divided by 3 is 2 with a remainder of 1; thus, 7 mod 3 is 1.</p>
<p>321 mod 10 is 1.</p>
<p>It may be easiest to think of it as the face of a clock, disregarding AM or PM.  If the clock says 12:00, and then we wait for 16 hours, what does the clock say?  It says 4, because 16 mod 12 is 4.  Of course, on a clock we have 12, and in modular arithmetic we would use 0.  For modulus 12, we use the numbers 0 to 11, since those are the only possible remainders.</p>
<p>This is important because a lot of times the numbers returned by the random number generator are rather large.  Let&#8217;s say we want to generate the roll of a standard six-sided die, and mt_rand() returns 8714182.  What now?  Well, if we take that number modulus 6, we will get a number from 0 to 5.  Then we can add 1 to get a number from 1 to 6.  (Of course, mt_rand() will take parameters specifying the minimum and maximum number to return.)</p>
<p>Modular arithmetic can be used in a pinch to let you do without random number generators.  If we have an array of five entries, they&#8217;re numbered from 0 to 4.  If we calculate our seed mod 5, we&#8217;ll get an index into the array.  Most programming languages use % for modular arithmetic, like so:</p>
<p><code>$chosen = $array[$seed % 5];</code></p>
<p>In fact, in PHP we don&#8217;t even have to worry about the size of the array, we can just calculate it:</p>
<p><code>$chosen = $array[$seed % count($array)];</code></p>
<p>Relative Primality</p>
<p>Relative primality is another simple concept that can be quite useful in this area.  However, if you&#8217;re really scared off by math, this section is optional.</p>
<p>Two numbers are <strong>relatively prime</strong> if they have <strong>no divisors in common</strong>.</p>
<ul>
<li>15 = 3 * 5.  12 = 3 * 2 * 2.  15 and 12 are not relatively prime, because they&#8217;re both divisible by 3.</li>
<li>15 = 3 * 5.  14 = 2 * 7.  15 and 14 are relatively prime.</li>
</ul>
<p>Let&#8217;s say that instead of using a simple modulus you want to mix things up a bit.  One way to do this is to add a number to your seed, but that just adds a bit of an offset.  A better way is to multiply your seed by a number.  (Combining the methods works well too.)  The one thing to remember is that if you multiplay your seed by a number, the multiplier and the modulus <em>must</em> be relatively prime.</p>
<p>If they aren&#8217;t relatively prime, you&#8217;ll get repeats in your pattern.  Let&#8217;s say we want to ultimately take a modulus of 6; let&#8217;s look at every possible seed in turn; 0, 1, 2 and so on.  They&#8217;ll make a sequence that looks like this:</p>
<p>0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2&#8230;</p>
<p>Now let&#8217;s multiply our seeds by 4.  0, 1, 2 becomes 0, 4, 8, 12, 16, 20, 24&#8230;and we get this:</p>
<p>0, 4, 2, 0, 4, 2, 0&#8230;</p>
<p>Because 6 and 4 are not relatively prime, we get repeats in the pattern.  Some of our elements aren&#8217;t even being used!  Let&#8217;s try multiplying by 5 instead.  0, 5, 10, 15, 20, 25, 30 gives us:</p>
<p>0, 5, 4, 3, 2, 1, 0&#8230;</p>
<p>That pattern might not seem too odd, but notice that <em>every number is represented</em>.  That&#8217;s what&#8217;s really important.</p>
<p><strong>Rerolling</strong></p>
<p>At this point we can make a little program to illustrate our points.  Let&#8217;s think of demons in the form of the head of some creature placed on the body of some other creature.</p>
<p><code>$heads = array("a man", "a woman", "a bird", "a dragon", "an insect");<br />
$bodies = array("a man", "a woman", "a bird", "a dragon", "an insect", "an octopus");<br />
$head = $heads[mt_rand() % count($heads)];<br />
$body = $bodies[mt_rand() % count($bodies)];<br />
$desc = "the head of $head on the body of $body";</code></p>
<p>If we run this program a few times, we&#8217;ll get output like the following:</p>
<p>the head of the man on the body of a dragon</p>
<p>the head of a bird on the body of a woman</p>
<p>the head of an insect on the body of an insect</p>
<p>But wait—that last one seems a bit boring.  We&#8217;re trying to make really bizarre creatures here, so how do we fix that?  One way would be to make sure none of the entries in the heads array match the entries in the bodies array, but that solution has problems.</p>
<p>The best solution is to choose a head, then choose a body; then if the body is unacceptable, choose a <em>different</em> body.  (Or, just keep choosing bodies until we find one that works.)</p>
<p><code>$heads = array("a man", "a woman", "a bird", "a dragon", "an  insect");<br />
$bodies = array("a man", "a woman", "a bird", "a  dragon", "an insect", "an octopus");<br />
$head = $heads[mt_rand() %  count($heads)];<br />
do<br />
{<br />
$body = $bodies[mt_rand() % count($bodies)];<br />
}<br />
while ($body == $head);<br />
$desc  = "the head of $head on the body of $body";</code></p>
<p>(This is one of the few places where I routinely use do/while loops, as opposed to while or for loops.)</p>
<p>I call this technique &#8220;rerolling&#8221; because it&#8217;s like rolling dice to look up entries on a table.</p>
<p><strong>Massaging</strong></p>
<p>This is a slightly more advanced technique that can be useful in some situations.  The original demon generator produces names as well.  These names are assembled from randomly chosen syllables.  However, sometimes the combinations are a little awkward, like &#8220;Ioeththul&#8221;.</p>
<p>The way I dealt with this was to <em>massage</em> the data.  The program replaces awkward letter combinations with better ones.</p>
<ul>
<li>&#8220;io&#8221; at the beginning becomes &#8220;yo&#8221;</li>
<li>&#8220;thth&#8221; becomes &#8220;th&#8221;</li>
</ul>
<p>By these rules, our awkward name becomes the more palatable &#8220;Yothul&#8221;.</p>
<p>The great thing about this technique is that it can produce text that is more intricate than parts assembled together.  The drawback is figuring out appropriate text replacement rules; with the original demons program, I pored over output from it to find names that sounded too awkward.</p>
<p><strong>Emergent Properties</strong></p>
<p>In the same vein as massaging, randomly chosen elements could contribute to characteristics of the final product.  For example, different body parts could add to the demon&#8217;s &#8220;combat rating&#8221;.</p>
<p><code>$head_combat = array("a man" =&gt; 3, "a woman" =&gt; 3, "a bird" =&gt; 0, "a dragon" =&gt; 2, "an   insect" =&gt; 1);<br />
$body_combat = array("a man" =&gt; 1, "a woman" =&gt; 1, "a bird" =&gt; 2, "a  dragon" =&gt; 4, "an insect" =&gt; 3,  "an octopus" =&gt; 1);</code></p>
<p>(Human heads are smarter, thus they&#8217;re more lethal in combat. <img src='http://www.chaoseed.com/garden/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p>So, after choosing all our parts, we can calculate stats for our demon.</p>
<p><code>$combat = $head_combat[$head] + $body_combat[$body];</code></p>
<p><strong>Culling</strong></p>
<p>Culling is rerolling taken a step further.  If we get to the end of an assemblage of parts and we decide we don&#8217;t like it, we can throw it out and start again.  It&#8217;s possible to do this instead of rerolling, but it&#8217;s best to start over as soon as you know you want to—and only change what&#8217;s necessary.</p>
<p>So why would we have to start over completely?  It would have to do with something that cares about the entire demon, like the combat statistic we just created.  Perhaps there&#8217;s an option on our new demon program that lets users ask for only demons with a certain combat statistic.</p>
<p>The simplest way to implement this is to take everything we&#8217;ve done so far and make it a function.  The main loop (&#8220;generate 100 demons&#8221;) calls the function to get a demon; if the combat statistic is appropriate, it adds the generated demon to the list&#8230;if not, it gets another one.</p>
<p>This approach may seem inefficient, but it has the advantage of being clear, straightforward and easily maintained.  (Just be sure to check that you&#8217;re not trying to create invalid content, like a demon with a combat statistic of 10!)  It would be difficult to write a program to make intelligent choices based on a target statistic&#8230;hardly impossible, of course, just difficult.</p>
<p><strong>In Conclusion</strong></p>
<p>I believe that designing an interesting procedural generation can be a challenge, but <em>implementing</em> it is not that hard.  I hope this post has helped you agree with me!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chaoseed.com/garden/2010/04/21/procedural-generation-the-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game Design: Leveraging User-Created Content</title>
		<link>http://www.chaoseed.com/garden/2009/04/30/game-design-leveraging-user-created-content/</link>
		<comments>http://www.chaoseed.com/garden/2009/04/30/game-design-leveraging-user-created-content/#comments</comments>
		<pubDate>Fri, 01 May 2009 00:34:56 +0000</pubDate>
		<dc:creator>JohnEvans</dc:creator>
				<category><![CDATA[Chaoseed]]></category>
		<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web-Based Games]]></category>
		<category><![CDATA[billy vs. snakeman]]></category>
		<category><![CDATA[bvs]]></category>
		<category><![CDATA[chaostorm]]></category>
		<category><![CDATA[oblivion]]></category>
		<category><![CDATA[phantasma]]></category>
		<category><![CDATA[simcity]]></category>
		<category><![CDATA[simcity societies]]></category>
		<category><![CDATA[spore]]></category>
		<category><![CDATA[user-created content]]></category>

		<guid isPermaLink="false">http://www.chaoseed.com/garden/?p=35</guid>
		<description><![CDATA[For years now I&#8217;ve been interested in games as tools for creative expression.  I like games where you don&#8217;t just develop a skill, you create something as you play.  Once you have created some bit of content, it&#8217;s possible to reuse and repurpose that content; to leverage it.  There is one obvious game to talk [...]]]></description>
			<content:encoded><![CDATA[<p>For years now I&#8217;ve been interested in games as tools for creative expression.  I like games where you don&#8217;t just develop a skill, you create something <em>as</em> you play.  Once you have created some bit of content, it&#8217;s possible to reuse and repurpose that content; to <em>leverage</em> it.  There is one obvious game to talk about, an elephant in the room, but I&#8217;d like to start with a simpler example.</p>
<p>Recently I&#8217;ve been playing a web-based game called <a title="Billy vs. Snakeman" href="http://www.animecubed.com/billy/">Billy vs. Snakeman</a>.  It&#8217;s a parody of various anime series, but it&#8217;s also a fun game in its own right, with some clever features.  In its most basic elements, BvS deals with developing your character over time.  You increase &#8220;your&#8221; stats and collect items; these stats and items allow you to pass challenges within the game.  The interesting point here is that you&#8217;re not just experience the game, you&#8217;re also creating a piece of content&#8211;your character.  That character exists within the database whether you&#8217;re logged in or not.</p>
<p>BvS has a feature called the Arena where you can &#8220;fight&#8221; other characters.  In truth, this isn&#8217;t really like a player vs. player (PvP) thing; whether you win or lose, you don&#8217;t affect the other character at all.  (There <em>are</em> more PvP-oriented aspects of BvS, if you&#8217;re into that.)  When you perform the &#8220;Fight in the Arena&#8221; action, a character is randomly chosen from the database to be your opponent.  That character and your character are compared to see how they perform against a random challenge; ties go to your character.  If you win, you get &#8220;Arena Reputation&#8221;, a currency that can be spent on certain items (items that can <em>only</em> be purchased with Arena Reputation).</p>
<p>The interesting thing here is that the second character is simply a piece of content that exists in the database.  The other player is not notified and is not affected in any way.  However, that player has spent time building up the character&#8217;s stats and items, as well as creating a customized name and possibly an avatar image to represent that character.  So each character is an interesting piece of content, and the characters are leveraged to create an interesting experience for this particular feature in the game.</p>
<p>Now for the more complex example&#8211;<a title="Spore" href="http://spore.com">Spore</a>.  Spore consists of five phases, but in terms of this post they each have the same game flow.  When you play Spore, you are creating something&#8211;a cell, a creature, a building, a spaceship.  Usually these bits of content have restrictions on them having to do with gameplay; for example, creatures need legs and feet to move around, so all created creatures have legs and feet (unless the player specifically tried for a pathologically strange one).  With that in mind, and the social and technical design of the &#8220;creator&#8221; subprograms, most of the content looks appropriate; that is to say, creatures look like creatures that can walk around, buildings look like dwellings where creatures could live and work.  (<a title="Writers Cabal: Create Your Own Time-to-Penis Quest" href="http://writerscabal.wordpress.com/2008/06/24/create-your-own-time-to-penis-quest/">Whether the content is socially appropriate is another question entirely!</a>)</p>
<p>Once content is created, it usually gets shared to the Spore servers (user settings can change this).  What this means is that your creature gets uploaded to the server, then it can be downloaded into someone else&#8217;s game.  Then when they wander their galaxy and explore alien worlds, they might find your creatures living on those worlds.  Similarly, when you wander your galaxy, you find it populated with creatures created by other players the world over.</p>
<p>As we can see by now, Spore was built around the idea of leveraging content created by users.  User-created content is shared to make other users&#8217; games more interesting.  The content is used in a &#8220;faux-multiplayer&#8221; way.  You meet other users&#8217; creations as if they were other players playing the same game that you&#8217;re playing.  They answer the challenges of the game in their own ways, and you get to see the result and compare it to your own strategy.</p>
<p>The faux-multiplayer idea has one big advantage&#8211;it&#8217;s easy to design.  You can take one user&#8217;s data and treat it as if it existed in another user&#8217;s game world.  You can have both sets of data following the same game rules.  This is fun because it can inject more interesting variety into the games; the assumption is that the process of play guides the players to create interesting content.  One pitfall is that players might arrive at the same answers to the game&#8217;s challenges, resulting in everyone&#8217;s data looking the same.  This is an issue worthy of its own post, but let me say that <a title="Magic: the Gathering" href="http://wizards.com/magic/">Magic: the Gathering</a> has addressed this problem better than anything else I&#8217;ve seen.  Magic is solely a multiplayer game where each player plays with a customized deck of cards; there are well-nigh unlimited combinations of cards that would stand a chance of winning, each with their own strategies.  Therefore creating a deck is itself a piece of creative expression that gets pitted against an opponent.</p>
<p>Now that I&#8217;ve gone over the basics, I&#8217;d like to speculate about new directions.  The way I see it, content leveraging can be divided into two segments; you encourage users to create interesting content, then you adapt that content in such a way as to improve the experience for someone else.</p>
<p>At this point I&#8217;d like to talk about a couple of web-based games I&#8217;ve created.  First is <a title="Phantasma" href="http://chaoseed.com/phantasma">Phantasma</a>; in this game, players portray wizards inhabiting a magical castle.  The emphasis is on developing your stats through &#8220;research&#8221;, learning spells and creating enchanted items.  Next is <a title="Chaostorm" href="http://chaoseed.com/chaostorm">Chaostorm</a>, a more abstract sort of game focused on creating items with procedurally-generated &#8220;recipes&#8221;.  Players can ultimately create &#8220;Scopes&#8221;, which assist them in finding items they need, and &#8220;Battle Items&#8221;, which boost their stats for PvP-ish contests.  Of course, because I&#8217;ve created both these games, I have access to all the content for both of them.  In Phantasma is a location entitled the &#8220;Kipatsu Shop&#8221;, known for selling items from &#8220;other worlds&#8221;.  In this case, the shop sells items from Chaostorm!  Randomly selected Chaostorm items are used as templates to create Phantasma items with appropriate power levels and prices.  Chaostorm Scopes are sold in Phantasma as &#8220;Elemental Scrutinizers&#8221; that assist a wizard&#8217;s research into the magical discipline of Elementalism, and Chaostorm Battle Items are sold as &#8220;Elemental Projectors&#8221; that increase a wizard&#8217;s spellcasting ability in that same realm.  The name and description of the item are imported directly from Chaostorm (with &#8220;Elemental Scrutinizer/Projector&#8221; prepended to the item&#8217;s name).  In this way, the content from Chaostorm is used to create interesting new items for Phantasma, in a carefully controlled process.</p>
<p>Chaostorm is a game designed to encourage users to create interesting content.  However, even less &#8220;experimental&#8221; games can yield intriguing bits of content.  As we saw with BvS, a player character itself is the sum of the player&#8217;s choices, their answers to the game&#8217;s challenges.  A long-time player of BvS has created an elaborately customized piece of data that represents a personality within that world.  This would hold for all sorts of games classified as &#8220;RPGs&#8221;, whether multiplayer or not.  Other games yield different types of content; <a title="SimCity" href="http://simcity.ea.com">SimCity</a> is an obvious example.  (<a title="SIMply Divine: The Story of Maxis Software" href="http://www.gamespot.com/features/maxis">Will Wright came up with the idea for SimCity while designing maps for the background of a helicopter game; he liked designing cities so much he made a game out of it.</a>)  With SimCity the player is tasked with creating a city.  There are a slew of city-building games that imitate this design; Caesar, Cleopatra, Stronghold, et al..  However, strategy games such as <a title="StarCraft" href="http://www.blizzard.com/us/starcraft/">StarCraft</a> have city-building elements as well, even if they&#8217;d be more likely to call it <em>base</em>-building.  There are any number of space-trading games that feature customizing one&#8217;s starships.  <a title="The Elder Scrolls IV: Oblivion" href="http://www.elderscrolls.com/games/oblivion_overview.htm">Oblivion</a> allows one to purchase dwellings and fill them with furniture, although there isn&#8217;t much in-game encouragement to customize your home exactly how you wish.  As I see it, there are two ingredients for interesting content creation; there must be restrictions to guide your users into creating content that makes sense, and there should be enough possibilities that not all content is identical.</p>
<p>The second part of the process is adapting the content for new purposes.  I believe this is the part where there are still great possibilities for advancement.  Once you have a city, for example, you can have the character walk through it&#8211;but that&#8217;s easy.  What if there was a game where the player bought a city in a bottle?  <a title="SimCity Societies" href="http://simcitysocieties.ea.com">SimCity Societies</a> allows the player to create cities that have different &#8220;stats&#8221;, such as Spirituality or Industry.  Perhaps the city in a bottle is an item&#8211;the character could wear it around their neck in the &#8220;necklace slot&#8221;.  And cities with high Spirituality would provide bonuses to MP or Magic stats, while cities with high Industry could increase Strength.  Or, you could have an item that represented another character&#8211;made into a voodoo doll, or maybe an item that provides a link to their strength.  And that would provide some customized bonuses depending on the other character&#8217;s stats.  The point is that there are many different types of content that games require, and many of them can be &#8220;filled&#8221; with data provided by other games.</p>
<p>(EDIT: <a title="Chaos Garden - Game Design: Leveraging User-Created Content 2: Context Switching" href="http://www.chaoseed.com/garden/?p=37">I wrote a little more on this subject for Part 2 of this article.</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chaoseed.com/garden/2009/04/30/game-design-leveraging-user-created-content/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

