<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro Wait for Event(Pretty slow)</title>
		<link>http://www.allegro.cc/forums/view/615529</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 14 Jul 2015 13:14:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey guys. I am doing an engine to make things easier while creating my games.<br />I could make it work, but not on the way it is taught in most of tutorials. I mean, when I try to use the funcion al_wait_for_event to get mouse or keyboard events it takes like &quot;forever&quot; to read them. To fixe it I had to create 2 new variables and these are them: ALLEGRO_KEYBOARD_STATE and ALLEGRO_MOUSE_STATE. When I use them the program runs pretty smoth, but when I try to let the ALLEGRO_EVENT handle it, the program doesn&#39;t behave as well as I expected it to.</p><p>My code is something like this...</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">/* </span>
<span class="number">   2</span><span class="c"> * File:   main.c</span>
<span class="number">   3</span><span class="c"> * Author: Bean Dragon</span>
<span class="number">   4</span><span class="c"> *</span>
<span class="number">   5</span><span class="c"> * Created on 19 de Junho de 2015, 18:16</span>
<span class="number">   6</span><span class="c"> */</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="p">#include &lt;Place/place.h&gt;</span>
<span class="number">   9</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  12</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>    PLACE <span class="k3">*</span> where <span class="k3">=</span> place_standard<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>where <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>where-&gt;start<span class="k2">(</span>where<span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>    image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Background"</span>, <span class="s">"G:/TheGreat/Image/Background/Nature-Green.jpg"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Twinsen Front"</span>, <span class="s">"G:/TheGreat/Image/sprite/twinsen/twinsen-front-up.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Twinsen Back"</span>, <span class="s">"G:/TheGreat/Image/sprite/twinsen/twinsen-back.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Twinsen Side"</span>, <span class="s">"G:/TheGreat/Image/sprite/twinsen/twinsen-side-up.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Sasuke Front"</span>, <span class="s">"G:/TheGreat/Image/sprite/mine/sasuke-front.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Sasuke Back"</span>, <span class="s">"G:/TheGreat/Image/sprite/mine/sasuke-back.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image_next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;image_global, image_set<span class="k2">(</span><span class="s">"Sasuke Side"</span>, <span class="s">"G:/TheGreat/Image/sprite/mine/sasuke-side-right-step.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>    <span class="k1">long</span> <span class="k1">int</span> id, max <span class="k3">=</span> <span class="n">10</span>, selected <span class="k3">=</span> <span class="n">0</span>, percent <span class="k3">=</span> <span class="k2">(</span>max <span class="k3">/</span> <span class="n">100</span> <span class="k3">&gt;</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span> ? max <span class="k3">/</span> <span class="n">100</span> <span class="k2">:</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  23</span>    <span class="k1">double</span> x_speed <span class="k3">=</span> percent, y_speed <span class="k3">=</span> percent<span class="k2">;</span>
<span class="number">  24</span>    where-&gt;map_set<span class="k2">(</span>where, object_set<span class="k2">(</span><span class="n">0</span>, <span class="s">"Map"</span>, <span class="n">0</span>, <span class="n">0</span>, x_speed, y_speed, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Background"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>    where-&gt;map-&gt;next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;object, object_set<span class="k2">(</span><span class="n">0</span>, <span class="s">"Twinsen"</span>, <span class="n">320</span>, <span class="n">1000</span>, x_speed, y_speed, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>    <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  27</span>    <span class="k1">for</span> <span class="k2">(</span>id <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> id <span class="k3">&lt;</span> max<span class="k2">;</span> id<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  28</span>        x <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> area<span class="k2">(</span>where-&gt;map-&gt;width, where-&gt;map-&gt;width_zoom<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>        y <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> area<span class="k2">(</span>where-&gt;map-&gt;height, where-&gt;map-&gt;height_zoom<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>        where-&gt;map-&gt;next_front<span class="k2">(</span><span class="k3">&amp;</span>where-&gt;object, object_set<span class="k2">(</span>id, <span class="s">"Sasuke"</span>, x, y, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>    <span class="k2">}</span>
<span class="number">  32</span>    STATUS camera_first_adjust <span class="k3">=</span> Off,destiny_ready <span class="k3">=</span> Off<span class="k2">;</span>
<span class="number">  33</span>    <span class="k1">while</span> <span class="k2">(</span>where-&gt;running<span class="k2">(</span>where<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  34</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>camera_first_adjust<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  35</span>            where-&gt;camera_object<span class="k2">(</span>where, object_search<span class="k2">(</span>where-&gt;object, selected<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>            camera_first_adjust <span class="k3">=</span> On<span class="k2">;</span>
<span class="number">  37</span>        <span class="k2">}</span>
<span class="number">  38</span>        OBJECT <span class="k3">*</span> object<span class="k2">;</span>
<span class="number">  39</span>        <span class="k1">for</span> <span class="k2">(</span>object <span class="k3">=</span> where-&gt;object<span class="k2">;</span> object <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">;</span> object <span class="k3">=</span> object-&gt;next<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  40</span>            <span class="k1">if</span> <span class="k2">(</span>object-&gt;id <span class="k3">=</span><span class="k3">=</span> selected <span class="k3">&amp;</span><span class="k3">&amp;</span> timer_get<span class="k2">(</span><span class="k3">&amp;</span>object-&gt;timer<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  41</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;mouse_left_down<span class="k2">(</span>where<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  42</span>                    destiny_ready <span class="k3">=</span> On<span class="k2">;</span>
<span class="number">  43</span>                <span class="k2">}</span>
<span class="number">  44</span>                <span class="k1">if</span><span class="k2">(</span>destiny_ready<span class="k2">)</span><span class="k2">{</span>
<span class="number">  45</span>                    object-&gt;x_route <span class="k3">=</span> where-&gt;mouse_x_get<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>                    object-&gt;y_route <span class="k3">=</span> where-&gt;mouse_y_get<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>                    destiny_ready <span class="k3">=</span> Off<span class="k2">;</span>
<span class="number">  48</span>                <span class="k2">}</span>
<span class="number">  49</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_LEFT<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  50</span>                    object-&gt;x_route <span class="k3">=</span> object-&gt;x <span class="k3">-</span> object-&gt;x_speed<span class="k2">;</span>
<span class="number">  51</span>                    where-&gt;camera_object<span class="k2">(</span>where, object<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  53</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>                    <span class="k2">}</span>
<span class="number">  55</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  56</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>                    <span class="k2">}</span>
<span class="number">  58</span>                    object-&gt;flip <span class="k3">=</span> ALLEGRO_FLIP_HORIZONTAL<span class="k2">;</span>
<span class="number">  59</span>                <span class="k2">}</span>
<span class="number">  60</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_RIGHT<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  61</span>                    object-&gt;x_route <span class="k3">=</span> object-&gt;x <span class="k3">+</span> object-&gt;x_speed<span class="k2">;</span>
<span class="number">  62</span>                    where-&gt;camera_object<span class="k2">(</span>where, object<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  64</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>                    <span class="k2">}</span>
<span class="number">  66</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  67</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>                    <span class="k2">}</span>
<span class="number">  69</span>                    object-&gt;flip <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  70</span>                <span class="k2">}</span>
<span class="number">  71</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_UP<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  72</span>                    object-&gt;y_route <span class="k3">=</span> object-&gt;y <span class="k3">-</span> object-&gt;y_speed<span class="k2">;</span>
<span class="number">  73</span>                    where-&gt;camera_object<span class="k2">(</span>where, object<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  75</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>                    <span class="k2">}</span>
<span class="number">  77</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>                    <span class="k2">}</span>
<span class="number">  80</span>                <span class="k2">}</span>
<span class="number">  81</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_DOWN<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  82</span>                    object-&gt;y_route <span class="k3">=</span> object-&gt;y <span class="k3">+</span> object-&gt;y_speed<span class="k2">;</span>
<span class="number">  83</span>                    where-&gt;camera_object<span class="k2">(</span>where, object<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  85</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>                    <span class="k2">}</span>
<span class="number">  87</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  88</span>                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>                    <span class="k2">}</span>
<span class="number">  90</span>                <span class="k2">}</span>
<span class="number">  91</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_ALT<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  92</span>                    <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_Z<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  93</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_EQUALS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  94</span>                            object-&gt;width_zoom <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number">  95</span>                            object-&gt;height_zoom <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number">  96</span>                        <span class="k2">}</span>
<span class="number">  97</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_MINUS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  98</span>                            object-&gt;width_zoom <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number">  99</span>                            object-&gt;height_zoom <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 100</span>                        <span class="k2">}</span>
<span class="number"> 101</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_0<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 102</span>                            object-&gt;width_zoom <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 103</span>                            object-&gt;height_zoom <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 104</span>                        <span class="k2">}</span>
<span class="number"> 105</span>                    <span class="k2">}</span>
<span class="number"> 106</span>                    <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_S<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 107</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_EQUALS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 108</span>                            object-&gt;x_speed <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 109</span>                            object-&gt;y_speed <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 110</span>                        <span class="k2">}</span>
<span class="number"> 111</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_MINUS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 112</span>                            object-&gt;x_speed <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 113</span>                            object-&gt;y_speed <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 114</span>                        <span class="k2">}</span>
<span class="number"> 115</span>
<span class="number"> 116</span>                    <span class="k2">}</span>
<span class="number"> 117</span>                    <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_A<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 118</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_EQUALS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 119</span>                            object-&gt;angle <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 120</span>                            <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>                        <span class="k2">}</span>
<span class="number"> 122</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_MINUS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 123</span>                            object-&gt;angle <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 124</span>                            <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>                        <span class="k2">}</span>
<span class="number"> 126</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_0<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 127</span>                            object-&gt;angle <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 128</span>                            <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>                        <span class="k2">}</span>
<span class="number"> 130</span>                    <span class="k2">}</span>
<span class="number"> 131</span>                    <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_T<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 132</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_EQUALS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 133</span>                            object-&gt;color.a<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 134</span>                        <span class="k2">}</span>
<span class="number"> 135</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_MINUS<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 136</span>                            object-&gt;color.a--<span class="k2">;</span>
<span class="number"> 137</span>                        <span class="k2">}</span>
<span class="number"> 138</span>                        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_0<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 139</span>                            object-&gt;color.a <span class="k3">=</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 140</span>                        <span class="k2">}</span>
<span class="number"> 141</span>                    <span class="k2">}</span>                    
<span class="number"> 142</span>                <span class="k2">}</span>
<span class="number"> 143</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_TAB<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 144</span>                    selected<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 145</span>                    <span class="k1">if</span> <span class="k2">(</span>selected <span class="k3">&gt;</span><span class="k3">=</span> max<span class="k2">)</span>selected <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 146</span>                    camera_first_adjust <span class="k3">=</span> Off<span class="k2">;</span>
<span class="number"> 147</span>                    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>                <span class="k2">}</span>
<span class="number"> 149</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;route<span class="k2">(</span>object, object-&gt;x_route, object-&gt;y_route<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>                <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 151</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> NORTH <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 152</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> NORTHEAST <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 153</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> NORTHWEST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 154</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 155</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>                        <span class="k2">}</span>
<span class="number"> 157</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 158</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>                        <span class="k2">}</span>
<span class="number"> 160</span>                    <span class="k2">}</span>
<span class="number"> 161</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> SOUTH <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 162</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> SOUTHEAST <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 163</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> SOUTHWEST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 164</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 165</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>                        <span class="k2">}</span>
<span class="number"> 167</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 168</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>                        <span class="k2">}</span>
<span class="number"> 170</span>                    <span class="k2">}</span>
<span class="number"> 171</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> WEST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 172</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 173</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>                        <span class="k2">}</span>
<span class="number"> 175</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 176</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span>                        <span class="k2">}</span>
<span class="number"> 178</span>                        object-&gt;flip <span class="k3">=</span> ALLEGRO_FLIP_HORIZONTAL<span class="k2">;</span>
<span class="number"> 179</span>                    <span class="k2">}</span>
<span class="number"> 180</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> EAST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 181</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 182</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>                        <span class="k2">}</span>
<span class="number"> 184</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 185</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 186</span>                        <span class="k2">}</span>
<span class="number"> 187</span>                        object-&gt;flip <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 188</span>                    <span class="k2">}</span>
<span class="number"> 189</span>                <span class="k2">}</span>
<span class="number"> 190</span>                timer_start<span class="k2">(</span><span class="k3">&amp;</span>object-&gt;timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>            <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>timer_get<span class="k2">(</span><span class="k3">&amp;</span>object-&gt;timer<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span> <span class="c">// control the enemies or characters</span>
<span class="number"> 192</span>                <span class="k1">if</span> <span class="k2">(</span>where-&gt;route<span class="k2">(</span>object, object-&gt;x_route, object-&gt;y_route<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 193</span>                    object-&gt;x_route <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> area<span class="k2">(</span>where-&gt;map-&gt;width, where-&gt;map-&gt;width_zoom<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>                    object-&gt;y_route <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> area<span class="k2">(</span>where-&gt;map-&gt;height, where-&gt;map-&gt;height_zoom<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>                <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 196</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> NORTH <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 197</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> NORTHEAST <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 198</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> NORTHWEST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 199</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 200</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>                        <span class="k2">}</span>
<span class="number"> 202</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 203</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>                        <span class="k2">}</span>
<span class="number"> 205</span>                    <span class="k2">}</span>
<span class="number"> 206</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> SOUTH <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 207</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> SOUTHEAST <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 208</span>                            object-&gt;where <span class="k3">=</span><span class="k3">=</span> SOUTHWEST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 209</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 210</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>                        <span class="k2">}</span>
<span class="number"> 212</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 213</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Front"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>                        <span class="k2">}</span>
<span class="number"> 215</span>                    <span class="k2">}</span>
<span class="number"> 216</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> WEST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 217</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 218</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>                        <span class="k2">}</span>
<span class="number"> 220</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 221</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>                        <span class="k2">}</span>
<span class="number"> 223</span>                        object-&gt;flip <span class="k3">=</span> ALLEGRO_FLIP_HORIZONTAL<span class="k2">;</span>
<span class="number"> 224</span>                    <span class="k2">}</span>
<span class="number"> 225</span>                    <span class="k1">if</span> <span class="k2">(</span>object-&gt;where <span class="k3">=</span><span class="k3">=</span> EAST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 226</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 227</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>                        <span class="k2">}</span>
<span class="number"> 229</span>                        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 230</span>                            object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Side"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>                        <span class="k2">}</span>
<span class="number"> 232</span>                        object-&gt;flip <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 233</span>                    <span class="k2">}</span>
<span class="number"> 234</span>                <span class="k2">}</span>
<span class="number"> 235</span>                timer_start<span class="k2">(</span><span class="k3">&amp;</span>object-&gt;timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 236</span>            <span class="k2">}</span>
<span class="number"> 237</span>        <span class="k2">}</span>
<span class="number"> 238</span>        <span class="k1">if</span> <span class="k2">(</span>where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 239</span>                where-&gt;type<span class="k2">(</span>where, ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span><span class="k2">)</span>where-&gt;stop<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span>        where-&gt;camera_mouse<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 241</span>        where-&gt;update<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>        where-&gt;show<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 243</span>    <span class="k2">}</span>
<span class="number"> 244</span>    where-&gt;destroy<span class="k2">(</span>where<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>    <span class="k1">return</span> <span class="k2">(</span>EXIT_SUCCESS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span><span class="k2">}</span>
</div></div><p>

The code is the same in the main function. Only the speed changes.<br />When I try to catch the event through event.keboard.keycode or event.mouse<br />it makes the code slow. But when I use the ALLEGRO_MOUSE_STATE and KEYBOARD_STATE<br />it goes so fast. So I imagine there&#39;s something wrong in al_wait_for_event, or it<br />doesn&#39;t accept to be called through dll?</p><p>Since now Thanks...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 05:41:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s &lt;code&gt; &lt;/code&gt; for the tags <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>APPEND:<br />I don&#39;t see the call to al_wait_for_event in your code, maybe you could post that part? It would also be interesting to see how you control the main loop speed.</p><p>By the way, you have a lot of code duplication. For starters, I would use a switch instead of a bunch of if statements. And you don&#39;t need to repeat things like <span class="source-code">where-&gt;key_press<span class="k2">(</span>where, ALLEGRO_KEY_ALT<span class="k2">)</span></span> a million times. Keep it short and clear, split the code into functions or macros if you need to. Also, I would probably keep the input information in a struct INPUT, not inside PLACE. And I&#39;m not sure why you use function pointers, but maybe you have a reason <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 08:23:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The part of the code that updates the events is just the running function.<br />And here it is:</p><div class="source-code snippet"><div class="inner"><pre>PLACE_CALL STATUS PLACE_TYPE place_running<span class="k2">(</span>PLACE <span class="k3">*</span> to<span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">if</span> <span class="k2">(</span>to <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.running<span class="k2">)</span> <span class="k2">{</span>
        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>to-&gt;machine.plugin.event_row,<span class="k3">&amp;</span>to-&gt;machine.plugin.event<span class="k2">)</span><span class="k2">;</span>
        <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>to-&gt;machine.plugin.key<span class="k2">)</span><span class="k2">;</span> <span class="c">// the keyboard and</span>
        <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>to-&gt;machine.plugin.mouse<span class="k2">)</span><span class="k2">;</span> <span class="c">// mouse only responds fast</span>
        <span class="k1">return</span> <span class="k2">(</span>On<span class="k2">)</span><span class="k2">;</span> <span class="c">// if I call the state's functions</span>
    <span class="k2">}</span>
    <span class="k1">return</span> <span class="k2">(</span>Off<span class="k2">)</span><span class="k2">;</span> <span class="c">// if I only try with al_wait_for_event it goes slow</span>
<span class="k2">}</span>
</pre></div></div><p>

Thanks for let me know about how to use the tag code in here.<br />I use to do [code] like this.<br />And about the key, I changed the code. See if it is better now. About the function&#39;s pointer, I like using this way, for the C to be more like oriented object. I have tested the engine with about 1.000.000 objects and it was running in my i5 with 4gb. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 12:05:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Calling al_get_keyboard_state and al_get_mouse_state should not make things go faster. The problem has to be somewhere else in your code. Remove the calls to al_get_keyboard_state and al_get_mouse_state, and try to get your code working without them. Print some logging information to see where in your code you are, and what the values of important variables are. Maybe even just putting things like `fprintf(stderr, &quot;.&quot;);` in the loop, then you can see how often it runs, where the delays are, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 12:28:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As I said, I have tried to use the code without the state&#39;s function, but it goes slow and I had to rewrite all the parts of the keyboard and mouse calls. If I hadn&#39;t I wasn&#39;t disturbing you guys.. be sure about that. I did the same code with other graphic library and it worked, but when I tried to use it on linux, it didn&#39;t show some images. So I changed to allegro again. I thing I got a little experience now. <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" /> I have watched the device manager and it doesn&#39;t see to have any memory leak. it is running smoth. What should be the next step dude? </p><p>here is one of the codes that responds normally(repair it has the sugested printf() testing it, but I commented it because this way there&#39;s no problem):</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>PLACE_CALL STATUS PLACE_TYPE camera_mouse_move<span class="k2">(</span>PLACE <span class="k3">*</span> to<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">if</span> <span class="k2">(</span>to <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;map <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.plugin.event_row<span class="k2">)</span> <span class="k2">{</span>        
<span class="number">  3</span>        <span class="c">///printf("x:%d y:%d\n",to-&gt;machine.plugin.mouse.x,to-&gt;machine.plugin.mouse.y);</span>
<span class="number">  4</span>        <span class="k1">int</span> space <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>
<span class="number">  5</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.mouse.x <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.plugin.mouse.x <span class="k3">&lt;</span><span class="k3">=</span> space<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>            to-&gt;map-&gt;x <span class="k3">-</span><span class="k3">=</span> to-&gt;map-&gt;x_speed<span class="k2">;</span>
<span class="number">  7</span>        <span class="k2">}</span>
<span class="number">  8</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.mouse.x <span class="k3">&gt;</span><span class="k3">=</span> to-&gt;machine.width <span class="k3">-</span> space <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number">  9</span>                to-&gt;machine.plugin.mouse.x <span class="k3">&lt;</span><span class="k3">=</span> to-&gt;machine.width<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>            to-&gt;map-&gt;x <span class="k3">+</span><span class="k3">=</span> to-&gt;map-&gt;x_speed<span class="k2">;</span>
<span class="number"> 11</span>        <span class="k2">}</span>
<span class="number"> 12</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.mouse.y <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.plugin.mouse.y <span class="k3">&lt;</span><span class="k3">=</span> space<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>            to-&gt;map-&gt;y <span class="k3">-</span><span class="k3">=</span> to-&gt;map-&gt;y_speed<span class="k2">;</span>
<span class="number"> 14</span>        <span class="k2">}</span>
<span class="number"> 15</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.mouse.y <span class="k3">&gt;</span><span class="k3">=</span> to-&gt;machine.height <span class="k3">-</span> space <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 16</span>                to-&gt;machine.plugin.mouse.y <span class="k3">&lt;</span><span class="k3">=</span> to-&gt;machine.height<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>            to-&gt;map-&gt;y <span class="k3">+</span><span class="k3">=</span> to-&gt;map-&gt;y_speed<span class="k2">;</span>
<span class="number"> 18</span>        <span class="k2">}</span>
<span class="number"> 19</span>        <span class="k1">return</span> <span class="k2">(</span>On<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    <span class="k2">}</span>
<span class="number"> 21</span>    <span class="k1">return</span> <span class="k2">(</span>Off<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>

and here is the slow code:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>PLACE_CALL STATUS PLACE_TYPE camera_mouse_move<span class="k2">(</span>PLACE <span class="k3">*</span> to<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">if</span> <span class="k2">(</span>to <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;map <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.plugin.event_row<span class="k2">)</span> <span class="k2">{</span>        
<span class="number">  3</span>        <span class="c">///printf("x:%d y:%d\n",to-&gt;machine.plugin.event.mouse.x,to-&gt;machine.plugin.event.mouse.y);</span>
<span class="number">  4</span>        <span class="k1">int</span> space <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>
<span class="number">  5</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.event.mouse.x <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.plugin.event.mouse.x <span class="k3">&lt;</span><span class="k3">=</span> space<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>            to-&gt;map-&gt;x <span class="k3">-</span><span class="k3">=</span> to-&gt;map-&gt;x_speed<span class="k2">;</span>
<span class="number">  7</span>        <span class="k2">}</span>
<span class="number">  8</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.event.mouse.x <span class="k3">&gt;</span><span class="k3">=</span> to-&gt;machine.width <span class="k3">-</span> space <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number">  9</span>                to-&gt;machine.plugin.event.mouse.x <span class="k3">&lt;</span><span class="k3">=</span> to-&gt;machine.width<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>            to-&gt;map-&gt;x <span class="k3">+</span><span class="k3">=</span> to-&gt;map-&gt;x_speed<span class="k2">;</span>
<span class="number"> 11</span>        <span class="k2">}</span>
<span class="number"> 12</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.event.mouse.y <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> to-&gt;machine.plugin.event.mouse.y <span class="k3">&lt;</span><span class="k3">=</span> space<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>            to-&gt;map-&gt;y <span class="k3">-</span><span class="k3">=</span> to-&gt;map-&gt;y_speed<span class="k2">;</span>
<span class="number"> 14</span>        <span class="k2">}</span>
<span class="number"> 15</span>        <span class="k1">if</span> <span class="k2">(</span>to-&gt;machine.plugin.event.mouse.y <span class="k3">&gt;</span><span class="k3">=</span> to-&gt;machine.height <span class="k3">-</span> space <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 16</span>                to-&gt;machine.plugin.event.mouse.y <span class="k3">&lt;</span><span class="k3">=</span> to-&gt;machine.height<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>            to-&gt;map-&gt;y <span class="k3">+</span><span class="k3">=</span> to-&gt;map-&gt;y_speed<span class="k2">;</span>
<span class="number"> 18</span>        <span class="k2">}</span>
<span class="number"> 19</span>        <span class="k1">return</span> <span class="k2">(</span>On<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    <span class="k2">}</span>
<span class="number"> 21</span>    <span class="k1">return</span> <span class="k2">(</span>Off<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 12:38:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your code looks a little better now, but still lots of code that looks very similar. I&#39;m also wondering why you have lots of ifs but almost no else causes.</p><p>I think code like this:
</p><div class="source-code snippet"><div class="inner"><pre> <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Twinsen"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Twinsen Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
                    <span class="k2">}</span>
                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>object-&gt;name, <span class="s">"Sasuke"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
                        object-&gt;image_set<span class="k2">(</span>object, image_search<span class="k2">(</span>where-&gt;image_global, <span class="s">"Sasuke Back"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
                    <span class="k2">}</span>
</pre></div></div><p>
Should be just:</p><p><span class="source-code">object-&gt;direction_set<span class="k2">(</span>object, NORTH<span class="k2">)</span><span class="k2">;</span></span><br />The object should know what to look like.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1014846#target">Lísias de Castro</a> said:</div><div class="quote"><p> What should be the next step dude?</p></div></div><p>Listen to what people with experience tell you (and do some debugging) <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>APPEND:<br />I don&#39;t see the difference between those two pieces of code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 13:04:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>About the debbuging, I use to do this always. But when I check the code, and there&#39;s no problem there, I use to comment it for the program not to go slow. When I changed the code to state and it did work well I commented the printf function.<br />And about the direction, I don&#39;t want to do a function like direction_set, because functions make the program slower than to call the variable directly on the main loop I guess. I reduced the number of functions in order to speed up my code.. And about the verification of the character, I couldn&#39;t figure out a way to make it better, if you have a suggestion I would appreciate. Thanks <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /> ... ah, about the ifs, I didn&#39;t use else, because I could see no reason to use. Because when you use else, you can only do one of the works, but when you use only ifs, it doesn&#39;t deppends on the other parts. And about my english, its a crap I now... but here in Brasil the don&#39;t care a <span class="cuss"><span><span class="cuss"><span>shit</span></span></span></span> about study. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 13:17:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1014848#target">Lísias de Castro</a> said:</div><div class="quote"><p> And about the direction, I don&#39;t want to do a function like direction_set, because functions make the program slower than to call the variable directly on the main loop I guess. I reduced the number of functions in order to speed up my code..</p></div></div><p>You probably would not notice the function call overhead in your code, it probably takes thousands of extra calls per second for it to matter.  And having the same code many times can also make your code slower, because there is more code to transfer to the CPU, and it takes up space in the CPU cache that could be used for other code instead. But what always matters is how readable and maintainable your code is <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 13:28:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is exactly the &quot;L&quot; of the question. I think I should not to call any more functions than those... only if it is really necessary. Don&#39;t you think that if I use object-&gt;direction_set instead of object-&gt;where = direction it will be more slow? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> and do you think my code is not readable enough? if yes, what should I do to make it more readable?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 13:36:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Shorter code means less code to read, less code to understand, less code to debug, less code to change, a larger part of the code on screen at the same time, etc. Less is more.</p><p>If you have several copies of the same (or almost the same) code, you are probably Doing it Wrong™ <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 13:57:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All right. But the above code has many codes which look like the other, but each one do a different thing... if you don&#39;t show me where I shall change I won&#39;t guess it.... This is the best way I could figure the problem out. So if you have I suggest to improve my code, please post it. But until now I could not have any Idea on how to fix the al_wait_for_event&#39;s problem. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 14:07:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I already gave a concrete example how to shorten your code <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>If you want, I can try to debug and fix your code. Then you have to upload all code and graphics, so I can debug it here.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 16:17:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can post it if you will... but I have no idea on how to do this through the forum. Could you explain me, please? <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Thu, 09 Jul 2015 21:17:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just attach the files to your reply. I think I won&#39;t be able to look at it until tomorrow, but I think you can just replace the files with new ones if you change your code in the mean time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 09 Jul 2015 21:23:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Alright brother. I am posting only the library place.<br />Because the main.c is in here yet.<br />In the place&#39;s zip there&#39;s more than one folder, because of the auxiliar libraries that I made, like symbol, status, timer, object, allegro5_plugin, etc. Thanks for your patience dude. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Fri, 10 Jul 2015 01:17:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You forgot the images, I can&#39;t run it without them <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Fri, 10 Jul 2015 09:14:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My bad... I put the images into a folder named image.. inside it there are 2 folders. The background and the sprite folder. You will have to make some modifications on the directory in main.c... but I think you will figure it out easy. And, I don&#39;t know if you got it, but I reimplemented the timer function... The objects are now controled by time in the main.c. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Fri, 10 Jul 2015 10:14:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I got it to build in VS 2008. Now I just need the version of your code that has event-based input, have you still got that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Fri, 10 Jul 2015 12:57:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t have it anymore dude. And I have found a bug. I think I won&#39;t be able to be using the library symbol.h. I works for a while and somewhere it crashes away.<br />I have ran it in gcc - mingw with netbeans... did it runs well in VC? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /><br />I will take a little time now and try to reimpletent it through event. As soon as I get it done I will post the code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Fri, 10 Jul 2015 13:36:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There was a missing return statement in symbol.c, funny the compiler didn&#39;t warn you about it. That could be why it crashes.</p><p>It works just fine in VC. I had to change the code a bit, VC 2008 doesn&#39;t support C99 features like having declarations after statements.</p><p>By the way, I can recommend using some sort of version control. I use Mercurial for everything, even your code now. It&#39;s very convenient <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>I&#39;ll look at your new code when it&#39;s ready <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Fri, 10 Jul 2015 14:57:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The animations played well <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /><br />I posted the place&#39;s folder again.<br />This time it has the code you have<br />and one more file named &quot;place_old.c&quot;<br />This file is using al_wait_for_event.<br />I tried to run it here and it continued<br />to respond slow. The only way it to<br />respond fast and without bugs was<br />through state&#39;s functions... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>And about this version control, do you<br />mean to make some defines with macro? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 01:42:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1014890#target">Lísias de Castro</a> said:</div><div class="quote"><p>And about this version control, do you<br />mean to make some defines with macro? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p></div></div><p>Nope. Things like git, mercurial, subversion, sourcesafe, cvs, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 11 Jul 2015 02:24:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have never used them before..<br />What&#39;s the purpose of the programs?<br />I have found the site, but it doesn&#39;t<br />explain how to use...<br />Thanks  <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 02:31:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks, I&#39;ll look at it tomorrow. From what I can see right away, there are some problems. This is how I do it:</p><ol><li><p>When you get an input event, update the mouse and keyboard state in the game. Do this in a loop until you get a timer event.
</p></li><li><p>Then run the game logic (move stuff, change how things look, etc).
</p></li><li><p>Now, if al_is_event_queue_empty returns true, update the screen. If not, goto 1.</p></li></ol><p>About the version control, maybe this can explain it: <a href="http://hginit.com/01.html">http://hginit.com/01.html</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sat, 11 Jul 2015 02:55:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have tried to use the techniques that you told.<br />But the character disappeared sometimes and the<br />loop had the same results(I mean slow).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 03:25:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Events are only slow if you don&#39;t make sure to drain/use-up all the events before drawing the next frame. They back up, and will start slowing all input and rendering down.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 11 Jul 2015 04:23:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If this way I am using is wrong, why it does work when I catch by the state&#39;s function?!<br />The al_wait_for_event behavior is not the same as al_get_keyboard_state and al_get_mouse_state. It is working normally with the last 2, even with a lot of objects on the screen. Behind them there are great deal of memory to handle, and even so it works well with those damned functions <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> ...<br />I will wait for thoru&#39;s answer in order to see if he could figure the bug out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 05:17:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>State doesn&#39;t get backed up if you don&#39;t check it often enough. Events do.</p><p>Try <a href="https://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Timers">this</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 11 Jul 2015 05:30:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey Thomas. I have tried exactly the way you show me right now.<br />But it kept in the same way as before. The only choice I am seeing<br />now is continue to use the al_state functions. When I try to use<br />the function camera_mouse_move which catches the axis from the mouse,<br />it only updates when I move the axes. This way I am not able to do a<br />function like &quot;mouse_over&quot;. Because I have to move the mouse to prove<br />it is in somewhere. Otherwise, with al_get_mouse_state, I don&#39;t need to<br />move the mouse to verify that it is in somewhere in on the screen.<br />I think the problem here is the way the function al_wait_for_event was<br />designed to. I think it has been designed not to get a lot of memory from<br />the program, but it coast some important factors. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /><br />About the keyboard.keycode, it is not very good either, because I am only<br />able to get one key at time. While with al_get_keyboard_state I am able to<br />use multiple keys, just like on the example I posted in here. It&#39;s a shame<br />that the events catched by al_wait_for_event does not work like that... I<br />guess it could be using less memory in the whole system. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 06:58:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That same code and code like it works great for many people. It is extremely likely you are doing something wrong.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1014903#target">Lísias de Castro</a> said:</div><div class="quote"><p>I don&#39;t need to<br />move the mouse to verify that it is in somewhere in on the screen.</p></div></div><p>You can just store the last position of the mouse somewhere and use that <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> it coast some important factors.</p></div></div><p>It really doesn&#39;t.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 11 Jul 2015 07:03:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>By creating two more variables I am getting more memory from the system in anyway.<br />It could be really wise doing this? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 07:09:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Two integers isn&#39;t going to make a lick of difference. The state functions create a much larger struct to store its data.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 11 Jul 2015 07:10:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But this suggestion could only solve my mouse problem. What about the keyboard, there is a way to get multiple keys through events too? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /><br />And thinking about structures, If I don&#39;t register the mouse and keyboard events inside the event_row it won&#39;t get my memory I think. Can you tell me if those registers that I did not do could be worth the variables state. Instead of load the mouse and keyboard register I load the keyboard and mouse states.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sat, 11 Jul 2015 07:13:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1014907#target">Lísias de Castro</a> said:</div><div class="quote"><p>But this suggestion could only solve my mouse problem. What about the keyboard, there is a way to get multiple keys through events too?</p></div></div><p>Each key press comes with one or more (usually more) events. A KEY_DOWN, a KEY_UP and sometimes a KEY_CHAR (sometimes many if key repeat is on).</p><p>When you get an event, you store it in your game some place where you can check to see what keys are pressed. With events you can even avoid losing key presses. With the keyboard state struct, you always store all key state. if you stored it yourself, you&#39;d only have to store what keys you need.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 11 Jul 2015 07:47:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t think I have anything to add, I agree with Thomas <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sat, 11 Jul 2015 18:03:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All right. So I have to figure out how to do it myself.<br />Anyway thank you all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Sun, 12 Jul 2015 01:20:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You seem to me to be worried about all the wrong things.  Function calls slowing things down by an amount that nobody can notice and 8 bytes of memory taken up by using two variables to store values, when you&#39;re program is slowing down.</p><p>I have variables I store the values into, if someone cannot afford 8bytes of memory these days, it&#39;s time to take up a new hobby, knitting maybe. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>I use all of the suggestions that Thomas and torhu suggest and my games run smoothly.  Actually, I can think of a few improvements after reading this (I probably don&#39;t use enough functions either).  About functions, your compiler can do some things which make these just as fast, inline functions etc... for example, so I wouldn&#39;t worry about those.  The benefits you gain from organizing your code far outweighs any speed or memory losses you will get!   When you have repeating code, you have an increased chance of getting a bug that will be more difficult to track down.  Also, you can update a function and you&#39;re done, no need to search through your code and update who knows how many lines of code (and if you forget to do one, as I have, you are really screwed because they can be a <span class="cuss"><span>bitch</span></span> to track down!).</p><p>Another thing is that the event queue can be cleared if you think it is getting bogged down, although I prefer to deal with what is in there, that could be a solution depending on your situation.</p><p>Personally, I have a key array where I store the state of each keypress as it comes in (thereby emptying the queue) then dealing with them later on and resetting the key state in that array.  This becomes very important if someone is holding down a key and the queue is getting filled up with that keypress, you want to clear it out of there.  Same for the mouse.</p><p>I would also check your timers, make sure they&#39;re set properly.  Try profiling your code to see where it is being slowed down etc.  But the problem is not with Allegro.</p><p>In my own Deluxe Pacman 2 game, my main game loop is something like this (I can&#39;t post the actual code, it is too lengthy)</p><p>(coded in C 2011, so some may need to be altered for VC)</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>pacman.dead<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span>   <span class="k1">switch</span><span class="k2">(</span>event.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  5</span>      <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number">  6</span>         <span class="c">// do stuff here</span>
<span class="number">  7</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN: <span class="k2">{</span>
<span class="number">  9</span>         <span class="k1">int</span> k <span class="k3">=</span> event.keyboard.keycode<span class="k2">;</span>
<span class="number"> 10</span>         <span class="k1">switch</span><span class="k2">(</span>k<span class="k2">)</span> <span class="k2">{</span>  <span class="c">// deal with some keypresses here</span>
<span class="number"> 11</span>            <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 12</span>               <span class="c">// do stuff here</span>
<span class="number"> 13</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 14</span>            <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 15</span>               <span class="c">// do stuff here</span>
<span class="number"> 16</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 17</span>         <span class="k2">}</span>
<span class="number"> 18</span>         <span class="c">// store all keypresses here</span>
<span class="number"> 19</span>         pressed_key<span class="k2">[</span>k<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span> 
<span class="number"> 20</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 21</span>      <span class="k2">}</span>
<span class="number"> 22</span>      <span class="k1">case</span> ALLEGRO_EVENT_KEY_UP: <span class="k2">{</span>
<span class="number"> 23</span>         <span class="k1">int</span> k <span class="k3">=</span> event.keyboard.keycode<span class="k2">;</span>
<span class="number"> 24</span>         <span class="k1">switch</span><span class="k2">(</span>k<span class="k2">)</span> <span class="k2">{</span>  <span class="c">// deal with some key up events immediately</span>
<span class="number"> 25</span>            <span class="k1">case</span> ALLEGRO_KEY_LCTRL:
<span class="number"> 26</span>            <span class="k1">case</span> ALLEGRO_KEY_RCTRL:
<span class="number"> 27</span>               <span class="c">// do stuff here</span>
<span class="number"> 28</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 29</span>         <span class="k2">}</span>
<span class="number"> 30</span>         <span class="c">// reset key array member to indicate it is no longer pressed</span>
<span class="number"> 31</span>         pressed_key<span class="k2">[</span>k<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 32</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 33</span>      <span class="k2">}</span>
<span class="number"> 34</span>      <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 35</span>         <span class="c">// update player and enemy movement here</span>
<span class="number"> 36</span>   <span class="k2">}</span>
<span class="number"> 37</span>
<span class="number"> 38</span>   <span class="k1">if</span><span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>  <span class="c">// set true usually when there is movement or timer etc</span>
<span class="number"> 39</span>      <span class="c">// update display</span>
<span class="number"> 40</span>   <span class="k2">}</span>
<span class="number"> 41</span><span class="k2">}</span>
</div></div><p>

Note, I don&#39;t have mouse code in here, but I would deal with it by adding in a new CASE to do with it as I do keyboard if needed and setting variables to store the mouse values.  Variables only take up 4 bytes of memory (8 bytes for 64bit) so when modern computers measure RAM in the gigabytes, I wouldn&#39;t worry about a few extra variables. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 12 Jul 2015 23:36:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Neil, that loop doesn&#39;t seem to be draining the event queue every frame <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> Maybe you trimmed a little too much out when posting?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 13 Jul 2015 02:05:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1014987#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>Neil, that loop doesn&#39;t seem to be draining the event queue every frame <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> Maybe you trimmed a little too much out when posting? </p></div></div><p>

Hmmm... you seem to be right about that.  I may need to insert a while loop in there to drain it.  Never noticed that before, but then it never slows down or causes me problems.  I may have to do that. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Edit 2: OH, I see what you are talking about, yeah... I did leave some out!  I probably shouldn&#39;t have as it is the point of it all... but my display update part ACTUALLY looks like this! <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>redraw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><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/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
   redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>

   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>update_screen<span class="k2">(</span>cplayer<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
      shut_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
   <span class="k2">}</span>

   <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

   frames<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
   fps <span class="k3">=</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>frames <span class="k3">/</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> start_time<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

I guess I did trim that down a tad too much. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />  (not sure why I put `== true` in there)</p><p>Anyhow, that will not redraw t he screen while the queue is not empty, so it just runs in that loop handling all the events before it updates the display and continues.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 13 Jul 2015 02:11:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Thomas:<br />So draining the event queue (as via <span class="source-code"><span class="k1">while</span></span> loop) is encouraged then?  I remember reading in another thread here that the common wisdom is not to do that, but rather to only pump through one event at a time.  I don&#39;t remember what the thread was now...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bruce Pascoe)</author>
		<pubDate>Mon, 13 Jul 2015 08:29:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1015000#target">Bruce Pascoe</a> said:</div><div class="quote"><p>@Thomas:<br />So draining the event queue (as via while loop) is encouraged then? I remember reading in another thread here that the common wisdom is not to do that, but rather to only pump through one event at a time. I don&#39;t remember what the thread was now...</p></div></div><p>The only argument I know about is really just a stylistic choice.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="k2">{</span>
  wait_for_event<span class="k2">(</span><span class="k3">&amp;</span>evt<span class="k2">)</span><span class="k2">;</span>
  <span class="k1">if</span><span class="k2">(</span>evt.type <span class="k3">=</span><span class="k3">=</span> TIMER<span class="k2">)</span>
  <span class="k2">{</span> 
    draw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
  <span class="k2">}</span>

  <span class="k1">if</span><span class="k2">(</span>draw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> queue_empty<span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span> 
  <span class="k2">{</span>
    drawStuff<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
  <span class="k2">}</span> 
<span class="k2">}</span>
</pre></div></div><p>

Vs.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>queue_empty<span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>get_next_event<span class="k2">(</span><span class="k3">&amp;</span>evt<span class="k2">)</span><span class="k2">)</span>
<span class="number">  6</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">if</span><span class="k2">(</span>evt.type <span class="k3">=</span><span class="k3">=</span> TIMER<span class="k2">)</span>
<span class="number">  9</span>    <span class="k2">{</span>
<span class="number"> 10</span>      draw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 11</span>    <span class="k2">}</span>
<span class="number"> 12</span>  <span class="k2">}</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="k1">if</span><span class="k2">(</span>draw<span class="k2">)</span>
<span class="number"> 15</span>  <span class="k2">{</span>
<span class="number"> 16</span>    drawStuff<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k2">}</span>
<span class="number"> 18</span><span class="k2">}</span>
</div></div><p>

I happen to prefer the former, with the single loop. But they are functionally equivalent.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 13 Jul 2015 10:36:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1015002#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>I happen to prefer the former, with the single loop. But they are functionally equivalent. </p></div></div><p>

Agreed.  I may change my code to look more like the second example you posted though.  The extra loop makes it more readily apparent as to what it is doing, which to me is more important.  </p><p>I am wondering though if this setup could possibly lead to some &quot;hiccups&quot; in the game?  That is to say, you&#39;re playing it and the characters seem to jump perhaps or possible delays due to an event queue being too full?  On faster systems this would probably not be an issue, but on slower systems I am wondering if it would be?  Maybe extra code in there that sets a limit on how long the game stays in that loop emptying the queue before perhaps it is forced to redraw.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 13 Jul 2015 20:58:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you have too many events to handle in a given frame, the drawing of that frame may be skipped. Basically what the loops do (when they check for the queue being empty) is give you &quot;frame dropping&quot; in case your loop takes too long to execute in the time you asked for given the logic timer. You can get two or more timer events in the queue, but not actually act until the queue empties.</p><p>If things are SUPER slow, you&#39;re just never going to render. At that point you want to force a minimum draw interval. that slow&#39;s the actual logic, but it may be better than never rendering anything <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> In the end, dropping too many frames or slowing logic is usually bad and you need to be able to reduce the complexity of your scene and/or logic to get back to a decent frame and logic rate.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 14 Jul 2015 02:44:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well. I have looked in many sites and could not discover out a single way to  deal multiple keys with keyboard.keycode. This code that Ney have posted can&#39;t show either.<br />So I decided to knit. I&#39;ve heard the allegro community was the best helping people... <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lísias de Castro)</author>
		<pubDate>Tue, 14 Jul 2015 03:08:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1015037#target">Lísias de Castro</a> said:</div><div class="quote"><p>This code that Ney have posted can&#39;t show either.</p></div></div><p>A single event carries one key. But you can store key state in your code, so you can then check to see if more than one of the keys you care about are currently pressed, and for how long as the event carries the time the key was first pressed.</p><p>You don&#39;t have to process your movement logic when a key is pressed, rather you handle it when you do you get your logic timer event.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>I&#39;ve heard the allegro community was the best helping people... <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /></p></div></div><p>We&#39;re not bad. But it seems to some of us that you&#39;ve been ignoring helpful advice and just want us to give you code.</p><p>What I (and others) suggest is in the key down event, you store the key state in an array like Neil suggested, in the key up event you clear that state, and in your timer event, you process your logic, like movement, and actions based on the current state stored in your array. That way, you can tell that multiple keys are pressed, and logic happens at even intervals, instead of whenever you get input events.</p><p>I&#39;m basically trying to get you to understand what you need to do so you can do it yourself, rather than giving you the solution as code. Give a man a fish, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 14 Jul 2015 03:29:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615529/1015037#target">Lísias de Castro</a> said:</div><div class="quote"><p>I&#39;ve heard the allegro community was the best helping people.</p></div></div><p>

This community is helpful, but if you&#39;re looking for someone to write code for you, you might want to hire someone.  I doubt you will get much better anywhere else.</p><p>I just posted my own code (or a skeleton of it) that works for me.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Well. I have looked in many sites and could not discover out a single way to deal multiple keys with keyboard.keycode.</p></div></div><p>

If you need more than one key to be pressed at the same time, than you need to avoid things like:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>ALLEGRO_KEY_A<span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if 'A' is pressed</span>
<span class="k2">}</span>
<span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ALLEGRO_KEY_B<span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if 'B' is pressed</span>
<span class="k2">}</span>
<span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ALLEGRO_KEY_C<span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if 'B' is pressed</span>
<span class="k2">}</span>
</pre></div></div><p>

The above code will only respond to one keypress at a time.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>ALLEGRO_KEY_A<span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if 'A' is pressed</span>
<span class="k2">}</span>
<span class="k1">if</span><span class="k2">(</span>ALLEGRO_KEY_B<span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if 'B' is pressed</span>
<span class="k2">}</span>
<span class="k1">if</span><span class="k2">(</span>ALLEGRO_KEY_C<span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if 'B' is pressed</span>
<span class="k2">}</span>
</pre></div></div><p>

...the above code will respond to every keypress, like when more than one are pressed.</p><p>You might want to create a key array like <span class="source-code">key_pressed<span class="k2">[</span><span class="k2">]</span></span> and set the keys that are pressed, then you can deal with them later in your code with...</p><div class="source-code snippet"><div class="inner"><pre>k <span class="k3">=</span> event.keyboard.keycode<span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>key_pressed<span class="k2">[</span>ALLEGRO_KEY_A<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> key_pressed<span class="k2">[</span>ALLEGRO_KEY_B<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
  <span class="c">// do stuff if both keys are pressed at once</span>
<span class="k2">}</span>
</pre></div></div><p>

If you look in the code I posted earlier you will see I do precisely that.  I deal with certain keys that need to be dealt with immediately, and the rest are stored in the array to be dealt with as needed.  In my game I detect two keys at once for example if the player presses CTRL+ARROW, the game knows to speed up in the direction pressed.</p><p>It&#39;s really straight forward coding.  If you don&#39;t know how, you will need to experiment and think it through like everyone else.  It&#39;s why you don&#39;t see everyone programming. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 14 Jul 2015 06:37:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If he&#39;s going to store the keyboard and mouse state anyway, he might just as well use Allegro&#39;s state functions <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>Another way to do it when using events is to do the relevant movement logic as each event is received. That way nothing gets missed, and the order of keypresses is not partially lost.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Tue, 14 Jul 2015 13:05:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t think you actually want to <i>do</i> the logic as soon as the events come in in all cases. It really depends on what you want to do. Maybe tell the &quot;thing&quot; that some event came in, and then it handles that in its logic update. In the end it just moves the state around.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 14 Jul 2015 13:14:30 +0000</pubDate>
	</item>
</rss>
