<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>What form of bitmap is faster?</title>
		<link>http://www.allegro.cc/forums/view/558321</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 10 Jan 2006 15:27:20 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Which bitmaps use less memory? </p><p>Reg Bitmap? <br />Video Bitmap?<br />System Bitmap?<br />Loaded Bitmap?<br />Datafile Bitmap?<br />Loaded Bitmap and then copied to Video Bitmap?<br />Loaded Bitmap and then copied to System Bitmap?<br />Loaded Bitmap and then copied to Reg Bitmap?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 01:15:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmmm... less memory, or faster? For memory purposes, Reg Bitmap, Loaded Bitmap and Datafile Bitmap are all the same, they use RAM memory. Video Bitmap to Video Bitmap is faster if it works with HW acceleration, but you have limited Video memory. But, on the other side, copying any non-video bitmap to a video bitmap is SLOW.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Mon, 09 Jan 2006 01:27:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah. Faster. That&#39;s what I meant to say.</p><p>So video to Video...</p><p>What kind of method can I use to use this type of method if I&#39;m loading png&#39;s, gif&#39;s, and bitmaps?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 01:35:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Page flipping. Use <i>create_video_bitmap</i> to create two bitmaps. If you have a fixed amount of sprites, and enough video bitmap, you can create a small square of video bitmap and blit your loaded sprites there. Then, instead of blitting from the datafiles to the video bitmap, you could blit from that small square to the video bitmap.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Mon, 09 Jan 2006 01:41:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Once you load the bitmap, the file type has nothing to do with how it looks in memory. Furthermore, where you load it from doesn&#39;t either. Any loaded bitmap goes into a memory bitmap, you have to copy it to video or system manually.</p><p><a href="http://cgamesplay.com/hacks/memtest.cpp">This</a> is a program I wrote to test blits.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Mon, 09 Jan 2006 01:41:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is what I did before the game loop: </p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>        <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_one<span class="k2">;</span></td></tr><tr><td class="number">2</td><td>  layer_one <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_two<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  layer_two <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_three<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  layer_three <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_four<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  layer_four <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_six<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  layer_six <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</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/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_seven<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  layer_seven <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_eight<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  layer_eight <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>layer_nine<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  layer_nine <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span><span class="n">3200</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_one, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_two, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_three, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_four, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_six, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_seven, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_eight, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>layer_nine, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>  temp <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"keiku01f.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  bg <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"forest-5.gif"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_1.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  grass<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  grass<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_3.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  grass<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_upper.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>  foreground <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"foreground-2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  front_trees <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"front_trees.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_one, bg, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_two, foreground, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_three, grass<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_four, grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_six, grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_seven, grass<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_eight, grass<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>layer_nine, front_trees, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>foreground<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>front_trees<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

After that, I&#39;m just drawing the the layers(ie layer_one, etc.) to video memory in the loop. So I guess I have it where it needs to be then. Thanks guys! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 01:49:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Geez... your video card? And how much memory it does have? I think I would not be able to allocate that much memory with my 64mb one...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Mon, 09 Jan 2006 01:52:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh really? Is that considered a lot of memory? So what size should the video memory bitmaps be, just the size of the screen? </p><p>I think my Video memory is around 8mb for the Rage Pro and 64mb for the Radeon.</p><p>Rage Pro 128 8mb</p><p>Radeon x300 64mb
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 01:59:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Which is your bitmap depth? 8bpp?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Mon, 09 Jan 2006 02:17:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>16bpp. I also made sure that the pics loaded were at screen&#39;s width or maybe double(just one) and it works much better, too. So all of the created video bitmaps are only the width of the screen.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 02:35:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>16bbp is two bytes per pixel. You create eight 3200x480 images. That is 12MiB of memory. Of course some memory is for the screen bitmap and buffer too. That is not too much by todays standards but certainly it will never work on anything that has below 16MiB of Vram.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Mon, 09 Jan 2006 04:09:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok. </p><p>I&#39;ve changed those video sizes to 640x480l.</p><p>So now I&#39;ve created 8 640x480 video bitmaps. It seems to work fine on the Rage as well. Even with more than one character sprite on the screen.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 04:31:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why do you need 3200 width bitmaps? or is this something different to your tilemap program? </p><p>Also, why are you creating a bitmap, colouring it magenta then drawing masked images to it, why not just create the bitmaps then blit the image, saving the clear_to_colour() commands?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Mon, 09 Jan 2006 04:44:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>They&#39;re not 3200 now. They&#39;re 640. </p><p>As far as the clear color. I was told that the draw_sprite call was faster than the blit call. Is that wrong?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 05:24:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But you aren&#39;t doing that create_bitmap every loop are you?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Mon, 09 Jan 2006 05:55:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>no. </p><p>Here&#39;s what i have now. </p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>        Layer layer<span class="k2">[</span><span class="n">9</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>        bg <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"forest-6.gif"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>  grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_1_2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  grass<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_2_2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  grass<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_3_2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  grass<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"grass_upper_2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  foreground <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"foreground-2.gif"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  front_trees <span class="k3">=</span> load_png<span class="k2">(</span><span class="s">"front_trees_2.png"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>        layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.init<span class="k2">(</span>bg, <span class="n">0</span>, <span class="n">0</span>.<span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.init<span class="k2">(</span>foreground, <span class="n">0</span>, <span class="n">0</span>.<span class="n">4</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.init<span class="k2">(</span>grass<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>, <span class="n">335</span>, <span class="n">0</span>.<span class="n">6</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.init<span class="k2">(</span>grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">355</span>, <span class="n">0</span>.<span class="n">8</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.init<span class="k2">(</span>grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">419</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.init<span class="k2">(</span>grass<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="n">429</span>, <span class="n">1</span>.<span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.init<span class="k2">(</span>grass<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, <span class="n">439</span>, <span class="n">1</span>.<span class="n">4</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.init<span class="k2">(</span>front_trees, <span class="n">0</span>, <span class="n">1</span>.<span class="n">6</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>foreground<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>front_trees<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>grass<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

Each file is 640x480<br />Here&#39;s the init function:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> init<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>src, <span class="k1">int</span> src_y, <span class="k1">float</span> src_speed<span class="k2">)</span>
  <span class="k2">{</span>
    sprite <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>src-&gt;w, src-&gt;h<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>sprite, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>sprite, src, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    y <span class="k3">=</span> src_y<span class="k2">;</span>
    speed <span class="k3">=</span> src_speed<span class="k2">;</span>
  <span class="k2">}</span>
</pre></div></div><p>

And here&#39;s how it&#39;s drawn:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>                <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    MapDrawBGT<span class="k2">(</span>buffer, camera.x, camera.y, <span class="n">0</span>, <span class="n">0</span>, WIDTH-1, HEIGHT-1<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    <span class="c">//draw foreground tiles</span></td></tr><tr><td class="number">11</td><td>    MapDrawFG<span class="k2">(</span>buffer, camera.x, camera.y, <span class="n">0</span>, <span class="n">0</span>, WIDTH-1, HEIGHT-1, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    player.draw<span class="k2">(</span>buffer, camera.x, camera.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

And this works well for me now. And yes, I know that I need a for loop there and I will add it, but I also have problems when I add a for loop inside of the drawing loop. But anyway it works fine.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 06:09:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aren&#39;t you overwritting the <i>sprite</i> sprite with a new one everytime you call the <i>init</i> function?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Mon, 09 Jan 2006 06:11:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sort of. </p><p>I&#39;m just creating each layer sprite as a video bitmap and then drawing the 1st paramerter(loaded bitmap) to it so the now the sprite will be a video bitmap of the loaded bitmap. That&#39;s all. When an object is created, the sprite is NULL;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Mon, 09 Jan 2006 06:25:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[Can you see that this:<br />
<pre class="source-code"> <a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		MapDrawBGT<span class="k2">(</span>buffer, camera.x, camera.y, <span class="n">0</span>, <span class="n">0</span>, WIDTH-1, HEIGHT-1<span class="k2">)</span><span class="k2">;</span>
		<span class="c">//draw foreground tiles</span>
		MapDrawFG<span class="k2">(</span>buffer, camera.x, camera.y, <span class="n">0</span>, <span class="n">0</span>, WIDTH-1, HEIGHT-1, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
		player.draw<span class="k2">(</span>buffer, camera.x, camera.y<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.speed, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span></pre>...contains tons of duplicate code? Duplicate code is a sign that your layout isn&#39;t structured well. I&#39;d recommend using a dedicated function for blitting a layer:<br />
<pre class="snippet"><span class="k1">void</span> draw_layer<span class="k2">(</span><span class="k1">int</span> i<span class="k2">)</span> <span class="k2">{</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span>i<span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span>i<span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span>i<span class="k2">]</span>.speed, layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
		<a href="http://www.allegro.cc/manual/masked_blit" title="void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

Like blit(), but skips transparent pixels, which are marked by a zero in  256 color modes or bright pink for truecolor data (maximum red and blue,  ..." target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>layer<span class="k2">[</span>i<span class="k2">]</span>.sprite, buffer, <span class="n">0</span>, <span class="n">0</span>, layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;w <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>camera.x<span class="k3">*</span>layer<span class="k2">[</span>i<span class="k2">]</span>.speed<span class="k2">)</span>%layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;w<span class="k2">)</span>, layer<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">-</span> camera.y<span class="k3">*</span>layer<span class="k2">[</span>i<span class="k2">]</span>.speed, layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;w, layer<span class="k2">[</span>i<span class="k2">]</span>.sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span></pre><br />
Then your drawing code looks like this:<br />
<pre class="source-code"><span class="k1">int</span> l<span class="k2">;</span>

<span class="k1">for</span> <span class="k2">(</span>l <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> l <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>l<span class="k2">)</span>
  draw_layer<span class="k2">(</span>l<span class="k2">)</span><span class="k2">;</span>
MapDrawBGT<span class="k2">(</span>buffer, camera.x, camera.y, <span class="n">0</span>, <span class="n">0</span>, WIDTH-1, HEIGHT-1<span class="k2">)</span><span class="k2">;</span>
<span class="c">//draw foreground tiles</span>
MapDrawFG<span class="k2">(</span>buffer, camera.x, camera.y, <span class="n">0</span>, <span class="n">0</span>, WIDTH-1, HEIGHT-1, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
player.draw<span class="k2">(</span>buffer, camera.x, camera.y<span class="k2">)</span><span class="k2">;</span>
<span class="k1">for</span> <span class="k2">(</span>l <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span> l <span class="k3">&lt;</span> <span class="n">9</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>l<span class="k2">)</span>
  draw_layer<span class="k2">(</span>l<span class="k2">)</span><span class="k2">;</span></pre>Much cleaner, and compiler-friendly. If you want to avoid the function call and loop overhead (but in this situation, that&#39;s silly IMHO), you can mark draw_code() as inline, and specify -funroll-loops -funroll-all-loops when compiling.<br />
<br />
As for the draw_sprite() vs. blit() thing; the way you do it is certainly not the fastest, but I suggest that since it works, you leave it exactly as it is (avoiding color conversion issues). It&#39;s initialization code we&#39;re talking about here, no need to optimize unless loading takes more than 60 seconds.<br />
For the record: draw_sprite() is not faster than blit(). It can be faster than masked_blit() under certain circumstances, and it may be as fast as blit() for accelerated video-video operations.]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Tue, 10 Jan 2006 15:27:20 +0000</pubDate>
	</item>
</rss>
