<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A4] Old tile smooth scrolling code by Elias Pschernig from 1999</title>
		<link>http://www.allegro.cc/forums/view/606482</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 22 Feb 2011 19:28:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was digging through some old code and found this by Elias Pschernig from back in 1999.  I only really had to change 1 line of code for this to be up to date with Allegro 4 (the textprintf line).</p><p>I just thought that this was a nice little gem that shows how to code large 2D tile scrolling maps for anyone looking for help in this area.  This does it all, creates it&#39;s own bitmaps for the example, uses keyboard or mouse and has a really large map.  </p><p>Hope this helps someone, I hate to see this kind of thing go to waste, it really helped me understand how to do it back then.  (note: I doubt that Elias&#39; email is still at geocities, but I left it in for kicks <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />)</p><p>Edit: Oh yes, I also changed the mouse code so that when you press the left mouse button it acts more like you are dragging the map around (it was the opposite before).  So now with the left mouse button clicked the map can be &quot;dragged&quot;, which is kind of a kewl effect.</p><p>Edit2: Changed the -1 in textprintf_ex to makecol(0,0,0)... oops. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> (for background colour).</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">/*</span>
<span class="number">   2</span><span class="c">// Elias Pschernig 1999</span>
<span class="number">   3</span><span class="c">*/</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="c">/*</span>
<span class="number">   6</span><span class="c">// tile.c</span>
<span class="number">   7</span><span class="c">*/</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="c">/*</span>
<span class="number">  10</span><span class="c">// displays a tile map</span>
<span class="number">  11</span><span class="c">*/</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="c">/*</span>
<span class="number">  14</span><span class="c">// extreme speed increase can be achieved by</span>
<span class="number">  15</span><span class="c">// using hardware acceleration (vbeaf driver)</span>
<span class="number">  16</span><span class="c">// and replacing 'create_bitmap' with</span>
<span class="number">  17</span><span class="c">// 'create_video_bitmap' throughout the program</span>
<span class="number">  18</span><span class="c">//</span>
<span class="number">  19</span><span class="c">// speed increase will also result from using</span>
<span class="number">  20</span><span class="c">// rle_sprites for the tiles instead of bitmaps</span>
<span class="number">  21</span><span class="c">*/</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">  24</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  25</span>
<span class="number">  26</span><span class="p">#define COLOR_BITS 16     // video mode</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="p">#define NUM_OF_TILES 100  // possible different tiles</span>
<span class="number">  29</span>
<span class="number">  30</span><span class="p">#define MAP_WIDTH    100  // how big do you want the</span>
<span class="number">  31</span><span class="p">#define MAP_HEIGHT   100  // test map ?</span>
<span class="number">  32</span>
<span class="number">  33</span><span class="p">#define TILE_WIDTH   32   // how big is one (square) tile ?</span>
<span class="number">  34</span>
<span class="number">  35</span><span class="p">#define WIN_L 0</span>
<span class="number">  36</span><span class="p">#define WIN_T 0</span>
<span class="number">  37</span><span class="p">#define WIN_R 640</span>
<span class="number">  38</span><span class="p">#define WIN_B 359</span>
<span class="number">  39</span>
<span class="number">  40</span><span class="p">#define FPS 60</span>
<span class="number">  41</span><span class="c">// how many frames to do each second...</span>
<span class="number">  42</span><span class="c">// i don't really understand all the timer things</span>
<span class="number">  43</span><span class="c">// i guess there are better ways of keeping sync</span>
<span class="number">  44</span><span class="c">// between time and frames</span>
<span class="number">  45</span><span class="c">// i just set this FPS, then set 'starttime' and</span>
<span class="number">  46</span><span class="c">// keep the number of frames and the time in sync...</span>
<span class="number">  47</span>
<span class="number">  48</span><span class="k1">int</span> gametime<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>           <span class="c">// the application timer</span>
<span class="number">  49</span><span class="k1">void</span> gametimer<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  50</span> gametime<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  51</span><span class="k2">}</span>
<span class="number">  52</span><span class="k1">int</span> starttime<span class="k2">;</span>            <span class="c">// starttime</span>
<span class="number">  53</span><span class="k1">int</span> pframes,gframes<span class="k2">;</span>      <span class="c">// counts the different frames</span>
<span class="number">  54</span><span class="k1">int</span> second_ago_gframetime<span class="k2">;</span><span class="c">// used to calculate the fps</span>
<span class="number">  55</span><span class="k1">int</span> second_ago_gframes<span class="k2">;</span>
<span class="number">  56</span><span class="k1">int</span> fps<span class="k2">;</span>                  <span class="c">// this are the grafix frames</span>
<span class="number">  57</span>                          <span class="c">// the process frames always run</span>
<span class="number">  58</span>                          <span class="c">// as defined in FPS</span>
<span class="number">  59</span>
<span class="number">  60</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>tile<span class="k2">[</span>NUM_OF_TILES<span class="k2">]</span><span class="k2">;</span> <span class="c">// this is the tiles</span>
<span class="number">  61</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>map<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>              <span class="c">// the map</span>
<span class="number">  62</span><span class="k1">int</span> scrollx<span class="k3">=</span><span class="n">0</span>,scrolly<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>    <span class="c">// the pixel position of upper left</span>
<span class="number">  63</span>                            <span class="c">// screen corner inside map</span>
<span class="number">  64</span>
<span class="number">  65</span><span class="c">// load one single tile</span>
<span class="number">  66</span><span class="c">// (normally you use datafiles)</span>
<span class="number">  67</span><span class="k1">void</span> loadtile<span class="k2">(</span><span class="k1">int</span> n<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  68</span> tile<span class="k2">[</span>n<span class="k2">]</span><span class="k3">=</span><a href="http://www.allegro.cc/manual/create_video_bitmap"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>TILE_WIDTH,TILE_WIDTH<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span> <span class="k1">switch</span><span class="k2">(</span>n<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  70</span>  default: <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span>tile<span class="k2">[</span>n<span class="k2">]</span>,<a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number">  71</span>  <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number">  72</span>   <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span>tile<span class="k2">[</span>n<span class="k2">]</span>,<a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>   <a href="http://www.allegro.cc/manual/circlefill"><span class="a">circlefill</span></a><span class="k2">(</span>
<span class="number">  74</span>    tile<span class="k2">[</span>n<span class="k2">]</span>,
<span class="number">  75</span>    TILE_WIDTH<span class="k3">/</span><span class="n">2</span>,
<span class="number">  76</span>    TILE_WIDTH<span class="k3">/</span><span class="n">2</span>,
<span class="number">  77</span>    TILE_WIDTH<span class="k3">/</span><span class="n">2</span>,
<span class="number">  78</span>    <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>  <span class="k1">break</span><span class="k2">;</span>
<span class="number">  80</span>  <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span>
<span class="number">  81</span>   <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span>tile<span class="k2">[</span>n<span class="k2">]</span>,<a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>   <a href="http://www.allegro.cc/manual/triangle"><span class="a">triangle</span></a><span class="k2">(</span>
<span class="number">  83</span>    tile<span class="k2">[</span>n<span class="k2">]</span>,
<span class="number">  84</span>    TILE_WIDTH<span class="k3">/</span><span class="n">2</span>,<span class="n">0</span>,
<span class="number">  85</span>    <span class="n">0</span>,TILE_WIDTH-1,
<span class="number">  86</span>    TILE_WIDTH-1,TILE_WIDTH-1,
<span class="number">  87</span>    <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>  <span class="k1">break</span><span class="k2">;</span>
<span class="number">  89</span> <span class="k2">}</span>
<span class="number">  90</span><span class="k2">}</span>
<span class="number">  91</span>
<span class="number">  92</span><span class="c">// load all the tiles</span>
<span class="number">  93</span><span class="c">// (normally this is already done by loading datafile)</span>
<span class="number">  94</span><span class="k1">void</span> loadtiles<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  95</span> <span class="k1">int</span> n<span class="k2">;</span>
<span class="number">  96</span> <span class="k1">for</span><span class="k2">(</span>n<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>n<span class="k3">&lt;</span>NUM_OF_TILES<span class="k2">;</span>n<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  97</span>  loadtile<span class="k2">(</span>n<span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span> <span class="k2">}</span>
<span class="number">  99</span><span class="k2">}</span>
<span class="number"> 100</span>
<span class="number"> 101</span><span class="c">// load the map</span>
<span class="number"> 102</span><span class="c">// (normally datafile...)</span>
<span class="number"> 103</span><span class="k1">void</span> loadmap<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 104</span> <span class="k1">int</span> x,y<span class="k2">;</span>
<span class="number"> 105</span> map<span class="k3">=</span><a href="http://www.allegro.cc/manual/create_bitmap_ex"><span class="a">create_bitmap_ex</span></a><span class="k2">(</span><span class="n">8</span>,MAP_WIDTH,MAP_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span> <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span>map,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>
<span class="number"> 108</span> <span class="k1">for</span><span class="k2">(</span>y<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>y<span class="k3">&lt;</span>MAP_HEIGHT<span class="k2">;</span>y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>  <span class="k1">for</span><span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>MAP_WIDTH<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 110</span>   <span class="k1">int</span> r<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">4</span><span class="k2">;</span>
<span class="number"> 111</span>   <span class="k1">if</span><span class="k2">(</span>r<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/putpixel"><span class="a">putpixel</span></a><span class="k2">(</span>map,x,y,<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>   <span class="k1">if</span><span class="k2">(</span>r<span class="k3">=</span><span class="k3">=</span><span class="n">2</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/putpixel"><span class="a">putpixel</span></a><span class="k2">(</span>map,x,y,<span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>  <span class="k2">}</span>
<span class="number"> 114</span> <span class="k2">}</span>
<span class="number"> 115</span><span class="k2">}</span>
<span class="number"> 116</span>
<span class="number"> 117</span><span class="c">// display part of the tilemap,</span>
<span class="number"> 118</span><span class="c">// starting at scrollx, scrolly as</span>
<span class="number"> 119</span><span class="c">// upper left corner and filling</span>
<span class="number"> 120</span><span class="c">// the parameter bitmap 'screen'</span>
<span class="number"> 121</span><span class="c">// screen in most cases will be</span>
<span class="number"> 122</span><span class="c">// a subbitmap of the screen or</span>
<span class="number"> 123</span><span class="c">// of a doublebuffer</span>
<span class="number"> 124</span>
<span class="number"> 125</span><span class="k1">void</span> displaymap<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 126</span> <span class="k1">int</span> screenx,screeny<span class="k2">;</span>
<span class="number"> 127</span> <span class="k1">int</span> mapx,mapy<span class="k2">;</span>
<span class="number"> 128</span> <span class="k1">int</span> screenleft,mapleft<span class="k2">;</span>
<span class="number"> 129</span>
<span class="number"> 130</span> mapleft<span class="k3">=</span>scrollx<span class="k3">/</span>TILE_WIDTH<span class="k2">;</span>
<span class="number"> 131</span> mapy<span class="k3">=</span>scrolly<span class="k3">/</span>TILE_WIDTH<span class="k2">;</span>
<span class="number"> 132</span> screenleft<span class="k3">=</span>mapleft<span class="k3">*</span>TILE_WIDTH-scrollx<span class="k2">;</span>
<span class="number"> 133</span> screeny<span class="k3">=</span>mapy<span class="k3">*</span>TILE_WIDTH-scrolly<span class="k2">;</span>
<span class="number"> 134</span>
<span class="number"> 135</span> <span class="k1">while</span><span class="k2">(</span>screeny<span class="k3">&lt;</span>screen-&gt;h<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 136</span>  mapx<span class="k3">=</span>mapleft<span class="k2">;</span>
<span class="number"> 137</span>  screenx<span class="k3">=</span>screenleft<span class="k2">;</span>
<span class="number"> 138</span>  <span class="k1">while</span><span class="k2">(</span>screenx<span class="k3">&lt;</span>screen-&gt;w<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 139</span>
<span class="number"> 140</span>   <span class="k2">{</span><span class="k1">int</span> t<span class="k3">=</span><a href="http://www.allegro.cc/manual/getpixel"><span class="a">getpixel</span></a><span class="k2">(</span>map,mapx,mapy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>    <span class="k1">if</span><span class="k2">(</span>t&gt;<span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number"> 142</span>     <a href="http://www.allegro.cc/manual/blit"><span class="a">blit</span></a><span class="k2">(</span>tile<span class="k2">[</span>t<span class="k2">]</span>,<a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>,<span class="n">0</span>,<span class="n">0</span>,screenx,screeny,TILE_WIDTH,TILE_WIDTH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>   <span class="k2">}</span>
<span class="number"> 144</span>
<span class="number"> 145</span>   mapx<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 146</span>   screenx<span class="k3">+</span><span class="k3">=</span>TILE_WIDTH<span class="k2">;</span>
<span class="number"> 147</span>  <span class="k2">}</span>
<span class="number"> 148</span>  mapy<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 149</span>  screeny<span class="k3">+</span><span class="k3">=</span>TILE_WIDTH<span class="k2">;</span>
<span class="number"> 150</span> <span class="k2">}</span>
<span class="number"> 151</span><span class="k2">}</span>
<span class="number"> 152</span>
<span class="number"> 153</span><span class="c">// do all sort of things that need to run at</span>
<span class="number"> 154</span><span class="c">// a constant time, like user input,</span>
<span class="number"> 155</span><span class="c">// processing of objects...</span>
<span class="number"> 156</span><span class="k1">void</span> process<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 157</span> <span class="k1">int</span> k<span class="k2">;</span>
<span class="number"> 158</span> <span class="k1">int</span> xm,ym<span class="k2">;</span>
<span class="number"> 159</span>
<span class="number"> 160</span> <span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 161</span>  k<span class="k3">=</span><a href="http://www.allegro.cc/manual/readkey"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span> <span class="k2">}</span>
<span class="number"> 163</span>
<span class="number"> 164</span> <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span> scrollx-<span class="k3">=</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 165</span> <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span> scrollx<span class="k3">+</span><span class="k3">=</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 166</span> <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> scrolly-<span class="k3">=</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 167</span> <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span> scrolly<span class="k3">+</span><span class="k3">=</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 168</span>
<span class="number"> 169</span>
<span class="number"> 170</span> <a href="http://www.allegro.cc/manual/get_mouse_mickeys"><span class="a">get_mouse_mickeys</span></a><span class="k2">(</span><span class="k3">&amp;</span>xm,<span class="k3">&amp;</span>ym<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</span> <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_b"><span class="a">mouse_b</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 172</span>  scrollx-<span class="k3">=</span>xm<span class="k2">;</span>
<span class="number"> 173</span>  scrolly-<span class="k3">=</span>ym<span class="k2">;</span>
<span class="number"> 174</span> <span class="k2">}</span>
<span class="number"> 175</span>
<span class="number"> 176</span>
<span class="number"> 177</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">&gt;</span><span class="k3">=</span> WIN_R-1<span class="k2">)</span> scrollx<span class="k3">+</span><span class="k3">=</span><span class="n">8</span><span class="k2">;</span>
<span class="number"> 178</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">&lt;</span><span class="k3">=</span> WIN_L<span class="k3">+</span><span class="n">1</span><span class="k2">)</span> scrollx-<span class="k3">=</span><span class="n">8</span><span class="k2">;</span>
<span class="number"> 179</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">&gt;</span><span class="k3">=</span> SCREEN_H-1<span class="k2">)</span> scrolly<span class="k3">+</span><span class="k3">=</span><span class="n">8</span><span class="k2">;</span>
<span class="number"> 180</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">&lt;</span><span class="k3">=</span> WIN_T<span class="k2">)</span> scrolly-<span class="k3">=</span><span class="n">8</span><span class="k2">;</span>
<span class="number"> 181</span>
<span class="number"> 182</span> <span class="k1">if</span><span class="k2">(</span>scrollx<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> scrollx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 183</span> <span class="k1">if</span><span class="k2">(</span>scrolly<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> scrolly<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 184</span> <span class="k1">if</span><span class="k2">(</span>scrollx&gt;MAP_WIDTH<span class="k3">*</span>TILE_WIDTH-<span class="k2">(</span>WIN_R-WIN_L<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 185</span>    scrollx<span class="k3">=</span>MAP_WIDTH<span class="k3">*</span>TILE_WIDTH-<span class="k2">(</span>WIN_R-WIN_L<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 186</span> <span class="k1">if</span><span class="k2">(</span>scrolly&gt;MAP_HEIGHT<span class="k3">*</span>TILE_WIDTH-<span class="k2">(</span>WIN_B-WIN_T<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 187</span>    scrolly<span class="k3">=</span>MAP_HEIGHT<span class="k3">*</span>TILE_WIDTH-<span class="k2">(</span>WIN_B-WIN_T<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>
<span class="number"> 189</span><span class="k2">}</span>
<span class="number"> 190</span>
<span class="number"> 191</span><span class="k1">void</span> grafix<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>myscreen<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 192</span> <a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>win<span class="k2">;</span>
<span class="number"> 193</span> win<span class="k3">=</span><a href="http://www.allegro.cc/manual/create_sub_bitmap"><span class="a">create_sub_bitmap</span></a><span class="k2">(</span>myscreen,
<span class="number"> 194</span>  WIN_L,WIN_T,WIN_R,WIN_B<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>
<span class="number"> 196</span> displaymap<span class="k2">(</span>win<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>
<span class="number"> 198</span> <a href="http://www.allegro.cc/manual/destroy_bitmap"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>win<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>
<span class="number"> 200</span> <a href="http://www.allegro.cc/manual/textprintf_ex"><span class="a">textprintf_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>,<a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,<span class="n">0</span>,<span class="n">360</span>,<a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span>, <span class="s">"fps %2d  "</span>,fps<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span><span class="k2">}</span>
<span class="number"> 202</span>
<span class="number"> 203</span>
<span class="number"> 204</span><span class="c">// the main program</span>
<span class="number"> 205</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 206</span> <a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>double_buffer<span class="k2">;</span>
<span class="number"> 207</span>
<span class="number"> 208</span> <a href="http://www.allegro.cc/manual/allegro_init"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 209</span> <a href="http://www.allegro.cc/manual/install_keyboard"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span> <a href="http://www.allegro.cc/manual/install_timer"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span> <a href="http://www.allegro.cc/manual/install_int"><span class="a">install_int</span></a><span class="k2">(</span>gametimer,<span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span> <a href="http://www.allegro.cc/manual/install_mouse"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>
<span class="number"> 214</span> <a href="http://www.allegro.cc/manual/set_color_depth"><span class="a">set_color_depth</span></a><span class="k2">(</span>COLOR_BITS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span> <span class="k2">{</span><span class="k1">int</span> s<span class="k3">=</span><a href="http://www.allegro.cc/manual/set_gfx_mode"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT,<span class="n">640</span>,<span class="n">480</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>  <span class="k1">if</span><span class="k2">(</span>s<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 217</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Allegro couldnt set %d bit mode\n"</span>,COLOR_BITS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"recompile and use another setting\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"sorry\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 220</span>   <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 221</span>  <span class="k2">}</span>
<span class="number"> 222</span> <span class="k2">}</span>
<span class="number"> 223</span> double_buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>WIN_R-WIN_L, WIN_B-WIN_T<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</span> clear<span class="k2">(</span>double_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>
<span class="number"> 226</span> loadtiles<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span> loadmap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>
<span class="number"> 229</span> <span class="k2">{</span>
<span class="number"> 230</span>  starttime<span class="k3">=</span>second_ago_gframetime<span class="k3">=</span>gametime<span class="k2">;</span>
<span class="number"> 231</span>  pframes<span class="k3">=</span>gframes<span class="k3">=</span>second_ago_gframes<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 232</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 233</span>
<span class="number"> 234</span>   <span class="k1">if</span><span class="k2">(</span>pframes<span class="k3">*</span><span class="n">100</span><span class="k3">&lt;</span><span class="k2">(</span>gametime-starttime<span class="k2">)</span><span class="k3">*</span>FPS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 235</span>    process<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 236</span>    pframes<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 237</span>   <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 238</span>
<span class="number"> 239</span><span class="c">// don't pass screen in a real program here, but</span>
<span class="number"> 240</span><span class="c">// use a doublebuffer or pageflipping or something</span>
<span class="number"> 241</span><span class="c">// to avoid bad display quality</span>
<span class="number"> 242</span>
<span class="number"> 243</span>    grafix<span class="k2">(</span>double_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>    <a href="http://www.allegro.cc/manual/vsync"><span class="a">vsync</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>    <a href="http://www.allegro.cc/manual/show_mouse"><span class="a">show_mouse</span></a><span class="k2">(</span>double_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>    <a href="http://www.allegro.cc/manual/blit"><span class="a">blit</span></a><span class="k2">(</span>double_buffer, <a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, WIN_L, WIN_T, WIN_R-WIN_L, WIN_B-WIN_T<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>    <a href="http://www.allegro.cc/manual/show_mouse"><span class="a">show_mouse</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>    gframes<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 249</span>   <span class="k2">}</span>
<span class="number"> 250</span>
<span class="number"> 251</span>   <span class="c">// fps-&gt;how many grafix frames in last second ?</span>
<span class="number"> 252</span>   <span class="k1">if</span><span class="k2">(</span>gametime-second_ago_gframetime&gt;<span class="k3">=</span><span class="n">100</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 253</span>    second_ago_gframetime<span class="k3">+</span><span class="k3">=</span><span class="n">100</span><span class="k2">;</span>
<span class="number"> 254</span>    fps<span class="k3">=</span>gframes-second_ago_gframes<span class="k2">;</span>
<span class="number"> 255</span>    second_ago_gframes<span class="k3">=</span>gframes<span class="k2">;</span>
<span class="number"> 256</span>   <span class="k2">}</span>
<span class="number"> 257</span>
<span class="number"> 258</span>  <span class="k2">}</span>
<span class="number"> 259</span> <span class="k2">}</span>
<span class="number"> 260</span>
<span class="number"> 261</span>   <a href="http://www.allegro.cc/manual/destroy_bitmap"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>double_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 262</span>
<span class="number"> 263</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"email: eliaspschernig@geocities.com? LOL\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 264</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 265</span><span class="k2">}</span>
<span class="number"> 266</span>
<span class="number"> 267</span><a href="http://www.allegro.cc/manual/END_OF_MAIN"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 22 Feb 2011 04:25:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nooo, how embarassing <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> It&#39;s not supposed to work with Allegro &gt; 3.12 btw. because video bitmaps share memory with screen - you can&#39;t use both in the same code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 22 Feb 2011 04:53:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t lecture to me, you&#39;re the one who wrote it! <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />  And it works fine. heheheh, should update it and make an Allegro 5 example (properly coded this time! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />) <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>It was a blast from the past, but pretty kewl little example I thought.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 22 Feb 2011 04:55:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="remote-thumbnail"><span class="json">{"name":"603456","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/1\/213205673d15a2b517f1057709ccc758.jpg","w":400,"h":373,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/1\/213205673d15a2b517f1057709ccc758"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/1/213205673d15a2b517f1057709ccc758-240.jpg" alt="603456" width="240" height="223" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Feb 2011 06:40:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606482/904599#target">Neil Roy</a> said:</div><div class="quote"><p> heheheh, should update it and make an Allegro 5 example</p></div></div><p>

Well, you left me no choice <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">/* Simple Allegro 5 tilemap example from allegro.cc:</span>
<span class="number">   2</span><span class="c"> *</span>
<span class="number">   3</span><span class="c"> * http://www.allegro.cc/forums/thread/606482</span>
<span class="number">   4</span><span class="c"> *</span>
<span class="number">   5</span><span class="c"> * Also see here for more info:</span>
<span class="number">   6</span><span class="c"> * </span>
<span class="number">   7</span><span class="c"> * http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial</span>
<span class="number">   8</span><span class="c"> * </span>
<span class="number">   9</span><span class="c"> * Place fixed_font.tga and icon.tga from the Allegro 5 examples/data</span>
<span class="number">  10</span><span class="c"> * folder next to the .exe and there will be an FPS counter and an</span>
<span class="number">  11</span><span class="c"> * icon.</span>
<span class="number">  12</span><span class="c"> * </span>
<span class="number">  13</span><span class="c"> * Left mouse = Pan</span>
<span class="number">  14</span><span class="c"> * Right mouse = Rotozoom</span>
<span class="number">  15</span><span class="c"> * Esc = Quit</span>
<span class="number">  16</span><span class="c"> */</span>
<span class="number">  17</span>
<span class="number">  18</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  19</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">  20</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">  21</span>
<span class="number">  22</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">  23</span><span class="p">#include "allegro5/allegro_image.h"</span>
<span class="number">  24</span><span class="p">#include "allegro5/allegro_primitives.h"</span>
<span class="number">  25</span><span class="p">#include "allegro5/allegro_font.h"</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="c">/* Our window. */</span>
<span class="number">  28</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  29</span><span class="c">/* Our tiles atlas. */</span>
<span class="number">  30</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>tiles<span class="k2">;</span>
<span class="number">  31</span><span class="c">/* Our tilemap. */</span>
<span class="number">  32</span><span class="k1">int</span> tile_map<span class="k2">[</span><span class="n">100</span> <span class="k3">*</span> <span class="n">100</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  33</span><span class="c">/* Keep track of pressed mouse button. */</span>
<span class="number">  34</span><span class="k1">int</span> mouse<span class="k2">;</span>
<span class="number">  35</span><span class="c">/* Camera parameters. */</span>
<span class="number">  36</span><span class="k1">float</span> zoom <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span>, rotate<span class="k2">;</span>
<span class="number">  37</span><span class="k1">float</span> scroll_x, scroll_y<span class="k2">;</span>
<span class="number">  38</span><span class="c">/* Our icon and font. */</span>
<span class="number">  39</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>icon<span class="k2">;</span>
<span class="number">  40</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number">  41</span><span class="c">/* Simple FPS counter. */</span>
<span class="number">  42</span><span class="k1">int</span> fps, fps_accum<span class="k2">;</span>
<span class="number">  43</span><span class="k1">double</span> fps_time<span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span><span class="c">/* Places a single tile into the tile atlas.</span>
<span class="number">  46</span><span class="c"> * Normally you would load the tiles from a file.</span>
<span class="number">  47</span><span class="c"> */</span>
<span class="number">  48</span><span class="k1">void</span> tile_draw<span class="k2">(</span><span class="k1">int</span> i, <span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> w, <span class="k1">float</span> h<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  49</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> black <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> yellow <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> red <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>    <span class="k1">switch</span> <span class="k2">(</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  53</span>        <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number">  54</span>            <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> h, black<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  56</span>        <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number">  57</span>            <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> h, red<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>            <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span>x <span class="k3">+</span> w <span class="k3">*</span> <span class="n">0</span>.<span class="n">5</span>, y <span class="k3">+</span> h <span class="k3">*</span> <span class="n">0</span>.<span class="n">5</span>, w <span class="k3">*</span> <span class="n">0</span>.<span class="n">475</span>,
<span class="number">  59</span>                yellow<span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  61</span>        <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span>
<span class="number">  62</span>            <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> h, yellow<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>            <a href="http://www.allegro.cc/manual/al_draw_filled_triangle"><span class="a">al_draw_filled_triangle</span></a><span class="k2">(</span>x <span class="k3">+</span> w <span class="k3">*</span> <span class="n">0</span>.<span class="n">5</span>, y <span class="k3">+</span> h <span class="k3">*</span> <span class="n">0</span>.<span class="n">125</span>,
<span class="number">  64</span>                x <span class="k3">+</span> w <span class="k3">*</span> <span class="n">0</span>.<span class="n">125</span>, y <span class="k3">+</span> h <span class="k3">*</span> <span class="n">0</span>.<span class="n">875</span>,
<span class="number">  65</span>                x <span class="k3">+</span> w <span class="k3">*</span> <span class="n">0</span>.<span class="n">875</span>, y <span class="k3">+</span> h <span class="k3">*</span> <span class="n">0</span>.<span class="n">875</span>, red<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  67</span>        <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span>
<span class="number">  68</span>            <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> h, black<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>            <span class="k1">if</span> <span class="k2">(</span>icon<span class="k2">)</span>
<span class="number">  70</span>                <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>icon, <span class="n">0</span>, <span class="n">0</span>, <span class="n">48</span>, <span class="n">48</span>,
<span class="number">  71</span>                    x, y, w, h, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  73</span>    <span class="k2">}</span>
<span class="number">  74</span><span class="k2">}</span>
<span class="number">  75</span>
<span class="number">  76</span><span class="c">/* Creates the tiles and a random 100x100 map. */</span>
<span class="number">  77</span><span class="k1">void</span> tile_map_create<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>    <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  79</span>    <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number">  80</span>    <span class="c">/* Create the tile atlas. */</span>
<span class="number">  81</span>    tiles <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><span class="n">1024</span>, <span class="n">1024</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>tiles<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>    <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  85</span>        <span class="c">/* We draw the tiles a bit bigger (66x66 instead of 64x64)</span>
<span class="number">  86</span><span class="c">         * to account for the linear filtering. Normally just leaving</span>
<span class="number">  87</span><span class="c">         * the border transparent for sprites or repeating the border</span>
<span class="number">  88</span><span class="c">         * for tiling tiles should work well.</span>
<span class="number">  89</span><span class="c">         */</span>
<span class="number">  90</span>        tile_draw<span class="k2">(</span>i, i <span class="k3">*</span> <span class="n">66</span>, <span class="n">0</span>, <span class="n">66</span>, <span class="n">66</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>    <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>
<span class="number">  94</span>    <span class="c">/* Create the random map. */</span>
<span class="number">  95</span>    <span class="k1">for</span> <span class="k2">(</span>y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <span class="n">100</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  96</span>        <span class="k1">for</span> <span class="k2">(</span>x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <span class="n">100</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  97</span>            tile_map<span class="k2">[</span>x <span class="k3">+</span> y <span class="k3">*</span> <span class="n">100</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">4</span><span class="k2">;</span>
<span class="number">  98</span>        <span class="k2">}</span>
<span class="number">  99</span>    <span class="k2">}</span>
<span class="number"> 100</span>    
<span class="number"> 101</span>    <span class="c">/* Center of map. */</span>
<span class="number"> 102</span>    scroll_x <span class="k3">=</span> <span class="n">100</span> <span class="k3">*</span> <span class="n">32</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 103</span>    scroll_y <span class="k3">=</span> <span class="n">100</span> <span class="k3">*</span> <span class="n">32</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 104</span><span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span><span class="c">/* Draws the complete map. */</span>
<span class="number"> 107</span><span class="k1">void</span> tile_map_draw<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 108</span>    <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number"> 109</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> transform<span class="k2">;</span>
<span class="number"> 110</span>    <span class="k1">float</span> w, h<span class="k2">;</span>
<span class="number"> 111</span>    
<span class="number"> 112</span>    w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>    h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>    
<span class="number"> 115</span>    <span class="c">/* Initialize transformation. */</span>
<span class="number"> 116</span>    <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>    <span class="c">/* Move to scroll position. */</span>
<span class="number"> 118</span>    <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span>scroll_x, <span class="k3">-</span>scroll_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>    <span class="c">/* Rotate and scale around the center first. */</span>
<span class="number"> 120</span>    <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, rotate<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>    <a href="http://www.allegro.cc/manual/al_scale_transform"><span class="a">al_scale_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, zoom, zoom<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>    <span class="c">/* Move scroll position to screen center. */</span>
<span class="number"> 123</span>    <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, w <span class="k3">*</span> <span class="n">0</span>.<span class="n">5</span>, h <span class="k3">*</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>    <span class="c">/* All subsequent drawing is transformed. */</span>
<span class="number"> 125</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>    
<span class="number"> 129</span>    <a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>    <span class="k1">for</span> <span class="k2">(</span>y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <span class="n">100</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 131</span>        <span class="k1">for</span> <span class="k2">(</span>x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <span class="n">100</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 132</span>            <span class="k1">int</span> i <span class="k3">=</span> tile_map<span class="k2">[</span>x <span class="k3">+</span> y <span class="k3">*</span> <span class="n">100</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 133</span>            <span class="k1">float</span> u <span class="k3">=</span> <span class="n">1</span> <span class="k3">+</span> i <span class="k3">*</span> <span class="n">66</span><span class="k2">;</span>
<span class="number"> 134</span>            <span class="k1">float</span> v <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 135</span>            <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>tiles, u, v, <span class="n">64</span>, <span class="n">64</span>,
<span class="number"> 136</span>                x <span class="k3">*</span> <span class="n">32</span>, y <span class="k3">*</span> <span class="n">32</span>, <span class="n">32</span>, <span class="n">32</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>        <span class="k2">}</span>
<span class="number"> 138</span>    <span class="k2">}</span>
<span class="number"> 139</span>    <a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>    
<span class="number"> 141</span>    <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span><span class="k2">}</span>
<span class="number"> 144</span>
<span class="number"> 145</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 146</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number"> 147</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">;</span>
<span class="number"> 148</span>    <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 149</span>    
<span class="number"> 150</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>
<span class="number"> 152</span>    <span class="c">/* Init Allegro 5 + addons. */</span>
<span class="number"> 153</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>    <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>    <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>    <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>    <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>
<span class="number"> 160</span>    <span class="c">/* Create our window. */</span>
<span class="number"> 161</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>    display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>    <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>display, <span class="s">"Allegro 5 Tilemap Example"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>
<span class="number"> 165</span>    <span class="c">/* The example will work without those, but there will be no</span>
<span class="number"> 166</span><span class="c">     * FPS display and no icon.</span>
<span class="number"> 167</span><span class="c">     */</span>
<span class="number"> 168</span>    <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"fixed_font.tga"</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>    icon <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"icon.tga"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>    <span class="k1">if</span> <span class="k2">(</span>icon<span class="k2">)</span>
<span class="number"> 171</span>        <a href="http://www.allegro.cc/manual/al_set_display_icon"><span class="a">al_set_display_icon</span></a><span class="k2">(</span>display, icon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 172</span>
<span class="number"> 173</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MIN_LINEAR <span class="k3">|</span> ALLEGRO_MAG_LINEAR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>
<span class="number"> 175</span>    tile_map_create<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 176</span>
<span class="number"> 177</span>    timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 178</span>    queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>
<span class="number"> 185</span>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 186</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 187</span>        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>
<span class="number"> 189</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 190</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 191</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 192</span>            <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span>
<span class="number"> 193</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 194</span>        <span class="k2">}</span>
<span class="number"> 195</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 196</span>            mouse <span class="k3">=</span> event.mouse.button<span class="k2">;</span>
<span class="number"> 197</span>        <span class="k2">}</span>
<span class="number"> 198</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 199</span>            mouse <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 200</span>        <span class="k2">}</span>
<span class="number"> 201</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</span>            <span class="c">/* Left button scrolls. */</span>
<span class="number"> 203</span>            <span class="k1">if</span> <span class="k2">(</span>mouse <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 204</span>                <span class="k1">float</span> x <span class="k3">=</span> event.mouse.dx <span class="k3">/</span> zoom<span class="k2">;</span>
<span class="number"> 205</span>                <span class="k1">float</span> y <span class="k3">=</span> event.mouse.dy <span class="k3">/</span> zoom<span class="k2">;</span>
<span class="number"> 206</span>                scroll_x <span class="k3">-</span><span class="k3">=</span> x <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>rotate<span class="k2">)</span> <span class="k3">+</span> y <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>rotate<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 207</span>                scroll_y <span class="k3">-</span><span class="k3">=</span> y <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>rotate<span class="k2">)</span> <span class="k3">-</span> x <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>rotate<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>            <span class="k2">}</span>
<span class="number"> 209</span>            <span class="c">/* Right button zooms/rotates. */</span>
<span class="number"> 210</span>            <span class="k1">if</span> <span class="k2">(</span>mouse <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 211</span>                rotate <span class="k3">+</span><span class="k3">=</span> event.mouse.dx <span class="k3">*</span> <span class="n">0</span>.<span class="n">01</span><span class="k2">;</span>
<span class="number"> 212</span>                zoom <span class="k3">+</span><span class="k3">=</span> event.mouse.dy <span class="k3">*</span> <span class="n">0</span>.<span class="n">01</span> <span class="k3">*</span> zoom<span class="k2">;</span>
<span class="number"> 213</span>            <span class="k2">}</span>
<span class="number"> 214</span>            zoom <span class="k3">+</span><span class="k3">=</span> event.mouse.dz <span class="k3">*</span> <span class="n">0</span>.<span class="n">1</span> <span class="k3">*</span> zoom<span class="k2">;</span>
<span class="number"> 215</span>            <span class="k1">if</span> <span class="k2">(</span>zoom <span class="k3">&lt;</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">)</span> zoom <span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 216</span>            <span class="k1">if</span> <span class="k2">(</span>zoom <span class="k3">&gt;</span> <span class="n">10</span><span class="k2">)</span> zoom <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 217</span>        <span class="k2">}</span>
<span class="number"> 218</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 219</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 220</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_RESIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 221</span>            <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 223</span>        <span class="k2">}</span>
<span class="number"> 224</span>
<span class="number"> 225</span>        <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 226</span>            <span class="k1">double</span> t <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>            tile_map_draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>            <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 229</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span><span class="n">4</span>, <span class="n">4</span>, <span class="n">100</span>, <span class="n">30</span>,
<span class="number"> 230</span>                    <span class="n">8</span>, <span class="n">8</span>, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>                <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>,
<span class="number"> 232</span>                    <span class="n">54</span>, <span class="n">8</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"FPS: %d"</span>, fps<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>            <span class="k2">}</span>
<span class="number"> 234</span>            <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>            fps_accum<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 236</span>            <span class="k1">if</span> <span class="k2">(</span>t <span class="k3">-</span> fps_time <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 237</span>                fps <span class="k3">=</span> fps_accum<span class="k2">;</span>
<span class="number"> 238</span>                fps_accum <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 239</span>                fps_time <span class="k3">=</span> t<span class="k2">;</span>
<span class="number"> 240</span>            <span class="k2">}</span>
<span class="number"> 241</span>        <span class="k2">}</span>
<span class="number"> 242</span>    <span class="k2">}</span>
<span class="number"> 243</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 244</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 22 Feb 2011 06:44:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Whoa, that&#39;s impressive.  Love the mouse wheel zoom. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>And coded properly this time! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>We&#39;ll see what you think of this new code in 12 years. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 22 Feb 2011 07:13:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>kewl stuff <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Feb 2011 07:29:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This new example really shows off the new Allegro.  No keyboard needed, completely mouse controlled, re-sizable, and closed with the mouse properly with some very easy to use code.  Allegro has come a long way since 1999. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Good work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 22 Feb 2011 08:06:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A more complex example would only draw the tiles that are visible. But thats pretty decent.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 22 Feb 2011 17:35:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks very much for this example, helped me understand a few useful things.</p><p>I wonder however why the code compilation takes a few seconds (5/6 seconds before launch) for a such lightweight code ?</p><p>Is this because of the number of tiles used ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Inquisiteur)</author>
		<pubDate>Tue, 22 Feb 2011 19:28:22 +0000</pubDate>
	</item>
</rss>
