<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>slow, rrreeallly slow fps</title>
		<link>http://www.allegro.cc/forums/view/589026</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 13 Dec 2006 11:46:12 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, sorry for hijacking the forum once again.  But I&#39;m reaching the end of my term, hence different threads for different topics.</p><p>I&#39;m a total noob at the frames per second topic.  In fact, I have looked at old threads here and followed a tutorial in implementing a timer and all.  Thing is, I&#39;m getting a rate of 7-8 frames per second when I move my character.  I&#39;m displaying a simple background with scrolling, one enemy moving on its own, and my character through keyboard input.</p><p>I&#39;m using my laptop, for which the screen resolution is set at 1920x1200.  </p><p>I followed this example code in implementing my timer: <a href="http://pixwiki.bafsoft.com/mags/12/articles/pong/article.html">http://pixwiki.bafsoft.com/mags/12/articles/pong/article.html</a></p><p>I&#39;m gonna show part of my code, maybe I&#39;m doing something obviously wrong?  </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">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    </td></tr><tr><td class="number">4</td><td>        <span class="k1">while</span><span class="k2">(</span>game_time <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">5</td><td>        <span class="k2">{</span> </td></tr><tr><td class="number">6</td><td>           MapDrawBG<span class="k2">(</span>buffer, mapxoff, mapyoff, <span class="n">0</span>,</td></tr><tr><td class="number">7</td><td>           <span class="n">0</span>,WIDTH,HEIGHT<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>                        </td></tr><tr><td class="number">9</td><td>           textprintf<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">0</span>, <span class="n">10</span>, WHITE, <span class="s">"FPS: %d"</span>,</td></tr><tr><td class="number">10</td><td>           fps<span class="k2">)</span><span class="k2">;</span>                </td></tr><tr><td class="number">11</td><td>                        </td></tr><tr><td class="number">12</td><td>           <span class="k1">int</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">;</span>                </td></tr><tr><td class="number">13</td><td>           <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td>              <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a> <span class="k3">=</span> getinput<span class="k2">(</span><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">if</span><span class="k2">(</span>i<span class="k3">=</span><span class="k3">=</span><span class="n">4</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>                i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>                enemy_dir<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>          <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>        </td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>          <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">24</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">25</td><td>               updatesprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>               move_character<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>               game_time--<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>               draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>               cfps<span class="k3">+</span><span class="k3">+</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>               </td></tr><tr><td class="number">32</td><td>          <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>a <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">33</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">34</td><td>             a--<span class="k2">;</span></td></tr><tr><td class="number">35</td><td>             updateattacksprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>             attack<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>             draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">38</td><td>             game_time--<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>             cfps<span class="k3">+</span><span class="k3">+</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>        </td></tr><tr><td class="number">42</td><td>        </td></tr><tr><td class="number">43</td><td>          <span class="k1">if</span><span class="k2">(</span>a<span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">44</td><td>                a <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>        </td></tr><tr><td class="number">46</td><td>          checkcollisions<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>          update_enemy_sprite<span class="k2">(</span>green_plant<span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">48</td><td>          checkcollisions<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>        </td></tr><tr><td class="number">50</td><td>          move_plant_enemy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>          link-&gt;dir <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>        </td></tr><tr><td class="number">53</td><td>          draw_enemy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td>          <span class="c">//vsync();</span></td></tr><tr><td class="number">56</td><td>    <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>    <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>&#160;</td></tr><tr><td class="number">60</td><td>          <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">70</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>        </td></tr><tr><td class="number">62</td><td>        </td></tr><tr><td class="number">63</td><td>        <span class="k2">}</span> <span class="c">//end of timer while</span></td></tr><tr><td class="number">64</td><td>&#160;</td></tr><tr><td class="number">65</td><td>                <span class="k1">while</span><span class="k2">(</span>game_time<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> <span class="k2">;</span></td></tr><tr><td class="number">66</td><td>&#160;</td></tr><tr><td class="number">67</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I know there are a few things I could put in other functions, but making the code neat is my priority after I&#39;m done with this fps part.. unless you guys think it&#39;s highly inefficient.  This is my first time tackling game programming, and if I had more time, I would&#39;ve been able to restructure my code; unfortunately, I&#39;ll only get to do this after class is over.</p><p>Anyway, tia.  And no making fun please <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Mon, 11 Dec 2006 09:04:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I&#39;m gonna show part of my code, maybe I&#39;m doing something obviously wrong?
</p></div></div><p>
Yes. Several. On my first and only skim through that (see item #1 on the list why I won&#39;t read it again).</p><p>1) For the <i>love of God</i>, choose descriptive variable names!<br />&quot;if a == 0&quot;?<br />&quot;if i == 4&quot;?<br />Gah!</p><p>2) You&#39;re mixing drawing and logic. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>3) </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
int key;
</p></div></div><p>
Overriding the existing <span class="source-code"><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span><span class="k2">]</span></span> - not a good idea. Dump the entire keypressed()/readkey() stuff and use the key[] array.</p><p>4) Move the &quot;game_time--&quot; out of the ifs.</p><p>5) </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
rest(70);
</p></div></div><p>
Even if that executes with no additional slowdown, that alone would give you a theoretical maximum FPS of 14. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>6) You&#39;re mixing drawing and logic. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />Yes, this deserves to be mentioned <i>at least</i> twice.</p><p>7) </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
while(game_time&lt;0) ;
</p></div></div><p>
...<br />What?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Mon, 11 Dec 2006 09:17:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">70</span><span class="k2">)</span><span class="k2">;</span></span></p><p>Have you tried decreasing this number?  Also, using OpenLayer instead of just Allegro really helps with fps, as it uses hardware (your video card) for processing.</p><p>This line:  <span class="source-code"><span class="k1">while</span><span class="k2">(</span>game_time<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> <span class="k2">;</span></span>  Should never stop.  When game_time gets  to 0 it will get out of that big loop, then it hits this line.  Well game_time will never be less than 0 as for it is 0.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Mon, 11 Dec 2006 09:19:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
while(game_time&lt;0);
</p></div></div><p>Should never stop.
</p></div></div><p>
No, that utterly bizarre loop will never <i>start</i>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Mon, 11 Dec 2006 09:22:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Haha yes woopsies on my part.</p><p>Oh and to red-dragon regarding gnolam&#39;s post about &quot;descriptive variable names!&quot; Try using:</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#define SOMETHING 4</span>
<span class="p">#define NOTHING 0</span>
...
     <span class="k1">if</span><span class="k2">(</span>i<span class="k3">=</span><span class="k3">=</span>SOMETHING<span class="k2">)</span>
     <span class="k2">{</span>
          i<span class="k3">=</span> NOTHING<span class="k2">;</span>
          enemy_dir<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
     <span class="k2">}</span>
</pre></div></div><p>

See, you can actually read that logically.  Get in the habit of saying your code out loud.  &quot;If i equals something then set i to nothing then call the enemy direction function.&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Mon, 11 Dec 2006 09:26:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For starters :<br />  1. Increase cfps only when you blit to the screen.<br />  2. Decrease game_time only when you blit to the screen<br />  3. What is the rest(70) for?</p><p>Not sure how much difference this will make to the overall game speed, but it may provide a more accurate FPS figure.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Mon, 11 Dec 2006 09:28:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hey everyone,<br />thanks for the critiques <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />  I know I used some horrible variables and I have a LOT of globals, but it&#39;s mainly for debugging purposes.  Horrible variable names are created from lack of sleep and staring at code for hours.  Hey, it&#39;s hard for us beginners <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Now, I took a step back and remembered that the GPAIO book had a chapter on timers... so now, it seems to be working ok.  I had a LOT of rest() that I commented out.  The game is running like it&#39;s on steroids.  What if you want the character to m ove at a slower/faster pace than... the enemy?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Mon, 11 Dec 2006 10:29:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
2. Decrease game_time only when you blit to the screen
</p></div></div><p>

Umm, no? Decrease game_time once per logic loop. Drawing shouldn&#39;t be anywhere near loic.</p><p>Now as for the timing, just set up a nice timer controlled game loop, then you can control the rate at which the characters and enemies move.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Mon, 11 Dec 2006 10:32:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For a fixed-time game, (that is, a game where you want the framerate to be specific, like 15, 30, 60, etc.), you generally figure out the framerate you want, then base all the movement speeds of your players, enemies, etc. on their own speed. Thus the player might move 2 pixels a frame, enemies might move 1 pixel a frame.</p><p>Beyond that, what you need to do to fine-tune the movement speeds between things is to add either floating point variables or bit-shifted movement. Floating point is easier, bit-shifted is somewhat faster (though the difference is not as pronounced anymore as it once was.)</p><p>With floating point, everything has a decimal value, so you could assign a number to have a value of 3.7698, or 1.87658100647, or just plain 5.0. When you move an object, you can then move in smaller increments than a single pixel, such as:</p><p><span class="source-code">myFloat <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">25</span><span class="k2">;</span></span></p><p>Bit-shifting is a little harder, but faster, and doesn&#39;t force you to do floating point arithmetic. Basically, with bit-shifting, you are deciding ahead of time how many increments should be between each pixel, and then your positions are decided accordingly, but you must use powers of two. For instance, if you want 64 increments between each pixel, that would be 2 to the power of 6, so you bit-shift by 6 whenever you draw something to the screen.</p><p>In this scenario, something at coordinates 640,384 is actually at pixel coordinates 10,6, because your drawing operation looks like:</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer,mySprite,spriteX&gt;&gt;6,spriteY&gt;&gt;6<span class="k2">)</span><span class="k2">;</span></span></p><p>And by having the larger numbers you can now move objects with more precision. You just have to remember that if you want to set something based on pixel coordinates, you have to bit-shift the other way. For instance, if you want to place something at pixel coordinates 40,87 you would do:</p><div class="source-code snippet"><div class="inner"><pre>spriteX <span class="k3">=</span> <span class="n">40</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">6</span><span class="k2">;</span>
spriteY <span class="k3">=</span> <span class="n">87</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">6</span><span class="k2">;</span>
</pre></div></div><p>

The reason you use bit-shift operators ( &lt;&lt; and &gt;&gt; ) instead of multiplication ( * ) is because multiplication is much slower in terms of CPU time.</p><p>Note though that you cannot bit-shift floating point numbers, only integers.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Mon, 11 Dec 2006 16:26:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know it&#39;s important, as everybody says it, but what is actually wrong with mixing drawing and logic?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Tue, 12 Dec 2006 00:03:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Because, you (should) run the logic at a fixed rate and draw in the free time. If you mix it, you have no way of controlling the speed of the logic, as you then depend on the frame rate.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 12 Dec 2006 00:10:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, I see.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Tue, 12 Dec 2006 00:36:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">BAF said:</div><div class="quote"><p>
 
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
2. Decrease game_time only when you blit to the screen
</p></div></div><p>
Umm, no? Decrease game_time once per logic loop. Drawing shouldn&#39;t be anywhere near loic.
</p></div></div><p>
Err, yes, correct. I wasn&#39;t thinking properly when I wrote that bit. <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Tue, 12 Dec 2006 01:35:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Kris Asic,<br />thanks man.  I was looking fora nice detailed explanation like that <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Now, I had set my game to about 30 frames per second.  Now, I do want to base the movement of my enemies around that.  I think my player will be ok.</p><p>Now, for enemy movement, I incremented it by a float inc = 0.25;<br />So, if enemy is going right, enemy-&gt;x += inc;  But this means that now I have to change the int x, y (coordinates for enemy) to floats too, right? Or it might get truncated.  Anyway, even an slight increment seemed too fast.  </p><p>For my temporary fix, I&#39;ve made a new variable, which is incremented and decremented each game loop from 0 to 1.  Then if it&#39;s 1, I update the enemy movement.  It seems to slow the movement a bit more, so I&#39;ll be tweaking this.</p><p>I&#39;ll have to reread about bit shifting, I&#39;ve never done it.  I believe there was a project regarding this in one of my courses, and I didn&#39;t get to do it <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p>Anyway, thanks for the post, and let me know if something here I said is wrong.  Actually, thanks to everyone <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Tue, 12 Dec 2006 01:53:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Kris,</p><p>I&#39;m not sure if I completely follow the bit shifting explanation. Here&#39;s my understanding so far. I&#39;d appreciate if you (or anyone who does understand it properly) can comment:</p><p>Still with your example of 64 increments between pixels, if the movement is updated 128 per second, after one second the co-ordinates have changed by 2 pixels (assuming there&#39;s a continuous updating of co-ordinates).</p><p>Would that mean the right most position for a 640x480 screen will have an x component of 40960 (640*64)?</p><p>If you want one object to move at twice the speed of another, you bit shift one more (i.e. x_postion &lt;&lt; 7 or x_position &gt;&gt; 7)?</p><p>And if you want something to move at 1.5 times normal, you&#39;d bit shift by 6 and then add the original value bit shifted by 5?</p><p>Or am I totally off the path and down a cliff?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Tue, 12 Dec 2006 02:43:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hmm,<br />ok, while I&#39;ve been successful at slowing down the enemy, I can&#39;t seem to do it for link.</p><p>i.e. when attacking (spacebar), updateattacksprite() is called, where the proper frames are updated and then displayed.</p><p>To slow down enemy, here&#39;s exactly what I did (this is main at the moment):
</p><div class="source-code snippet"><div class="inner"><pre>        enemy_delay<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
        <span class="k1">if</span><span class="k2">(</span>enemy_delay<span class="k3">=</span><span class="k3">=</span><span class="n">5</span><span class="k2">)</span>
        <span class="k2">{</span>
                       update_enemy_sprite<span class="k2">(</span>green_plant<span class="k2">)</span><span class="k2">;</span>
                       checkcollisions<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
                       move_plant_enemy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
                       enemy_delay <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
                       draw_enemy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
        <span class="k2">}</span>
</pre></div></div><p>

Ok, so it slows down the enemy.</p><p>So, I tried something similar with link&#39;s updatespriteattack().<br />First, original code:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>a <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="k2">{</span>       
             a--<span class="k2">;</span>
             updateattacksprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span>
             draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  
                           
             <span class="c">//attack();</span>
<span class="k2">}</span>
</pre></div></div><p>
Ok, yeah, I know a is a horrible variable name, let&#39;s get past that though.</p><p>Ok, modifying it like I did with enemy...:
</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">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>a <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>             </td></tr><tr><td class="number">4</td><td>             attack_delay<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>             <span class="k1">if</span><span class="k2">(</span>attack_delay <span class="k3">=</span><span class="k3">=</span> <span class="n">4</span><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>                             a--<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>                             updateattacksprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>                             draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">10</td><td>                             attack_delay <span class="k3">=</span> <span class="n">0</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>&#160;</td></tr><tr><td class="number">13</td><td>             <span class="c">//attack();</span></td></tr><tr><td class="number">14</td><td>             </td></tr><tr><td class="number">15</td><td>        <span class="k2">}</span></td></tr></tbody></table></div></div><p>
The point is for the frames to move by slowly.  It happens so quickly that all I see is the last frame.  Even with this code.  Notice though, there is no move_character() here because he doesn&#39;t actually move..... only frames change.  Hope that makes sense.</p><p>Any suggestions? </p><p>EDIT: <br />With the if(attack_delay == 4) modification, link also flickers now. <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Tue, 12 Dec 2006 03:15:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>red-dragon:</b> You don&#39;t have to do all that. Remember that you can make floating point values as small as 0.000000001, or more. Sometimes you&#39;ll need to go that low to really see any differences. (Maybe not <i>that</i> low, probably close to around 0.001.) And yes, if you use floating point for one thing you pretty much have to use it for everything else that&#39;s related.</p><p><b>HardTranceFan:</b> You&#39;ve pretty much got it, except you only ever need to bit-shift when drawing to the screen and when setting to pixel-coordinates. For everything else, you treat it as its own coordinate system with no bit-shifting.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Tue, 12 Dec 2006 03:24:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Kris Asick,<br />Will go back and go with a really low floating point number.  That post I just made; I put in debug statements and realized that the updatesprite wasn&#39;t correct.... so now, I can see that all the frames ARE coming into play.  </p><p>------------------------<br />Ok, just did more debug statements for variable a.  The debug statement reveals that a starts as 10, as intended, then when spacebar is hit, it goes to 9 and stays there no matter what.  No wonder the frame animations aren&#39;t all &quot;automatically&quot; displaying.</p><p>Once again, relevant code, in main,:
</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">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td>   which_key <span class="k3">=</span> getinput<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>.....</td></tr><tr><td class="number">5</td><td>...</td></tr><tr><td class="number">6</td><td>.</td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>which_key <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>a <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>                         </td></tr><tr><td class="number">11</td><td>             a--<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>             updateattacksprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>             draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>             attack<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>             </td></tr><tr><td class="number">15</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I found out int which_key was being declared within the while loop, which meant that it was being declared every game loop, so I changed it as a global.  However, the debug statement still shows after 10, it goes to 9 and then doesn&#39;t change.  Does whichever key you pressed last get reset every game loop??  </p><p><b>
EDIT:
Yep, which_key resets to 0 every game loop.  Can anyone explain why?  And what can be done about this, please?
</b><br /><b>
Anyone?  Someone?  Helllloooo?  &lt;echos&gt; heh.  C&#39;mon.
</b>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Tue, 12 Dec 2006 03:58:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Think of it this way, red-dragon: If the keys <i>didn&#39;t</i> reset every frame, how would you know when someone let go of a key, or parse between hitting different letters to type something?</p><p>When you work with animated sprites, what you need to do is make those animations independent of your input handling. In other words, you probably want something more along the lines of this:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td>   which_key <span class="k3">=</span> getinput<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>.....</td></tr><tr><td class="number">7</td><td>...</td></tr><tr><td class="number">8</td><td>.</td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">if</span> <span class="k2">(</span>which_key <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>a<span class="k2">)</span> a <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k1">if</span> <span class="k2">(</span>a <span class="k3">&gt;</span> <span class="n">0</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>  a--<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  updateattacksprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  attack<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>             </td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Thus while <b>a</b> = 0, no animation occurs, and then when you press the key you expect, <b>a</b> is set to 10, and while <b>a</b> is over 10, regardless of if a keyboard key is pressed, <b>a</b> decreases until it finally returns to 0.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Tue, 12 Dec 2006 19:09:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Kris,<br />Appreciate your help.  I woke up this morning and had a similar idea.  So, I have it like you suggested, but something is still not right.  I will show relevant code first:</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> updateattacksprite<span class="k2">(</span>SPRITE <span class="k3">*</span>spr<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>     </td></tr><tr><td class="number">4</td><td>     <span class="k1">if</span><span class="k2">(</span>link-&gt;alive <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">5</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>       <span class="c">//update frame based on dir</span></td></tr><tr><td class="number">8</td><td>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>spr-&gt;framecount <span class="k3">&gt;</span> spr-&gt;framedelay<span class="k2">)</span></td></tr><tr><td class="number">9</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>           spr-&gt;framecount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>            </td></tr><tr><td class="number">12</td><td>    <span class="c">/* if south, show frames 12-16 */</span></td></tr><tr><td class="number">13</td><td>                 <span class="k1">if</span><span class="k2">(</span>prev_dir <span class="k3">=</span><span class="k3">=</span> <span class="n">4</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>&#160;</td></tr><tr><td class="number">16</td><td>                                  spr-&gt;curframe<span class="k3">+</span><span class="k3">+</span><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">if</span><span class="k2">(</span>spr-&gt;curframe <span class="k3">&lt;</span> <span class="n">12</span><span class="k2">)</span></td></tr><tr><td class="number">19</td><td>                               spr-&gt;curframe <span class="k3">=</span> <span class="n">16</span><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>spr-&gt;curframe  <span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td>                               spr-&gt;curframe <span class="k3">=</span> <span class="n">12</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>                            </td></tr><tr><td class="number">23</td><td>                  <span class="k2">}</span> </td></tr><tr><td class="number">24</td><td>              </td></tr><tr><td class="number">25</td><td>                  <span class="c">/* north */</span></td></tr><tr><td class="number">26</td><td>                  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>prev_dir <span class="k3">=</span> <span class="n">2</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>                       <span class="c">/* don't want to go out of bounds here </span></td></tr><tr><td class="number">29</td><td><span class="c">          so don't increment if curframe == 21 */</span></td></tr><tr><td class="number">30</td><td>                       <span class="k1">if</span><span class="k2">(</span>spr-&gt;curframe <span class="k3">!</span><span class="k3">=</span> <span class="n">21</span><span class="k2">)</span></td></tr><tr><td class="number">31</td><td>                                        spr-&gt;curframe<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>                                                    </td></tr><tr><td class="number">33</td><td>                       <span class="k1">if</span><span class="k2">(</span>spr-&gt;curframe <span class="k3">&lt;</span> <span class="n">17</span><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>                              spr-&gt;curframe <span class="k3">=</span> <span class="n">21</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>                       <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>spr-&gt;curframe <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">21</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td>                              spr-&gt;curframe <span class="k3">=</span> <span class="n">17</span><span class="k2">;</span>     </td></tr><tr><td class="number">37</td><td>                 </td></tr><tr><td class="number">38</td><td>                  </td></tr><tr><td class="number">39</td><td>                  <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>     </td></tr><tr><td class="number">42</td><td>     <span class="k2">}</span> <span class="c">//if link alive</span></td></tr><tr><td class="number">43</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Ok, so now with your help with code, I have this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>....</td></tr><tr><td class="number">2</td><td>..</td></tr><tr><td class="number">3</td><td>.</td></tr><tr><td class="number">4</td><td><span class="c">/* within game while loop */</span></td></tr><tr><td class="number">5</td><td>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>which_key <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>a<span class="k2">)</span> </td></tr><tr><td class="number">6</td><td>             a <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>        <span class="k1">if</span><span class="k2">(</span>a <span class="k3">&gt;</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>             a--<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>             updateattacksprite<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>             draw_link<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>             attacked2 <span class="k3">=</span> attack<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>             </td></tr><tr><td class="number">14</td><td>             <span class="k1">if</span><span class="k2">(</span>a<span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td>                     restore_frame<span class="k2">(</span>prev_dir<span class="k2">)</span><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>

updatespriteattack... I only have sprites for attacking up and down, not left and right..YET.  So, up and down attacks both have 5 frames.  Hence, a = 5 when spacebar is pressed in main while loop.  </p><p>restore_frame... after the whole 5 frames, it is called.  If before sword attack, Link&#39;s previous direction was, say, 4 (down), then his normal south (without holding a sword) frame appears.</p><p>What are the problems?  <br />Little bug 1:  It seems that hitting spacebar sometimes does not yield 5 frames necessarily; I know this because sometimes his last frame is, say frame 13 or 19, instead of them being 16 and 21.  I don&#39;t know why this is happening, but it doesn&#39;t look good.  He seems to start/stop on whatever frame.</p><p>I fixed something else as well.  I have one more &quot;bug&quot; after this, but this has to be resolved first.  TIA.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Wed, 13 Dec 2006 06:42:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You know, there is a point where you should be resolving your own problems and I think you&#39;ve reached it for now. Experimentation will be a much better guide now than me telling you what to do because you&#39;re on the right track and I don&#39;t want to derail you with my own style of coding.</p><p>There are bugs in your code as you posted, but you should be able to spot them easily with a bit of scrutiny. One is in your IF statements, the other has to do with the fact that you are tracking TWO animation frame variables to do just one animation. (Use &quot;a&quot; or &quot;spr-&gt;curframe&quot; to time your animations, <i>not both</i>.)</p><p>The only other piece of advice I have for you is to eventually separate all your animations into separate arrays, then have your sprites simply run a pointer to the animation you want to use. Pointers are something you&#39;re going to have to really learn sooner or later to get the most out of C or C++, and once you understand them, things like animations will become a whole lot easier.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Wed, 13 Dec 2006 07:08:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Kris,<br />Regarding &quot;You know, there is a point where you should be resolving your own problems and I think you&#39;ve reached it for now. Experimentation will be a much better guide now than me telling you what to do because you&#39;re on the right track and I don&#39;t want to derail you with my own style of coding.&quot;</p><p>I didn&#39;t mean to come off as &quot;here&#39;s my problem, fix it and tell me&quot;.  I&#39;m catching quite a few bugs myself and sometimes silly stuff is escaping me.  That is all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Wed, 13 Dec 2006 07:23:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i like to do it like this.<br />linkdelay = 10;<br />npcdelay=20;
</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><span class="k1">if</span><span class="k2">(</span>conter1<span class="k3">=</span><span class="k3">=</span>linkdelay<span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>updatelinklogic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>conter1<span class="k3">=</span><span class="n">0</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><span class="k1">else</span></td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>conter<span class="k3">+</span><span class="k3">+</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>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">if</span><span class="k2">(</span>conter<span class="k3">=</span><span class="k3">=</span>npcdelay<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>updateNPclogic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>conter<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr><tr><td class="number">19</td><td><span class="k1">else</span></td></tr><tr><td class="number">20</td><td><span class="k2">{</span></td></tr><tr><td class="number">21</td><td>conter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

link will move twice as fast as the NPcs
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (piccolo)</author>
		<pubDate>Wed, 13 Dec 2006 09:57:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I didn&#39;t mean to come off as &quot;here&#39;s my problem, fix it and tell me&quot;. I&#39;m catching quite a few bugs myself and sometimes silly stuff is escaping me. That is all.
</p></div></div><p>

Don&#39;t worry, you&#39;re not coming off that way. I&#39;m just saying that not every problem has an immediate solution and that it may be more helpful to you to figure that particular problem out yourself.</p><p>For instance, there have been times when I&#39;ve spent half an hour or more trying to solve a bug only to realize that all I had to do to fix the problem was change a &#39;+&#39; to a &#39;-&#39;. One of my friends once spent two hours on that exact same problem actually.</p><p>Sometimes the simplest problems are also the hardest to find and the search can be a good workout because it helps you learn to find that same kind of mistake again if you happen to make it again in the future.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Wed, 13 Dec 2006 10:28:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In those situations, you end up going through your code with a fine tooth comb, refining bits and pieces, and on the whole making the whole program more efficient and stable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Wed, 13 Dec 2006 10:43:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>HardTranceFan,<br />yes, you&#39;re right.  I&#39;m finding little things that need to be fixed <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (red-dragon)</author>
		<pubDate>Wed, 13 Dec 2006 11:46:12 +0000</pubDate>
	</item>
</rss>
