<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Mode 7 limitations</title>
		<link>http://www.allegro.cc/forums/view/554649</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 22 Dec 2005 21:47:39 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, my primary question is: how limited is Mode 7? I&#39;ve written the rendering code, my movement code. I&#39;ve written a nice structure to contain objects and sprites. I&#39;ve optimized it (though not fully). It runs smoothly. But can I make a game with what I have here?  </p><p>What I wanted was a basic representation of a 3d playfield. I was prepared to totally fake this because I&#39;m absolutely hopeless with math. I knew that I didn&#39;t want any kind of terrain or complex structures. I just wanted a flat plane that I could fly around in and display sprites with. Which is what I have now! Hurray!</p><p>Now, I have a few specific questions. When the engine started out I gave the controller the ability to adjust the cameras Z position. I soon ran into a few problems with this method (due to the way I was rendering). After a bit of investigation, it looks like most Mode 7 titles seem to use a static image for a backdrop. I was wondering if this was a limitation of the technique? Or of the hardware?</p><p>In terms of coding, my current problem is finding the location of my mouse pointer in terms of 3d space? If anyone could give me a hand with that, that would be fantastic.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Thu, 22 Dec 2005 01:29:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Now, I have a few specific questions. When the engine started out I gave the controller the ability to adjust the cameras Z position. I soon ran into a few problems with this method (due to the way I was rendering). After a bit of investigation, it looks like most Mode 7 titles seem to use a static image for a backdrop. I was wondering if this was a limitation of the technique? Or of the hardware?
</p></div></div><p>
There is no limitation to the positioning in 3d space of a camera in a Mode 7 engine. It may also be freely rotated around the vertical and horizontal axes. If you really wanted to rotate around the forward axis you could do something with bitmap rotation, I&#39;m sure.
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
In terms of coding, my current problem is finding the location of my mouse pointer in terms of 3d space? If anyone could give me a hand with that, that would be fantastic.
</p></div></div><p>
How are you drawing? Are you thinking in terms of a start offset at the left of the screen and a vector with which you step across the tile map per screen pixel to draw a scanline? If so just use the mouse_y to get that vector and start position as you are for drawing, then use mouse_x to add a multiple of the vector to the start position.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Thu, 22 Dec 2005 01:40:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I was prepared to totally fake this because I&#39;m absolutely hopeless with math.
</p></div></div><p>

Unfortunately, this is usually a bad idea, as you&#39;ll eventually want to interact with what you&#39;re drawing in some way, and you&#39;ll probably want &#39;proper&#39; math to do that. Faking your display may preclude easy solutions to baffling problems, like locating sprites, mouse cursors, etc in &#39;space&#39;. </p><p>Amarillion has written a fantastic <a href="http://echellon.hybd.net/issues/5/articles/circle/sincos.htm">primer on the subject</a>, which may prove useful.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sirocco)</author>
		<pubDate>Thu, 22 Dec 2005 01:54:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Having read the article I&#39;ve done a few code replacements.</p><p>I noticed this code from the tutorial:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">for</span> <span class="k2">(</span>screen_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> screen_y <span class="k3">&lt;</span> bmp-&gt;h<span class="k2">;</span> screen_y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>        <span class="c">// first calculate the distance of the line we are drawing</span></td></tr><tr><td class="number">4</td><td>        distance <span class="k3">=</span> fdiv <span class="k2">(</span>fmul <span class="k2">(</span>params.space_z, params.scale_y<span class="k2">)</span>,</td></tr><tr><td class="number">5</td><td>            <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span>screen_y <span class="k3">+</span> params.horizon<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>        <span class="c">// then calculate the horizontal scale, or the distance between</span></td></tr><tr><td class="number">7</td><td>        <span class="c">// space points on this horizontal line</span></td></tr><tr><td class="number">8</td><td>        horizontal_scale <span class="k3">=</span> fdiv <span class="k2">(</span>distance, params.scale_x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>        <span class="c">// calculate the dx and dy of points in space when we step</span></td></tr><tr><td class="number">11</td><td>        <span class="c">// through all points on this line</span></td></tr><tr><td class="number">12</td><td>        line_dx <span class="k3">=</span> fmul <span class="k2">(</span><span class="k3">-</span>fsin<span class="k2">(</span>angle<span class="k2">)</span>, horizontal_scale<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        line_dy <span class="k3">=</span> fmul <span class="k2">(</span>fcos<span class="k2">(</span>angle<span class="k2">)</span>, horizontal_scale<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>        <span class="c">// calculate the starting position</span></td></tr><tr><td class="number">16</td><td>        space_x <span class="k3">=</span> cx <span class="k3">+</span> fmul <span class="k2">(</span>distance, fcos<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> bmp-&gt;w<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> line_dx<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        space_y <span class="k3">=</span> cy <span class="k3">+</span> fmul <span class="k2">(</span>distance, fsin<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> bmp-&gt;w<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> line_dy<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>        <span class="c">// go through all points in this screen line</span></td></tr><tr><td class="number">20</td><td>        <span class="k1">for</span> <span class="k2">(</span>screen_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> screen_x <span class="k3">&lt;</span> bmp-&gt;w<span class="k2">;</span> screen_x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td>        <span class="k2">{</span></td></tr></tbody></table></div></div><p>

Which is, I can only assume, the code that Thomas was talking about. I&#39;m still a little unclear on the technique that was suggested, though:</p><div class="source-code snippet"><div class="inner"><pre>        distance <span class="k3">=</span> fdiv <span class="k2">(</span>fmul <span class="k2">(</span>params.space_z, params.scale_y<span class="k2">)</span>,
            <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span>screen_y <span class="k3">+</span> params.horizon<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I take it I&#39;d change the above line to something like:</p><div class="source-code snippet"><div class="inner"><pre>        distance <span class="k3">=</span> fdiv <span class="k2">(</span>fmul <span class="k2">(</span>params.space_z, params.scale_y<span class="k2">)</span>,
            <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k3">+</span> params.horizon<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

To calculate the distance of the horizontal segment that the mouse lands on. From there... I&#39;m lost!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Thu, 22 Dec 2005 02:56:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, Amarillion seems to have made it more complicated than I would, but let&#39;s not complicate things - note the line_dx/y and space_x/y variables. space_x/y is used at every screen pixel to determine what to draw, and line_dx/y are added to it every pixel to figure out where the next one should be.</p><p>So, having calculated line_dx/y and space_x/y as a function of mouse_y, just plug in mouse_x:</p><p>cursor_x = space_x + mouse_x*line_dx;<br />cursor_y = space_y + mouse_x*line_dy;</p><p>Think of it as a short cut that saves running through the &quot;for (screen_x = 0; screen_x &lt; bmp-&gt;w; screen_x++)&quot; loop until screen_x == mouse_x.</p><p>Alternatively, as a more expensive but more simple cheat you could just check inside the &quot;for (screen_x = 0; screen_x &lt; bmp-&gt;w; screen_x++)&quot; loop that draws your pixels if the pixel you are plotting is on mouse_x, mouse_y and if so store space_x/y as the thing the mouse is over.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Thu, 22 Dec 2005 08:01:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It seems I&#39;m having trouble understanding Amarillions code:</p><p>From your suggestion, I&#39;ve added this inside of the screen_x for loop:
</p><div class="source-code snippet"><div class="inner"><pre>            <span class="k1">if</span><span class="k2">(</span> screen_x <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">&amp;</span><span class="k3">&amp;</span> screen_y <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k2">)</span> <span class="k2">{</span> 
                application.m_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>space_x<span class="k2">)</span><span class="k2">;</span> 
                application.m_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>space_y<span class="k2">)</span><span class="k2">;</span> 
            <span class="k2">}</span>
</pre></div></div><p>

Now, at first this wasn&#39;t working. I use a linked-list to hold all of the game objects and was simply doing a test where, having pressed mouse_b &amp; 1, a new node would be created with its x and y value set to m_x and m_y. Having looked at the output, the numbers seemed correct so I did some digging around in his render_object code:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> render_object <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>obj, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> cx, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> cy, CAMERA_PARAMS camera<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    </td></tr><tr><td class="number">4</td><td>    <span class="k1">int</span> width, height<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> screen_y, screen_x<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">160</span><span class="k2">)</span> <span class="k3">-</span> cx<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">100</span><span class="k2">)</span> <span class="k3">-</span> cy<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> space_x <span class="k3">=</span> fmul <span class="k2">(</span>obj_x, fcos <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> fmul <span class="k2">(</span>obj_y, fsin <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> space_y <span class="k3">=</span> <span class="k3">-</span>fmul <span class="k2">(</span>obj_x, fsin <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> fmul <span class="k2">(</span>obj_y, fcos <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>    screen_x <span class="k3">=</span> bmp-&gt;w<span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>fmul <span class="k2">(</span>fdiv <span class="k2">(</span>camera.s_x, space_x<span class="k2">)</span>, space_y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    screen_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>fdiv <span class="k2">(</span>fmul <span class="k2">(</span>camera.z, camera.s_y<span class="k2">)</span>, space_x<span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> camera.horizon<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>    height <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>obj-&gt;h <span class="k3">*</span> fdiv<span class="k2">(</span>camera.obj_s_y, space_x<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    width <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>obj-&gt;w <span class="k3">*</span> fdiv<span class="k2">(</span>camera.obj_s_x, space_x<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>    <a href="http://www.allegro.cc/manual/stretch_sprite" target="_blank"><span class="a">stretch_sprite</span></a> <span class="k2">(</span>bmp, obj, screen_x <span class="k3">-</span> width <span class="k3">/</span> <span class="n">2</span>, screen_y <span class="k3">-</span> height, width, height<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I noticed this: 
</p><div class="source-code snippet"><div class="inner"><pre>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">160</span><span class="k2">)</span> <span class="k3">-</span> cx<span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">100</span><span class="k2">)</span> <span class="k3">-</span> cy<span class="k2">;</span>
</pre></div></div><p>

I don&#39;t understand why he has to add those values to the object x and y location before subtracting cx and cy. Here&#39;s how I call draw_object:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> render_objects<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
  
     obj_list <span class="k3">*</span>tmp, <span class="k3">*</span>next<span class="k2">;</span>
     <span class="k1">for</span><span class="k2">(</span>tmp <span class="k3">=</span> head<span class="k2">;</span> tmp<span class="k2">;</span> tmp <span class="k3">=</span> next<span class="k2">)</span><span class="k2">{</span>
             
           next <span class="k3">=</span> tmp-&gt;next<span class="k2">;</span>
           
           <span class="k1">if</span><span class="k2">(</span>tmp-&gt;visible<span class="k2">)</span>
              render_object <span class="k2">(</span>buffer, sprite, camera.angle, camera.x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>tmp-&gt;x<span class="k2">)</span>, camera.y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>tmp-&gt;y<span class="k2">)</span>, camera<span class="k2">)</span><span class="k2">;</span>

     <span class="k2">}</span>

<span class="k2">}</span>
</pre></div></div><p>

Now, if I make the following changes in render_object:
</p><div class="source-code snippet"><div class="inner"><pre>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_x <span class="k3">=</span> cx<span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_y <span class="k3">=</span> cy<span class="k2">;</span>
</pre></div></div><p>

The code seems to work so long as I don&#39;t move the camera. The minute that I do, everything goes out of sync. Objects are no longer placed where I click the mouse (they&#39;re either far away or in a different direction). Also, by removing those values, whenever I shift the camera, all of the sprites move as if attached to the camera.</p><p>I can understand that this is because I pass the current camera position, but I don&#39;t see how (or why) add 160 to the x value and 100 to the y would solve this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Thu, 22 Dec 2005 17:42:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I haven&#39;t read his tutorial, but presumably he starts with a 320 x 200 screen and something that rotates around the centre of the screen, i.e. position 160,100? Then he probably extrapolates that to produce a 3d floor by doing some scaling in scanline starts and lengths?</p><p>If so then 160, 100 is a position relative to the viewer around which the floor moves. So if you rotate left or right, the floor rotates around the offset 160, 100. If you need to, think of it as balancing a piece of paper on your finger and looking at it with your eyes. When you rotate, you rotate the piece of paper on your finger, and 160,100 is the offset from your eyes to your finger.</p><p>As a simple fix without diving into Amarillion&#39;s code too deeply, if this works:</p><div class="source-code snippet"><div class="inner"><pre>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_x <span class="k3">=</span> cx<span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_y <span class="k3">=</span> cy<span class="k2">;</span>
</pre></div></div><p>

And this doesn&#39;t:</p><div class="source-code snippet"><div class="inner"><pre>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">160</span><span class="k2">)</span> <span class="k3">-</span> cx<span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">100</span><span class="k2">)</span> <span class="k3">-</span> cy<span class="k2">;</span>
</pre></div></div><p>

Then why not just adjust your cx, cy values? When you grab the mouse location, do this:</p><div class="source-code snippet"><div class="inner"><pre>                application.m_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">160</span><span class="k2">)</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>space_x<span class="k2">)</span><span class="k2">;</span> 
                application.m_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">100</span><span class="k2">)</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>space_y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Which has the effect that, until the camera moves, obj_x, obj_y end up with the same value as if you had taken the 160, 100 out of render_object.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Thu, 22 Dec 2005 21:39:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So simple! Thanks for taking the time out to explain this. Works wonderfully!</p><p>Cookies!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Thu, 22 Dec 2005 21:47:39 +0000</pubDate>
	</item>
</rss>
