<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Crazy fast...why?</title>
		<link>http://www.allegro.cc/forums/view/590712</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 26 Mar 2007 13:36:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can&#39;t figure out what is wrong with this. I&#39;m using that thingy- the 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span><span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span>
  <span class="c">//do stuff</span>
  speed_counter--<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

But it is going insanely fast!</p><p>There is also<br /><span class="source-code"><span class="k1">volatile</span> <span class="k1">long</span> speed_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></span><br />in a header file. </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">int</span> game<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">2</td><td>  zombo <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_datafile" target="_blank"><span class="a">load_datafile</span></a><span class="k2">(</span><span class="s">"ZomOn.dat"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>  <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>zombo<span class="k2">[</span>intro<span class="k2">]</span>.dat, <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>, <span class="n">480</span>, <span class="n">640</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <span class="c">/*init junk*/</span></td></tr><tr><td class="number">6</td><td>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span> <span class="c">//Used to set the timer - which regulates the game's speed</span></td></tr><tr><td class="number">7</td><td>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment_speed_counter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">//Set our BPS</span></td></tr><tr><td class="number">9</td><td>  zombie horde<span class="k2">[</span><span class="n">250</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  player pc<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  pc.init_player<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</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">249</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>horde<span class="k3">&lt;</span>i&gt;.alive <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">int</span> mouse_clicked, last_button, current_button <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//For too see if the mouse has JUST been clicked</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">int</span> zalive <span class="k3">=</span> <span class="n">0</span>, halive <span class="k3">=</span> <span class="n">1</span>, mines <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">int</span> lvl <span class="k3">=</span> <span class="n">1</span>, prog <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">while</span><span class="k2">(</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><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span>halive<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">while</span><span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">18</td><td>      <span class="c">/*=====raise me some zombies==========*/</span></td></tr><tr><td class="number">19</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">250</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span> </td></tr><tr><td class="number">20</td><td>        <span class="k1">if</span><span class="k2">(</span>zalive <span class="k3">&lt;</span> lvl<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">21</td><td>          <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>horde<span class="k3">&lt;</span>i&gt;.alive<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">22</td><td>            horde<span class="k3">&lt;</span>i&gt;.animate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>            zalive<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>            i <span class="k3">=</span> <span class="n">51</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="k2">}</span></td></tr><tr><td class="number">27</td><td>        <span class="k1">if</span><span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.y <span class="k3">&gt;</span> <span class="n">451</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">28</td><td>          horde<span class="k3">&lt;</span>i&gt;.alive <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>          pc.mines--<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>          zalive--<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>        <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>      <span class="c">/*=draw teh zombies, check 4 hits=====*/</span></td></tr><tr><td class="number">34</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">250</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">35</td><td>        <span class="k1">if</span><span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.alive<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">36</td><td>          horde<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span><span class="k3">=</span> horde<span class="k3">&lt;</span>i&gt;.fall_speed<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>          horde<span class="k3">&lt;</span>i&gt;.frame<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>          <span class="k1">if</span><span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.frame <span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span></td></tr><tr><td class="number">39</td><td>            horde<span class="k3">&lt;</span>i&gt;.frame <span class="k3">=</span> <span class="n">1</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>      <span class="k2">}</span></td></tr><tr><td class="number">42</td><td>      <span class="c">/*====find if killing a zombie========*/</span></td></tr><tr><td class="number">43</td><td>      last_button <span class="k3">=</span> current_button<span class="k2">;</span></td></tr><tr><td class="number">44</td><td>      current_button <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>      mouse_clicked <span class="k3">=</span> <span class="k2">(</span>current_button <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>last_button<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>      <span class="k1">if</span><span class="k2">(</span>mouse_clicked<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">47</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">250</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">48</td><td>          <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">&gt;</span> horde<span class="k3">&lt;</span>i&gt;.x<span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">&lt;</span> <span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> <span class="n">30</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k3">&gt;</span> horde<span class="k3">&lt;</span>i&gt;.y<span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k3">&lt;</span> <span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> <span class="n">30</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">49</td><td>            horde<span class="k3">&lt;</span>i&gt;.alive <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>            zalive--<span class="k2">;</span></td></tr><tr><td class="number">51</td><td>            pc.score <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>            <span class="k2">(</span>lvl <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">)</span>?<span class="k2">(</span>prog <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="n">10</span><span class="k3">-</span>lvl<span class="k2">)</span><span class="k2">)</span><span class="k2">:</span><span class="k2">(</span>prog<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>            <span class="k1">if</span><span class="k2">(</span>prog <span class="k3">=</span><span class="k3">=</span> <span class="k2">(</span><span class="n">25</span><span class="k3">*</span>lvl<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">54</td><td>              lvl<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>              prog <span class="k3">=</span> <span class="n">0</span><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><tr><td class="number">59</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">60</td><td>      speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">61</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">62</td><td>    <span class="c">/*###=====#=======#=====##############*/</span></td></tr><tr><td class="number">63</td><td>    <span class="c">/*##=START=DRAWING=STUFF=#############*/</span></td></tr><tr><td class="number">64</td><td>    <span class="c">/*###=====#=======#=====##############*/</span>    </td></tr><tr><td class="number">65</td><td>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffy, <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>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>  <span class="k2">}</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

There is lots of drawing but that code is fine. For some reason it flies through it, determines you died, and brings up the death screen. What is wrong with this code?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SkaxCo)</author>
		<pubDate>Mon, 26 Mar 2007 02:44:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>the first possible bug that comes to my mind:<br />Did you forget to initialize speed_counter with 0 ...?<br />If you wrote something like this <br /><span class="source-code"><span class="k1">volatile</span> <span class="k1">int</span> speed_counter<span class="k2">;</span></span><br />it might be initialized with a value of 223499... so your program would do thousands of loops as fast as it can... dunno, maybe
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Seppl)</author>
		<pubDate>Mon, 26 Mar 2007 03:13:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, its <span class="source-code"><span class="k1">volatile</span> <span class="k1">long</span> speed_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SkaxCo)</author>
		<pubDate>Mon, 26 Mar 2007 03:16:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My guess is that it&#39;s because everything&#39;s running at 60 BPS, and you don&#39;t have a pausing or slowdown coded in the sections that need it.</p><p>You&#39;re raising, moving and animating zombies at 60 times per second. I would have thought animation of 60 times per second is too much. 8-10 frames a sec might suit a little better. You can achieve this by using a counter in the animation method.</p><p>One way to determine whether this is the problem is to temporarily change the BPS_TO_TIMER(60) to BPS_TO_TIMER(6).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Mon, 26 Mar 2007 03:33:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All changing that does is change te pause before it ends. It appears as though the while(...){...} statement is having a large problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SkaxCo)</author>
		<pubDate>Mon, 26 Mar 2007 03:36:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Err, yes, silly me - I should have realised <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" />.</p><p>What happens if you try the following:</p><p>Add a variable (<tt>int delay</tt>) to your zombie class, and initialise it to 10 for every zombie. Then update the section of code that draws the zombies.</p><div class="source-code snippet"><div class="inner"><pre>      <span class="c">/*=draw the zombies, check 4 hits=====*/</span>
      <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">250</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
        <span class="k1">if</span><span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.alive<span class="k2">)</span><span class="k2">{</span>
          <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><span class="k3">-</span><span class="k3">-</span>horde<span class="k3">&lt;</span>i&gt;.delay<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
            horde<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span><span class="k3">=</span> horde<span class="k3">&lt;</span>i&gt;.fall_speed<span class="k2">;</span>
            horde<span class="k3">&lt;</span>i&gt;.frame<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
            <span class="k1">if</span><span class="k2">(</span>horde<span class="k3">&lt;</span>i&gt;.frame <span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span>
              horde<span class="k3">&lt;</span>i&gt;.frame <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
            horde<span class="k3">&lt;</span>i&gt;.delay <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
          <span class="k2">}</span>
        <span class="k2">}</span>
      <span class="k2">}</span>
</pre></div></div><p>

If this helps the animation, try the something similar for the &#39;raise me some zombies&#39; section.</p><p>BTW, I&#39;m having a wild guess at what the problem is that you&#39;re experiencing. This may not solve it at all. But, it&#39;s worth a crack.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Mon, 26 Mar 2007 03:51:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>To everyone who helped: my most profuse thanks.<br />It works! Well, except for a r...thats unrelated. Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SkaxCo)</author>
		<pubDate>Mon, 26 Mar 2007 04:17:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
There is also</p><p>volatile long speed_counter = 0;</p><p>in a <i>header</i> file.
</p></div></div><p>
This is your first (and maybe biggest) problem.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
What is wrong with this code?
</p></div></div><p>
Hmm...
</p><ul><li><p>Whitespace is like a younger child.  You seem to be neglecting it <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p></li><li><p>Timing code and all other code simply do not get along.  You should separate them before they cause more bar fights.</p></li><li><p>Tierney operators are like politics, you must careful what you let them do.  See code below.</p></li></ul><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span>lvl <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">)</span>?<span class="k2">(</span>prog <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="n">10</span><span class="k3">-</span>lvl<span class="k2">)</span><span class="k2">)</span><span class="k2">:</span><span class="k2">(</span>prog<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">// I believe most programmers would agree this version is cleaner:</span>

prog <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span>lvl <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">)</span> ? <span class="k2">(</span><span class="n">10</span> <span class="k3">-</span> lvl<span class="k2">)</span> <span class="k2">:</span> <span class="n">1</span><span class="k2">;</span>
</pre></div></div><p>

<i>In short:</i> Maybe you should decide a few code distribution systems you enjoy using and explore them more thoroughly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 26 Mar 2007 13:36:41 +0000</pubDate>
	</item>
</rss>
