<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Tile engine</title>
		<link>http://www.allegro.cc/forums/view/587038</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 18 Aug 2006 21:04:58 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m writing a tile engine using Open layer </p><p>this is what I have thusfar</p><p>header
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#ifndef _TILEMAP</span></td></tr><tr><td class="number">2</td><td><span class="p">#define _TILEMAP</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">5</td><td><span class="p">#include "Engine.h"</span></td></tr><tr><td class="number">6</td><td><span class="p">#include "AIdef.h"</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">class</span> TTile</td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>public:  </td></tr><tr><td class="number">11</td><td><span class="k1">int</span>  bound<span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k1">int</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k1">short</span> occupied<span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="k1">class</span> TTilemap</td></tr><tr><td class="number">17</td><td><span class="k2">{</span></td></tr><tr><td class="number">18</td><td>private:  </td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>public:</td></tr><tr><td class="number">21</td><td><span class="k1">int</span> m_nWidth<span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k1">int</span> m_nHeight<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td>std::vector<span class="k3">&lt;</span>std::vector<span class="k3">&lt;</span> TTile <span class="k3">*</span> <span class="k3">&gt;</span> <span class="k3">&gt;</span>cell<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>std::vector<span class="k3">&lt;</span> Bitmap <span class="k3">*</span><span class="k3">&gt;</span> tile<span class="k2">;</span> </td></tr><tr><td class="number">26</td><td>TTilemap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>~TTilemap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td><span class="k1">void</span> draw<span class="k2">(</span><span class="k1">int</span> camx,<span class="k1">int</span> camy<span class="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">29</td><td><span class="k1">void</span> load<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span> filename<span class="k2">)</span><span class="k2">;</span>      </td></tr><tr><td class="number">30</td><td>      </td></tr><tr><td class="number">31</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td><span class="p">#endif</span></td></tr></tbody></table></div></div><p>

CPP</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>include <span class="k3">&lt;</span>allegro.h&gt;</td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;OpenLayer.hpp&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;loadpng.h&gt;</span></td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;malloc.h&gt;</span></td></tr><tr><td class="number">5</td><td><span class="p">#include &lt;string.h&gt;</span></td></tr><tr><td class="number">6</td><td><span class="p">#include &lt;iostream&gt;</span></td></tr><tr><td class="number">7</td><td><span class="p">#include &lt;fstream&gt;</span></td></tr><tr><td class="number">8</td><td><span class="p">#include "Tilemap.h"</span></td></tr><tr><td class="number">9</td><td><span class="p">#include "AIdef.h"</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="k1">extern</span> TEngine <span class="k3">*</span> engine<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">extern</span> <span class="k1">int</span> screenmid_x<span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">extern</span> <span class="k1">int</span> screenmid_y<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="k1">extern</span> Bitmap <span class="k3">*</span> im_occ<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td><span class="k1">void</span> TTilemap::load<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span> filename<span class="k2">)</span></td></tr><tr><td class="number">19</td><td><span class="k2">{</span></td></tr><tr><td class="number">20</td><td><span class="k1">char</span> szChar<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k1">char</span> c<span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k1">char</span> szTAG<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td><a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>szTAG,<span class="s">""</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td><span class="k1">int</span> readingchunk<span class="k3">=</span>FC_NONE,Tile_X,Tile_Y<span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k1">int</span> tilepart<span class="k3">=</span>TP_NONE<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>Tile_X<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>Tile_Y<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>std::ifstream mapfile<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>TTile <span class="k3">*</span> temptile<span class="k3">=</span>NULL<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>std::vector<span class="k3">&lt;</span>TTile <span class="k3">*</span> <span class="k3">&gt;</span> tempvector<span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>mapfile.eof<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>  mapfile.read<span class="k2">(</span>szChar,<span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  szChar<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><span class="s">'\0'</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>szChar<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><span class="k3">=</span><span class="s">' '</span><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>szChar<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><span class="k3">=</span><span class="s">'\n'</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">37</td><td>       <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>       <span class="k1">switch</span> <span class="k2">(</span>readingchunk<span class="k2">)</span></td></tr><tr><td class="number">39</td><td>           <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>           <span class="k1">case</span> FC_NONE:</td></tr><tr><td class="number">41</td><td>                readingchunk<span class="k3">=</span>FC_NONE<span class="k2">;</span></td></tr><tr><td class="number">42</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>           <span class="k1">case</span> FC_DATE:</td></tr><tr><td class="number">44</td><td>                readingchunk<span class="k3">=</span>FC_NONE<span class="k2">;</span></td></tr><tr><td class="number">45</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>           <span class="k1">case</span> FC_TILESET:</td></tr><tr><td class="number">47</td><td>                readingchunk<span class="k3">=</span>FC_NONE<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>           <span class="k1">case</span> FC_MAP:</td></tr><tr><td class="number">50</td><td>                readingchunk<span class="k3">=</span>FC_NONE<span class="k2">;</span></td></tr><tr><td class="number">51</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>           <span class="k1">case</span> FC_WIDTH:</td></tr><tr><td class="number">53</td><td>                m_nWidth<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>szTAG<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>                readingchunk<span class="k3">=</span>FC_NONE<span class="k2">;</span></td></tr><tr><td class="number">55</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>           <span class="k1">case</span> FC_HEIGHT:</td></tr><tr><td class="number">57</td><td>                m_nHeight<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>szTAG<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>                readingchunk<span class="k3">=</span>FC_NONE<span class="k2">;</span></td></tr><tr><td class="number">59</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>           <span class="k1">case</span> FC_TILES:</td></tr><tr><td class="number">61</td><td>                <span class="k1">if</span> <span class="k2">(</span>tilepart<span class="k3">=</span><span class="k3">=</span>TP_BOUND<span class="k2">)</span></td></tr><tr><td class="number">62</td><td>                   <span class="k2">{</span></td></tr><tr><td class="number">63</td><td>                   temptile-&gt;bound<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>szTAG<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>                   tempvector.push_back<span class="k2">(</span>temptile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>                   Tile_X<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>                   <span class="k1">if</span> <span class="k2">(</span>Tile_X<span class="k3">=</span><span class="k3">=</span>m_nWidth<span class="k2">)</span></td></tr><tr><td class="number">67</td><td>                      <span class="k2">{</span></td></tr><tr><td class="number">68</td><td>                      cell.push_back<span class="k2">(</span>tempvector<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>                      Tile_X<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>                      Tile_Y<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td>                      tempvector.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">72</td><td>                      <span class="k2">}</span></td></tr><tr><td class="number">73</td><td>                   tilepart<span class="k3">=</span>TP_NONE<span class="k2">;</span></td></tr><tr><td class="number">74</td><td>                   <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>                <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>tilepart<span class="k3">=</span><span class="k3">=</span>TP_INDEX<span class="k2">)</span></td></tr><tr><td class="number">76</td><td>                   <span class="k2">{</span></td></tr><tr><td class="number">77</td><td>                   temptile<span class="k3">=</span><span class="k1">new</span> TTile<span class="k2">;</span></td></tr><tr><td class="number">78</td><td>                   temptile-&gt;index<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>szTAG<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>                   temptile-&gt;occupied<span class="k3">=</span>OC_NONE<span class="k2">;</span></td></tr><tr><td class="number">80</td><td>                   tilepart<span class="k3">=</span>TP_NONE<span class="k2">;</span></td></tr><tr><td class="number">81</td><td>                   <span class="k2">}</span></td></tr><tr><td class="number">82</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>           <span class="k2">}</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"DATE:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> readingchunk<span class="k3">=</span>FC_DATE<span class="k2">;</span></td></tr><tr><td class="number">86</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"TILESET:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> readingchunk<span class="k3">=</span>FC_TILESET<span class="k2">;</span></td></tr><tr><td class="number">87</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"MAP:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> readingchunk<span class="k3">=</span>FC_MAP<span class="k2">;</span></td></tr><tr><td class="number">88</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"WIDTH:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> readingchunk<span class="k3">=</span>FC_WIDTH<span class="k2">;</span></td></tr><tr><td class="number">89</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"HEIGHT:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> readingchunk<span class="k3">=</span>FC_HEIGHT<span class="k2">;</span></td></tr><tr><td class="number">90</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"TILES:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> readingchunk<span class="k3">=</span>FC_TILES<span class="k2">;</span></td></tr><tr><td class="number">91</td><td>&#160;</td></tr><tr><td class="number">92</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"I:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">93</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">94</td><td>          tilepart<span class="k3">=</span>TP_INDEX<span class="k2">;</span></td></tr><tr><td class="number">95</td><td>          <span class="k2">}</span></td></tr><tr><td class="number">96</td><td>&#160;</td></tr><tr><td class="number">97</td><td>       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>szTAG,<span class="s">"B:"</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">98</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">99</td><td>          tilepart<span class="k3">=</span>TP_BOUND<span class="k2">;</span></td></tr><tr><td class="number">100</td><td>          <span class="k2">}</span></td></tr><tr><td class="number">101</td><td>&#160;</td></tr><tr><td class="number">102</td><td>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>szTAG,<span class="s">""</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>       <span class="k2">}</span></td></tr><tr><td class="number">104</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">105</td><td>       <span class="k2">{</span></td></tr><tr><td class="number">106</td><td>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_752.html" target="_blank">strcat</a><span class="k2">(</span>szTAG,szChar<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>       <span class="k2">}</span></td></tr><tr><td class="number">108</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">109</td><td>mapfile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td><span class="k2">}</span></td></tr><tr><td class="number">111</td><td>&#160;</td></tr><tr><td class="number">112</td><td>&#160;</td></tr><tr><td class="number">113</td><td>TTilemap::TTilemap<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">114</td><td><span class="k2">{</span></td></tr><tr><td class="number">115</td><td>&#160;</td></tr><tr><td class="number">116</td><td><span class="k2">}</span></td></tr><tr><td class="number">117</td><td>&#160;</td></tr><tr><td class="number">118</td><td>&#160;</td></tr><tr><td class="number">119</td><td>TTilemap::~TTilemap<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">120</td><td><span class="k2">{</span></td></tr><tr><td class="number">121</td><td><span class="k1">int</span> n <span class="k3">=</span> tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> n<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">123</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">124</td><td>    <span class="k1">delete</span> tile<span class="k3">&lt;</span>i&gt;<span class="k2">;</span></td></tr><tr><td class="number">125</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">126</td><td>&#160;</td></tr><tr><td class="number">127</td><td><span class="k2">}</span></td></tr><tr><td class="number">128</td><td>&#160;</td></tr><tr><td class="number">129</td><td><span class="k1">void</span> TTilemap::draw<span class="k2">(</span><span class="k1">int</span> camx,<span class="k1">int</span> camy<span class="k2">)</span></td></tr><tr><td class="number">130</td><td><span class="k2">{</span></td></tr><tr><td class="number">131</td><td><span class="k1">int</span> DrawX<span class="k2">;</span></td></tr><tr><td class="number">132</td><td><span class="k1">int</span> DrawY<span class="k2">;</span></td></tr><tr><td class="number">133</td><td><span class="k1">int</span> n,startx,endx,starty,endy<span class="k2">;</span></td></tr><tr><td class="number">134</td><td>&#160;</td></tr><tr><td class="number">135</td><td>startx<span class="k3">=</span><span class="k2">(</span>camx-400<span class="k2">)</span><span class="k3">/</span>TILESIZE<span class="k2">;</span></td></tr><tr><td class="number">136</td><td><span class="k1">if</span> <span class="k2">(</span>startx<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> startx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">137</td><td><span class="k1">if</span> <span class="k2">(</span>startx&gt;cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> startx<span class="k3">=</span>cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">138</td><td>&#160;</td></tr><tr><td class="number">139</td><td>endx<span class="k3">=</span><span class="k2">(</span><span class="k2">(</span>camx<span class="k3">+</span><span class="n">400</span><span class="k2">)</span><span class="k3">/</span>TILESIZE<span class="k2">)</span><span class="k3">+</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td><span class="k1">if</span> <span class="k2">(</span>endx<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> endx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">141</td><td><span class="k1">if</span> <span class="k2">(</span>endx&gt;cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> endx<span class="k3">=</span>cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">142</td><td>&#160;</td></tr><tr><td class="number">143</td><td>starty<span class="k3">=</span><span class="k2">(</span>camy-300<span class="k2">)</span><span class="k3">/</span>TILESIZE<span class="k2">;</span></td></tr><tr><td class="number">144</td><td><span class="k1">if</span> <span class="k2">(</span>starty<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> starty<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">145</td><td><span class="k1">if</span> <span class="k2">(</span>starty&gt;cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> starty<span class="k3">=</span>cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td>&#160;</td></tr><tr><td class="number">147</td><td>endy<span class="k3">=</span><span class="k2">(</span><span class="k2">(</span>camy<span class="k3">+</span><span class="n">300</span><span class="k2">)</span><span class="k3">/</span>TILESIZE<span class="k2">)</span><span class="k3">+</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">148</td><td><span class="k1">if</span> <span class="k2">(</span>endy<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> endy<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">149</td><td><span class="k1">if</span> <span class="k2">(</span>endy&gt;cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> endy<span class="k3">=</span>cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">150</td><td>&#160;</td></tr><tr><td class="number">151</td><td>&#160;</td></tr><tr><td class="number">152</td><td><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y<span class="k3">=</span>starty<span class="k2">;</span>y<span class="k3">&lt;</span>endy<span class="k2">;</span>y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">153</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">154</td><td>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x<span class="k3">=</span>startx<span class="k2">;</span>x<span class="k3">&lt;</span>endx<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">155</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">156</td><td>        DrawX<span class="k3">=</span><span class="k1">int</span><span class="k2">(</span>screenmid_x<span class="k3">+</span><span class="k2">(</span><span class="k2">(</span>x<span class="k3">*</span><span class="n">32</span><span class="k2">)</span><span class="k3">-</span>camx<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">157</td><td>        DrawY<span class="k3">=</span><span class="k1">int</span><span class="k2">(</span>screenmid_y<span class="k3">+</span><span class="k2">(</span><span class="k2">(</span>y<span class="k3">*</span><span class="n">32</span><span class="k2">)</span><span class="k3">-</span>camy<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">158</td><td>        n<span class="k3">=</span>cell<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span></td></tr><tr><td class="number">159</td><td>        <span class="k1">if</span> <span class="k2">(</span>n<span class="k3">!</span><span class="k3">=</span>TI_NONE<span class="k2">)</span></td></tr><tr><td class="number">160</td><td>           <span class="k2">{</span></td></tr><tr><td class="number">161</td><td>               <span class="k1">if</span> <span class="k2">(</span>n<span class="k3">&lt;</span><span class="k3">=</span>tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> tile<span class="k2">[</span>n-1<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Blit<span class="k2">(</span>DrawX, DrawY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">162</td><td>           <span class="k2">}</span></td></tr><tr><td class="number">163</td><td>        <span class="k1">else</span></td></tr><tr><td class="number">164</td><td>           <span class="k2">{</span></td></tr><tr><td class="number">165</td><td>             <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">166</td><td>           <span class="k2">}</span></td></tr><tr><td class="number">167</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">168</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">169</td><td>&#160;</td></tr><tr><td class="number">170</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>


any advice ? speedup tips ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ariesnl)</author>
		<pubDate>Mon, 14 Aug 2006 22:20:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It works?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kauhiz)</author>
		<pubDate>Mon, 14 Aug 2006 22:30:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes it works <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>here is some working test from the map with some wacky AI code<br />use cursorkeys to scroll
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ariesnl)</author>
		<pubDate>Mon, 14 Aug 2006 22:44:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Warning! The following are mostly <b>stylistic issues</b>, so <b>read them with a grain of salt, don&#39;t get religious about it and ignore them at will</b>.</p><p>Replace the magic numbers with named constants, like <tt>(camx+400)</tt>, which I guess resembles <tt>(camx+SCREEN_W/2)</tt>.</p><div class="source-code snippet"><div class="inner"><pre>        <span class="k1">if</span> <span class="k2">(</span>n<span class="k3">!</span><span class="k3">=</span>TI_NONE<span class="k2">)</span>
           <span class="k2">{</span>
               <span class="k1">if</span> <span class="k2">(</span>n<span class="k3">&lt;</span><span class="k3">=</span>tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> tile<span class="k2">[</span>n-1<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Blit<span class="k2">(</span>DrawX, DrawY<span class="k2">)</span><span class="k2">;</span>
           <span class="k2">}</span>
        <span class="k1">else</span>
           <span class="k2">{</span>
             <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
           <span class="k2">}</span>
        <span class="k2">}</span>
</pre></div></div><p>

IMHO, that&#39;s improper use of <tt>assert</tt>.</p><p>Try to keep the lifespan of a variable as short as possible, meaning: limit its scope by declaring it only where you need it (and not at the top of the method body).</p><p>If you don&#39;t want <tt>camx</tt> or <tt>camy</tt> to be negative, declare them as <tt>unsigned int</tt>, and you can remove the checks <tt>if (camx &lt; 0)</tt> etc.<br />(The same goes for <tt>m_nWidth</tt>).</p><p>Use consistent nomenclature. Sometimes you use Hungarian notation (<tt>m_nWidth</tt>), and sometimes you don&#39;t. I won&#39;t argue about which one to choose, just pick one and stick to it.</p><p>In your <tt>load</tt> method, use <tt>std::string</tt>.</p><p>Other than that, possible functional extensions:
</p><ul><li><p> more layers</p></li><li><p> arbitrary dimensions of tiles</p></li><li><p> zooming in and out</p></li><li><p> ...</p></li></ul><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Indeterminatus)</author>
		<pubDate>Mon, 14 Aug 2006 22:59:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>n<span class="k3">!</span><span class="k3">=</span>TI_NONE<span class="k2">)</span>
           <span class="k2">{</span>
               <span class="k1">if</span> <span class="k2">(</span>n<span class="k3">&lt;</span><span class="k3">=</span>tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> tile<span class="k2">[</span>n-1<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Blit<span class="k2">(</span>DrawX, DrawY<span class="k2">)</span><span class="k2">;</span>
           <span class="k2">}</span>
        <span class="k1">else</span>
           <span class="k2">{</span>
             <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
           <span class="k2">}</span>
        <span class="k2">}</span>
</pre></div></div><p>

Yes, that would be a bad use of assert, especially considering assert doesn&#39;t exist if you compile without debugging enabled (-DNDEBUG on the compiler line), which should be done for all release executables.</p><p>This is a better, more appropriate use of assert:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>n<span class="k3">!</span><span class="k3">=</span>TI_NONE<span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>n<span class="k3">&lt;</span><span class="k3">=</span>tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> tile<span class="k2">[</span>n-1<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Blit<span class="k2">(</span>DrawX, DrawY<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This way, you have the same general effect when assertions are enabled (your program terminates with an assertion failed message).  Additionally, you eliminate some unnecessary branches.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Carrus85)</author>
		<pubDate>Mon, 14 Aug 2006 23:08:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Indeterminatus  You&#39;ve got a point there, I&#39;ll have to neat up my code anyway.<br />About that hungarian notation.. that&#39;s something I just learned.. I&#39;m still getting used to it.</p><p>As some of you might ave noticed  My sprites (units) can walk in any direction, but it makes AI a bit complicated. I thought it would be nice to combine a tilemap with vector AI ( since till now I only used vector AI) but maybe that is not a verry good idea...   On the other hand  It&#39;s fun if you can steer the player in a 2D game like you can in 3D games  ( with mouse and  WSAD )  </p><p>what brings me to another subject..  aiming and shooting.. My NPC&#39;s really aim and fire a bullet  but if you have only 8 directions... should you use a hit chance and just animate or ..?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ariesnl)</author>
		<pubDate>Tue, 15 Aug 2006 12:37:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Everything that Indeterminatus said.</p><p>If you want to improve your coding style, I thoroughly suggest reading Code Complete. I&#39;ve read the second edition. You don&#39;t have to agree with every recommendation in the book, but it gets you thinking about writing readable and maintainable code.</p><p>As for Hungarian notation, I use it myself in C++. The only real problem is that it&#39;s not enforced (unless you know of an IDE that enforces it) so the compiler isn&#39;t going to complain if you don&#39;t use it properly or consistently. Also, Hungarian notated code isn&#39;t very readable to people that don&#39;t use the notation, but it is actually <i>more readable</i> to people that use the notation than &#39;regular&#39; code. Another thing, you can extend Hungarian notation in any way you see fit. When I started playing with 3D, I used the &#39;mat&#39; prefix for matrices. For example, m_matRotate would be a matrix that does some kind of rotation that belongs to an object. pmatRotate could be a matrix pointer passed in as a parameter. Enough about Hungarian notation though.</p><p>You also need to clean up your indenting style. For one thing, it&#39;s inconsistent. I see that you&#39;re placing your opening braces on a new line. That&#39;s a <i>good</i> start (in my opinion). You shouldn&#39;t indent the opening brace, because then it doesn&#39;t look like the code inside the braces belongs to its control structure. Also in some places, you&#39;re not indenting the code once it&#39;s inside the braces. Not good. Also, use one tab character per indent level instead of spaces. If your IDE is set to replace tabs with spaces, turn that setting off. ALWAYS use braces for if/else/while/do-while/for/etc. For one thing, it saves confusion (some of that confusion is caused by poor indenting) and it allows you to add more statements to the body if and when you need to (which happens quite often). What IDE are you using by the way?</p><p>Here&#39;s some code of yours, formatted nicely (take note of the added &#39;else&#39;s):</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> TTilemap::draw<span class="k2">(</span><span class="k1">int</span> camx, <span class="k1">int</span> camy<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">int</span> DrawX<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">int</span> DrawY<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <span class="k1">int</span> n, startx, endx, starty, endy<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  startx <span class="k3">=</span> <span class="k2">(</span>camx <span class="k3">-</span> <span class="n">400</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">if</span> <span class="k2">(</span>startx <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>    startx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>startx <span class="k3">&gt;</span> cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">12</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>    startx <span class="k3">=</span> cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>  endx <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>camx <span class="k3">+</span> <span class="n">400</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE<span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">if</span> <span class="k2">(</span>endx <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">17</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>    endx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">20</td><td>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>endx <span class="k3">&gt;</span> cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>    endx <span class="k3">=</span> cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>  starty <span class="k3">=</span> <span class="k2">(</span>camy <span class="k3">-</span> <span class="n">300</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>  <span class="k1">if</span> <span class="k2">(</span>starty <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">26</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">27</td><td>    starty <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">29</td><td>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>starty <span class="k3">&gt;</span> cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">30</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>    starty <span class="k3">=</span> cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>  endy <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>camy <span class="k3">+</span> <span class="n">300</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE<span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  <span class="k1">if</span> <span class="k2">(</span>endy <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>    endy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">39</td><td>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>endy <span class="k3">&gt;</span> cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">40</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">41</td><td>    endy <span class="k3">=</span> cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> starty<span class="k2">;</span> y <span class="k3">&lt;</span> endy<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">45</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> startx<span class="k2">;</span> x <span class="k3">&lt;</span> endx<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">47</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">48</td><td>      DrawX <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>screenmid_x <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>x <span class="k3">*</span> <span class="n">32</span><span class="k2">)</span> <span class="k3">-</span> camx<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>      DrawY <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>screenmid_y <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>y <span class="k3">*</span> <span class="n">32</span><span class="k2">)</span> <span class="k3">-</span> camy<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>      n <span class="k3">=</span> cell<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>      <span class="k1">if</span> <span class="k2">(</span>n <span class="k3">!</span><span class="k3">=</span> TI_NONE<span class="k2">)</span></td></tr><tr><td class="number">52</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">53</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>n <span class="k3">&lt;</span><span class="k3">=</span> tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">54</td><td>        tile<span class="k2">[</span>n-1<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Blit<span class="k2">(</span>DrawX, DrawY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">56</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">57</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">58</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

You could also do this to improve readability/maintainability/etc:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">inline</span> <span class="k1">int</span> limitRange<span class="k2">(</span><span class="k1">int</span> var, <span class="k1">int</span> lower, <span class="k1">int</span> upper<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">if</span> <span class="k2">(</span>var <span class="k3">&lt;</span> lower<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">return</span> lower<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>var <span class="k3">&gt;</span> upper<span class="k2">)</span></td></tr><tr><td class="number">8</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>    <span class="k1">return</span> upper<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">return</span> var<span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k2">}</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">void</span> TTilemap::draw<span class="k2">(</span><span class="k1">int</span> camx, <span class="k1">int</span> camy<span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">int</span> DrawX<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">int</span> DrawY<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">int</span> n, startx, endx, starty, endy<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  startx <span class="k3">=</span> limitRange<span class="k2">(</span><span class="k2">(</span>camx <span class="k3">-</span> <span class="n">400</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE, <span class="n">0</span>, cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  endx <span class="k3">=</span> limitRange<span class="k2">(</span><span class="k2">(</span>camx <span class="k3">+</span> <span class="n">400</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE <span class="k3">+</span> <span class="n">1</span>, <span class="n">0</span>, cell.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  starty <span class="k3">=</span> limitRange<span class="k2">(</span><span class="k2">(</span>camy <span class="k3">-</span> <span class="n">300</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE, <span class="n">0</span>, cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  endy <span class="k3">=</span> limitRange<span class="k2">(</span><span class="k2">(</span>camy <span class="k3">+</span> <span class="n">300</span><span class="k2">)</span> <span class="k3">/</span> TILESIZE <span class="k3">+</span> <span class="n">1</span>, <span class="n">0</span>, cell<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> starty<span class="k2">;</span> y <span class="k3">&lt;</span> endy<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">25</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> startx<span class="k2">;</span> x <span class="k3">&lt;</span> endx<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">27</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>      DrawX <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>screenmid_x <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>x <span class="k3">*</span> <span class="n">32</span><span class="k2">)</span> <span class="k3">-</span> camx<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>      DrawY <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>screenmid_y <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>y <span class="k3">*</span> <span class="n">32</span><span class="k2">)</span> <span class="k3">-</span> camy<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>      n <span class="k3">=</span> cell<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>      <span class="k1">if</span> <span class="k2">(</span>n <span class="k3">!</span><span class="k3">=</span> TI_NONE<span class="k2">)</span></td></tr><tr><td class="number">32</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>n <span class="k3">&lt;</span><span class="k3">=</span> tile.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>        tile<span class="k2">[</span>n-1<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Blit<span class="k2">(</span>DrawX, DrawY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">36</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve++)</author>
		<pubDate>Tue, 15 Aug 2006 14:01:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Personally I dislike the large amount of spaces (or spaces per tab) for that indentation style. I thought 2 characters in was supposed to be the optimum.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Tue, 15 Aug 2006 14:31:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for your advice .</p><p>I use CodeBlocks,  I also have MSVC but that one is not ANSI C++</p><p>there is for example no way to do this in MSVC:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">bool</span> Comp<span class="k2">(</span><span class="k1">const</span> TSprite <span class="k3">*</span>v1, <span class="k1">const</span> TSprite <span class="k3">*</span>v2<span class="k2">)</span> </td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td><span class="k1">return</span> <span class="k2">(</span>v1-&gt;z <span class="k3">&lt;</span> v2-&gt;z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k2">}</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">void</span> TEngine::draw<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">7</td><td><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>  items.sort<span class="k2">(</span>Comp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  std::list<span class="k3">&lt;</span>TSprite <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator p<span class="k3">=</span>items.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">while</span> <span class="k2">(</span>p<span class="k3">!</span><span class="k3">=</span>items.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>    TSprite<span class="k3">*</span>hulp<span class="k3">=</span><span class="k3">*</span>p<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    hulp-&gt;draw<span class="k2">(</span>x,y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    p<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>                  </td></tr><tr><td class="number">15</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">16</td><td>  </td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

and for some reason it does this wrong:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">10</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>   <span class="c">// i should be declared here</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k2">}</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>   <span class="c">// NOT here</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="c">/*</span></td></tr><tr><td class="number">12</td><td><span class="c">Try this im MSVC  you'll get duplicate definition of i</span></td></tr><tr><td class="number">13</td><td><span class="c">*/</span></td></tr><tr><td class="number">14</td><td><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">10</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>   </td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ariesnl)</author>
		<pubDate>Tue, 15 Aug 2006 15:14:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Personally I dislike the large amount of spaces (or spaces per tab) for that indentation style. I thought 2 characters in was supposed to be the optimum.
</p></div></div><p>Allegro.cc forums use 8 spaces to represent a tab, even in the code areas. I used the TAB character there. I prefer four spaces to represent a tab, which is what most coders seem to use (and that&#39;s what MSVC and many other IDEs default to).</p><p>Ariesnl, are you using MSVC 6? It is pre-ANSI (although it tried to implement some ANSI features). You can get MSVC 2005 Express Edition free of charge. It&#39;s downloadable from MSDN.</p><p>The thing I liked about MSVC 6 is that it played the Microsoft Sound when you selected Help/About. But that was only on Win 95/98, before this XP orchestra crap.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve++)</author>
		<pubDate>Fri, 18 Aug 2006 20:06:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
arbitrary dimensions of tiles
</p></div></div><p>
Is that even possible to accomplish with a tile engine?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonny Cook)</author>
		<pubDate>Fri, 18 Aug 2006 20:24:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I was thinking more along the lines of &quot;don&#39;t limit a tile&#39;s size to 32x32&quot;.</p><p>It is possible, yes, you probably need an offset vector to place a tile on the map.</p><p>Example: The default tilesize is 32x32 pixels, and the grid is laid out accordingly (so that two neighbouring tiles, both 32x32 pixels match perfectly without overlap or gap). One tile&#39;s gfx is 16x16. If you don&#39;t want to scale it to 32x32 (which could wreak ugly artifacts), you can center it on a grid&#39;s cell by translating the tile by the vector (8, 8).</p><p>That most likely won&#39;t make any sense for the bottom layer (or you could end up having gaps between tiles), but it could be applicable for higher layers. Not telling that&#39;s the way to go, though, just pointing out it&#39;s possible, even though that&#39;s not what I meant originally.</p><p><i>edit:</i> Rewrote most of my post to clarify point.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Indeterminatus)</author>
		<pubDate>Fri, 18 Aug 2006 20:28:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Example: The default tilesize is 32x32 pixels, and the grid is laid out accordingly (so that two neighbouring tiles, both 32x32 pixels match perfectly without overlap or gap). One tile&#39;s gfx is 16x16. If you don&#39;t want to scale it to 32x32 (which could wreak ugly artifacts), you can center it on a grid&#39;s cell by translating the tile by the vector (8, 8).
</p></div></div><p>
For the game logic, the tile is still 32x32. You won&#39;t be able to put 16 8x8-tiles in the space of one 32x32-tile using a conventional tile grid.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Fri, 18 Aug 2006 21:04:58 +0000</pubDate>
	</item>
</rss>
