<?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>dave&#039;s blog of art and programming &#187; groworld</title>
	<atom:link href="http://www.pawfal.org/dave/blog/category/groworld/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pawfal.org/dave/blog</link>
	<description>missing acceptable use policy</description>
	<lastBuildDate>Fri, 10 Feb 2012 18:20:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Germination X: striving for simplicity</title>
		<link>http://www.pawfal.org/dave/blog/2012/02/germination-x-striving-for-simplicity/</link>
		<comments>http://www.pawfal.org/dave/blog/2012/02/germination-x-striving-for-simplicity/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 16:01:23 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2500</guid>
		<description><![CDATA[In late December the Mobile Life Centre in Stockholm ran the first focus test for Germination X, and last week I met up with them to get the feedback in detail. Even for a small study of 5 players, this was very detailed - but the broad conclusions were that the underlying 'ecological model' of [...]]]></description>
			<content:encoded><![CDATA[<p>In late December the <a href="http://www.mobilelifecentre.org/">Mobile Life Centre</a> in Stockholm ran the first focus test for <a href="http://www.germinationx.com">Germination X</a>, and last week I met up with them to get the feedback in detail. Even for a small study of 5 players, this was very detailed - but the broad conclusions were that the underlying 'ecological model' of permaculture is being communicated very effectively via the game - the players got the idea of this quickly through playing, without it being explicitly communicated in a didactic manner. </p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2012/02/chatty.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2012/02/chatty.png" alt="" title="chatty" width="368" height="293" class="alignnone size-full wp-image-2501" /></a></p>
<p>On the downside, the role of the spirits were not clear to players at all - confusion from the quantity of messages, players constantly logging out to see what was going on from the public message timeline, and both the characters emotional state and connections between them and the permaculture plant layers were completely lost in the noise. Added to this, with the short duration of the study (1.5 hours) the pick power restriction was a massive problem, leaving players with nothing to do for long periods of time.</p>
<p>With more focus studies planned I've updated the game to deal with some of these issues as best I can:</p>
<p>Pick power is now recharged much faster. To balance this out, and add to the challenge of foraging for seeds and fruit they now regrow much slower and are harder to find in the world. </p>
<p>The way spirit messages are dealt with is now completely overhauled. All messages they send are viewable by all players all the time. They are displayed as speech bubbles by the spirits, making it clearer that they are responsible for them. They are now filtered out of players timeline messages to avoid problems with spamming too many messages. </p>
<p>There are also a bunch of updates to improve responsiveness of the world and make reactions to player's activity faster to experience. Plant no longer gain health from nearby plants which are ill, which means reactions to new plants happen faster. The season length is shorter again (10 minutes for a full year cycle). Some optimisation of the mongodb code dealing with message dispatching means I've been able to double the refresh rate of the game (number of world tiles updated per second) while also reducing overall server CPU usage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2012/02/germination-x-striving-for-simplicity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MapReducing plants and players</title>
		<link>http://www.pawfal.org/dave/blog/2012/01/mapreducing-plants-and-players/</link>
		<comments>http://www.pawfal.org/dave/blog/2012/01/mapreducing-plants-and-players/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 12:39:26 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2477</guid>
		<description><![CDATA[I haven't been doing much work on Germination X lately, but we are now up to 101 players, and 766 plants alive at time of writing. Of the 101 players 60 of them are on the first "level" of planting ground cover plants, 24 are at level 2 planting shrubs and 4 have made it [...]]]></description>
			<content:encoded><![CDATA[<p>I haven't been doing much work on <a href="http://www.germinationx.com">Germination X</a> lately, but we are now up to 101 players, and 766 plants alive at time of writing. Of the 101 players 60 of them are on the first "level" of planting ground cover plants, 24 are at level 2 planting shrubs and 4 have made it to tree planting. 13 have completed the tree planting level and are free to plant what they like.</p>
<p>The <a href="http://www.mongodb.org/">mongodb database</a> the game now uses allows you to connect via a console and pull out some statistics using bits of JavaScript with a feature called mapReduce - an idea based on the lisp functions map and reduce (or fold in Scheme) and made popular by Google with it's search algorithm.</p>
<p>Each tile in the world contains a list of entities (each plants is an entity), so we can "map" over the tiles, creating a new list of plant counts. Then we "reduce" over the counts with another function to find the total. This approach allows the database to do the operations in parallel, and control the amount of memory required - which would be necessary if we had a fair few more players :)</p>
<pre style='color:#000000;background:#ffffff;'>db<span style='color:#808030; '>.</span>tiles<span style='color:#808030; '>.</span>mapReduce<span style='color:#808030; '>(</span>
    <span style='color:#696969; '>// map fn </span>
    <span style='color:#800000; font-weight:bold; '>function</span><span style='color:#808030; '>(</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
        emit<span style='color:#808030; '>(</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>total</span><span style='color:#800000; '>"</span><span style='color:#808030; '>,</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#800000; font-weight:bold; '>this</span><span style='color:#808030; '>.</span>entities<span style='color:#808030; '>.</span>length<span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
    <span style='color:#800080; '>}</span><span style='color:#808030; '>,</span>
    <span style='color:#696969; '>// reduce fn</span>
    <span style='color:#800000; font-weight:bold; '>function</span><span style='color:#808030; '>(</span>key<span style='color:#808030; '>,</span> values<span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
        <span style='color:#800000; font-weight:bold; '>var</span> result<span style='color:#808030; '>=</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#008c00; '>0</span><span style='color:#800080; '>}</span><span style='color:#800080; '>;</span>
        values<span style='color:#808030; '>.</span>forEach<span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>function</span><span style='color:#808030; '>(</span>v<span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
            result<span style='color:#808030; '>.</span>count<span style='color:#808030; '>+=</span>v<span style='color:#808030; '>.</span>count<span style='color:#800080; '>;</span>
        <span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
        <span style='color:#800000; font-weight:bold; '>return</span> result<span style='color:#800080; '>;</span>
    <span style='color:#800080; '>}</span><span style='color:#808030; '>,</span>
    <span style='color:#696969; '>// tell it to spit out the result in the console</span>
    <span style='color:#800080; '>{</span>out<span style='color:#800080; '>:</span> <span style='color:#800080; '>{</span>inline<span style='color:#800080; '>:</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>}</span><span style='color:#800080; '>}</span>
<span style='color:#808030; '>)</span>
</pre>
<p>This more complex example tells us the distribution of players by how far they have got:</p>
<pre style='color:#000000;background:#ffffff;'>db<span style='color:#808030; '>.</span>players<span style='color:#808030; '>.</span>mapReduce<span style='color:#808030; '>(</span>
    <span style='color:#696969; '>// map fn</span>
    <span style='color:#800000; font-weight:bold; '>function</span><span style='color:#808030; '>(</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
        <span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>this</span><span style='color:#808030; '>.</span>layer<span style='color:#808030; '>==</span><span style='color:#008c00; '>0</span><span style='color:#808030; '>)</span> emit<span style='color:#808030; '>(</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>ground cover</span><span style='color:#800000; '>"</span><span style='color:#808030; '>,</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
        <span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>this</span><span style='color:#808030; '>.</span>layer<span style='color:#808030; '>==</span><span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span> emit<span style='color:#808030; '>(</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>shrub</span><span style='color:#800000; '>"</span><span style='color:#808030; '>,</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
        <span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>this</span><span style='color:#808030; '>.</span>layer<span style='color:#808030; '>==</span><span style='color:#008c00; '>2</span><span style='color:#808030; '>)</span> emit<span style='color:#808030; '>(</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>tree</span><span style='color:#800000; '>"</span><span style='color:#808030; '>,</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
        <span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>this</span><span style='color:#808030; '>.</span>layer<span style='color:#808030; '>==</span><span style='color:#008c00; '>3</span><span style='color:#808030; '>)</span> emit<span style='color:#808030; '>(</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>complete</span><span style='color:#800000; '>"</span><span style='color:#808030; '>,</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
    <span style='color:#800080; '>}</span><span style='color:#808030; '>,</span>
    <span style='color:#696969; '>// reduce fn</span>
    <span style='color:#800000; font-weight:bold; '>function</span><span style='color:#808030; '>(</span>key<span style='color:#808030; '>,</span> values<span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
        <span style='color:#800000; font-weight:bold; '>var</span> result<span style='color:#808030; '>=</span><span style='color:#800080; '>{</span>count<span style='color:#800080; '>:</span><span style='color:#008c00; '>0</span><span style='color:#800080; '>}</span><span style='color:#800080; '>;</span>
        values<span style='color:#808030; '>.</span>forEach<span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>function</span><span style='color:#808030; '>(</span>v<span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
            result<span style='color:#808030; '>.</span>count<span style='color:#808030; '>+=</span>v<span style='color:#808030; '>.</span>count<span style='color:#800080; '>;</span>
        <span style='color:#800080; '>}</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
        <span style='color:#800000; font-weight:bold; '>return</span> result<span style='color:#800080; '>;</span><span style='color:#800080; '>}</span><span style='color:#808030; '>,</span>
    <span style='color:#800080; '>{</span>out<span style='color:#800080; '>:</span> <span style='color:#800080; '>{</span>inline<span style='color:#800080; '>:</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>}</span><span style='color:#800080; '>}</span>
<span style='color:#808030; '>)</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2012/01/mapreducing-plants-and-players/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GX: Intelligent butterflies etc</title>
		<link>http://www.pawfal.org/dave/blog/2011/12/gx-intelligent-butterflies-etc/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/12/gx-intelligent-butterflies-etc/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 23:46:18 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2451</guid>
		<description><![CDATA[Over the last couple of weeks Germination X has managed to attract 70 players picking and planting in a permaculture world, with plants now covering 92 5x5 tiles - watch out Zynga :) This week has seen some more additions, firstly giving gifts to spirits has a large effect on their emotions positive and negative, [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last couple of weeks <a href="http://www.germinationx.com">Germination X</a> has managed to attract 70 players picking and planting in a permaculture world, with plants now covering 92 5x5 tiles - watch out Zynga :) This week has seen some more additions, firstly giving gifts to spirits has a large effect on their emotions positive and negative, and while it needs a bit more work - the wording of messages is modified according to the spirit's emotional state at the time they send them.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-014.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-014.png" alt="" title="gx-014" width="343" height="367" class="alignnone size-full wp-image-2452" /></a></p>
<p>The other big change is a new activity for when you are out of picking power which can give you more information about the other player's plants - the butterflies can be drag-dropped over plants to find out who planted them.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-013-crop.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-013-crop.png" alt="" title="gx-013-crop" width="319" height="252" class="alignnone size-full wp-image-2453" /></a></p>
<p>Having this kind of information available makes some open ended meta games possible, such as a group of players getting together to take over part of the world. The role of the spiders remains mysterious, but I'm trying to figure it out...</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/12/gx-intelligent-butterflies-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gameplay balancing and emotional turmoil</title>
		<link>http://www.pawfal.org/dave/blog/2011/12/gameplay-balancing-and-emotional-turmoil/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/12/gameplay-balancing-and-emotional-turmoil/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 12:35:39 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2440</guid>
		<description><![CDATA[Balancing is where you tweak games to get the right level of difficulty - doing this on a single player game is hard enough, but on a live game with active players its quite tricky. Germination X is currently too easy, which results in plants happily growing packed closely together (blocking subsequent players from planting) [...]]]></description>
			<content:encoded><![CDATA[<p>Balancing is where you tweak games to get the right level of difficulty - doing this on a single player game is hard enough, but on a live game with active players its quite tricky. <a href="http://www.germinationx.com">Germination X</a> is currently too easy, which results in plants happily growing packed closely together (blocking subsequent players from planting) so I made some slight changes, which had the effect of causing an environmental collapse which lasted several hours, completely sending the plant spirits into depths of simulated emotional turmoil.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-012.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-012.png" alt="" title="gx-012" width="716" height="552" class="alignnone size-full wp-image-2446" /></a></p>
<p>I've also noticed that players are not tending to send each other gifts, which is probably for many reasons - the most obvious being that they don't know it's possible. Part of a fix for this is to add some general help when players start - this seems a common practice with social games.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-help-01.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-help-01.png" alt="" title="gx-help-01" width="448" height="267" class="alignnone size-full wp-image-2441" /></a> <a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-help-02.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-help-02.png" alt="" title="gx-help-02" width="433" height="156" class="alignnone size-full wp-image-2442" /></a> <a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-help-03.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/12/gx-help-03.png" alt="" title="gx-help-03" width="509" height="261" class="alignnone size-full wp-image-2443" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/12/gameplay-balancing-and-emotional-turmoil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Germination X: Game design in pieces</title>
		<link>http://www.pawfal.org/dave/blog/2011/11/germination-x-game-design-in-pieces/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/11/germination-x-game-design-in-pieces/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 10:21:35 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2417</guid>
		<description><![CDATA[The current focus for Germination X is encouraging collaboration between players, with the subjects of pemaculture and companion planting deeply interwoven into the gameplay. It's important to avoid the normal problems with "educational games" where the subject matter is bolted onto some existing game. This is rarely a successful strategy.
Firstly players now are grouped into [...]]]></description>
			<content:encoded><![CDATA[<p>The current focus for <a href="http://www.germinationx.com">Germination X</a> is encouraging collaboration between players, with the subjects of pemaculture and companion planting deeply interwoven into the gameplay. It's important to avoid the normal problems with "educational games" where the subject matter is bolted onto some existing game. This is rarely a successful strategy.</p>
<p>Firstly players now are grouped into different roles based on the permaculture layers represented in the game:</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/progression.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/progression-1024x224.png" alt="" title="progression" width="600" height="130" class="alignnone size-large wp-image-2418" /></a></p>
<p>As players progress they get a chance to take on different roles as they can only pick fruit from plants from the layer they belong to. This means that even experienced players require the help of new players to provide nutrients for their plants.</p>
<p>Another big decision was to separate the "social elements" of the design from the things you need in order to progress through the game. Part of the idea is to remove situations like this:</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/trappedperson.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/trappedperson.png" alt="" title="trappedperson" width="291" height="270" class="alignnone size-full wp-image-2423" /></a></p>
<p>I forget which game the screenshot was originally from (I think a city building facebook game), but it had absolutely no connection with the themes of the game. Relationships seem generally to be treated like resources in most of these games - the main motivation being to increase virality. I'd like to leave things a little more open to interpretation (partly so we can explore further possibilities a little more).</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/separation.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/separation-1024x621.png" alt="" title="separation" width="512" height="310" class="alignnone size-large wp-image-2424" /></a></p>
<p>There are quite a few things classified as "social activity" in the game, but none of them are a direct requirement to progress, no meanings are "hardwired" with rewards or punishments - e.g. the meaning of passing different fruits to other players, or the ability to plant detrimental as well as beneficial plants. The idea is to create a situation where collaboration is important but not formulaic - the game provides a basic need for people to help each other, a couple of ways to do it and some ways for them to initially connect with each other - mainly though the plant spirits:</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/collab.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/collab-1024x243.png" alt="" title="collab" width="512" height="121" class="alignnone size-large wp-image-2425" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/11/germination-x-game-design-in-pieces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Germination X: player progression and surprises</title>
		<link>http://www.pawfal.org/dave/blog/2011/11/germination-x-player-progression-and-surprises/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/11/germination-x-player-progression-and-surprises/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 13:15:21 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2405</guid>
		<description><![CDATA[Slowly Germination X gets less like a prototype and more like a full game, lots of new stuff this week - as this is the first online release of the work done over the past month. 

Players can now pass items of fruit to each other or spirits as gifts (by dragging fruit over messages [...]]]></description>
			<content:encoded><![CDATA[<p>Slowly <a href="http://www.germinationx.com">Germination X</a> gets less like a prototype and more like a full game, lots of new stuff this week - as this is the first online release of the work done over the past month. </p>
<p><a href="http://www.germinationx.com"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/11/gx-011.png" alt="" title="gx-011" width="720" height="576" class="alignnone size-full wp-image-2407" /></a></p>
<p>Players can now pass items of fruit to each other or spirits as gifts (by dragging fruit over messages and dropping them). There is some limited player development with some small surprises to prolong the gameplay a bit (spot the new plants). There is now a new mechanism to introduce players to the game and get feedback from them and also navigation to quickly locate plants - click on a message to teleport to the plant it concerns.</p>
<p>Still lots of rough edges, hopefully I will be able to smooth some of them out next week at the <a href="http://www.mobilelifecentre.org/">Mobile Life Centre</a> in Stockholm. We have also now moved the game to it's own dedicated server, and completed the transition to <a href="http://w.mongodb.org">mongodb</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/11/germination-x-player-progression-and-surprises/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Germination X &#8211; designing for cooperation</title>
		<link>http://www.pawfal.org/dave/blog/2011/10/germination-x-designing-for-cooperation/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/10/germination-x-designing-for-cooperation/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 07:33:08 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[clojure]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2348</guid>
		<description><![CDATA[Over the last week I've been designing and implementing a lot more game mechanics for Germination X which are needed for an upcoming visit to the Mobile Life Lab in Stockholm. The more interesting ones involve some direct player - player interaction. The thing I'm trying to balance is keeping the central design simple (what [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last week I've been designing and implementing a lot more game mechanics for Germination X which are needed for an upcoming visit to the <a href="http://www.mobilelifecentre.org/">Mobile Life Lab</a> in Stockholm. The more interesting ones involve some direct player - player interaction. The thing I'm trying to balance is keeping the central design simple (what you have to do), but adding just enough for it to be taken further by players (how you do it). One important part of this is emphasising cooperation without making it mandatory - something I think is a mistake to do, and leaving the way that people interact online as open to interpretation as possible. <a href="http://tale-of-tales.com/">Tale of Tale's</a> <a href="http://tale-of-tales.com/TheEndlessForest/">Endless Forest</a> is a good reference point here.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/10/gx-design.jpg"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/10/gx-design-300x208.jpg" alt="" title="gx-design" width="300" height="208" class="alignnone size-medium wp-image-2353" /></a></p>
<p>The focus is adding a kind of "levelup" system for players to progress through the game in a longer term way than currently, along with some surprises. Also adding a way for players to send fruit they pick to other players as gifts, or to the plant spirits as a kind of "offering".</p>
<p>The other major change is updating the game to use <a href="http://www.mongodb.org/">MongoDB</a> to store all it's data. I'm using <a href="https://github.com/aboekhoff/congomongo">congomongo</a> as the Clojure wrapper, and it's been fairly simple to integrate with the existing game code as I can replace normal Clojure functions like reduce with versions that iterate over records in the database. These can also be written to load data and work on it in chunks, to keep the memory overhead fixed:</p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>defn</span> db-reduce
  <span style='color:#0000e6; '>"run f on each item in the collection, return the result"</span>
  <span style='color:#808030; '>[</span>f ret coll<span style='color:#808030; '>]</span>
  <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>loop</span> <span style='color:#808030; '>[</span>skip <span style='color:#008c00; '>0</span> ret ret<span style='color:#808030; '>]</span>
    <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>let</span> <span style='color:#808030; '>[</span>limit <span style='color:#008c00; '>200</span> <span style='color:#696969; '>; limit to loading 200 records at a time</span>
          items <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>fetch</span> coll <span style='color:#400000; '>:limit</span> limit <span style='color:#400000; '>:skip</span> skip<span style='color:#808030; '>)</span><span style='color:#808030; '>]</span> <span style='color:#696969; '>; do the fetch</span>
      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>not</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>empty?</span> items<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span> <span style='color:#696969; '>; are there any items?</span>
        <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>recur</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>+</span> skip limit<span style='color:#808030; '>)</span> <span style='color:#696969; '>; do the next chunk</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>reduce</span> f ret items<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span> <span style='color:#696969; '>; reduce f over the items</span>
        ret<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/10/germination-x-designing-for-cooperation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lirec meeting in Bamberg</title>
		<link>http://www.pawfal.org/dave/blog/2011/10/lirec-meeting-in-bamberg/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/10/lirec-meeting-in-bamberg/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 10:53:26 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>
		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2284</guid>
		<description><![CDATA[Last week was another Lirec meeting in Bamberg, where I was able to present an in depth description of how Germination X works. I also had the chance to talk with SICS/mobile life lab (one of the other project partners) about how we can take the game forward with the aim to provide some studies [...]]]></description>
			<content:encoded><![CDATA[<p>Last week was another Lirec meeting in Bamberg, where I was able to present an in depth description of how Germination X works. I also had the chance to talk with <a href="http://www.mobilelifecentre.org/">SICS/mobile life lab</a> (one of the other project partners) about how we can take the game forward with the aim to provide some studies for how people relate to Lirec's companion/characters/plant spirits - and hopefully also other players.</p>
<p>The game's main mechanics are as follows:</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/10/mechanics.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/10/mechanics.png" alt="" title="mechanics" width="565" height="367" class="alignnone size-full wp-image-2285" /></a></p>
<p>Germination X is similar to other farming games except for the third factor - that plants may get ill if their ecosystem cannot provide them with what they need. The other thing that makes Germination X unique in the socal games space is of course the addition of the plant spirits.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/10/spirits.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/10/spirits.png" alt="" title="spirits" width="594" height="378" class="alignnone size-full wp-image-2286" /></a></p>
<p>Each spirit represents a group of plants - the more specific permaculture term is a "layer", as the groups represent the layers of a forest, from the root level (called rhizosphere) all the way up to the canopy trees.</p>
<p>Note: dandelions are more correctly part of the herbaceous layer, but we are taking artistic licence here, and lending it to the ground cover spirit for the moment.</p>
<p>In the FAtiMA rules for the game, the spirits have relationships defined for each of the plants in their group, and relationships defined between themselves. This allows us to use the way FAtiMA models emotions to get some nice results, for example if a player plants an apple tree the Tree Spirit may experience "Joy". However, the Ground Cover Spirit doesn't like the Tree Spirit as it's plants shade it's clover and dandelions too much - this action will cause it to express "Resentment". Such processes, so the theory goes, create more understandable and believable characters.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/10/lirec-meeting-in-bamberg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GX &#8211; messages, colours and continuous worlds</title>
		<link>http://www.pawfal.org/dave/blog/2011/09/gx-messages-colours-and-continuous-worlds/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/09/gx-messages-colours-and-continuous-worlds/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 11:34:05 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[clojure]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2253</guid>
		<description><![CDATA[A big update for Germination X today. 

The main new stuff includes:
The process of moving around the world is now more continuous, as the land is split into sub-tiles that are loaded 9 at a time. When you move out of the central tile the 3 at the back are discarded while the 3 at [...]]]></description>
			<content:encoded><![CDATA[<p>A big update for <a href="http://www.germinationx.com">Germination X</a> today. </p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/gx-003.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/gx-003.png" alt="" title="gx-003" width="723" height="489" class="alignnone size-full wp-image-2254" /></a></p>
<p>The main new stuff includes:</p>
<p>The process of moving around the world is now more continuous, as the land is split into sub-tiles that are loaded 9 at a time. When you move out of the central tile the 3 at the back are discarded while the 3 at the front are loading. Spirits can also "see" into the tiles surrounding their current one, and so can navigate the entire world slowly, but independently.</p>
<p>Spirit emotional colours - both in their character design and in their messages. I'll post more fully about this later.</p>
<p>The messaging system has been rewritten and now forms the major information source from the spirits. It's probably a little too much right now, and some thought is needed on effective ways to communicate some of these things. All the spirit's messages are triggered by actions driven by the FAtiMA agent. Here is an example of what happens when a "praise" action is received for an object:</p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>defn</span> spirit-praise <span style='color:#808030; '>[</span>spirit plant<span style='color:#808030; '>]</span>
  <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>modify</span> <span style='color:#400000; '>:log</span>
          <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>fn</span> <span style='color:#808030; '>[</span>log<span style='color:#808030; '>]</span>
            <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>log-add-msg</span>
             log
             <span style='color:#696969; '>; we can't exactly be sure why the fatima agent</span>
             <span style='color:#696969; '>; has triggered the praise action, but we can make</span>
             <span style='color:#696969; '>; an educated guess by looking at the plant</span>

             <span style='color:#696969; '>; if it's not the same type as the spirit</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>not</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>=</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>:name</span> spirit<span style='color:#808030; '>)</span>
                         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>layer->spirit-name</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>:layer</span> plant<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
               <span style='color:#696969; '>; we're happy as it's providing a benefit to our plant</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>make-praise-msg</span> <span style='color:#800080; '>'spirit_helper_praise</span> spirit plant<span style='color:#808030; '>)</span>
               <span style='color:#696969; '>; it's the same type</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>cond</span>
                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>=</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>:state</span> plant<span style='color:#808030; '>)</span> <span style='color:#800080; '>'grow-a</span><span style='color:#808030; '>)</span>
                <span style='color:#696969; '>; we're happy because a new plant is growing</span>
                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>make-praise-msg</span> <span style='color:#800080; '>'spirit_growing_praise</span> spirit plant<span style='color:#808030; '>)</span>

                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>=</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>:state</span> plant<span style='color:#808030; '>)</span> <span style='color:#800080; '>'fruit-a</span><span style='color:#808030; '>)</span>
                <span style='color:#696969; '>; our plant is flowering (first phase of fruiting)</span>
                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>make-praise-msg</span> <span style='color:#800080; '>'spirit_flowering_praise</span> spirit plant<span style='color:#808030; '>)</span>

                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>=</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>:state</span> plant<span style='color:#808030; '>)</span> <span style='color:#800080; '>'fruit-c</span><span style='color:#808030; '>)</span>
                <span style='color:#696969; '>; our plant is fruiting (last phase)</span>
                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>make-praise-msg</span> <span style='color:#800080; '>'spirit_fruiting_praise</span> spirit plant<span style='color:#808030; '>)</span>

                <span style='color:#696969; '>; i give up!</span>
                <span style='color:#400000; '>:else</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>make-praise-msg</span> <span style='color:#800080; '>'spirit_general_praise</span> spirit plant<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
          spirit<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>
<p>The Haxe client then reads the messages which consist of these codes and a host of other information (eg. the spirit's current emotional state and the players involved) and builds the text for display.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/09/gx-messages-colours-and-continuous-worlds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New plant spirits and dandelions</title>
		<link>http://www.pawfal.org/dave/blog/2011/09/new-plant-spirits-and-dandelions/</link>
		<comments>http://www.pawfal.org/dave/blog/2011/09/new-plant-spirits-and-dandelions/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 13:00:53 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[groworld]]></category>
		<category><![CDATA[lirec]]></category>

		<guid isPermaLink="false">http://www.pawfal.org/dave/blog/?p=2242</guid>
		<description><![CDATA[A large part of the recent work on Germination X has been finalising the character design for the plant spirits. We need something which can exhibit some connection with the permaculture plant layer the spirit represents along with a way to express emotions with the restrictions of the browser platform. This is an image from [...]]]></description>
			<content:encoded><![CDATA[<p>A large part of the recent work on Germination X has been finalising the character design for the plant spirits. We need something which can exhibit some connection with the permaculture plant layer the spirit represents along with a way to express emotions with the restrictions of the browser platform. This is an image from Lina's concept art - many more of which <a href="http://www.flickr.com/photos/linakusaite/sets/72157627225652124/">are online here</a>.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/spirits-concept.jpg"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/spirits-concept-249x300.jpg" alt="" title="spirits-concept" width="249" height="300" class="alignnone size-medium wp-image-2243" /></a></p>
<p>After a few iterations we have some ready to use in the game, the colours will be driven by their emotions (more on that later on). These are the ground cover (mulching), tree and shrub layer spirits:</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/cover-spirit.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/cover-spirit-300x283.png" alt="" title="cover-spirit" width="150" height="141" class="alignnone size-medium wp-image-2244" /></a> <a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/tree-spirit.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/tree-spirit-293x300.png" alt="" title="tree-spirit" width="146" height="150" class="alignnone size-medium wp-image-2245" /></a> <a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/shrub-spirit.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/shrub-spirit-277x300.png" alt="" title="shrub-spirit" width="138" height="150" class="alignnone size-medium wp-image-2246" /></a></p>
<p>Along with this, all the artwork in the game has been updated, taking Lina's latest versions and also increasing the resolution. I also had a chance to work on a new dandelion from Lina's uncoloured version, here are all of the different variations, with growth, autumn and illness stages.</p>
<p><a href="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/dandelion-all.png"><img src="http://www.pawfal.org/dave/blog/wp-content/uploads/2011/09/dandelion-all-1024x315.png" alt="" title="dandelion-all" width="768" height="236" class="alignnone size-large wp-image-2247" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pawfal.org/dave/blog/2011/09/new-plant-spirits-and-dandelions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

