<?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>Frogatto &#38; Friends</title>
	<atom:link href="http://www.frogatto.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.frogatto.com</link>
	<description>Development Blog</description>
	<lastBuildDate>Sat, 04 Sep 2010 09:16:28 +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>Frogatto 1.0.2 released</title>
		<link>http://www.frogatto.com/?p=313</link>
		<comments>http://www.frogatto.com/?p=313#comments</comments>
		<pubDate>Sat, 04 Sep 2010 09:16:28 +0000</pubDate>
		<dc:creator>Jetrel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=313</guid>
		<description><![CDATA[There&#8217;s a new version of frogatto out, which is mostly a small set of bugfixes.  It&#8217;s available for computers on our download page, and will be available for iPhone after we finish testing.
Here&#8217;s a short list of changes:
 * Added customizable controls.
 * Made it so you can skip dialogs sequences (by pressing escape).
 [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a new version of frogatto out, which is mostly a small set of bugfixes.  It&#8217;s available for computers on our <a href="http://www.frogatto.com/download">download page</a>, and will be available for iPhone after we finish testing.</p>
<p><strong>Here&#8217;s a short list of changes:</strong><br />
 * Added customizable controls.<br />
 * Made it so you can skip dialogs sequences (by pressing escape).<br />
 * New pause screen including music and sound volume controls.<br />
 * Added half-hearts.<br />
 * Made player status not show on the titlescreen or world map.<br />
 * Made golden ants less ambiguous.<br />
 * Updated music.<br />
 * Pressing jump while in the air pressing against a wall now makes you cling to the wall.<br />
 * Improved forest background, and made it go upwards infinitely.<br />
 * Changed tilesets to make water blend better against rock/wall edges.<br />
 * Fixed bug where a dialog could repeat forever.<br />
 * Fixed crash in world map when you hold down while entering it.<br />
 * Fixed fullscreen mode.<br />
 * Fixed controlpad issues.<br />
 * Fixed a few z-order issues.<br />
 * Many small bug fixes and minor level changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=313</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Graphics News #10</title>
		<link>http://www.frogatto.com/?p=302</link>
		<comments>http://www.frogatto.com/?p=302#comments</comments>
		<pubDate>Wed, 25 Aug 2010 23:55:26 +0000</pubDate>
		<dc:creator>Jetrel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=302</guid>
		<description><![CDATA[This past several days, I&#8217;ve been engaged in polishing up the forest background.  The forest background that shipped with 1.0 was unsatisfactory to me; many elements of it were barely better than sketches, and the far-distant portion of it was a boring monochrome.  However, we shipped with it because it didn&#8217;t affect gameplay, [...]]]></description>
			<content:encoded><![CDATA[<p>This past several days, I&#8217;ve been engaged in polishing up the forest background.  The forest background that shipped with 1.0 was unsatisfactory to me; many elements of it were barely better than sketches, and the far-distant portion of it was a boring monochrome.  However, we shipped with it because it didn&#8217;t affect gameplay, only aesthetics, and we believe in RERO (release early, release often).</p>
<p>Here, you can see a side-by-side comparison.  (Click to zoom in.)</p>
<p><a href="http://www.frogatto.com/wp-content/uploads/2010/08/forestBackgroundComp.png"><img src="http://www.frogatto.com/wp-content/uploads/2010/08/forestBackgroundComp-300x104.png" alt="" title="forestBackgroundComp" width="300" height="104" class="aligncenter size-medium wp-image-303" /></a></p>
<p>Probably after our upcoming update, I am looking into doing some major additions to those interactible/standable trees, adding a much larger variety of branch elements, and if I have time, perhaps even adding some variants on the tree trunks (wider, thinner ones).  I&#8217;m also planning to flesh out the foliage tiles a bit.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=302</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ranges &#8211; a shorthand for MTPs</title>
		<link>http://www.frogatto.com/?p=290</link>
		<comments>http://www.frogatto.com/?p=290#comments</comments>
		<pubDate>Thu, 19 Aug 2010 02:02:28 +0000</pubDate>
		<dc:creator>Jetrel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=290</guid>
		<description><![CDATA[I&#8217;m well aware in writing this that I haven&#8217;t written that primer post I&#8217;ve been meaning to write describing what MTPs are.  I&#8217;m going to try and pretend I&#8217;ve done so already so as not to clog up this post, and will fix that retroactively.
To sum it up, though a &#8220;multi-tile-pattern&#8221; lets you define [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m well aware in writing this that I haven&#8217;t written that primer post I&#8217;ve been meaning to write describing what MTPs are.  I&#8217;m going to try and pretend I&#8217;ve done so already so as not to clog up this post, and will fix that retroactively.</p>
<p>To sum it up, though a &#8220;multi-tile-pattern&#8221; lets you define a tile pattern that&#8217;s drawn across more than just one 16&#215;16 tile.  It allows us to draw elaborate set pieces that will be put onto a level if the underlying tiles are laid out a certain exact way.  For example, it&#8217;s what allows us to draw the &#8220;obviously larger than one tile&#8221; corners of the house interiors.  Remember &#8211; everything in frogatto is auto-tiled, so this means those large set-pieces will just &#8220;appear&#8221; if you arrange the tiles the right way.</p>
<p>A key problem we ran into was scaling for the work-time of the guy scripting them (me).  These multi-tile-patterns had to have each individual tile in them, specified by hand.  For a little 2&#215;2 house corner, this was trivial.  For a huge 3*5 layer of plants, with two layers of graphics, and with an alternative graphic option, this time-cost exploded exponentially.  This, for example, is the tile pattern for a center section of grass (as seen in the first section of the game):</p>
<p><span id="more-290"></span></p>
<p>To help people visualize, this is the tile sheet being drawn.  We&#8217;re drawing the stuff inside the red boxes.  The very short boxes are a foreground overlay &#8211; everything else is behind frogatto.  Because frogatto&#8217;s feet never reach below a specific height, we only needed a 1tile tall overlay.  The bottom two boxes are &#8220;alternates&#8221;;  at times, they&#8217;ll be randomly used instead of the first set of boxes, to make stuff less repetitive and more organic.</p>
<p>This whole pattern will get used when the game detects a grass tile at the left end of of a row of grass tiles.  It gets drawn slightly-offcenter, over that tile.</p>
<p><a href="http://www.frogatto.com/wp-content/uploads/2010/08/plants1.png"><img src="http://www.frogatto.com/wp-content/uploads/2010/08/plants1.png" alt="" title="plants" width="256" height="256" class="aligncenter size-full wp-image-299" /></a></p>
<p><code>[multi_tile_pattern]<br />
chance=100<br />
pattern="   -&gt;tile1         ,    -&gt;tile2         ,    -&gt;tile3         ,<br />
-&gt;tile4-&gt;tile4fg, ngs-&gt;tile5-&gt;tile5fg, ngs-&gt;tile6-&gt;tile6fg, ngs<br />
-&gt;tile7         ,    -&gt;tile8         ,    -&gt;tile9         ,<br />
-&gt;tile10        ,    -&gt;tile11        ,    -&gt;tile12        ,  "</code></p>
<p><code>[tile1]<br />
image=tiles/plants.png<br />
tiles=00<br />
zorder=-4<br />
[/tile1]<br />
[tile2]<br />
image=tiles/plants.png<br />
tiles=01<br />
zorder=-4<br />
[/tile2]<br />
[tile3]<br />
image=tiles/plants.png<br />
tiles=02<br />
zorder=-4<br />
[/tile3]</p>
<p>[tile4]<br />
image=tiles/plants.png<br />
tiles=10<br />
zorder=-4<br />
[/tile4]<br />
[tile4fg]<br />
image=tiles/plants.png<br />
tiles=50<br />
[/tile4fg]<br />
[tile5]<br />
image=tiles/plants.png<br />
tiles=11<br />
zorder=-4<br />
[/tile5]<br />
[tile5fg]<br />
image=tiles/plants.png<br />
tiles=51<br />
[/tile5fg]<br />
[tile6]<br />
image=tiles/plants.png<br />
tiles=12<br />
zorder=-4<br />
[/tile6]<br />
[tile6fg]<br />
image=tiles/plants.png<br />
tiles=52<br />
[/tile6fg]</p>
<p>[tile7]<br />
image=tiles/plants.png<br />
tiles=20<br />
[/tile7]<br />
[tile8]<br />
image=tiles/plants.png<br />
tiles=21<br />
[/tile8]<br />
[tile9]<br />
image=tiles/plants.png<br />
tiles=22<br />
[/tile9]</p>
<p>[tile10]<br />
image=tiles/plants.png<br />
tiles=30<br />
[/tile10]<br />
[tile11]<br />
image=tiles/plants.png<br />
tiles=31<br />
[/tile11]<br />
[tile12]<br />
image=tiles/plants.png<br />
tiles=32<br />
[/tile12]</p>
<p>[alternative]<br />
[tile1]<br />
image=tiles/plants.png<br />
tiles=60<br />
zorder=-4<br />
[/tile1]<br />
[tile2]<br />
image=tiles/plants.png<br />
tiles=61<br />
zorder=-4<br />
[/tile2]<br />
[tile3]<br />
image=tiles/plants.png<br />
tiles=62<br />
zorder=-4<br />
[/tile3]</p>
<p>[tile4]<br />
image=tiles/plants.png<br />
tiles=70<br />
zorder=-4<br />
[/tile4]<br />
[tile4fg]<br />
image=tiles/plants.png<br />
tiles=a0<br />
[/tile4fg]</p>
<p>[tile5]<br />
image=tiles/plants.png<br />
tiles=71<br />
zorder=-4<br />
[/tile5]<br />
[tile5fg]<br />
image=tiles/plants.png<br />
tiles=a1<br />
[/tile5fg]</p>
<p>[tile6]<br />
image=tiles/plants.png<br />
tiles=72<br />
zorder=-4<br />
[/tile6]<br />
[tile6fg]<br />
image=tiles/plants.png<br />
tiles=a2<br />
[/tile6fg]</p>
<p>[tile7]<br />
image=tiles/plants.png<br />
tiles=80<br />
[/tile7]<br />
[tile8]<br />
image=tiles/plants.png<br />
tiles=81<br />
[/tile8]<br />
[tile9]<br />
image=tiles/plants.png<br />
tiles=82<br />
[/tile9]</p>
<p></code></p>
<p><code> [tile10]<br />
image=tiles/plants.png<br />
tiles=90<br />
[/tile10]<br />
[tile11]<br />
image=tiles/plants.png<br />
tiles=91<br />
[/tile11]<br />
[tile12]<br />
image=tiles/plants.png<br />
tiles=92<br />
[/tile12]<br />
[/alternative]<br />
[/multi_tile_pattern]</code></p>
<p> <img src='http://www.frogatto.com/wp-includes/images/smilies/icon_eek.gif' alt='8O' class='wp-smiley' />  Yeah.  This makes it a pain in the ass to change stuff.  And it&#8217;s dumb, because in &#8220;plain english&#8221;, all we&#8217;re doing is telling the game to &#8220;draw this single, large rectangular section of 12 tiles from our tileset.&#8221;</p>
<p>So we made a shorthand to do precisely that:</p>
<p><code>[multi_tile_pattern]<br />
chance=100<br />
pattern="   -&gt;tile1         ,    -&gt;tile2         ,    -&gt;tile3         ,<br />
-&gt;tile4-&gt;tile4fg, ngs-&gt;tile5-&gt;tile5fg, ngs-&gt;tile6-&gt;tile6fg, ngs<br />
-&gt;tile7         ,    -&gt;tile8         ,    -&gt;tile9         ,<br />
-&gt;tile10        ,    -&gt;tile11        ,    -&gt;tile12        ,  "</p>
<p>[range]<br />
image=tiles/plants.png<br />
from=tile1<br />
to=tile12<br />
tiles=00<br />
zorder=-4<br />
[/range]</p>
<p>[range]<br />
image=tiles/plants.png<br />
from=tile4<br />
to=tile6<br />
tiles=50<br />
[/range]</p>
<p>[alternative]<br />
[range]<br />
image=tiles/plants.png<br />
from=tile1<br />
to=tile12<br />
tiles=60<br />
zorder=-4<br />
[/range]</p>
<p></code></p>
<p><code> [range]<br />
image=tiles/plants.png<br />
from=tile4<br />
to=tile6<br />
tiles=a0<br />
[/range]<br />
[/alternative]<br />
[/multi_tile_pattern]<br />
</code></p>
<p>Much better. <img src='http://www.frogatto.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>The specific meanings of the FML keys there are:<br />
from= and to=  indicate the upper-left and lower-right tiles in the pattern=&#8221;"</p>
<p>tiles= indicates a position in the tilesheet.  The first character indicates row, the second, column (reverse of the usual order).  They&#8217;re written in (IIRC) base-52, so that indicating a position is only one character long.  The position indicated here is the upper-left-corner of the range;  the lower-right corner is derived, you don&#8217;t need to (indeed, <em>can&#8217;t</em>) specify it.</p>
<p>The other FML keys will get covered in my primer on MTPs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=290</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Randomized Arcade Levels</title>
		<link>http://www.frogatto.com/?p=287</link>
		<comments>http://www.frogatto.com/?p=287#comments</comments>
		<pubDate>Fri, 13 Aug 2010 22:29:42 +0000</pubDate>
		<dc:creator>Sirp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=287</guid>
		<description><![CDATA[One thing we&#8217;re working on for Frogatto is &#8220;arcade style&#8221; levels. Arcade style levels will be never-ending levels that are randomly generated, and which have making a high score an objective. We&#8217;re hoping this will allow for a fun alternative way to play the game.
As part of this, I&#8217;ve added some nice support for making [...]]]></description>
			<content:encoded><![CDATA[<p>One thing we&#8217;re working on for Frogatto is &#8220;arcade style&#8221; levels. Arcade style levels will be never-ending levels that are randomly generated, and which have making a high score an objective. We&#8217;re hoping this will allow for a fun alternative way to play the game.</p>
<p>As part of this, I&#8217;ve added some nice support for making randomized levels to the Frogatto editor. The editor allows you to split levels into <em>segments</em>, just like this:</p>
<p><img src="http://www.wesnoth.org/files/dave/screens/frogatto-1281738001.png" alt="Segment Editor" /></p>
<p>The yellow segment in this screenshot is the currently selected segment, and then the red segments are all segments which can go directly after the selected segment. Then, Frogatto Formula Language commands are available which allow the level to order the segments randomly, making sure that one segment only follows another where appropriate.</p>
<p>Of course, in some cases we might need to augment this basic logic with a little more sophistication: making the game get harder as the player goes further, for instance. But this can always be done by adding FFL to the level.</p>
<p>Hopefully with this system in place we&#8217;ll be seeing some fun arcade style levels in future versions of Frogatto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=287</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>3 Day Sale</title>
		<link>http://www.frogatto.com/?p=279</link>
		<comments>http://www.frogatto.com/?p=279#comments</comments>
		<pubDate>Sun, 08 Aug 2010 04:49:27 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=279</guid>
		<description><![CDATA[Frogatto is only $0.99 in the App Store for 3 days! Now that 1.0.1 is out, and all significant technical problems should be fixed, we&#8217;re really trying to get the word out!
The sale ends when Apple decides it&#8217;s the 11th (which might be at about 11PM EST on the 10th).


]]></description>
			<content:encoded><![CDATA[<p>Frogatto is only $0.99 in the App Store for 3 days! Now that 1.0.1 is out, and all significant technical problems should be fixed, we&#8217;re really trying to get the word out!</p>
<p>The sale ends when Apple decides it&#8217;s the 11th (which might be at about 11PM EST on the 10th).</p>
<p><span id="mytarget" onload="setTimer()"></span></p>
<p><script type="text/javascript" src="http://www.frogatto.com/countdownScript.js" ></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=279</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>iPhone Controls &amp; Auto-saving</title>
		<link>http://www.frogatto.com/?p=272</link>
		<comments>http://www.frogatto.com/?p=272#comments</comments>
		<pubDate>Thu, 05 Aug 2010 00:07:23 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=272</guid>
		<description><![CDATA[Since Frogatto started selling on the App Store, we&#8217;ve had mostly really positive feedback (which has been great!), but there&#8217;s also been a lot of complaints about the controls; ranging from &#8220;needs some work&#8221; all the way to &#8220;horrible!&#8221;. At first our reaction was along the lines of &#8220;well that&#8217;s too bad, but there&#8217;s not [...]]]></description>
			<content:encoded><![CDATA[<p>Since Frogatto started selling on the App Store, we&#8217;ve had mostly really positive feedback (which has been great!), but there&#8217;s also been a lot of complaints about the controls; ranging from &#8220;needs some work&#8221; all the way to &#8220;horrible!&#8221;. At first our reaction was along the lines of &#8220;well that&#8217;s too bad, but there&#8217;s not a whole lot we can do about it&#8230;&#8221;. A few days later though, I was looking at the code, and discovered that the active areas for the controls were not at all what we thought they were.</p>
<p>When a finger is touching the screen, the iPhone only tells your program about the center point of it; nothing about the area of the touch. Because of this, you generally want to make the actual active area of buttons on the screen bigger than the image that&#8217;s displayed for them (because people expect a button to work even if just the edge of their finger is touching it). We thought that we had done this, but what I discovered was that not only were the active areas of our controls not bigger than the images representing them, they were significantly smaller! Here&#8217;s a screenshot showing the control buttons, with their active areas overlaid on top (also note the much improved arrow graphics):</p>
<p><img src="/images/control_rects_1.0.png" alt="Frogatto 1.0 control rects"></p>
<p>One person said it seemed like we hadn&#8217;t even tried the game before submitting it to the App Store, but in fact, the opposite is true: we tested it so much that we all got used to it and thought it was fine. Another person said that it seemed like we got lazy near the end of development, which is almost true, but not quite &#8211; we didn&#8217;t get lazy, we just rushed it a bit. It had been over 2 years, and we just really wanted to get the game out there. We fully intended to release updates after 1.0 though, and that&#8217;s what we&#8217;ve done; last Friday (July 29th) we submitted a minor update, 1.0.1, which Apple will hopefully approve soon.</p>
<p><img src="/images/control_rects_1.0.1.png" alt="Frogatto 1.0.1 control rects"></p>
<p>As you can see, the active areas in 1.0.1 are <strong>much</strong> bigger, which should make them a whole lot easier to use. The water controls have also been improved a lot. They look the same, but the active area of the circle is now 2.4x the size of the circle you see, and once you put your thumb down inside it, it will work until you lift it up again, no matter where you move it to (suggested by howiedeano on the <a href="http://www.toucharcade.com">Touch Arcade</a> forum).</p>
<p>Besides the controls, a lot of people complained about lack of auto-saving. We did actually make auto-saving (we agree, it&#8217;s important!), but none of us have a device new enough to support iOS4&#8217;s multi-tasking, and it turns out it didn&#8217;t work with multi-tasking. This should be fixed in 1.0.1 as well (by simply disabling multi-tasking for Frogatto), along with a bunch of other less significant bugs. Hopefully this will fix all the significant technical issues, and we can get back to improving the rest of the game!</p>
<p><strong>Update (08/06/2010): 1.0.1 is on the App Store now!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=272</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Featured on Apple&#8217;s Mac Software Games Page</title>
		<link>http://www.frogatto.com/?p=252</link>
		<comments>http://www.frogatto.com/?p=252#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:28:01 +0000</pubDate>
		<dc:creator>Jetrel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=252</guid>
		<description><![CDATA[And moreover, they&#8217;ve been doing that for the past 2 weeks.
Seen at http://www.apple.com/downloads/macosx/games/
In fact, holy smokes, it&#8217;s even on http://www.apple.com/downloads/   
If anyone involved in making that happen is reading this &#8211; THANK YOU!  You guys kick ass!

]]></description>
			<content:encoded><![CDATA[<p>And moreover, they&#8217;ve been doing that for the past 2 weeks.</p>
<p>Seen at <a href="http://www.apple.com/downloads/macosx/games/">http://www.apple.com/downloads/macosx/games/</a></p>
<p>In fact, holy smokes, it&#8217;s even on <a href="http://www.apple.com/downloads/">http://www.apple.com/downloads/</a>  <img src='http://www.frogatto.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> </p>
<p>If anyone involved in making that happen is reading this &#8211; <strong>THANK YOU!</strong>  You guys kick ass!</p>
<p><a href="http://www.frogatto.com/wp-content/uploads/2010/07/OMFG.png"><img src="http://www.frogatto.com/wp-content/uploads/2010/07/OMFG-300x268.png" alt="" title="whoa" width="300" height="268" class="aligncenter size-medium wp-image-253" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=252</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Frogatto Available on the iPhone App Store</title>
		<link>http://www.frogatto.com/?p=249</link>
		<comments>http://www.frogatto.com/?p=249#comments</comments>
		<pubDate>Thu, 22 Jul 2010 05:53:13 +0000</pubDate>
		<dc:creator>Sirp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=249</guid>
		<description><![CDATA[Frogatto has been released on the iPhone App Store!! Please show your support for our project by purchasing it.
We&#8217;re having an introductory sale with 60% off the planned regular price, so get in fast!
]]></description>
			<content:encoded><![CDATA[<p>Frogatto has been <a href="http://click.linksynergy.com/fs-bin/stat?id=/Z8ko7m7QVY&#038;offerid=146261&#038;type=3&#038;subid=0&#038;tmpid=1826&#038;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ffrogatto%252Fid382015046%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30" target="itunes_store">released on the iPhone App Store</a>!! Please show your support for our project by purchasing it.</p>
<p>We&#8217;re having an introductory sale with 60% off the planned regular price, so get in fast!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=249</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How Frogatto Formula Language (FFL) Works</title>
		<link>http://www.frogatto.com/?p=243</link>
		<comments>http://www.frogatto.com/?p=243#comments</comments>
		<pubDate>Sat, 17 Jul 2010 20:05:39 +0000</pubDate>
		<dc:creator>Sirp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=243</guid>
		<description><![CDATA[In Frogatto, we use Frogatto Markup Language (FML) to describe most game data &#8212; how levels are laid out, rules for laying out tiles, for defining animations for objects and so forth. For those of you familiar with Wesnoth and WML &#8212; or those familiar with XML &#8212; FML will seem very familiar. It&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>In Frogatto, we use Frogatto Markup Language (FML) to describe most game data &#8212; how levels are laid out, rules for laying out tiles, for defining animations for objects and so forth. For those of you familiar with Wesnoth and WML &#8212; or those familiar with XML &#8212; FML will seem very familiar. It&#8217;s a simple data language, like XML. Here is a small snippet of FML which defines one of Frogatto&#8217;s animations, to show you what I mean:</p>
<p><code><br />
		[animation]<br />
		id=lookup<br />
		rect=37,233,68,265<br />
		frames=1<br />
		duration=3<br />
		reverse=yes<br />
		[/animation]<br />
</code></p>
<p>FML, like WML, works very nicely for describing data. However, in Frogatto we really wanted objects to have very flexible behavior &#8212; for instance, consider all the complexities of an object as simple as an ant in Frogatto. It has to walk back and forth, fall off cliffs for a red ant, but turn back for a black ant. Then when it is spat out it has to fly through the air, bounce off surfaces, finally ending up on its back and then spring back onto its front.</p>
<p>Describing behavior like this in FML would be far too awkward, at least without hard wiring a lot of core behavior into the engine, and we really wanted Frogatto&#8217;s engine to be a very general engine.</p>
<p>So, in addition to FML, Frogatto has an embedded language called Frogatto Formula Language (FFL). FFL is designed to work like a mathematical formula. That is, a formula has inputs, makes calculations, and then results in outputs. A formula itself can&#8217;t actually <strong>do</strong> anything &#8212; that is, it can&#8217;t modify the environment around it &#8212; it can only return a result. Just like a mathematical formula.</p>
<p>Let&#8217;s jump into an example of how this works in Frogatto. You know those big metal balls that are thrown by the psychotic bunnies? Here is a (slightly simplified) code snippet which controls what happens when they collide with a wall:</p>
<p><code><br />
on_collide="set(velocity_x, -velocity_x/2)"<br />
</code></p>
<p>This is taken from the metal_ball.cfg file which defines the metal balls. Now, the first thing I want to note is that the on_collide=&#8221;&#8230;&#8221; part that surrounds this is FML. ONLY the part that is inside the quotation marks is a formula; a formula written in FFL. This defines the <em>event handler</em> that is run whenever the object receives a &#8220;collide&#8221; event.</p>
<p>What the formula is designed to do is cause the ball to be reflected off the wall, but its velocity dampened by half. One important thing to understand is that the formula itself does not modify the object&#8217;s velocity: a formula itself cannot modify its environment. Rather, the formula is evaluated and returns a command object. The game engine executes the command that the formula returns. In technical terms, this makes FFL a <em>pure functional language</em>.</p>
<p>There is an entire API of functions that are exposed to the formula system that will create different commands to return to the engine. The set() function, which creates a command to set the value of an object property, is probably the most useful, however there are a whole host of functions such as spawn(), which spawns a new object (useful, for instance, for an object which shoots projectiles), a teleport() function which allows teleporting the player to a different level, and so forth. The game engine actually comes with a utility that <a href="http://code.google.com/p/frogatto/wiki/ObjectFunctions">outputs all of the available functions</a>.</p>
<p>Of course, in addition to functions that can create commands, to do useful things we need to be able to inspect the state of the game. For instance, in the above formula we had to read the object&#8217;s &#8220;velocity_x&#8221; property to find its horizontal velocity. When an event handling formula is executed, it gains access to all of the properties of the object receiving the event. Objects are pretty complex entities, and they have properties ranging from their velocity and location, to their hitpoints, current animation, a store of user-defined variables, the level they are located in &#8212; from where you can access all the other objects in the level &#8212; and so forth. Fortunately we have <a href="http://code.google.com/p/frogatto/wiki/ObjectProperties">documented</a> all the available object properties.</p>
<p>Now that we&#8217;ve seen the basics of formulas, let&#8217;s look at a slightly more complex example. This is how the Frogatto object handles collision with a wall:</p>
<p><code><br />
on_collide="[set(velocity_x, 0),<br />
                   if((animation in ['jump', 'fall']) and can_slide(self) and abs(velocity_x) > 200,<br />
                           [animation('slide'), set(velocity_y, 0)])]"<br />
</code></p>
<p>First things first: this formula returns a list of commands to execute rather than a single command. Lists in FFL are delimited by [ and ].  The first thing this formula does is simply sets Frogatto&#8217;s horizontal velocity to 0 when he collides with a wall &#8212; if you run into a wall with Frogatto he simply stops rather than bouncing off.</p>
<p>The second part of the formula is to handle Frogatto&#8217;s ability to grab onto walls if you jump into them. It makes use of the if() function which is a built-in FFL function. if(cond, x, y) will evaluate to x if cond is true, and y otherwise. You can also use simply if(cond, x) which results to null if cond is false.</p>
<p>We can see that Frogatto will only cling onto a wall under certain conditions &#8212; if he&#8217;s in a jumping or falling animation, if a custom function defined as &#8220;can_slide&#8221; is true, and if his horizontal velocity has a magnitude greater than 200. If the criteria to cling onto the wall is met, we will return a command for him to enter his slide animation, and a command to set his vertical velocity to 0.</p>
<p>As we can see, FFL is fairly powerful, but hopefully not too difficult to understand. Using it, we can define objects which have all kinds of sophisticated behavior. Of course, another key element is understanding what events are triggered on an object. We have events that are triggered automatically, periodically, events that are triggered upon collisions of different types, events triggered when the level is loaded, when the player first approaches an object, and so forth. All the events are documented <a href="http://code.google.com/p/frogatto/wiki/ObjectEvents">here</a>.</p>
<p>I&#8217;ll give one more example of the kinds of things FFL can do:</p>
<p><code><br />
timer_frequency=50<br />
on_timer="[set(brightness, brightness*4), schedule(5, set(brightness, brightness))]"<br />
</code></p>
<p>This makes it so a &#8216;timer&#8217; event is received by the object every second. (Frogatto runs at 50FPS). On this timer event, the object is made to be four times as bright as normal for a tenth of a second (five cycles). Note that use of the schedule() function. What schedule does is takes commands and schedules them to be run some number of cycles in the future, rather than right now. So, we are setting brightness to 4x what is it now, and then scheduling it to be set back to its current value 5 cycles in the future.</p>
<p>Note how the entire formula is evaluated, and THEN the commands are evaluated.</p>
<p>FFL is a general formula language, and though its main use in Frogatto is for object events, that&#8217;s not its only use. It is also used, for instance, to draw the HUD which shows Frogatto&#8217;s status, health, coins, score, and so on. In that context, FFL is still used but it has access to a different set of properties and a different API &#8212; an API designed for drawing elements of the screen rather than controlling objects. It&#8217;s also used to allow custom scripts that can be used in the Frogatto editor. One can write a script in FFL that applies some effect or another on a level &#8212; such as rounding out a cave level, or adding trees to a grassy level. One could even write FFL to try to make an automatic level generator!</p>
<p>I&#8217;m hoping this gives a good overall view of FFL, and what it can do. The Frogatto engine is very moddable, and we&#8217;re hoping people will try to develop their own concepts &#8212; from fixing bugs in Frogatto, to adding new features, such as new objects or better behavior of existing objects. But one could also implement a completely new and different game. We very much welcome people trying to develop their own game concepts with FFL &#8212; if you do please come and share them with us on the <a href="http://www.frogatto.com/forum">forum</a>. Good exercises would be to implement a game in the vein of Pong or Space Invaders of Pac Man.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=243</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Frogatto 1.0 Released!</title>
		<link>http://www.frogatto.com/?p=233</link>
		<comments>http://www.frogatto.com/?p=233#comments</comments>
		<pubDate>Tue, 13 Jul 2010 02:43:48 +0000</pubDate>
		<dc:creator>Sirp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.frogatto.com/?p=233</guid>
		<description><![CDATA[Frogatto 1.0 has been released! Frogatto is now a fully playable, fun, classic adventure platformer with over thirty levels, version 1.0 representing the first stable version of the game. Available for Windows, Mac, and in source form on our download page. Frogatto is also soon to be released on the iPhone App Store.
Frogatto also contains [...]]]></description>
			<content:encoded><![CDATA[<p>Frogatto 1.0 has been released! Frogatto is now a fully playable, fun, classic adventure platformer with over thirty levels, version 1.0 representing the first stable version of the game. Available for Windows, Mac, and in source form on our <a href="http://www.frogatto.com/download">download page</a>. Frogatto is also soon to be released on the iPhone App Store.</p>
<p>Frogatto also contains a fully functional editor that allows you to create your own fun levels or edit existing levels. The engine is heavily moddable, and as an Open Source game we welcome new talented contributors.</p>
<p>After trying Frogatto, consider visiting our <a href="http://www.frogatto.com/forum/">forum</a> to discuss the game.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frogatto.com/?feed=rss2&amp;p=233</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>
